From 5268a7dd687e1440ed48a6524ee19ac567f30933 Mon Sep 17 00:00:00 2001 From: streaper2 Date: Fri, 27 Feb 2026 23:23:43 +0100 Subject: [PATCH] correction bible du mande (store update temps reel) --- .gitignore | 82 ++- .next/dev/cache/turbopack/23c46498/CURRENT | Bin 4 -> 4 bytes .next/dev/cache/turbopack/23c46498/LOG | 654 ++++++++++++++++++ .next/dev/prerender-manifest.json | 6 +- .next/dev/server/app-paths-manifest.json | 5 +- .../[root-of-the-server]__43f27a2c._.js | 22 +- .../[root-of-the-server]__43f27a2c._.js.map | 2 +- .../[root-of-the-server]__630db118._.js | 19 +- .../[root-of-the-server]__630db118._.js.map | 2 +- .../[root-of-the-server]__f694870c._.js | 22 +- .../[root-of-the-server]__f694870c._.js.map | 2 +- .../ssr/[root-of-the-server]__2aea0639._.js | 2 +- .../[root-of-the-server]__2aea0639._.js.map | 4 +- .../ssr/[root-of-the-server]__661e4e50._.js | 32 +- .../[root-of-the-server]__661e4e50._.js.map | 6 +- .../ssr/[root-of-the-server]__bcada481._.js | 270 ++++---- .../[root-of-the-server]__bcada481._.js.map | 82 +-- .../ssr/[root-of-the-server]__de10d535._.js | 34 +- .../[root-of-the-server]__de10d535._.js.map | 18 +- .next/dev/server/next-font-manifest.js | 2 +- .next/dev/server/next-font-manifest.json | 4 + ...ocuments_00 - projet_plumeia_0ae2c1c3._.js | 34 +- ...ents_00 - projet_plumeia_0ae2c1c3._.js.map | 14 +- ...ocuments_00 - projet_plumeia_48e545ad._.js | 280 ++++---- ...ents_00 - projet_plumeia_48e545ad._.js.map | 26 +- ...ocuments_00 - projet_plumeia_c4c2fd93._.js | 2 +- ...ents_00 - projet_plumeia_c4c2fd93._.js.map | 4 +- ...ents_00 - projet_plumeia_src_74b79b3f._.js | 34 +- ..._00 - projet_plumeia_src_74b79b3f._.js.map | 6 +- ..._src_app_globals_css_bad6b30c._.single.css | 12 + ..._app_globals_css_bad6b30c._.single.css.map | 2 +- .../[root-of-the-server]__c391f813._.css | 12 + .../[root-of-the-server]__c391f813._.css.map | 2 +- .next/dev/trace | 51 ++ .next/dev/types/routes.d.ts | 3 +- .next/dev/types/validator.ts | 9 + src/app/project/[id]/layout.tsx | 5 + src/app/project/[id]/settings/page.tsx | 8 +- src/app/project/[id]/world/page.tsx | 12 +- src/providers/ProjectProvider.tsx | 6 +- 40 files changed, 1303 insertions(+), 489 deletions(-) diff --git a/.gitignore b/.gitignore index 72a25f8..afcf0cb 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,8 @@ yarn-debug.log* yarn-error.log* pnpm-debug.log* lerna-debug.log* -.next +*.next +.next/* node_modules dist @@ -25,3 +26,82 @@ dist-ssr *.sw? /src/generated/prisma +.next/dev/prerender-manifest.json +.next/dev/trace +.next/dev/cache/turbopack/23c46498/CURRENT +.next/dev/cache/turbopack/23c46498/LOG +.next/dev/server/app-paths-manifest.json +.next/dev/server/next-font-manifest.js +.next/dev/server/next-font-manifest.json +.next/dev/server/chunks/\[root-of-the-server]__43f27a2c._.js +.next/dev/server/chunks/\[root-of-the-server]__43f27a2c._.js.map +.next/dev/server/chunks/\[root-of-the-server]__630db118._.js +.next/dev/server/chunks/\[root-of-the-server]__630db118._.js.map +.next/dev/server/chunks/\[root-of-the-server]__f694870c._.js +.next/dev/server/chunks/\[root-of-the-server]__f694870c._.js.map +.next/dev/server/chunks/ssr/\[root-of-the-server]__2aea0639._.js +.next/dev/server/chunks/ssr/\[root-of-the-server]__2aea0639._.js.map +.next/dev/server/chunks/ssr/\[root-of-the-server]__661e4e50._.js.map +.next/dev/server/chunks/ssr/\[root-of-the-server]__bcada481._.js +.next/dev/server/chunks/ssr/\[root-of-the-server]__bcada481._.js.map +.next/dev/server/chunks/ssr/\[root-of-the-server]__de10d535._.js +.next/dev/server/chunks/ssr/\[root-of-the-server]__de10d535._.js.map +.next/dev/static/chunks/\[root-of-the-server]__c391f813._.css +.next/dev/static/chunks/\[root-of-the-server]__c391f813._.css.map +.next/dev/static/chunks/Documents_00 - projet_plumeia_0ae2c1c3._.js +.next/dev/static/chunks/Documents_00 - projet_plumeia_0ae2c1c3._.js.map +.next/dev/static/chunks/Documents_00 - projet_plumeia_48e545ad._.js +.next/dev/static/chunks/Documents_00 - projet_plumeia_48e545ad._.js.map +.next/dev/static/chunks/Documents_00 - projet_plumeia_c4c2fd93._.js +.next/dev/static/chunks/Documents_00 - projet_plumeia_c4c2fd93._.js.map +.next/dev/static/chunks/Documents_00 - projet_plumeia_src_74b79b3f._.js.map +.next/dev/static/chunks/Documents_00 - projet_plumeia_src_app_globals_css_bad6b30c._.single.css +.next/dev/static/chunks/Documents_00 - projet_plumeia_src_app_globals_css_bad6b30c._.single.css.map +.next/dev/types/routes.d.ts +.next/dev/types/validator.ts +.next/dev/server/chunks/\[root-of-the-server]__43f27a2c._.js +.next/dev/server/chunks/\[root-of-the-server]__43f27a2c._.js.map +.next/dev/server/chunks/\[root-of-the-server]__630db118._.js +.next/dev/server/chunks/\[root-of-the-server]__630db118._.js.map +.next/dev/server/chunks/\[root-of-the-server]__f694870c._.js +.next/dev/server/chunks/\[root-of-the-server]__f694870c._.js.map +.next/dev/server/chunks/ssr/\[root-of-the-server]__2aea0639._.js +.next/dev/server/chunks/ssr/\[root-of-the-server]__2aea0639._.js.map +.next/dev/server/chunks/ssr/\[root-of-the-server]__661e4e50._.js.map +.next/dev/server/chunks/ssr/\[root-of-the-server]__bcada481._.js +.next/dev/server/chunks/ssr/\[root-of-the-server]__bcada481._.js.map +.next/dev/server/chunks/ssr/\[root-of-the-server]__de10d535._.js +.next/dev/server/chunks/ssr/\[root-of-the-server]__de10d535._.js.map +.next/dev/prerender-manifest.json +.next/dev/trace +.next/dev/cache/turbopack/23c46498/CURRENT +.next/dev/cache/turbopack/23c46498/LOG +.next/dev/server/app-paths-manifest.json +.next/dev/server/next-font-manifest.js +.next/dev/server/next-font-manifest.json +.next/dev/server/chunks/\[root-of-the-server]__43f27a2c._.js +.next/dev/server/chunks/\[root-of-the-server]__43f27a2c._.js.map +.next/dev/server/chunks/\[root-of-the-server]__630db118._.js +.next/dev/server/chunks/\[root-of-the-server]__630db118._.js.map +.next/dev/server/chunks/\[root-of-the-server]__f694870c._.js +.next/dev/server/chunks/\[root-of-the-server]__f694870c._.js.map +.next/dev/server/chunks/ssr/\[root-of-the-server]__2aea0639._.js +.next/dev/server/chunks/ssr/\[root-of-the-server]__2aea0639._.js.map +.next/dev/server/chunks/ssr/\[root-of-the-server]__661e4e50._.js.map +.next/dev/server/chunks/ssr/\[root-of-the-server]__bcada481._.js +.next/dev/server/chunks/ssr/\[root-of-the-server]__bcada481._.js.map +.next/dev/server/chunks/ssr/\[root-of-the-server]__de10d535._.js +.next/dev/server/chunks/ssr/\[root-of-the-server]__de10d535._.js.map +.next/dev/static/chunks/\[root-of-the-server]__c391f813._.css +.next/dev/static/chunks/\[root-of-the-server]__c391f813._.css.map +.next/dev/static/chunks/Documents_00 - projet_plumeia_0ae2c1c3._.js +.next/dev/static/chunks/Documents_00 - projet_plumeia_0ae2c1c3._.js.map +.next/dev/static/chunks/Documents_00 - projet_plumeia_48e545ad._.js +.next/dev/static/chunks/Documents_00 - projet_plumeia_48e545ad._.js.map +.next/dev/static/chunks/Documents_00 - projet_plumeia_c4c2fd93._.js +.next/dev/static/chunks/Documents_00 - projet_plumeia_c4c2fd93._.js.map +.next/dev/static/chunks/Documents_00 - projet_plumeia_src_74b79b3f._.js.map +.next/dev/static/chunks/Documents_00 - projet_plumeia_src_app_globals_css_bad6b30c._.single.css +.next/dev/static/chunks/Documents_00 - projet_plumeia_src_app_globals_css_bad6b30c._.single.css.map +.next/dev/types/routes.d.ts +.next/dev/types/validator.ts diff --git a/.next/dev/cache/turbopack/23c46498/CURRENT b/.next/dev/cache/turbopack/23c46498/CURRENT index 161d01cecb3b83ff55aa11482bfd96956951dc0c..f11b5ee4b41874969795a98912af7275b9da28ce 100644 GIT binary patch literal 4 LcmZQzV6g)L07?Ku literal 4 LcmZQzV7vza0OSDR diff --git a/.next/dev/cache/turbopack/23c46498/LOG b/.next/dev/cache/turbopack/23c46498/LOG index fefcb83..7cfe1a6 100644 --- a/.next/dev/cache/turbopack/23c46498/LOG +++ b/.next/dev/cache/turbopack/23c46498/LOG @@ -532,3 +532,657 @@ FAM | META SEQ | SST SEQ | RANGE 0 | 00000476 | 00000475 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) 1 | 00000477 | 00000473 SST | O | 3ffdfb3b7d50fcf1-3ffdfb3b7d50fcf1 (0 MiB, fresh) 2 | 00000478 | 00000474 SST | O | 3ffdfb3b7d50fcf1-3ffdfb3b7d50fcf1 (0 MiB, fresh) +Time 2026-02-27T12:04:04.83174Z +Commit 00000484 4 keys in 7ms 923µs 400ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000482 | 00000481 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000483 | 00000479 SST | O | 3ffdfb3b7d50fcf1-3ffdfb3b7d50fcf1 (0 MiB, fresh) + 2 | 00000484 | 00000480 SST | O | 3ffdfb3b7d50fcf1-3ffdfb3b7d50fcf1 (0 MiB, fresh) +Time 2026-02-27T12:09:15.7143044Z +Commit 00000490 88 keys in 8ms 340µs 100ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000488 | 00000487 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000489 | 00000486 SST | [===============================================================================================] | 09d01bbbdb033c72-ff86d89df2e7cda0 (0 MiB, fresh) + 2 | 00000490 | 00000485 SST | [========================================================================================] | 1b57cfa037b9ece9-fdac997cbf24ab54 (0 MiB, fresh) +Time 2026-02-27T12:11:09.3036264Z +Commit 00000500 22 keys in 12ms 84µs 100ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000496 | 00000493 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000497 | 00000491 SST | [================================================================================] | 1f75d89a433f9d3d-ef311d8b965c9633 (0 MiB, fresh) + 2 | 00000498 | 00000492 SST | [================================================================================] | 1f75d89a433f9d3d-ef311d8b965c9633 (0 MiB, fresh) + 3 | 00000499 | 00000494 SST | O | 2497bf47a4cbc925-2497bf47a4cbc925 (0 MiB, fresh) + 4 | 00000500 | 00000495 SST | O | 1f75d89a433f9d3d-1f75d89a433f9d3d (0 MiB, fresh) +Time 2026-02-27T12:11:38.1607081Z +Commit 00000506 743 keys in 6ms 120µs 200ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000504 | 00000503 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000505 | 00000502 SST | [==================================================================================================] | 017b6b0c5cfd90fa-ff86d89df2e7cda0 (0 MiB, fresh) + 2 | 00000506 | 00000501 SST | [=================================================================================================] | 038551e4bbed3e04-fdac997cbf24ab54 (0 MiB, fresh) +Time 2026-02-27T12:11:44.6251547Z +Commit 00000512 4752 keys in 8ms 322µs 300ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000510 | 00000509 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 2 | 00000511 | 00000507 SST | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa (6 MiB, fresh) + 1 | 00000512 | 00000508 SST | [==================================================================================================] | 000d168784b3a904-fffe2cca550ad65f (0 MiB, fresh) +Time 2026-02-27T12:13:27.1145018Z +Commit 00000518 14 keys in 8ms 96µs 400ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000516 | 00000515 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000517 | 00000513 SST | [===========================================================================] | 2cf8041a3c23f4e1-ef311d8b965c9633 (0 MiB, fresh) + 2 | 00000518 | 00000514 SST | [===========================================================================] | 2cf8041a3c23f4e1-ef311d8b965c9633 (0 MiB, fresh) +Time 2026-02-27T12:13:52.094837Z +Commit 00000524 14 keys in 6ms 551µs 300ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000522 | 00000521 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000523 | 00000519 SST | [===========================================================================] | 2cf8041a3c23f4e1-ef311d8b965c9633 (0 MiB, fresh) + 2 | 00000524 | 00000520 SST | [===========================================================================] | 2cf8041a3c23f4e1-ef311d8b965c9633 (0 MiB, fresh) +Time 2026-02-27T12:14:25.3112749Z +Commit 00000530 14 keys in 7ms 818µs 900ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000528 | 00000527 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000529 | 00000526 SST | [===========================================================================] | 2cf8041a3c23f4e1-ef311d8b965c9633 (0 MiB, fresh) + 2 | 00000530 | 00000525 SST | [===========================================================================] | 2cf8041a3c23f4e1-ef311d8b965c9633 (0 MiB, fresh) +Time 2026-02-27T12:15:51.2230343Z +Commit 00000536 3370 keys in 9ms 4µs 600ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000534 | 00000533 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 2 | 00000535 | 00000531 SST | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa (4 MiB, fresh) + 1 | 00000536 | 00000532 SST | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa (0 MiB, fresh) +Time 2026-02-27T12:16:47.031494Z +Commit 00000546 18 keys in 10ms 968µs 800ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000542 | 00000539 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000543 | 00000538 SST | [===========================================================================] | 2cf8041a3c23f4e1-ef311d8b965c9633 (0 MiB, fresh) + 2 | 00000544 | 00000537 SST | [===========================================================================] | 2cf8041a3c23f4e1-ef311d8b965c9633 (0 MiB, fresh) + 3 | 00000545 | 00000540 SST | O | 2309e133c0f9dd87-2309e133c0f9dd87 (0 MiB, fresh) + 4 | 00000546 | 00000541 SST | O | 379d79e4c68527e0-379d79e4c68527e0 (0 MiB, fresh) +Time 2026-02-27T12:17:18.514308Z +Commit 00000552 14 keys in 6ms 388µs 300ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000550 | 00000549 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000551 | 00000547 SST | [===========================================================================] | 2cf8041a3c23f4e1-ef311d8b965c9633 (0 MiB, fresh) + 2 | 00000552 | 00000548 SST | [===========================================================================] | 2cf8041a3c23f4e1-ef311d8b965c9633 (0 MiB, fresh) +Time 2026-02-27T12:18:05.7559404Z +Commit 00000558 12 keys in 8ms 577µs 400ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000556 | 00000555 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000557 | 00000553 SST | [================================================================================] | 1f75d89a433f9d3d-ef311d8b965c9633 (0 MiB, fresh) + 2 | 00000558 | 00000554 SST | [================================================================================] | 1f75d89a433f9d3d-ef311d8b965c9633 (0 MiB, fresh) +Time 2026-02-27T12:18:26.9863226Z +Commit 00000564 12 keys in 6ms 7µs 300ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000562 | 00000561 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000563 | 00000560 SST | [================================================================================] | 1f75d89a433f9d3d-ef311d8b965c9633 (0 MiB, fresh) + 2 | 00000564 | 00000559 SST | [================================================================================] | 1f75d89a433f9d3d-ef311d8b965c9633 (0 MiB, fresh) +Time 2026-02-27T12:18:50.9796749Z +Commit 00000570 14 keys in 7ms 371µs 900ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000568 | 00000567 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000569 | 00000565 SST | [===========================================================================] | 2cf8041a3c23f4e1-ef311d8b965c9633 (0 MiB, fresh) + 2 | 00000570 | 00000566 SST | [===========================================================================] | 2cf8041a3c23f4e1-ef311d8b965c9633 (0 MiB, fresh) +Time 2026-02-27T12:20:43.8451589Z +Commit 00000576 31 keys in 6ms 964µs 800ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000574 | 00000573 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000575 | 00000571 SST | [===========================================================================================] | 09d01bbbdb033c72-f58ec977f9bb9eb7 (0 MiB, fresh) + 2 | 00000576 | 00000572 SST | [========================================================================================] | 11dbba9c647f7f2d-f58ec977f9bb9eb7 (0 MiB, fresh) +Time 2026-02-27T12:20:51.8744987Z +Commit 00000582 43 keys in 7ms 417µs 400ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000580 | 00000579 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000581 | 00000577 SST | [===============================================================================================] | 03f950ee46c47561-f9536fe94f66077d (0 MiB, fresh) + 2 | 00000582 | 00000578 SST | [===============================================================================================] | 03f950ee46c47561-f9536fe94f66077d (0 MiB, fresh) +Time 2026-02-27T12:22:02.3730447Z +Commit 00000592 3535 keys in 11ms 642µs 600ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000588 | 00000585 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 3 | 00000589 | 00000586 SST | [======================================================] | 0ff3e7cc9552ccec-9c69f8971f6ee670 (0 MiB, fresh) + 4 | 00000590 | 00000587 SST | [======================================================================================] | 0ff650ac10170702-ee3473a2a41b1cc0 (0 MiB, fresh) + 2 | 00000591 | 00000583 SST | [==================================================================================================] | 0027752eca537b46-feba7f3a99a42bc4 (0 MiB, fresh) + 1 | 00000592 | 00000584 SST | [==================================================================================================] | 0013a9e4f34335e5-fffe2cca550ad65f (1 MiB, fresh) +Time 2026-02-27T12:22:07.2702851Z +Commit 00000598 42 keys in 7ms 137µs 800ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000596 | 00000595 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000597 | 00000593 SST | [==========================================================================================] | 05f8ca7261de928f-ef311d8b965c9633 (0 MiB, fresh) + 2 | 00000598 | 00000594 SST | [==================================================================================] | 1a484549d42c4b3f-ef311d8b965c9633 (0 MiB, fresh) +Time 2026-02-27T12:22:18.0675303Z +Commit 00000608 1102 keys in 11ms 631µs 200ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000604 | 00000601 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 2 | 00000605 | 00000599 SST | [==================================================================================================] | 00eac999f8125084-ffe64bbd36bacfc8 (1 MiB, fresh) + 3 | 00000606 | 00000602 SST | O | 9da5990d1637567b-9da5990d1637567b (0 MiB, fresh) + 4 | 00000607 | 00000603 SST | O | 48807cab798e6e76-48807cab798e6e76 (0 MiB, fresh) + 1 | 00000608 | 00000600 SST | [==================================================================================================] | 00eac999f8125084-ffffc8b261a62b07 (0 MiB, fresh) +Time 2026-02-27T12:22:25.1174212Z +Commit 00000614 20 keys in 6ms 313µs 100ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000612 | 00000611 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000613 | 00000610 SST | [==================================================================================] | 1a484549d42c4b3f-ef311d8b965c9633 (0 MiB, fresh) + 2 | 00000614 | 00000609 SST | [==================================================================================] | 1a484549d42c4b3f-ef311d8b965c9633 (0 MiB, fresh) +Time 2026-02-27T12:22:50.3350346Z +Commit 00000620 47 keys in 6ms 962µs 500ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000618 | 00000617 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000619 | 00000615 SST | [============================================================================================] | 013372eb4f032f07-ef311d8b965c9633 (0 MiB, fresh) + 2 | 00000620 | 00000616 SST | [==========================================================] | 5763b81b2f19688b-ef311d8b965c9633 (0 MiB, fresh) +Time 2026-02-27T12:24:25.8086972Z +Commit 00000626 4 keys in 16ms 475µs 300ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000624 | 00000623 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000625 | 00000621 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) + 2 | 00000626 | 00000622 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) +Time 2026-02-27T12:24:28.1834282Z +Commit 00000632 4 keys in 7ms 859µs 100ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000630 | 00000629 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000631 | 00000627 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) + 2 | 00000632 | 00000628 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) +Time 2026-02-27T12:25:47.4123912Z +Commit 00000638 4 keys in 15ms 483µs 100ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000636 | 00000635 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000637 | 00000633 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) + 2 | 00000638 | 00000634 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) +Time 2026-02-27T12:27:02.363817Z +Commit 00000644 16 keys in 6ms 916µs +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000642 | 00000641 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000643 | 00000640 SST | [=================================================================] | 46a49451131614a3-ef311d8b965c9633 (0 MiB, fresh) + 2 | 00000644 | 00000639 SST | [=================================================================] | 46a49451131614a3-ef311d8b965c9633 (0 MiB, fresh) +Time 2026-02-27T12:27:17.5294512Z +Commit 00000650 4 keys in 15ms 734µs 200ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000648 | 00000647 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000649 | 00000645 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) + 2 | 00000650 | 00000646 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) +Time 2026-02-27T12:27:37.8639376Z +Commit 00000656 482 keys in 7ms 315µs 500ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000654 | 00000653 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 2 | 00000655 | 00000651 SST | [=================================================================================================] | 00431eb00a999d62-fbe1ccba49ffaeda (0 MiB, fresh) + 1 | 00000656 | 00000652 SST | [==================================================================================================] | 00c875afcd53ecac-fd8767054879a7cc (0 MiB, fresh) +Time 2026-02-27T12:27:57.7687767Z +Commit 00000666 165 keys in 11ms 506µs 500ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000662 | 00000659 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000663 | 00000657 SST | [===============================================================================================] | 0184c3c8382c6c93-f6074fb7b9409f3b (0 MiB, fresh) + 2 | 00000664 | 00000658 SST | [===============================================================================================] | 0193e3c26e3b29ea-f6074fb7b9409f3b (0 MiB, fresh) + 4 | 00000665 | 00000661 SST | [==] | 783c8fc53084e223-7f718952ff87ea01 (0 MiB, fresh) + 3 | 00000666 | 00000660 SST | [==========================] | 40089b481a8cc178-85aa86e8cec1dfa6 (0 MiB, fresh) +Time 2026-02-27T12:27:59.8084722Z +Commit 00000672 16 keys in 11ms 404µs 100ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000670 | 00000669 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000671 | 00000667 SST | [==========================================================] | 5763b81b2f19688b-ef311d8b965c9633 (0 MiB, fresh) + 2 | 00000672 | 00000668 SST | [==========================================================] | 5763b81b2f19688b-ef311d8b965c9633 (0 MiB, fresh) +Time 2026-02-27T12:28:24.9854826Z +Commit 00000678 39 keys in 7ms 97µs 200ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000676 | 00000675 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000677 | 00000674 SST | [============================================================================================] | 06628945200f2f5d-f3604e3d46699c39 (0 MiB, fresh) + 2 | 00000678 | 00000673 SST | [============================================================================================] | 06628945200f2f5d-f3604e3d46699c39 (0 MiB, fresh) +Time 2026-02-27T12:28:29.0062856Z +Commit 00000684 4 keys in 8ms 567µs 900ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000682 | 00000681 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000683 | 00000679 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) + 2 | 00000684 | 00000680 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) +Time 2026-02-27T12:29:06.8254222Z +Commit 00000690 24 keys in 7ms 20µs 700ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000688 | 00000687 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000689 | 00000685 SST | [========================================================================================] | 11dbba9c647f7f2d-f58ec977f9bb9eb7 (0 MiB, fresh) + 2 | 00000690 | 00000686 SST | [========================================================================================] | 11dbba9c647f7f2d-f58ec977f9bb9eb7 (0 MiB, fresh) +Time 2026-02-27T12:29:23.9044182Z +Commit 00000696 26 keys in 6ms 308µs 500ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000694 | 00000693 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000695 | 00000692 SST | [===============================================================================================] | 03f950ee46c47561-f9536fe94f66077d (0 MiB, fresh) + 2 | 00000696 | 00000691 SST | [===============================================================================================] | 03f950ee46c47561-f9536fe94f66077d (0 MiB, fresh) +Time 2026-02-27T12:29:29.6283204Z +Commit 00000702 22 keys in 7ms 71µs 700ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000700 | 00000699 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000701 | 00000698 SST | [==========================================================================================] | 11dbba9c647f7f2d-f9536fe94f66077d (0 MiB, fresh) + 2 | 00000702 | 00000697 SST | [==========================================================================================] | 11dbba9c647f7f2d-f9536fe94f66077d (0 MiB, fresh) +Time 2026-02-27T12:29:40.9065974Z +Commit 00000708 24 keys in 5ms 829µs 300ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000706 | 00000705 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000707 | 00000703 SST | [========================================================================================] | 11dbba9c647f7f2d-f58ec977f9bb9eb7 (0 MiB, fresh) + 2 | 00000708 | 00000704 SST | [========================================================================================] | 11dbba9c647f7f2d-f58ec977f9bb9eb7 (0 MiB, fresh) +Time 2026-02-27T12:30:26.1006182Z +Commit 00000718 3130 keys in 10ms 920µs 400ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000714 | 00000711 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000715 | 00000710 SST | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa (0 MiB, fresh) + 2 | 00000716 | 00000709 SST | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa (3 MiB, fresh) + 4 | 00000717 | 00000713 SST | [===============================================================] | 238c0d453449a160-c7a9a722bae2b489 (0 MiB, fresh) + 3 | 00000718 | 00000712 SST | [===========================] | 9d62b916472ca1f6-e50433a46e09e6eb (0 MiB, fresh) +Time 2026-02-27T12:30:41.4021806Z +Commit 00000724 20 keys in 6ms 922µs 900ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000722 | 00000721 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000723 | 00000719 SST | [==================================================================================] | 1a484549d42c4b3f-ef311d8b965c9633 (0 MiB, fresh) + 2 | 00000724 | 00000720 SST | [==================================================================================] | 1a484549d42c4b3f-ef311d8b965c9633 (0 MiB, fresh) +Time 2026-02-27T12:30:57.2000509Z +Commit 00000730 10 keys in 7ms 350µs 300ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000728 | 00000727 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000729 | 00000725 SST | [====================================================================] | 3ffdfb3b7d50fcf1-ef311d8b965c9633 (0 MiB, fresh) + 2 | 00000730 | 00000726 SST | [====================================================================] | 3ffdfb3b7d50fcf1-ef311d8b965c9633 (0 MiB, fresh) +Time 2026-02-27T12:31:09.7890475Z +Commit 00000736 4 keys in 8ms 559µs +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000734 | 00000733 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000735 | 00000731 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) + 2 | 00000736 | 00000732 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) +Time 2026-02-27T12:31:32.7786978Z +Commit 00000742 4 keys in 7ms 492µs 800ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000740 | 00000739 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000741 | 00000737 SST | O | 3ffdfb3b7d50fcf1-3ffdfb3b7d50fcf1 (0 MiB, fresh) + 2 | 00000742 | 00000738 SST | O | 3ffdfb3b7d50fcf1-3ffdfb3b7d50fcf1 (0 MiB, fresh) +Time 2026-02-27T12:35:05.8317046Z +Commit 00000748 3871 keys in 9ms 815µs 400ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000746 | 00000745 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000747 | 00000744 SST | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa (0 MiB, fresh) + 2 | 00000748 | 00000743 SST | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa (5 MiB, fresh) +Time 2026-02-27T12:35:25.0995728Z +Commit 00000754 3385 keys in 8ms 577µs 900ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000752 | 00000751 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000753 | 00000750 SST | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa (0 MiB, fresh) + 2 | 00000754 | 00000749 SST | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa (5 MiB, fresh) +Time 2026-02-27T12:35:50.7772695Z +Commit 00000760 3385 keys in 8ms 887µs 400ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000758 | 00000757 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000759 | 00000756 SST | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa (0 MiB, fresh) + 2 | 00000760 | 00000755 SST | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa (5 MiB, fresh) +Time 2026-02-27T12:36:20.9818198Z +Commit 00000766 4 keys in 15ms 340µs 500ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000764 | 00000763 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000765 | 00000761 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) + 2 | 00000766 | 00000762 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) +Time 2026-02-27T12:36:30.5406337Z +Commit 00000776 364 keys in 11ms 722µs +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000772 | 00000769 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 2 | 00000773 | 00000768 SST | [==================================================================================================] | 00eac999f8125084-ffe64bbd36bacfc8 (1 MiB, fresh) + 1 | 00000774 | 00000767 SST | [==================================================================================================] | 00eac999f8125084-ffe64bbd36bacfc8 (0 MiB, fresh) + 3 | 00000775 | 00000770 SST | O | 439bab186438f3ed-439bab186438f3ed (0 MiB, fresh) + 4 | 00000776 | 00000771 SST | O | 63250928e1d19caf-63250928e1d19caf (0 MiB, fresh) +Time 2026-02-27T12:36:38.4903374Z +Commit 00000782 4 keys in 16ms 820µs 600ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000780 | 00000779 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000781 | 00000777 SST | O | 3ffdfb3b7d50fcf1-3ffdfb3b7d50fcf1 (0 MiB, fresh) + 2 | 00000782 | 00000778 SST | O | 3ffdfb3b7d50fcf1-3ffdfb3b7d50fcf1 (0 MiB, fresh) +Time 2026-02-27T12:36:53.6096868Z +Commit 00000788 611 keys in 7ms 11µs 600ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000786 | 00000785 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000787 | 00000784 SST | [==================================================================================================] | 009342c7e4d63035-ffd3d02202c1f375 (0 MiB, fresh) + 2 | 00000788 | 00000783 SST | [==================================================================================================] | 009342c7e4d63035-ffd3d02202c1f375 (0 MiB, fresh) +Time 2026-02-27T12:37:00.2669114Z +Commit 00000794 20 keys in 6ms 641µs 400ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000792 | 00000791 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000793 | 00000789 SST | [==================================================================================] | 1a484549d42c4b3f-ef311d8b965c9633 (0 MiB, fresh) + 2 | 00000794 | 00000790 SST | [==================================================================================] | 1a484549d42c4b3f-ef311d8b965c9633 (0 MiB, fresh) +Time 2026-02-27T12:37:19.059143Z +Commit 00000804 1896 keys in 9ms 440µs 100ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000800 | 00000797 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 3 | 00000801 | 00000799 SST | [==============================================================================================] | 0bc3c032337ddee6-fe9d4c95970cbcad (0 MiB, fresh) + 2 | 00000802 | 00000795 SST | [==================================================================================================] | 0079297cb331b81a-ff66a0b34ab7d342 (0 MiB, fresh) + 1 | 00000803 | 00000796 SST | [==================================================================================================] | 0013a9e4f34335e5-ffd284765f657204 (0 MiB, fresh) + 4 | 00000804 | 00000798 SST | [========================================================================================] | 1ade4652a63b3e8b-ff66a0b34ab7d342 (0 MiB, fresh) +Time 2026-02-27T12:37:24.8374993Z +Commit 00000810 89 keys in 6ms 773µs 100ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000808 | 00000807 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000809 | 00000805 SST | [===============================================================================================] | 09d01bbbdb033c72-fdac997cbf24ab54 (0 MiB, fresh) + 2 | 00000810 | 00000806 SST | [=============================================================================================] | 0e32f06d40b4847e-fdac997cbf24ab54 (0 MiB, fresh) +Time 2026-02-27T12:37:36.2102399Z +Commit 00000820 11686 keys in 11ms 923µs 500ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000816 | 00000813 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 4 | 00000817 | 00000814 SST | [==================================================================================================] | 006c6a5a7b5f563c-fff709de7c4b04f9 (0 MiB, fresh) + 3 | 00000818 | 00000815 SST | [==================================================================================================] | 00097e1e2df9decc-ffc387b60a952a10 (0 MiB, fresh) + 1 | 00000819 | 00000812 SST | [==================================================================================================] | 000d168784b3a904-fff88b53b5ad4b9a (1 MiB, fresh) + 2 | 00000820 | 00000811 SST | [==================================================================================================] | 000d168784b3a904-fff73bb502d5418e (3 MiB, fresh) +Time 2026-02-27T12:45:04.8533059Z +Commit 00000826 4 keys in 6ms 610µs +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000824 | 00000823 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 2 | 00000825 | 00000822 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) + 1 | 00000826 | 00000821 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) +Time 2026-02-27T12:46:30.1575628Z +Commit 00000832 4 keys in 15ms 904µs 800ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000830 | 00000829 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000831 | 00000827 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) + 2 | 00000832 | 00000828 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) +Time 2026-02-27T12:47:35.0351348Z +Commit 00000838 4 keys in 6ms 287µs 100ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000836 | 00000835 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000837 | 00000833 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) + 2 | 00000838 | 00000834 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) +Time 2026-02-27T12:50:08.1687551Z +Commit 00000844 4 keys in 16ms 243µs 900ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000842 | 00000841 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 2 | 00000843 | 00000840 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) + 1 | 00000844 | 00000839 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) +Time 2026-02-27T12:55:41.3244012Z +Commit 00000850 4 keys in 15ms 970µs +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000848 | 00000847 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000849 | 00000845 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) + 2 | 00000850 | 00000846 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) +Time 2026-02-27T14:44:42.2115447Z +Commit 00000856 1424 keys in 6ms 375µs 700ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000854 | 00000853 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 2 | 00000855 | 00000851 SST | [==================================================================================================] | 015aa7af8c46be57-ff1373558b528b52 (0 MiB, fresh) + 1 | 00000856 | 00000852 SST | [==================================================================================================] | 0013a9e4f34335e5-ffd284765f657204 (0 MiB, fresh) +Time 2026-02-27T14:47:48.983407Z +Commit 00000862 39 keys in 6ms 881µs 600ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000860 | 00000859 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000861 | 00000857 SST | [========================================================================================] | 11dbba9c647f7f2d-f3d82c9cb3d360b9 (0 MiB, fresh) + 2 | 00000862 | 00000858 SST | [===================================================================================] | 1ade4652a63b3e8b-f0fcc058ca80fdac (0 MiB, fresh) +Time 2026-02-27T14:47:53.3345477Z +Commit 00000872 420 keys in 10ms 980µs 100ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000868 | 00000865 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000869 | 00000864 SST | [==================================================================================================] | 01389cf7b16bf24f-ffd2128295feedf0 (0 MiB, fresh) + 2 | 00000870 | 00000863 SST | [================================================================================================] | 06e01713f457bea1-ff61701500c2a61b (0 MiB, fresh) + 3 | 00000871 | 00000866 SST | [=======================] | 2bdf2478649a4ce6-69340863efce2d7f (0 MiB, fresh) + 4 | 00000872 | 00000867 SST | [==========================================================] | 2c8be0b6b9fb45b0-c2a74f8d75b44564 (0 MiB, fresh) +Time 2026-02-27T14:48:04.3110009Z +Commit 00000878 119 keys in 6ms 491µs 300ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000876 | 00000875 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000877 | 00000874 SST | [=================================================================================================] | 013510424988da8d-fd026b8c978a4331 (0 MiB, fresh) + 2 | 00000878 | 00000873 SST | [==============================================================================================] | 0cbd3a02dfa51a3b-ff44163a2f4ddb88 (0 MiB, fresh) +Time 2026-02-27T14:51:35.5292153Z +Commit 00000884 385 keys in 6ms 233µs 100ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000882 | 00000881 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000883 | 00000879 SST | [=================================================================================================] | 033155d55f9205e6-fde1fb32301a48a2 (0 MiB, fresh) + 2 | 00000884 | 00000880 SST | [=================================================================================================] | 033155d55f9205e6-fde1fb32301a48a2 (0 MiB, fresh) +Time 2026-02-27T14:51:41.2792744Z +Commit 00000890 4 keys in 17ms 606µs 300ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000888 | 00000887 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000889 | 00000885 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) + 2 | 00000890 | 00000886 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) +Time 2026-02-27T14:51:58.8511729Z +Commit 00000896 43 keys in 6ms 756µs 100ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000894 | 00000893 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000895 | 00000891 SST | [==========================================================================================] | 06628945200f2f5d-ef311d8b965c9633 (0 MiB, fresh) + 2 | 00000896 | 00000892 SST | [==========================================================================================] | 06628945200f2f5d-ef311d8b965c9633 (0 MiB, fresh) +Time 2026-02-27T14:52:17.8097704Z +Commit 00000902 1412 keys in 7ms 600µs 100ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000900 | 00000899 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 2 | 00000901 | 00000897 SST | [==================================================================================================] | 015aa7af8c46be57-ff1373558b528b52 (0 MiB, fresh) + 1 | 00000902 | 00000898 SST | [==================================================================================================] | 0013a9e4f34335e5-ffd284765f657204 (0 MiB, fresh) +Time 2026-02-27T14:53:09.3644583Z +Commit 00000912 153 keys in 13ms 40µs 800ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000908 | 00000905 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000909 | 00000903 SST | [==================================================================================================] | 009d9e83167ab7a4-ff61701500c2a61b (0 MiB, fresh) + 2 | 00000910 | 00000904 SST | [==================================================================================================] | 009d9e83167ab7a4-ff61701500c2a61b (0 MiB, fresh) + 3 | 00000911 | 00000906 SST | [========================================================] | 56a69852b8b5cdf4-e8a3ea584b461747 (0 MiB, fresh) + 4 | 00000912 | 00000907 SST | [===========] | defd864fc95d66ed-ff45dbd5bef33364 (0 MiB, fresh) +Time 2026-02-27T14:53:35.4865302Z +Commit 00000918 17 keys in 6ms 380µs +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000916 | 00000915 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000917 | 00000914 SST | [==================================================] | 432bea7d5b140db2-c5c647feca328c20 (0 MiB, fresh) + 2 | 00000918 | 00000913 SST | [==================================================] | 432bea7d5b140db2-c5c647feca328c20 (0 MiB, fresh) +Time 2026-02-27T14:53:39.7355816Z +Commit 00000924 4 keys in 15ms 994µs 500ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000922 | 00000921 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000923 | 00000919 SST | O | 1294d01d65ce2471-1294d01d65ce2471 (0 MiB, fresh) + 2 | 00000924 | 00000920 SST | O | 1294d01d65ce2471-1294d01d65ce2471 (0 MiB, fresh) +Time 2026-02-27T14:53:45.1120923Z +Commit 00000930 14 keys in 6ms 351µs 400ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000928 | 00000927 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000929 | 00000926 SST | [==================================] | 51397423a6488881-ab76866d92a46f02 (0 MiB, fresh) + 2 | 00000930 | 00000925 SST | [==================================] | 51397423a6488881-ab76866d92a46f02 (0 MiB, fresh) +Time 2026-02-27T14:55:30.2507379Z +Commit 00000940 1581 keys in 11ms 521µs 700ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000936 | 00000933 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 2 | 00000937 | 00000932 SST | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa (2 MiB, fresh) + 1 | 00000938 | 00000931 SST | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa (0 MiB, fresh) + 3 | 00000939 | 00000934 SST | [======================================] | 3c10db2e19b49a0b-9ed4570605c3a2c2 (0 MiB, fresh) + 4 | 00000940 | 00000935 SST | [================================================] | 4b78b5c975073d79-c98867bb8679739e (0 MiB, fresh) +Time 2026-02-27T14:55:39.4389624Z +Commit 00000946 71 keys in 7ms 285µs 300ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000944 | 00000943 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000945 | 00000942 SST | [==================================================================================================] | 016409dcc3e1f6df-fd8767054879a7cc (0 MiB, fresh) + 2 | 00000946 | 00000941 SST | [=============================================================================================] | 016409dcc3e1f6df-f15a28aad14562f0 (0 MiB, fresh) +Time 2026-02-27T14:55:46.2815708Z +Commit 00000952 1153 keys in 8ms 186µs +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000950 | 00000949 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 2 | 00000951 | 00000947 SST | [==================================================================================================] | 000bd3f15bd5aba7-ff5042d908821139 (1 MiB, fresh) + 1 | 00000952 | 00000948 SST | [==================================================================================================] | 000bd3f15bd5aba7-ff5042d908821139 (0 MiB, fresh) +Time 2026-02-27T14:56:12.4672542Z +Commit 00000962 2321 keys in 9ms 878µs 500ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000958 | 00000955 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 2 | 00000959 | 00000953 SST | [==================================================================================================] | 000d168784b3a904-fff068465974022c (4 MiB, fresh) + 1 | 00000960 | 00000954 SST | [==================================================================================================] | 000d168784b3a904-fff068465974022c (0 MiB, fresh) + 3 | 00000961 | 00000956 SST | [========================================================================================] | 0a978726d510bb57-ef0aac6bdcdc9e3f (0 MiB, fresh) + 4 | 00000962 | 00000957 SST | [=================================================================================] | 28bf7cdd862bed3f-f9e780b4039d56ae (0 MiB, fresh) +Time 2026-02-27T14:57:20.8953078Z +Commit 00000972 22077 keys in 11ms 690µs 100ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000968 | 00000965 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 4 | 00000969 | 00000966 SST | [==================================================================================================] | 0035f21f4f4812bc-ffe00fafe5be7210 (0 MiB, fresh) + 3 | 00000970 | 00000967 SST | [==================================================================================================] | 001617ccf4146189-ff96ccc7354067e6 (0 MiB, fresh) + 2 | 00000971 | 00000963 SST | [==================================================================================================] | 000bd3f15bd5aba7-fff73bb502d5418e (4 MiB, fresh) + 1 | 00000972 | 00000964 SST | [==================================================================================================] | 000bd3f15bd5aba7-fffe3db4c47db22d (1 MiB, fresh) +Time 2026-02-27T15:02:08.1858988Z +Commit 00000982 2366 keys in 13ms 535µs 400ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000978 | 00000975 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000979 | 00000973 SST | [==================================================================================================] | 000d168784b3a904-fff068465974022c (0 MiB, fresh) + 2 | 00000980 | 00000974 SST | [==================================================================================================] | 000d168784b3a904-fff068465974022c (4 MiB, fresh) + 3 | 00000981 | 00000976 SST | [======================] | 179273c9b8506d93-523dae64c28e0d30 (0 MiB, fresh) + 4 | 00000982 | 00000977 SST | [=====================================================================] | 02456d67aa55580e-b58d909fb5243441 (0 MiB, fresh) +Time 2026-02-27T22:12:44.5028675Z +Commit 00000988 1172 keys in 7ms 862µs 700ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000986 | 00000985 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 2 | 00000987 | 00000983 SST | [=================================================================================================] | 0315bd6ef0760e1f-ff1373558b528b52 (0 MiB, fresh) + 1 | 00000988 | 00000984 SST | [==================================================================================================] | 0013a9e4f34335e5-ffd284765f657204 (0 MiB, fresh) +Time 2026-02-27T22:12:49.8151499Z +Commit 00000994 1280 keys in 12ms 941µs 300ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000992 | 00000991 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000993 | 00000990 SST | [==================================================================================================] | 0013a9e4f34335e5-ffd284765f657204 (0 MiB, fresh) + 2 | 00000994 | 00000989 SST | [=================================================================================================] | 015aa7af8c46be57-fcc735cb29041d9f (0 MiB, fresh) +Time 2026-02-27T22:13:07.9082975Z +Commit 00001000 8 keys in 16ms 981µs 800ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000998 | 00000997 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00000999 | 00000996 SST | [============================] | 3d8512a47aa1edaf-888e85a42c3776c9 (0 MiB, fresh) + 2 | 00001000 | 00000995 SST | [============================] | 3d8512a47aa1edaf-888e85a42c3776c9 (0 MiB, fresh) +Time 2026-02-27T22:13:18.1079199Z +Commit 00001006 12 keys in 17ms 566µs 900ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00001004 | 00001003 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00001005 | 00001001 SST | [==================================] | 51397423a6488881-ab76866d92a46f02 (0 MiB, fresh) + 2 | 00001006 | 00001002 SST | [==================================] | 51397423a6488881-ab76866d92a46f02 (0 MiB, fresh) +Time 2026-02-27T22:13:26.2751213Z +Commit 00001012 14 keys in 7ms 198µs 600ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00001010 | 00001009 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00001011 | 00001008 SST | [========================================================================] | 126fbbc5d8ff7a79-cf5949b82c014010 (0 MiB, fresh) + 2 | 00001012 | 00001007 SST | [========================================================================] | 126fbbc5d8ff7a79-cf5949b82c014010 (0 MiB, fresh) +Time 2026-02-27T22:13:31.5204181Z +Commit 00001022 50806 keys in 14ms 662µs 700ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00001018 | 00001015 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 4 | 00001019 | 00001016 SST | [==================================================================================================] | 00078b2aad45711c-fffdad0e4861d73a (0 MiB, fresh) + 3 | 00001020 | 00001017 SST | [==================================================================================================] | 00044cca33d36b79-fff99d31c031c16d (0 MiB, fresh) + 2 | 00001021 | 00001013 SST | [==================================================================================================] | 000358d0de9d25d6-fffdad0e4861d73a (10 MiB, fresh) + 1 | 00001022 | 00001014 SST | [==================================================================================================] | 000358d0de9d25d6-ffffc8b261a62b07 (3 MiB, fresh) +Time 2026-02-27T22:13:40.849769Z +Commit 00001032 13092 keys in 10ms 989µs 700ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00001028 | 00001025 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 4 | 00001029 | 00001027 SST | [==================================================================================================] | 00148b4d5e2dffac-ff97ccfade15fe08 (0 MiB, fresh) + 2 | 00001030 | 00001023 SST | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa (3 MiB, fresh) + 3 | 00001031 | 00001026 SST | [==================================================================================================] | 00496281e5fcb56e-ffb87a88b13c428f (0 MiB, fresh) + 1 | 00001032 | 00001024 SST | [==================================================================================================] | 000d168784b3a904-fffe2cca550ad65f (1 MiB, fresh) +Time 2026-02-27T22:14:07.6307994Z +Commit 00001038 4 keys in 7ms 703µs 600ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00001036 | 00001035 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00001037 | 00001033 SST | O | 3ffdfb3b7d50fcf1-3ffdfb3b7d50fcf1 (0 MiB, fresh) + 2 | 00001038 | 00001034 SST | O | 3ffdfb3b7d50fcf1-3ffdfb3b7d50fcf1 (0 MiB, fresh) +Time 2026-02-27T22:15:52.6976739Z +Commit 00001048 339 keys in 10ms 103µs 600ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00001044 | 00001041 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00001045 | 00001040 SST | [=================================================================================================] | 03dcd96dc93a306c-fecc2220305b5a71 (0 MiB, fresh) + 2 | 00001046 | 00001039 SST | [=================================================================================================] | 03dcd96dc93a306c-fecc2220305b5a71 (0 MiB, fresh) + 3 | 00001047 | 00001042 SST | [======================================================================================] | 0c349a7f26c760da-eb2f27ea027d9236 (0 MiB, fresh) + 4 | 00001048 | 00001043 SST | [=================================================================] | 0a619c91e90380e8-b43e5635fd5dd62e (0 MiB, fresh) +Time 2026-02-27T22:16:20.5396837Z +Commit 00001058 6135 keys in 9ms 925µs +FAM | META SEQ | SST SEQ | RANGE + 0 | 00001054 | 00001051 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 4 | 00001055 | 00001053 SST | [==================================================================================================] | 0039ff5f24cca69a-ff3d8bc9782cb3df (0 MiB, fresh) + 2 | 00001056 | 00001050 SST | [==================================================================================================] | 001159b6a37810de-fff49d0b9a706a34 (2 MiB, fresh) + 3 | 00001057 | 00001052 SST | [==================================================================================================] | 000b5ce4c257b199-ffd35273cf3f35b8 (0 MiB, fresh) + 1 | 00001058 | 00001049 SST | [==================================================================================================] | 001159b6a37810de-fff49d0b9a706a34 (0 MiB, fresh) + 2 | 00001061 | Compaction: + 2 | 00001061 | MERGE (27612 keys): + 2 | 00001061 | 00000616 INPUT | [==========================================================] | 5763b81b2f19688b-ef311d8b965c9633 + 2 | 00001061 | 00000622 INPUT | O | b294a4237ccef201-b294a4237ccef201 + 2 | 00001061 | 00000628 INPUT | O | b294a4237ccef201-b294a4237ccef201 + 2 | 00001061 | 00000634 INPUT | O | b294a4237ccef201-b294a4237ccef201 + 2 | 00001061 | 00000639 INPUT | [=================================================================] | 46a49451131614a3-ef311d8b965c9633 + 2 | 00001061 | 00000646 INPUT | O | b294a4237ccef201-b294a4237ccef201 + 2 | 00001061 | 00000651 INPUT | [=================================================================================================] | 00431eb00a999d62-fbe1ccba49ffaeda + 2 | 00001061 | 00000658 INPUT | [===============================================================================================] | 0193e3c26e3b29ea-f6074fb7b9409f3b + 2 | 00001061 | 00000668 INPUT | [==========================================================] | 5763b81b2f19688b-ef311d8b965c9633 + 2 | 00001061 | 00000673 INPUT | [============================================================================================] | 06628945200f2f5d-f3604e3d46699c39 + 2 | 00001061 | 00000680 INPUT | O | b294a4237ccef201-b294a4237ccef201 + 2 | 00001061 | 00000686 INPUT | [========================================================================================] | 11dbba9c647f7f2d-f58ec977f9bb9eb7 + 2 | 00001061 | 00000691 INPUT | [===============================================================================================] | 03f950ee46c47561-f9536fe94f66077d + 2 | 00001061 | 00000697 INPUT | [==========================================================================================] | 11dbba9c647f7f2d-f9536fe94f66077d + 2 | 00001061 | 00000704 INPUT | [========================================================================================] | 11dbba9c647f7f2d-f58ec977f9bb9eb7 + 2 | 00001061 | 00000709 INPUT | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa + 2 | 00001061 | 00000720 INPUT | [==================================================================================] | 1a484549d42c4b3f-ef311d8b965c9633 + 2 | 00001061 | 00000726 INPUT | [====================================================================] | 3ffdfb3b7d50fcf1-ef311d8b965c9633 + 2 | 00001061 | 00000732 INPUT | O | b294a4237ccef201-b294a4237ccef201 + 2 | 00001061 | 00000738 INPUT | O | 3ffdfb3b7d50fcf1-3ffdfb3b7d50fcf1 + 2 | 00001061 | 00000743 INPUT | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa + 2 | 00001061 | 00000749 INPUT | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa + 2 | 00001061 | 00000755 INPUT | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa + 2 | 00001061 | 00000762 INPUT | O | b294a4237ccef201-b294a4237ccef201 + 2 | 00001061 | 00000768 INPUT | [==================================================================================================] | 00eac999f8125084-ffe64bbd36bacfc8 + 2 | 00001061 | 00000778 INPUT | O | 3ffdfb3b7d50fcf1-3ffdfb3b7d50fcf1 + 2 | 00001061 | 00000783 INPUT | [==================================================================================================] | 009342c7e4d63035-ffd3d02202c1f375 + 2 | 00001061 | 00000790 INPUT | [==================================================================================] | 1a484549d42c4b3f-ef311d8b965c9633 + 2 | 00001061 | 00000795 INPUT | [==================================================================================================] | 0079297cb331b81a-ff66a0b34ab7d342 + 2 | 00001061 | 00000806 INPUT | [=============================================================================================] | 0e32f06d40b4847e-fdac997cbf24ab54 + 2 | 00001061 | 00000811 INPUT | [==================================================================================================] | 000d168784b3a904-fff73bb502d5418e + 2 | 00001061 | 00000822 INPUT | O | b294a4237ccef201-b294a4237ccef201 + 2 | 00001061 | 00000828 INPUT | O | b294a4237ccef201-b294a4237ccef201 + 2 | 00001061 | 00000834 INPUT | O | b294a4237ccef201-b294a4237ccef201 + 2 | 00001061 | 00000840 INPUT | O | b294a4237ccef201-b294a4237ccef201 + 2 | 00001061 | 00000846 INPUT | O | b294a4237ccef201-b294a4237ccef201 + 2 | 00001061 | 00000851 INPUT | [==================================================================================================] | 015aa7af8c46be57-ff1373558b528b52 + 2 | 00001061 | 00000858 INPUT | [===================================================================================] | 1ade4652a63b3e8b-f0fcc058ca80fdac + 2 | 00001061 | 00000863 INPUT | [================================================================================================] | 06e01713f457bea1-ff61701500c2a61b + 2 | 00001061 | 00000873 INPUT | [==============================================================================================] | 0cbd3a02dfa51a3b-ff44163a2f4ddb88 + 2 | 00001061 | 00000880 INPUT | [=================================================================================================] | 033155d55f9205e6-fde1fb32301a48a2 + 2 | 00001061 | 00000886 INPUT | O | b294a4237ccef201-b294a4237ccef201 + 2 | 00001061 | 00000892 INPUT | [==========================================================================================] | 06628945200f2f5d-ef311d8b965c9633 + 2 | 00001061 | 00000897 INPUT | [==================================================================================================] | 015aa7af8c46be57-ff1373558b528b52 + 2 | 00001061 | 00000904 INPUT | [==================================================================================================] | 009d9e83167ab7a4-ff61701500c2a61b + 2 | 00001061 | 00000913 INPUT | [==================================================] | 432bea7d5b140db2-c5c647feca328c20 + 2 | 00001061 | 00000920 INPUT | O | 1294d01d65ce2471-1294d01d65ce2471 + 2 | 00001061 | 00000925 INPUT | [==================================] | 51397423a6488881-ab76866d92a46f02 + 2 | 00001061 | 00000932 INPUT | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa + 2 | 00001061 | 00000941 INPUT | [=============================================================================================] | 016409dcc3e1f6df-f15a28aad14562f0 + 2 | 00001061 | 00000947 INPUT | [==================================================================================================] | 000bd3f15bd5aba7-ff5042d908821139 + 2 | 00001061 | 00000953 INPUT | [==================================================================================================] | 000d168784b3a904-fff068465974022c + 2 | 00001061 | 00000963 INPUT | [==================================================================================================] | 000bd3f15bd5aba7-fff73bb502d5418e + 2 | 00001061 | 00000974 INPUT | [==================================================================================================] | 000d168784b3a904-fff068465974022c + 2 | 00001061 | 00000983 INPUT | [=================================================================================================] | 0315bd6ef0760e1f-ff1373558b528b52 + 2 | 00001061 | 00000989 INPUT | [=================================================================================================] | 015aa7af8c46be57-fcc735cb29041d9f + 2 | 00001061 | 00000995 INPUT | [============================] | 3d8512a47aa1edaf-888e85a42c3776c9 + 2 | 00001061 | 00001002 INPUT | [==================================] | 51397423a6488881-ab76866d92a46f02 + 2 | 00001061 | 00001007 INPUT | [========================================================================] | 126fbbc5d8ff7a79-cf5949b82c014010 + 2 | 00001061 | 00001013 INPUT | [==================================================================================================] | 000358d0de9d25d6-fffdad0e4861d73a + 2 | 00001061 | 00001023 INPUT | [==================================================================================================] | 000d168784b3a904-ffd966598c8595fa + 2 | 00001061 | 00001034 INPUT | O | 3ffdfb3b7d50fcf1-3ffdfb3b7d50fcf1 + 2 | 00001061 | 00001039 INPUT | [=================================================================================================] | 03dcd96dc93a306c-fecc2220305b5a71 + 2 | 00001061 | 00001050 INPUT | [==================================================================================================] | 001159b6a37810de-fff49d0b9a706a34 + 2 | 00001061 | 00001060 OUTPUT | [==================================================================================================] | 00078b2aad45711c-fffdad0e4861d73a (cold) + 2 | 00001061 | 00001059 OUTPUT | [==================================================================================================] | 000358d0de9d25d6-fff73bb502d5418e (warm) +Time 2026-02-27T22:16:20.6464564Z +Commit 00001062 27612 keys in 32ms 658µs 200ns +FAM | META SEQ | SST SEQ | RANGE + 2 | 00001061 | 00001060 SST | [==================================================================================================] | 00078b2aad45711c-fffdad0e4861d73a (7 MiB, cold) + 2 | 00001061 | 00001059 SST | [==================================================================================================] | 000358d0de9d25d6-fff73bb502d5418e (13 MiB, warm) + 2 | 00001061 | 00000616 00000622 00000628 00000634 00000639 00000646 00000651 00000658 00000668 00000673 00000680 00000686 00000691 00000697 00000704 OBSOLETE SST + 2 | 00001061 | 00000709 00000720 00000726 00000732 00000738 00000743 00000749 00000755 00000762 00000768 00000778 00000783 00000790 00000795 00000806 OBSOLETE SST + 2 | 00001061 | 00000811 00000822 00000828 00000834 00000840 00000846 00000851 00000858 00000863 00000873 00000880 00000886 00000892 00000897 00000904 OBSOLETE SST + 2 | 00001061 | 00000913 00000920 00000925 00000932 00000941 00000947 00000953 00000963 00000974 00000983 00000989 00000995 00001002 00001007 00001013 OBSOLETE SST + 2 | 00001061 | 00001023 00001034 00001039 00001050 OBSOLETE SST + | | 00000616 00000622 00000628 00000634 00000639 00000646 00000651 00000658 00000668 00000673 00000680 00000686 00000691 00000697 00000704 SST DELETED + | | 00000709 00000720 00000726 00000732 00000738 00000743 00000749 00000755 00000762 00000768 00000778 00000783 00000790 00000795 00000806 SST DELETED + | | 00000811 00000822 00000828 00000834 00000840 00000846 00000851 00000858 00000863 00000873 00000880 00000886 00000892 00000897 00000904 SST DELETED + | | 00000913 00000920 00000925 00000932 00000941 00000947 00000953 00000963 00000974 00000983 00000989 00000995 00001002 00001007 00001013 SST DELETED + | | 00001023 00001034 00001039 00001050 SST DELETED + | | 00000620 00000626 00000632 00000638 00000644 00000650 00000655 00000664 00000672 00000678 00000684 00000690 00000696 00000702 00000708 META DELETED + | | 00000716 00000724 00000730 00000736 00000742 00000748 00000754 00000760 00000766 00000773 00000782 00000788 00000794 00000802 00000810 META DELETED + | | 00000820 00000825 00000832 00000838 00000843 00000850 00000855 00000862 00000870 00000878 00000884 00000890 00000896 00000901 00000910 META DELETED + | | 00000918 00000924 00000930 00000937 00000946 00000951 00000959 00000971 00000980 00000987 00000994 00001000 00001006 00001012 00001021 META DELETED + | | 00001030 00001038 00001046 00001056 META DELETED +Time 2026-02-27T22:17:15.8629472Z +Commit 00001068 4 keys in 15ms 150µs 100ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00001066 | 00001065 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00001067 | 00001063 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) + 2 | 00001068 | 00001064 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) +Time 2026-02-27T22:21:11.2655543Z +Commit 00001074 4 keys in 17ms 6µs 300ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00001072 | 00001071 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 2 | 00001073 | 00001070 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) + 1 | 00001074 | 00001069 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) +Time 2026-02-27T22:22:30.1436003Z +Commit 00001080 4 keys in 6ms 719µs 200ns +FAM | META SEQ | SST SEQ | RANGE + 0 | 00001078 | 00001077 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00001079 | 00001075 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) + 2 | 00001080 | 00001076 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) +Time 2026-02-27T22:23:41.397719Z +Commit 00001086 4 keys in 6ms 702µs +FAM | META SEQ | SST SEQ | RANGE + 0 | 00001084 | 00001083 SST | [=======================================================================] | 3aefa6fd5cf2deb4-f42f94001fcb5351 (0 MiB, fresh) + 1 | 00001085 | 00001081 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) + 2 | 00001086 | 00001082 SST | O | b294a4237ccef201-b294a4237ccef201 (0 MiB, fresh) diff --git a/.next/dev/prerender-manifest.json b/.next/dev/prerender-manifest.json index 9ab94c4..1ef39a4 100644 --- a/.next/dev/prerender-manifest.json +++ b/.next/dev/prerender-manifest.json @@ -4,8 +4,8 @@ "dynamicRoutes": {}, "notFoundRoutes": [], "preview": { - "previewModeId": "7a45a941e4d22df88ad9355f3991ab6d", - "previewModeSigningKey": "2835bcf805d69d3ea501de6e9e8215ed6e476c92e3ce1b39d4c7154490c5d9cd", - "previewModeEncryptionKey": "be1f0a8fe5a7df32e766951bb0286021153e859bf5affb5871269998a3fcdadd" + "previewModeId": "a5ff04373568f8dfa89f5541b80f2935", + "previewModeSigningKey": "2b0018d3eaa31eeed67538d28afe4bfa7f66d57b8a2348421bb8a3837addb402", + "previewModeEncryptionKey": "553a3f71589831fc06cdc67a076ecfc594777a8dbcadba910eef5fe42f0bcadb" } } \ No newline at end of file diff --git a/.next/dev/server/app-paths-manifest.json b/.next/dev/server/app-paths-manifest.json index c3c484f..61a5ec4 100644 --- a/.next/dev/server/app-paths-manifest.json +++ b/.next/dev/server/app-paths-manifest.json @@ -1,11 +1,12 @@ { - "/api/ai/generate/route": "app/api/ai/generate/route.js", "/api/auth/[...nextauth]/route": "app/api/auth/[...nextauth]/route.js", + "/api/entities/route": "app/api/entities/route.js", "/api/projects/[id]/route": "app/api/projects/[id]/route.js", "/api/projects/route": "app/api/projects/route.js", "/api/user/profile/route": "app/api/user/profile/route.js", "/dashboard/page": "app/dashboard/page.js", "/login/page": "app/login/page.js", "/page": "app/page.js", - "/project/[id]/page": "app/project/[id]/page.js" + "/project/[id]/page": "app/project/[id]/page.js", + "/project/[id]/world/page": "app/project/[id]/world/page.js" } \ No newline at end of file diff --git a/.next/dev/server/chunks/[root-of-the-server]__43f27a2c._.js b/.next/dev/server/chunks/[root-of-the-server]__43f27a2c._.js index ae53b82..e910af7 100644 --- a/.next/dev/server/chunks/[root-of-the-server]__43f27a2c._.js +++ b/.next/dev/server/chunks/[root-of-the-server]__43f27a2c._.js @@ -206,8 +206,11 @@ async function GET() { const user = await prisma.user.findUnique({ where: { id: session.user.id + }, + include: { + subscriptionPlan: true } - }); + }); // Bypass Prisma type cache if (!user) { return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({ error: 'Utilisateur non trouvé' @@ -230,13 +233,24 @@ async function GET() { const text = (chapter.content || '').replace(/<[^>]*>/g, ' ').trim(); return total + (text ? text.split(/\s+/).length : 0); }, 0); - return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({ + const response = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({ id: user.id, email: user.email, name: user.name, avatar: user.avatar, bio: user.bio, - plan: user.plan, + plan: user.planId || user.plan || 'free', + planDetails: user.subscriptionPlan ? { + id: user.subscriptionPlan.id, + name: user.subscriptionPlan.name, + displayName: user.subscriptionPlan.displayName, + price: user.subscriptionPlan.price, + description: user.subscriptionPlan.description, + features: user.subscriptionPlan.features, + maxProjects: user.subscriptionPlan.maxProjects, + maxAiActions: user.subscriptionPlan.maxAiActions, + isPopular: user.subscriptionPlan.isPopular + } : undefined, aiActionsUsed: user.aiActionsUsed, dailyWordGoal: user.dailyWordGoal, writingStreak: user.writingStreak, @@ -244,6 +258,8 @@ async function GET() { createdAt: user.createdAt, totalWords }); + response.headers.set('Cache-Control', 'no-store, max-age=0'); + return response; } async function PUT(request) { const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["auth"])(); diff --git a/.next/dev/server/chunks/[root-of-the-server]__43f27a2c._.js.map b/.next/dev/server/chunks/[root-of-the-server]__43f27a2c._.js.map index b8c6193..9526ddd 100644 --- a/.next/dev/server/chunks/[root-of-the-server]__43f27a2c._.js.map +++ b/.next/dev/server/chunks/[root-of-the-server]__43f27a2c._.js.map @@ -4,5 +4,5 @@ "sections": [ {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/auth.ts"],"sourcesContent":["import NextAuth from 'next-auth';\r\nimport Credentials from 'next-auth/providers/credentials';\r\nimport bcrypt from 'bcryptjs';\r\n\r\nexport const { handlers, signIn, signOut, auth } = NextAuth({\r\n providers: [\r\n Credentials({\r\n name: 'credentials',\r\n credentials: {\r\n email: { label: 'Email', type: 'email' },\r\n password: { label: 'Password', type: 'password' },\r\n },\r\n async authorize(credentials) {\r\n if (!credentials?.email || !credentials?.password) return null;\r\n\r\n // Lazy import to avoid PrismaClient initialization during build\r\n const { default: getDB } = await import('./prisma');\r\n const prisma = getDB();\r\n\r\n const user = await prisma.user.findUnique({\r\n where: { email: credentials.email as string },\r\n });\r\n\r\n if (!user) return null;\r\n\r\n const isValid = await bcrypt.compare(\r\n credentials.password as string,\r\n user.hashedPassword\r\n );\r\n\r\n if (!isValid) return null;\r\n\r\n return {\r\n id: user.id,\r\n email: user.email,\r\n name: user.name,\r\n };\r\n },\r\n }),\r\n ],\r\n session: {\r\n strategy: 'jwt',\r\n },\r\n callbacks: {\r\n async jwt({ token, user }) {\r\n if (user) {\r\n token.id = user.id;\r\n }\r\n return token;\r\n },\r\n async session({ session, token }) {\r\n if (session.user && token.id) {\r\n session.user.id = token.id as string;\r\n }\r\n return session;\r\n },\r\n },\r\n pages: {\r\n signIn: '/',\r\n },\r\n});\r\n"],"names":[],"mappings":";;;;;;;;;;AAAA;AACA;AAAA;AACA;;;;AAEO,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAA,8MAAQ,EAAC;IACxD,WAAW;QACP,IAAA,mNAAW,EAAC;YACR,MAAM;YACN,aAAa;gBACT,OAAO;oBAAE,OAAO;oBAAS,MAAM;gBAAQ;gBACvC,UAAU;oBAAE,OAAO;oBAAY,MAAM;gBAAW;YACpD;YACA,MAAM,WAAU,WAAW;gBACvB,IAAI,CAAC,aAAa,SAAS,CAAC,aAAa,UAAU,OAAO;gBAE1D,gEAAgE;gBAChE,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG;gBAC3B,MAAM,SAAS;gBAEf,MAAM,OAAO,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC;oBACtC,OAAO;wBAAE,OAAO,YAAY,KAAK;oBAAW;gBAChD;gBAEA,IAAI,CAAC,MAAM,OAAO;gBAElB,MAAM,UAAU,MAAM,0LAAM,CAAC,OAAO,CAChC,YAAY,QAAQ,EACpB,KAAK,cAAc;gBAGvB,IAAI,CAAC,SAAS,OAAO;gBAErB,OAAO;oBACH,IAAI,KAAK,EAAE;oBACX,OAAO,KAAK,KAAK;oBACjB,MAAM,KAAK,IAAI;gBACnB;YACJ;QACJ;KACH;IACD,SAAS;QACL,UAAU;IACd;IACA,WAAW;QACP,MAAM,KAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YACrB,IAAI,MAAM;gBACN,MAAM,EAAE,GAAG,KAAK,EAAE;YACtB;YACA,OAAO;QACX;QACA,MAAM,SAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;YAC5B,IAAI,QAAQ,IAAI,IAAI,MAAM,EAAE,EAAE;gBAC1B,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;YAC9B;YACA,OAAO;QACX;IACJ;IACA,OAAO;QACH,QAAQ;IACZ;AACJ"}}, {"offset": {"line": 137, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/prisma.ts"],"sourcesContent":["import { PrismaClient } from '@prisma/client';\r\nimport { PrismaPg } from '@prisma/adapter-pg';\r\nimport { Pool } from 'pg';\r\n\r\nconst globalForPrisma = globalThis as unknown as {\r\n prisma: PrismaClient | undefined;\r\n};\r\n\r\n/**\r\n * Returns a singleton PrismaClient instance using the Prisma v7 adapter pattern.\r\n * Uses @prisma/adapter-pg with a pg Pool for direct PostgreSQL connections.\r\n */\r\nexport function getDB(): PrismaClient {\r\n if (!globalForPrisma.prisma) {\r\n const connectionString = process.env.DATABASE_URL;\r\n const pool = new Pool({ connectionString });\r\n const adapter = new PrismaPg(pool);\r\n\r\n globalForPrisma.prisma = new PrismaClient({ adapter });\r\n }\r\n return globalForPrisma.prisma;\r\n}\r\n\r\nexport default getDB;\r\n"],"names":[],"mappings":";;;;;;AAAA;AACA;AACA;;;;;;;;;AAEA,MAAM,kBAAkB;AAQjB,SAAS;IACZ,IAAI,CAAC,gBAAgB,MAAM,EAAE;QACzB,MAAM,mBAAmB,QAAQ,GAAG,CAAC,YAAY;QACjD,MAAM,OAAO,IAAI,iMAAI,CAAC;YAAE;QAAiB;QACzC,MAAM,UAAU,IAAI,qNAAQ,CAAC;QAE7B,gBAAgB,MAAM,GAAG,IAAI,kPAAY,CAAC;YAAE;QAAQ;IACxD;IACA,OAAO,gBAAgB,MAAM;AACjC;uCAEe"}}, - {"offset": {"line": 176, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/api/user/profile/route.ts"],"sourcesContent":["export const dynamic = 'force-dynamic';\r\n\r\nimport { NextRequest, NextResponse } from 'next/server';\r\nimport { auth } from '@/lib/auth';\r\nimport getDB from '@/lib/prisma';\r\n\r\n// GET /api/user/profile — Get current user profile with stats\r\nexport async function GET() {\r\n const session = await auth();\r\n if (!session?.user?.id) {\r\n return NextResponse.json({ error: 'Non autorisé' }, { status: 401 });\r\n }\r\n\r\n const prisma = getDB();\r\n const user = await prisma.user.findUnique({\r\n where: { id: session.user.id },\r\n });\r\n\r\n if (!user) {\r\n return NextResponse.json({ error: 'Utilisateur non trouvé' }, { status: 404 });\r\n }\r\n\r\n // Compute total word count from all chapters content\r\n const chapters = await prisma.chapter.findMany({\r\n where: { project: { userId: session.user.id } },\r\n select: { content: true },\r\n });\r\n\r\n const totalWords = chapters.reduce((total, chapter) => {\r\n const text = (chapter.content || '').replace(/<[^>]*>/g, ' ').trim();\r\n return total + (text ? text.split(/\\s+/).length : 0);\r\n }, 0);\r\n\r\n return NextResponse.json({\r\n id: user.id,\r\n email: user.email,\r\n name: user.name,\r\n avatar: user.avatar,\r\n bio: user.bio,\r\n plan: user.plan,\r\n aiActionsUsed: user.aiActionsUsed,\r\n dailyWordGoal: user.dailyWordGoal,\r\n writingStreak: user.writingStreak,\r\n lastWriteDate: user.lastWriteDate,\r\n createdAt: user.createdAt,\r\n totalWords,\r\n });\r\n}\r\n\r\n// PUT /api/user/profile — Update user profile\r\nexport async function PUT(request: NextRequest) {\r\n const session = await auth();\r\n if (!session?.user?.id) {\r\n return NextResponse.json({ error: 'Non autorisé' }, { status: 401 });\r\n }\r\n\r\n const prisma = getDB();\r\n const body = await request.json();\r\n\r\n const data: Record = {};\r\n if (body.name !== undefined) data.name = body.name;\r\n if (body.avatar !== undefined) data.avatar = body.avatar;\r\n if (body.bio !== undefined) data.bio = body.bio;\r\n if (body.dailyWordGoal !== undefined) data.dailyWordGoal = body.dailyWordGoal;\r\n if (body.writingStreak !== undefined) data.writingStreak = body.writingStreak;\r\n if (body.lastWriteDate !== undefined) data.lastWriteDate = body.lastWriteDate ? new Date(body.lastWriteDate) : null;\r\n\r\n const updated = await prisma.user.update({\r\n where: { id: session.user.id },\r\n data,\r\n });\r\n\r\n return NextResponse.json(updated);\r\n}\r\n"],"names":[],"mappings":";;;;;;;;AAEA;AACA;AACA;;;;;AAJO,MAAM,UAAU;;;;AAOhB,eAAe;IAClB,MAAM,UAAU,MAAM,IAAA,wKAAI;IAC1B,IAAI,CAAC,SAAS,MAAM,IAAI;QACpB,OAAO,4LAAY,CAAC,IAAI,CAAC;YAAE,OAAO;QAAe,GAAG;YAAE,QAAQ;QAAI;IACtE;IAEA,MAAM,SAAS,IAAA,6KAAK;IACpB,MAAM,OAAO,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC;QACtC,OAAO;YAAE,IAAI,QAAQ,IAAI,CAAC,EAAE;QAAC;IACjC;IAEA,IAAI,CAAC,MAAM;QACP,OAAO,4LAAY,CAAC,IAAI,CAAC;YAAE,OAAO;QAAyB,GAAG;YAAE,QAAQ;QAAI;IAChF;IAEA,qDAAqD;IACrD,MAAM,WAAW,MAAM,OAAO,OAAO,CAAC,QAAQ,CAAC;QAC3C,OAAO;YAAE,SAAS;gBAAE,QAAQ,QAAQ,IAAI,CAAC,EAAE;YAAC;QAAE;QAC9C,QAAQ;YAAE,SAAS;QAAK;IAC5B;IAEA,MAAM,aAAa,SAAS,MAAM,CAAC,CAAC,OAAO;QACvC,MAAM,OAAO,CAAC,QAAQ,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC,YAAY,KAAK,IAAI;QAClE,OAAO,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,MAAM,GAAG,CAAC;IACvD,GAAG;IAEH,OAAO,4LAAY,CAAC,IAAI,CAAC;QACrB,IAAI,KAAK,EAAE;QACX,OAAO,KAAK,KAAK;QACjB,MAAM,KAAK,IAAI;QACf,QAAQ,KAAK,MAAM;QACnB,KAAK,KAAK,GAAG;QACb,MAAM,KAAK,IAAI;QACf,eAAe,KAAK,aAAa;QACjC,eAAe,KAAK,aAAa;QACjC,eAAe,KAAK,aAAa;QACjC,eAAe,KAAK,aAAa;QACjC,WAAW,KAAK,SAAS;QACzB;IACJ;AACJ;AAGO,eAAe,IAAI,OAAoB;IAC1C,MAAM,UAAU,MAAM,IAAA,wKAAI;IAC1B,IAAI,CAAC,SAAS,MAAM,IAAI;QACpB,OAAO,4LAAY,CAAC,IAAI,CAAC;YAAE,OAAO;QAAe,GAAG;YAAE,QAAQ;QAAI;IACtE;IAEA,MAAM,SAAS,IAAA,6KAAK;IACpB,MAAM,OAAO,MAAM,QAAQ,IAAI;IAE/B,MAAM,OAAgC,CAAC;IACvC,IAAI,KAAK,IAAI,KAAK,WAAW,KAAK,IAAI,GAAG,KAAK,IAAI;IAClD,IAAI,KAAK,MAAM,KAAK,WAAW,KAAK,MAAM,GAAG,KAAK,MAAM;IACxD,IAAI,KAAK,GAAG,KAAK,WAAW,KAAK,GAAG,GAAG,KAAK,GAAG;IAC/C,IAAI,KAAK,aAAa,KAAK,WAAW,KAAK,aAAa,GAAG,KAAK,aAAa;IAC7E,IAAI,KAAK,aAAa,KAAK,WAAW,KAAK,aAAa,GAAG,KAAK,aAAa;IAC7E,IAAI,KAAK,aAAa,KAAK,WAAW,KAAK,aAAa,GAAG,KAAK,aAAa,GAAG,IAAI,KAAK,KAAK,aAAa,IAAI;IAE/G,MAAM,UAAU,MAAM,OAAO,IAAI,CAAC,MAAM,CAAC;QACrC,OAAO;YAAE,IAAI,QAAQ,IAAI,CAAC,EAAE;QAAC;QAC7B;IACJ;IAEA,OAAO,4LAAY,CAAC,IAAI,CAAC;AAC7B"}}] + {"offset": {"line": 176, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/api/user/profile/route.ts"],"sourcesContent":["export const dynamic = 'force-dynamic';\r\n\r\nimport { NextRequest, NextResponse } from 'next/server';\r\nimport { auth } from '@/lib/auth';\r\nimport getDB from '@/lib/prisma';\r\n\r\n// GET /api/user/profile — Get current user profile with stats\r\nexport async function GET() {\r\n const session = await auth();\r\n if (!session?.user?.id) {\r\n return NextResponse.json({ error: 'Non autorisé' }, { status: 401 });\r\n }\r\n\r\n const prisma = getDB();\r\n const user = await prisma.user.findUnique({\r\n where: { id: session.user.id },\r\n include: { subscriptionPlan: true }\r\n } as any) as any; // Bypass Prisma type cache\r\n\r\n if (!user) {\r\n return NextResponse.json({ error: 'Utilisateur non trouvé' }, { status: 404 });\r\n }\r\n\r\n // Compute total word count from all chapters content\r\n const chapters = await prisma.chapter.findMany({\r\n where: { project: { userId: session.user.id } },\r\n select: { content: true },\r\n });\r\n\r\n const totalWords = chapters.reduce((total, chapter) => {\r\n const text = (chapter.content || '').replace(/<[^>]*>/g, ' ').trim();\r\n return total + (text ? text.split(/\\s+/).length : 0);\r\n }, 0);\r\n\r\n const response = NextResponse.json({\r\n id: user.id,\r\n email: user.email,\r\n name: user.name,\r\n avatar: user.avatar,\r\n bio: user.bio,\r\n plan: user.planId || user.plan || 'free',\r\n planDetails: user.subscriptionPlan ? {\r\n id: user.subscriptionPlan.id,\r\n name: user.subscriptionPlan.name,\r\n displayName: user.subscriptionPlan.displayName,\r\n price: user.subscriptionPlan.price,\r\n description: user.subscriptionPlan.description,\r\n features: user.subscriptionPlan.features,\r\n maxProjects: user.subscriptionPlan.maxProjects,\r\n maxAiActions: user.subscriptionPlan.maxAiActions,\r\n isPopular: user.subscriptionPlan.isPopular\r\n } : undefined,\r\n aiActionsUsed: user.aiActionsUsed,\r\n dailyWordGoal: user.dailyWordGoal,\r\n writingStreak: user.writingStreak,\r\n lastWriteDate: user.lastWriteDate,\r\n createdAt: user.createdAt,\r\n totalWords,\r\n });\r\n response.headers.set('Cache-Control', 'no-store, max-age=0');\r\n return response;\r\n}\r\n\r\n// PUT /api/user/profile — Update user profile\r\nexport async function PUT(request: NextRequest) {\r\n const session = await auth();\r\n if (!session?.user?.id) {\r\n return NextResponse.json({ error: 'Non autorisé' }, { status: 401 });\r\n }\r\n\r\n const prisma = getDB();\r\n const body = await request.json();\r\n\r\n const data: Record = {};\r\n if (body.name !== undefined) data.name = body.name;\r\n if (body.avatar !== undefined) data.avatar = body.avatar;\r\n if (body.bio !== undefined) data.bio = body.bio;\r\n if (body.dailyWordGoal !== undefined) data.dailyWordGoal = body.dailyWordGoal;\r\n if (body.writingStreak !== undefined) data.writingStreak = body.writingStreak;\r\n if (body.lastWriteDate !== undefined) data.lastWriteDate = body.lastWriteDate ? new Date(body.lastWriteDate) : null;\r\n\r\n const updated = await prisma.user.update({\r\n where: { id: session.user.id },\r\n data,\r\n });\r\n\r\n return NextResponse.json(updated);\r\n}\r\n"],"names":[],"mappings":"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"}}] } \ No newline at end of file diff --git a/.next/dev/server/chunks/[root-of-the-server]__630db118._.js b/.next/dev/server/chunks/[root-of-the-server]__630db118._.js index 6a631f9..5fd6c34 100644 --- a/.next/dev/server/chunks/[root-of-the-server]__630db118._.js +++ b/.next/dev/server/chunks/[root-of-the-server]__630db118._.js @@ -453,11 +453,6 @@ const dynamic = 'force-dynamic'; ; ; ; -const PLAN_AI_LIMITS = { - free: 100, - pro: 5000, - master: 999999 -}; async function POST(request) { try { const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["auth"])(); @@ -474,11 +469,10 @@ async function POST(request) { where: { id: session.user.id }, - select: { - plan: true, - aiActionsUsed: true + include: { + subscriptionPlan: true } - }); + }); // Bypass Prisma client types for this relation if (!dbUser) { return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({ error: 'Utilisateur non trouvé' @@ -486,10 +480,11 @@ async function POST(request) { status: 404 }); } - const limit = PLAN_AI_LIMITS[dbUser.plan] || PLAN_AI_LIMITS.free; - if (dbUser.aiActionsUsed >= limit) { + const limit = dbUser.subscriptionPlan?.maxAiActions ?? 100; + const planName = dbUser.subscriptionPlan?.displayName || 'Gratuit'; + if (limit !== -1 && dbUser.aiActionsUsed >= limit) { return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({ - error: `Limite de ${limit} actions IA atteinte pour le plan ${dbUser.plan}. Passez au plan supérieur !` + error: `Limite de ${limit} actions IA atteinte pour le plan ${planName}. Passez au plan supérieur !` }, { status: 403 }); diff --git a/.next/dev/server/chunks/[root-of-the-server]__630db118._.js.map b/.next/dev/server/chunks/[root-of-the-server]__630db118._.js.map index dfb894a..9d0e912 100644 --- a/.next/dev/server/chunks/[root-of-the-server]__630db118._.js.map +++ b/.next/dev/server/chunks/[root-of-the-server]__630db118._.js.map @@ -5,5 +5,5 @@ {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/auth.ts"],"sourcesContent":["import NextAuth from 'next-auth';\r\nimport Credentials from 'next-auth/providers/credentials';\r\nimport bcrypt from 'bcryptjs';\r\n\r\nexport const { handlers, signIn, signOut, auth } = NextAuth({\r\n providers: [\r\n Credentials({\r\n name: 'credentials',\r\n credentials: {\r\n email: { label: 'Email', type: 'email' },\r\n password: { label: 'Password', type: 'password' },\r\n },\r\n async authorize(credentials) {\r\n if (!credentials?.email || !credentials?.password) return null;\r\n\r\n // Lazy import to avoid PrismaClient initialization during build\r\n const { default: getDB } = await import('./prisma');\r\n const prisma = getDB();\r\n\r\n const user = await prisma.user.findUnique({\r\n where: { email: credentials.email as string },\r\n });\r\n\r\n if (!user) return null;\r\n\r\n const isValid = await bcrypt.compare(\r\n credentials.password as string,\r\n user.hashedPassword\r\n );\r\n\r\n if (!isValid) return null;\r\n\r\n return {\r\n id: user.id,\r\n email: user.email,\r\n name: user.name,\r\n };\r\n },\r\n }),\r\n ],\r\n session: {\r\n strategy: 'jwt',\r\n },\r\n callbacks: {\r\n async jwt({ token, user }) {\r\n if (user) {\r\n token.id = user.id;\r\n }\r\n return token;\r\n },\r\n async session({ session, token }) {\r\n if (session.user && token.id) {\r\n session.user.id = token.id as string;\r\n }\r\n return session;\r\n },\r\n },\r\n pages: {\r\n signIn: '/',\r\n },\r\n});\r\n"],"names":[],"mappings":";;;;;;;;;;AAAA;AACA;AAAA;AACA;;;;AAEO,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAA,8MAAQ,EAAC;IACxD,WAAW;QACP,IAAA,mNAAW,EAAC;YACR,MAAM;YACN,aAAa;gBACT,OAAO;oBAAE,OAAO;oBAAS,MAAM;gBAAQ;gBACvC,UAAU;oBAAE,OAAO;oBAAY,MAAM;gBAAW;YACpD;YACA,MAAM,WAAU,WAAW;gBACvB,IAAI,CAAC,aAAa,SAAS,CAAC,aAAa,UAAU,OAAO;gBAE1D,gEAAgE;gBAChE,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG;gBAC3B,MAAM,SAAS;gBAEf,MAAM,OAAO,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC;oBACtC,OAAO;wBAAE,OAAO,YAAY,KAAK;oBAAW;gBAChD;gBAEA,IAAI,CAAC,MAAM,OAAO;gBAElB,MAAM,UAAU,MAAM,0LAAM,CAAC,OAAO,CAChC,YAAY,QAAQ,EACpB,KAAK,cAAc;gBAGvB,IAAI,CAAC,SAAS,OAAO;gBAErB,OAAO;oBACH,IAAI,KAAK,EAAE;oBACX,OAAO,KAAK,KAAK;oBACjB,MAAM,KAAK,IAAI;gBACnB;YACJ;QACJ;KACH;IACD,SAAS;QACL,UAAU;IACd;IACA,WAAW;QACP,MAAM,KAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YACrB,IAAI,MAAM;gBACN,MAAM,EAAE,GAAG,KAAK,EAAE;YACtB;YACA,OAAO;QACX;QACA,MAAM,SAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;YAC5B,IAAI,QAAQ,IAAI,IAAI,MAAM,EAAE,EAAE;gBAC1B,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;YAC9B;YACA,OAAO;QACX;IACJ;IACA,OAAO;QACH,QAAQ;IACZ;AACJ"}}, {"offset": {"line": 137, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/prisma.ts"],"sourcesContent":["import { PrismaClient } from '@prisma/client';\r\nimport { PrismaPg } from '@prisma/adapter-pg';\r\nimport { Pool } from 'pg';\r\n\r\nconst globalForPrisma = globalThis as unknown as {\r\n prisma: PrismaClient | undefined;\r\n};\r\n\r\n/**\r\n * Returns a singleton PrismaClient instance using the Prisma v7 adapter pattern.\r\n * Uses @prisma/adapter-pg with a pg Pool for direct PostgreSQL connections.\r\n */\r\nexport function getDB(): PrismaClient {\r\n if (!globalForPrisma.prisma) {\r\n const connectionString = process.env.DATABASE_URL;\r\n const pool = new Pool({ connectionString });\r\n const adapter = new PrismaPg(pool);\r\n\r\n globalForPrisma.prisma = new PrismaClient({ adapter });\r\n }\r\n return globalForPrisma.prisma;\r\n}\r\n\r\nexport default getDB;\r\n"],"names":[],"mappings":";;;;;;AAAA;AACA;AACA;;;;;;;;;AAEA,MAAM,kBAAkB;AAQjB,SAAS;IACZ,IAAI,CAAC,gBAAgB,MAAM,EAAE;QACzB,MAAM,mBAAmB,QAAQ,GAAG,CAAC,YAAY;QACjD,MAAM,OAAO,IAAI,iMAAI,CAAC;YAAE;QAAiB;QACzC,MAAM,UAAU,IAAI,qNAAQ,CAAC;QAE7B,gBAAgB,MAAM,GAAG,IAAI,kPAAY,CAAC;YAAE;QAAQ;IACxD;IACA,OAAO,gBAAgB,MAAM;AACjC;uCAEe"}}, {"offset": {"line": 288, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/gemini.ts"],"sourcesContent":["// Server-only: Gemini AI service\r\n// This file is only imported by API routes, never by client code\r\n\r\nimport { GoogleGenAI, Type } from \"@google/genai\";\r\nimport { BookProject, UserProfile } from \"./types\";\r\n\r\nconst truncate = (str: string, length: number) => {\r\n if (!str) return \"\";\r\n return str.length > length ? str.substring(0, length) + \"...\" : str;\r\n};\r\n\r\nconst checkUsage = (user: UserProfile) => {\r\n if (user.subscription.plan === 'master') return true;\r\n return user.usage.aiActionsCurrent < user.usage.aiActionsLimit;\r\n};\r\n\r\nconst buildContextPrompt = (project: BookProject, currentChapterId: string, instruction: string) => {\r\n const currentChapterIndex = project.chapters.findIndex(c => c.id === currentChapterId);\r\n const previousSummaries = project.chapters\r\n .slice(0, currentChapterIndex)\r\n .map((c, i) => `Chapitre ${i + 1} (${c.title}): ${c.summary || truncate(c.content.replace(/<[^>]*>?/gm, ''), 200)}`)\r\n .join('\\n');\r\n\r\n const entitiesContext = project.entities\r\n .map(e => {\r\n const base = `[${e.type}] ${e.name}: ${truncate(e.description, 150)}`;\r\n const context = e.storyContext ? `\\n - VÉCU/ÉVOLUTION DANS L'HISTOIRE: ${truncate(e.storyContext, 500)}` : '';\r\n return base + context;\r\n })\r\n .join('\\n');\r\n\r\n const ideasContext = (project.ideas || [])\r\n .map(i => {\r\n const statusMap: Record = { todo: 'À FAIRE', progress: 'EN COURS', done: 'TERMINÉ' };\r\n return `[IDÉE - ${statusMap[i.status]}] ${i.title}: ${truncate(i.description, 100)}`;\r\n })\r\n .join('\\n');\r\n\r\n const currentContent = project.chapters[currentChapterIndex]?.content.replace(/<[^>]*>?/gm, '') || \"\";\r\n const s = project.settings;\r\n const settingsPrompt = s ? `\r\nPARAMÈTRES DU ROMAN:\r\n- Genre: ${s.genre} ${s.subGenre ? `(${s.subGenre})` : ''}\r\n- Public: ${s.targetAudience}\r\n- Ton: ${s.tone}\r\n- Narration: ${s.pov}\r\n- Temps: ${s.tense}\r\n- Thèmes: ${s.themes}\r\n- Synopsis Global: ${truncate(s.synopsis || '', 500)}\r\n` : \"\";\r\n\r\n return `\r\nTu es un assistant éditorial expert et un co-auteur créatif.\r\nL'utilisateur écrit un livre intitulé \"${project.title}\".\r\n\r\n${settingsPrompt}\r\n\r\nCONTEXTE DE L'HISTOIRE (Résumé des chapitres précédents):\r\n${previousSummaries || \"Aucun chapitre précédent.\"}\r\n\r\nBIBLE DU MONDE (Personnages et Lieux):\r\n${entitiesContext || \"Aucune fiche créée.\"}\r\n\r\nBOÎTE À IDÉES & NOTES (Pistes de l'auteur):\r\n${ideasContext || \"Aucune note.\"}\r\n\r\nCHAPITRE ACTUEL (Texte brut):\r\n${truncate(currentContent, 3000)}\r\n\r\nSTYLE D'ÉCRITURE SPÉCIFIQUE (Instruction de l'auteur):\r\n${project.styleGuide || \"Standard, neutre.\"}\r\n\r\nTA MISSION:\r\n${instruction}\r\n `;\r\n};\r\n\r\nexport const generateStoryContent = async (\r\n project: BookProject,\r\n currentChapterId: string,\r\n userPrompt: string,\r\n user: UserProfile,\r\n): Promise<{ text: string; type: 'draft' | 'reflection' }> => {\r\n if (!checkUsage(user)) {\r\n return { text: \"Limite d'actions IA atteinte pour ce mois. Passez au plan Pro !\", type: 'reflection' };\r\n }\r\n\r\n try {\r\n const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });\r\n const finalPrompt = buildContextPrompt(project, currentChapterId, userPrompt);\r\n\r\n const modelName = user.subscription.plan === 'master' ? 'gemini-3-pro-preview' : 'gemini-3-flash-preview';\r\n\r\n const response = await ai.models.generateContent({\r\n model: modelName,\r\n contents: finalPrompt,\r\n config: {\r\n temperature: 0.7,\r\n responseMimeType: \"application/json\",\r\n responseSchema: {\r\n type: Type.OBJECT,\r\n properties: {\r\n responseType: {\r\n type: Type.STRING,\r\n enum: [\"draft\", \"reflection\"]\r\n },\r\n content: {\r\n type: Type.STRING\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n const result = JSON.parse(response.text || \"{}\");\r\n return {\r\n text: result.content || \"Erreur de génération.\",\r\n type: result.responseType || \"reflection\"\r\n };\r\n } catch (error) {\r\n console.error(\"AI Generation Error:\", error);\r\n return { text: \"Erreur lors de la communication avec l'IA.\", type: 'reflection' };\r\n }\r\n};\r\n\r\nexport const transformTextServer = async (\r\n text: string,\r\n mode: 'correct' | 'rewrite' | 'expand' | 'continue',\r\n context: string,\r\n user: UserProfile,\r\n): Promise => {\r\n if (!checkUsage(user)) return \"Limite d'actions IA atteinte.\";\r\n try {\r\n const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });\r\n const prompt = `Action: ${mode}. Texte: ${text}. Contexte: ${truncate(context, 1000)}. Renvoie juste le texte transformé.`;\r\n const response = await ai.models.generateContent({ model: 'gemini-3-flash-preview', contents: prompt });\r\n return response.text?.trim() || text;\r\n } catch {\r\n return text;\r\n }\r\n};\r\n\r\nexport const analyzeStyle = async (_text: string) => \"Style analysé\";\r\nexport const summarizeText = async (_text: string) => \"Résumé généré\";\r\n"],"names":[],"mappings":";;;;;;;;;;AAAA,iCAAiC;AACjC,iEAAiE;AAEjE;;AAGA,MAAM,WAAW,CAAC,KAAa;IAC3B,IAAI,CAAC,KAAK,OAAO;IACjB,OAAO,IAAI,MAAM,GAAG,SAAS,IAAI,SAAS,CAAC,GAAG,UAAU,QAAQ;AACpE;AAEA,MAAM,aAAa,CAAC;IAChB,IAAI,KAAK,YAAY,CAAC,IAAI,KAAK,UAAU,OAAO;IAChD,OAAO,KAAK,KAAK,CAAC,gBAAgB,GAAG,KAAK,KAAK,CAAC,cAAc;AAClE;AAEA,MAAM,qBAAqB,CAAC,SAAsB,kBAA0B;IACxE,MAAM,sBAAsB,QAAQ,QAAQ,CAAC,SAAS,CAAC,CAAA,IAAK,EAAE,EAAE,KAAK;IACrE,MAAM,oBAAoB,QAAQ,QAAQ,CACrC,KAAK,CAAC,GAAG,qBACT,GAAG,CAAC,CAAC,GAAG,IAAM,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,IAAI,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,cAAc,KAAK,MAAM,EAClH,IAAI,CAAC;IAEV,MAAM,kBAAkB,QAAQ,QAAQ,CACnC,GAAG,CAAC,CAAA;QACD,MAAM,OAAO,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM;QACrE,MAAM,UAAU,EAAE,YAAY,GAAG,CAAC,uCAAuC,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG;QAC7G,OAAO,OAAO;IAClB,GACC,IAAI,CAAC;IAEV,MAAM,eAAe,CAAC,QAAQ,KAAK,IAAI,EAAE,EACpC,GAAG,CAAC,CAAA;QACD,MAAM,YAAoC;YAAE,MAAM;YAAW,UAAU;YAAY,MAAM;QAAU;QACnG,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM;IACxF,GACC,IAAI,CAAC;IAEV,MAAM,iBAAiB,QAAQ,QAAQ,CAAC,oBAAoB,EAAE,QAAQ,QAAQ,cAAc,OAAO;IACnG,MAAM,IAAI,QAAQ,QAAQ;IAC1B,MAAM,iBAAiB,IAAI,CAAC;;SAEvB,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG;UAChD,EAAE,EAAE,cAAc,CAAC;OACtB,EAAE,EAAE,IAAI,CAAC;aACH,EAAE,EAAE,GAAG,CAAC;SACZ,EAAE,EAAE,KAAK,CAAC;UACT,EAAE,EAAE,MAAM,CAAC;mBACF,EAAE,SAAS,EAAE,QAAQ,IAAI,IAAI,KAAK;AACrD,CAAC,GAAG;IAEA,OAAO,CAAC;;uCAE2B,EAAE,QAAQ,KAAK,CAAC;;AAEvD,EAAE,eAAe;;;AAGjB,EAAE,qBAAqB,4BAA4B;;;AAGnD,EAAE,mBAAmB,sBAAsB;;;AAG3C,EAAE,gBAAgB,eAAe;;;AAGjC,EAAE,SAAS,gBAAgB,MAAM;;;AAGjC,EAAE,QAAQ,UAAU,IAAI,oBAAoB;;;AAG5C,EAAE,YAAY;EACZ,CAAC;AACH;AAEO,MAAM,uBAAuB,OAChC,SACA,kBACA,YACA;IAEA,IAAI,CAAC,WAAW,OAAO;QACnB,OAAO;YAAE,MAAM;YAAmE,MAAM;QAAa;IACzG;IAEA,IAAI;QACA,MAAM,KAAK,IAAI,wNAAW,CAAC;YAAE,QAAQ,QAAQ,GAAG,CAAC,cAAc;QAAC;QAChE,MAAM,cAAc,mBAAmB,SAAS,kBAAkB;QAElE,MAAM,YAAY,KAAK,YAAY,CAAC,IAAI,KAAK,WAAW,yBAAyB;QAEjF,MAAM,WAAW,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC;YAC7C,OAAO;YACP,UAAU;YACV,QAAQ;gBACJ,aAAa;gBACb,kBAAkB;gBAClB,gBAAgB;oBACZ,MAAM,iNAAI,CAAC,MAAM;oBACjB,YAAY;wBACR,cAAc;4BACV,MAAM,iNAAI,CAAC,MAAM;4BACjB,MAAM;gCAAC;gCAAS;6BAAa;wBACjC;wBACA,SAAS;4BACL,MAAM,iNAAI,CAAC,MAAM;wBACrB;oBACJ;gBACJ;YACJ;QACJ;QAEA,MAAM,SAAS,KAAK,KAAK,CAAC,SAAS,IAAI,IAAI;QAC3C,OAAO;YACH,MAAM,OAAO,OAAO,IAAI;YACxB,MAAM,OAAO,YAAY,IAAI;QACjC;IACJ,EAAE,OAAO,OAAO;QACZ,QAAQ,KAAK,CAAC,wBAAwB;QACtC,OAAO;YAAE,MAAM;YAA8C,MAAM;QAAa;IACpF;AACJ;AAEO,MAAM,sBAAsB,OAC/B,MACA,MACA,SACA;IAEA,IAAI,CAAC,WAAW,OAAO,OAAO;IAC9B,IAAI;QACA,MAAM,KAAK,IAAI,wNAAW,CAAC;YAAE,QAAQ,QAAQ,GAAG,CAAC,cAAc;QAAC;QAChE,MAAM,SAAS,CAAC,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,SAAS,SAAS,MAAM,oCAAoC,CAAC;QAC1H,MAAM,WAAW,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC;YAAE,OAAO;YAA0B,UAAU;QAAO;QACrG,OAAO,SAAS,IAAI,EAAE,UAAU;IACpC,EAAE,OAAM;QACJ,OAAO;IACX;AACJ;AAEO,MAAM,eAAe,OAAO,QAAkB;AAC9C,MAAM,gBAAgB,OAAO,QAAkB"}}, - {"offset": {"line": 436, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/api/ai/generate/route.ts"],"sourcesContent":["export const dynamic = 'force-dynamic';\r\n\r\nimport { NextRequest, NextResponse } from 'next/server';\r\nimport { auth } from '@/lib/auth';\r\nimport getDB from '@/lib/prisma';\r\nimport { generateStoryContent } from '@/lib/gemini';\r\n\r\nconst PLAN_AI_LIMITS: Record = {\r\n free: 100,\r\n pro: 5000,\r\n master: 999999,\r\n};\r\n\r\nexport async function POST(request: NextRequest) {\r\n try {\r\n const session = await auth();\r\n if (!session?.user?.id) {\r\n return NextResponse.json({ error: 'Non autorisé' }, { status: 401 });\r\n }\r\n\r\n const prisma = getDB();\r\n\r\n // Check AI usage limit from DB\r\n const dbUser = await prisma.user.findUnique({\r\n where: { id: session.user.id },\r\n select: { plan: true, aiActionsUsed: true },\r\n });\r\n\r\n if (!dbUser) {\r\n return NextResponse.json({ error: 'Utilisateur non trouvé' }, { status: 404 });\r\n }\r\n\r\n const limit = PLAN_AI_LIMITS[dbUser.plan] || PLAN_AI_LIMITS.free;\r\n if (dbUser.aiActionsUsed >= limit) {\r\n return NextResponse.json(\r\n { error: `Limite de ${limit} actions IA atteinte pour le plan ${dbUser.plan}. Passez au plan supérieur !` },\r\n { status: 403 }\r\n );\r\n }\r\n\r\n const body = await request.json();\r\n const { project, chapterId, prompt, user } = body;\r\n\r\n if (!project || !prompt || !user) {\r\n return NextResponse.json(\r\n { error: 'Missing required fields: project, prompt, user' },\r\n { status: 400 }\r\n );\r\n }\r\n\r\n // Pass real plan from DB to gemini for model selection\r\n const userWithPlan = { ...user, subscription: { ...user.subscription, plan: dbUser.plan } };\r\n const result = await generateStoryContent(project, chapterId || '', prompt, userWithPlan);\r\n\r\n // Increment usage in DB\r\n await prisma.user.update({\r\n where: { id: session.user.id },\r\n data: { aiActionsUsed: { increment: 1 } },\r\n });\r\n\r\n return NextResponse.json({ ...result, aiActionsUsed: dbUser.aiActionsUsed + 1 });\r\n } catch (error) {\r\n console.error('AI generate error:', error);\r\n return NextResponse.json(\r\n { error: 'AI generation failed' },\r\n { status: 500 }\r\n );\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;;;AAEA;AACA;AACA;AACA;;;;;AALO,MAAM,UAAU;;;;;AAOvB,MAAM,iBAAyC;IAC3C,MAAM;IACN,KAAK;IACL,QAAQ;AACZ;AAEO,eAAe,KAAK,OAAoB;IAC3C,IAAI;QACA,MAAM,UAAU,MAAM,IAAA,wKAAI;QAC1B,IAAI,CAAC,SAAS,MAAM,IAAI;YACpB,OAAO,4LAAY,CAAC,IAAI,CAAC;gBAAE,OAAO;YAAe,GAAG;gBAAE,QAAQ;YAAI;QACtE;QAEA,MAAM,SAAS,IAAA,6KAAK;QAEpB,+BAA+B;QAC/B,MAAM,SAAS,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC;YACxC,OAAO;gBAAE,IAAI,QAAQ,IAAI,CAAC,EAAE;YAAC;YAC7B,QAAQ;gBAAE,MAAM;gBAAM,eAAe;YAAK;QAC9C;QAEA,IAAI,CAAC,QAAQ;YACT,OAAO,4LAAY,CAAC,IAAI,CAAC;gBAAE,OAAO;YAAyB,GAAG;gBAAE,QAAQ;YAAI;QAChF;QAEA,MAAM,QAAQ,cAAc,CAAC,OAAO,IAAI,CAAC,IAAI,eAAe,IAAI;QAChE,IAAI,OAAO,aAAa,IAAI,OAAO;YAC/B,OAAO,4LAAY,CAAC,IAAI,CACpB;gBAAE,OAAO,CAAC,UAAU,EAAE,MAAM,kCAAkC,EAAE,OAAO,IAAI,CAAC,4BAA4B,CAAC;YAAC,GAC1G;gBAAE,QAAQ;YAAI;QAEtB;QAEA,MAAM,OAAO,MAAM,QAAQ,IAAI;QAC/B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;QAE7C,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM;YAC9B,OAAO,4LAAY,CAAC,IAAI,CACpB;gBAAE,OAAO;YAAiD,GAC1D;gBAAE,QAAQ;YAAI;QAEtB;QAEA,uDAAuD;QACvD,MAAM,eAAe;YAAE,GAAG,IAAI;YAAE,cAAc;gBAAE,GAAG,KAAK,YAAY;gBAAE,MAAM,OAAO,IAAI;YAAC;QAAE;QAC1F,MAAM,SAAS,MAAM,IAAA,0LAAoB,EAAC,SAAS,aAAa,IAAI,QAAQ;QAE5E,wBAAwB;QACxB,MAAM,OAAO,IAAI,CAAC,MAAM,CAAC;YACrB,OAAO;gBAAE,IAAI,QAAQ,IAAI,CAAC,EAAE;YAAC;YAC7B,MAAM;gBAAE,eAAe;oBAAE,WAAW;gBAAE;YAAE;QAC5C;QAEA,OAAO,4LAAY,CAAC,IAAI,CAAC;YAAE,GAAG,MAAM;YAAE,eAAe,OAAO,aAAa,GAAG;QAAE;IAClF,EAAE,OAAO,OAAO;QACZ,QAAQ,KAAK,CAAC,sBAAsB;QACpC,OAAO,4LAAY,CAAC,IAAI,CACpB;YAAE,OAAO;QAAuB,GAChC;YAAE,QAAQ;QAAI;IAEtB;AACJ"}}] + {"offset": {"line": 436, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/api/ai/generate/route.ts"],"sourcesContent":["export const dynamic = 'force-dynamic';\r\n\r\nimport { NextRequest, NextResponse } from 'next/server';\r\nimport { auth } from '@/lib/auth';\r\nimport getDB from '@/lib/prisma';\r\nimport { generateStoryContent } from '@/lib/gemini';\r\n\r\n\r\n\r\nexport async function POST(request: NextRequest) {\r\n try {\r\n const session = await auth();\r\n if (!session?.user?.id) {\r\n return NextResponse.json({ error: 'Non autorisé' }, { status: 401 });\r\n }\r\n\r\n const prisma = getDB();\r\n\r\n // Check AI usage limit from DB\r\n const dbUser = await prisma.user.findUnique({\r\n where: { id: session.user.id },\r\n include: { subscriptionPlan: true },\r\n }) as any; // Bypass Prisma client types for this relation\r\n\r\n if (!dbUser) {\r\n return NextResponse.json({ error: 'Utilisateur non trouvé' }, { status: 404 });\r\n }\r\n\r\n const limit = dbUser.subscriptionPlan?.maxAiActions ?? 100;\r\n const planName = dbUser.subscriptionPlan?.displayName || 'Gratuit';\r\n\r\n if (limit !== -1 && dbUser.aiActionsUsed >= limit) {\r\n return NextResponse.json(\r\n { error: `Limite de ${limit} actions IA atteinte pour le plan ${planName}. Passez au plan supérieur !` },\r\n { status: 403 }\r\n );\r\n }\r\n\r\n const body = await request.json();\r\n const { project, chapterId, prompt, user } = body;\r\n\r\n if (!project || !prompt || !user) {\r\n return NextResponse.json(\r\n { error: 'Missing required fields: project, prompt, user' },\r\n { status: 400 }\r\n );\r\n }\r\n\r\n // Pass real plan from DB to gemini for model selection\r\n const userWithPlan = { ...user, subscription: { ...user.subscription, plan: dbUser.plan } };\r\n const result = await generateStoryContent(project, chapterId || '', prompt, userWithPlan);\r\n\r\n // Increment usage in DB\r\n await prisma.user.update({\r\n where: { id: session.user.id },\r\n data: { aiActionsUsed: { increment: 1 } },\r\n });\r\n\r\n return NextResponse.json({ ...result, aiActionsUsed: dbUser.aiActionsUsed + 1 });\r\n } catch (error) {\r\n console.error('AI generate error:', error);\r\n return NextResponse.json(\r\n { error: 'AI generation failed' },\r\n { status: 500 }\r\n );\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;;;AAEA;AACA;AACA;AACA;;;;;AALO,MAAM,UAAU;;;;;AAShB,eAAe,KAAK,OAAoB;IAC3C,IAAI;QACA,MAAM,UAAU,MAAM,IAAA,wKAAI;QAC1B,IAAI,CAAC,SAAS,MAAM,IAAI;YACpB,OAAO,4LAAY,CAAC,IAAI,CAAC;gBAAE,OAAO;YAAe,GAAG;gBAAE,QAAQ;YAAI;QACtE;QAEA,MAAM,SAAS,IAAA,6KAAK;QAEpB,+BAA+B;QAC/B,MAAM,SAAS,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC;YACxC,OAAO;gBAAE,IAAI,QAAQ,IAAI,CAAC,EAAE;YAAC;YAC7B,SAAS;gBAAE,kBAAkB;YAAK;QACtC,IAAW,+CAA+C;QAE1D,IAAI,CAAC,QAAQ;YACT,OAAO,4LAAY,CAAC,IAAI,CAAC;gBAAE,OAAO;YAAyB,GAAG;gBAAE,QAAQ;YAAI;QAChF;QAEA,MAAM,QAAQ,OAAO,gBAAgB,EAAE,gBAAgB;QACvD,MAAM,WAAW,OAAO,gBAAgB,EAAE,eAAe;QAEzD,IAAI,UAAU,CAAC,KAAK,OAAO,aAAa,IAAI,OAAO;YAC/C,OAAO,4LAAY,CAAC,IAAI,CACpB;gBAAE,OAAO,CAAC,UAAU,EAAE,MAAM,kCAAkC,EAAE,SAAS,4BAA4B,CAAC;YAAC,GACvG;gBAAE,QAAQ;YAAI;QAEtB;QAEA,MAAM,OAAO,MAAM,QAAQ,IAAI;QAC/B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;QAE7C,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM;YAC9B,OAAO,4LAAY,CAAC,IAAI,CACpB;gBAAE,OAAO;YAAiD,GAC1D;gBAAE,QAAQ;YAAI;QAEtB;QAEA,uDAAuD;QACvD,MAAM,eAAe;YAAE,GAAG,IAAI;YAAE,cAAc;gBAAE,GAAG,KAAK,YAAY;gBAAE,MAAM,OAAO,IAAI;YAAC;QAAE;QAC1F,MAAM,SAAS,MAAM,IAAA,0LAAoB,EAAC,SAAS,aAAa,IAAI,QAAQ;QAE5E,wBAAwB;QACxB,MAAM,OAAO,IAAI,CAAC,MAAM,CAAC;YACrB,OAAO;gBAAE,IAAI,QAAQ,IAAI,CAAC,EAAE;YAAC;YAC7B,MAAM;gBAAE,eAAe;oBAAE,WAAW;gBAAE;YAAE;QAC5C;QAEA,OAAO,4LAAY,CAAC,IAAI,CAAC;YAAE,GAAG,MAAM;YAAE,eAAe,OAAO,aAAa,GAAG;QAAE;IAClF,EAAE,OAAO,OAAO;QACZ,QAAQ,KAAK,CAAC,sBAAsB;QACpC,OAAO,4LAAY,CAAC,IAAI,CACpB;YAAE,OAAO;QAAuB,GAChC;YAAE,QAAQ;QAAI;IAEtB;AACJ"}}] } \ No newline at end of file diff --git a/.next/dev/server/chunks/[root-of-the-server]__f694870c._.js b/.next/dev/server/chunks/[root-of-the-server]__f694870c._.js index 8d207fb..78c367c 100644 --- a/.next/dev/server/chunks/[root-of-the-server]__f694870c._.js +++ b/.next/dev/server/chunks/[root-of-the-server]__f694870c._.js @@ -220,12 +220,6 @@ async function GET() { }); return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json(projects); } -// Plan limits for project creation -const PLAN_PROJECT_LIMITS = { - free: 3, - pro: 20, - master: 999 -}; async function POST(request) { const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["auth"])(); if (!session?.user?.id) { @@ -235,26 +229,26 @@ async function POST(request) { status: 401 }); } + // Check plan limits const prisma = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])(); - // Check plan limit const user = await prisma.user.findUnique({ where: { id: session.user.id }, - select: { - plan: true + include: { + subscriptionPlan: true } - }); - const plan = user?.plan || 'free'; - const limit = PLAN_PROJECT_LIMITS[plan] || PLAN_PROJECT_LIMITS.free; + }); // Cast to any to bypass Prisma type cache issues + const limit = user?.subscriptionPlan?.maxProjects ?? 3; + const planName = user?.subscriptionPlan?.displayName || 'Gratuit'; const currentCount = await prisma.project.count({ where: { userId: session.user.id } }); - if (currentCount >= limit) { + if (limit !== -1 && currentCount >= limit) { return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({ - error: `Limite de ${limit} projets atteinte pour le plan ${plan}. Passez au plan supérieur !` + error: `Limite de ${limit} projets atteinte pour le plan ${planName}. Passez au plan supérieur !` }, { status: 403 }); diff --git a/.next/dev/server/chunks/[root-of-the-server]__f694870c._.js.map b/.next/dev/server/chunks/[root-of-the-server]__f694870c._.js.map index 3db67ca..e40374b 100644 --- a/.next/dev/server/chunks/[root-of-the-server]__f694870c._.js.map +++ b/.next/dev/server/chunks/[root-of-the-server]__f694870c._.js.map @@ -4,5 +4,5 @@ "sections": [ {"offset": {"line": 58, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/auth.ts"],"sourcesContent":["import NextAuth from 'next-auth';\r\nimport Credentials from 'next-auth/providers/credentials';\r\nimport bcrypt from 'bcryptjs';\r\n\r\nexport const { handlers, signIn, signOut, auth } = NextAuth({\r\n providers: [\r\n Credentials({\r\n name: 'credentials',\r\n credentials: {\r\n email: { label: 'Email', type: 'email' },\r\n password: { label: 'Password', type: 'password' },\r\n },\r\n async authorize(credentials) {\r\n if (!credentials?.email || !credentials?.password) return null;\r\n\r\n // Lazy import to avoid PrismaClient initialization during build\r\n const { default: getDB } = await import('./prisma');\r\n const prisma = getDB();\r\n\r\n const user = await prisma.user.findUnique({\r\n where: { email: credentials.email as string },\r\n });\r\n\r\n if (!user) return null;\r\n\r\n const isValid = await bcrypt.compare(\r\n credentials.password as string,\r\n user.hashedPassword\r\n );\r\n\r\n if (!isValid) return null;\r\n\r\n return {\r\n id: user.id,\r\n email: user.email,\r\n name: user.name,\r\n };\r\n },\r\n }),\r\n ],\r\n session: {\r\n strategy: 'jwt',\r\n },\r\n callbacks: {\r\n async jwt({ token, user }) {\r\n if (user) {\r\n token.id = user.id;\r\n }\r\n return token;\r\n },\r\n async session({ session, token }) {\r\n if (session.user && token.id) {\r\n session.user.id = token.id as string;\r\n }\r\n return session;\r\n },\r\n },\r\n pages: {\r\n signIn: '/',\r\n },\r\n});\r\n"],"names":[],"mappings":";;;;;;;;;;AAAA;AACA;AAAA;AACA;;;;AAEO,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAA,8MAAQ,EAAC;IACxD,WAAW;QACP,IAAA,mNAAW,EAAC;YACR,MAAM;YACN,aAAa;gBACT,OAAO;oBAAE,OAAO;oBAAS,MAAM;gBAAQ;gBACvC,UAAU;oBAAE,OAAO;oBAAY,MAAM;gBAAW;YACpD;YACA,MAAM,WAAU,WAAW;gBACvB,IAAI,CAAC,aAAa,SAAS,CAAC,aAAa,UAAU,OAAO;gBAE1D,gEAAgE;gBAChE,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG;gBAC3B,MAAM,SAAS;gBAEf,MAAM,OAAO,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC;oBACtC,OAAO;wBAAE,OAAO,YAAY,KAAK;oBAAW;gBAChD;gBAEA,IAAI,CAAC,MAAM,OAAO;gBAElB,MAAM,UAAU,MAAM,0LAAM,CAAC,OAAO,CAChC,YAAY,QAAQ,EACpB,KAAK,cAAc;gBAGvB,IAAI,CAAC,SAAS,OAAO;gBAErB,OAAO;oBACH,IAAI,KAAK,EAAE;oBACX,OAAO,KAAK,KAAK;oBACjB,MAAM,KAAK,IAAI;gBACnB;YACJ;QACJ;KACH;IACD,SAAS;QACL,UAAU;IACd;IACA,WAAW;QACP,MAAM,KAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YACrB,IAAI,MAAM;gBACN,MAAM,EAAE,GAAG,KAAK,EAAE;YACtB;YACA,OAAO;QACX;QACA,MAAM,SAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;YAC5B,IAAI,QAAQ,IAAI,IAAI,MAAM,EAAE,EAAE;gBAC1B,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;YAC9B;YACA,OAAO;QACX;IACJ;IACA,OAAO;QACH,QAAQ;IACZ;AACJ"}}, {"offset": {"line": 137, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/prisma.ts"],"sourcesContent":["import { PrismaClient } from '@prisma/client';\r\nimport { PrismaPg } from '@prisma/adapter-pg';\r\nimport { Pool } from 'pg';\r\n\r\nconst globalForPrisma = globalThis as unknown as {\r\n prisma: PrismaClient | undefined;\r\n};\r\n\r\n/**\r\n * Returns a singleton PrismaClient instance using the Prisma v7 adapter pattern.\r\n * Uses @prisma/adapter-pg with a pg Pool for direct PostgreSQL connections.\r\n */\r\nexport function getDB(): PrismaClient {\r\n if (!globalForPrisma.prisma) {\r\n const connectionString = process.env.DATABASE_URL;\r\n const pool = new Pool({ connectionString });\r\n const adapter = new PrismaPg(pool);\r\n\r\n globalForPrisma.prisma = new PrismaClient({ adapter });\r\n }\r\n return globalForPrisma.prisma;\r\n}\r\n\r\nexport default getDB;\r\n"],"names":[],"mappings":";;;;;;AAAA;AACA;AACA;;;;;;;;;AAEA,MAAM,kBAAkB;AAQjB,SAAS;IACZ,IAAI,CAAC,gBAAgB,MAAM,EAAE;QACzB,MAAM,mBAAmB,QAAQ,GAAG,CAAC,YAAY;QACjD,MAAM,OAAO,IAAI,iMAAI,CAAC;YAAE;QAAiB;QACzC,MAAM,UAAU,IAAI,qNAAQ,CAAC;QAE7B,gBAAgB,MAAM,GAAG,IAAI,kPAAY,CAAC;YAAE;QAAQ;IACxD;IACA,OAAO,gBAAgB,MAAM;AACjC;uCAEe"}}, - {"offset": {"line": 176, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/api/projects/route.ts"],"sourcesContent":["export const dynamic = 'force-dynamic';\r\n\r\nimport { NextRequest, NextResponse } from 'next/server';\r\nimport { auth } from '@/lib/auth';\r\nimport getDB from '@/lib/prisma';\r\n\r\n// GET /api/projects — List all user's projects\r\nexport async function GET() {\r\n const session = await auth();\r\n if (!session?.user?.id) {\r\n return NextResponse.json({ error: 'Non autorisé' }, { status: 401 });\r\n }\r\n\r\n const projects = await getDB().project.findMany({\r\n where: { userId: session.user.id },\r\n orderBy: { updatedAt: 'desc' },\r\n include: {\r\n _count: { select: { chapters: true, entities: true } },\r\n },\r\n });\r\n\r\n return NextResponse.json(projects);\r\n}\r\n\r\n// Plan limits for project creation\r\nconst PLAN_PROJECT_LIMITS: Record = {\r\n free: 3,\r\n pro: 20,\r\n master: 999,\r\n};\r\n\r\n// POST /api/projects — Create a new project\r\nexport async function POST(request: NextRequest) {\r\n const session = await auth();\r\n if (!session?.user?.id) {\r\n return NextResponse.json({ error: 'Non autorisé' }, { status: 401 });\r\n }\r\n\r\n const prisma = getDB();\r\n\r\n // Check plan limit\r\n const user = await prisma.user.findUnique({ where: { id: session.user.id }, select: { plan: true } });\r\n const plan = user?.plan || 'free';\r\n const limit = PLAN_PROJECT_LIMITS[plan] || PLAN_PROJECT_LIMITS.free;\r\n const currentCount = await prisma.project.count({ where: { userId: session.user.id } });\r\n\r\n if (currentCount >= limit) {\r\n return NextResponse.json(\r\n { error: `Limite de ${limit} projets atteinte pour le plan ${plan}. Passez au plan supérieur !` },\r\n { status: 403 }\r\n );\r\n }\r\n\r\n const body = await request.json();\r\n\r\n const project = await prisma.project.create({\r\n data: {\r\n title: body.title || 'Nouveau Roman',\r\n author: body.author || session.user.name || 'Auteur',\r\n settings: body.settings || null,\r\n userId: session.user.id,\r\n },\r\n });\r\n\r\n return NextResponse.json(project, { status: 201 });\r\n}\r\n"],"names":[],"mappings":";;;;;;;;AAEA;AACA;AACA;;;;;AAJO,MAAM,UAAU;;;;AAOhB,eAAe;IAClB,MAAM,UAAU,MAAM,IAAA,wKAAI;IAC1B,IAAI,CAAC,SAAS,MAAM,IAAI;QACpB,OAAO,4LAAY,CAAC,IAAI,CAAC;YAAE,OAAO;QAAe,GAAG;YAAE,QAAQ;QAAI;IACtE;IAEA,MAAM,WAAW,MAAM,IAAA,6KAAK,IAAG,OAAO,CAAC,QAAQ,CAAC;QAC5C,OAAO;YAAE,QAAQ,QAAQ,IAAI,CAAC,EAAE;QAAC;QACjC,SAAS;YAAE,WAAW;QAAO;QAC7B,SAAS;YACL,QAAQ;gBAAE,QAAQ;oBAAE,UAAU;oBAAM,UAAU;gBAAK;YAAE;QACzD;IACJ;IAEA,OAAO,4LAAY,CAAC,IAAI,CAAC;AAC7B;AAEA,mCAAmC;AACnC,MAAM,sBAA8C;IAChD,MAAM;IACN,KAAK;IACL,QAAQ;AACZ;AAGO,eAAe,KAAK,OAAoB;IAC3C,MAAM,UAAU,MAAM,IAAA,wKAAI;IAC1B,IAAI,CAAC,SAAS,MAAM,IAAI;QACpB,OAAO,4LAAY,CAAC,IAAI,CAAC;YAAE,OAAO;QAAe,GAAG;YAAE,QAAQ;QAAI;IACtE;IAEA,MAAM,SAAS,IAAA,6KAAK;IAEpB,mBAAmB;IACnB,MAAM,OAAO,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO;YAAE,IAAI,QAAQ,IAAI,CAAC,EAAE;QAAC;QAAG,QAAQ;YAAE,MAAM;QAAK;IAAE;IACnG,MAAM,OAAO,MAAM,QAAQ;IAC3B,MAAM,QAAQ,mBAAmB,CAAC,KAAK,IAAI,oBAAoB,IAAI;IACnE,MAAM,eAAe,MAAM,OAAO,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO;YAAE,QAAQ,QAAQ,IAAI,CAAC,EAAE;QAAC;IAAE;IAErF,IAAI,gBAAgB,OAAO;QACvB,OAAO,4LAAY,CAAC,IAAI,CACpB;YAAE,OAAO,CAAC,UAAU,EAAE,MAAM,+BAA+B,EAAE,KAAK,4BAA4B,CAAC;QAAC,GAChG;YAAE,QAAQ;QAAI;IAEtB;IAEA,MAAM,OAAO,MAAM,QAAQ,IAAI;IAE/B,MAAM,UAAU,MAAM,OAAO,OAAO,CAAC,MAAM,CAAC;QACxC,MAAM;YACF,OAAO,KAAK,KAAK,IAAI;YACrB,QAAQ,KAAK,MAAM,IAAI,QAAQ,IAAI,CAAC,IAAI,IAAI;YAC5C,UAAU,KAAK,QAAQ,IAAI;YAC3B,QAAQ,QAAQ,IAAI,CAAC,EAAE;QAC3B;IACJ;IAEA,OAAO,4LAAY,CAAC,IAAI,CAAC,SAAS;QAAE,QAAQ;IAAI;AACpD"}}] + {"offset": {"line": 176, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/api/projects/route.ts"],"sourcesContent":["export const dynamic = 'force-dynamic';\r\n\r\nimport { NextRequest, NextResponse } from 'next/server';\r\nimport { auth } from '@/lib/auth';\r\nimport getDB from '@/lib/prisma';\r\n\r\n// GET /api/projects — List all user's projects\r\nexport async function GET() {\r\n const session = await auth();\r\n if (!session?.user?.id) {\r\n return NextResponse.json({ error: 'Non autorisé' }, { status: 401 });\r\n }\r\n\r\n const projects = await getDB().project.findMany({\r\n where: { userId: session.user.id },\r\n orderBy: { updatedAt: 'desc' },\r\n include: {\r\n _count: { select: { chapters: true, entities: true } },\r\n },\r\n });\r\n\r\n return NextResponse.json(projects);\r\n}\r\n\r\n\r\n\r\n// POST /api/projects — Create a new project\r\nexport async function POST(request: NextRequest) {\r\n const session = await auth();\r\n if (!session?.user?.id) {\r\n return NextResponse.json({ error: 'Non autorisé' }, { status: 401 });\r\n }\r\n\r\n // Check plan limits\r\n const prisma = getDB();\r\n const user = await prisma.user.findUnique({\r\n where: { id: session.user.id },\r\n include: { subscriptionPlan: true }\r\n }) as any; // Cast to any to bypass Prisma type cache issues\r\n\r\n const limit = user?.subscriptionPlan?.maxProjects ?? 3;\r\n const planName = user?.subscriptionPlan?.displayName || 'Gratuit';\r\n const currentCount = await prisma.project.count({ where: { userId: session.user.id } });\r\n\r\n if (limit !== -1 && currentCount >= limit) {\r\n return NextResponse.json(\r\n { error: `Limite de ${limit} projets atteinte pour le plan ${planName}. Passez au plan supérieur !` },\r\n { status: 403 }\r\n );\r\n }\r\n\r\n const body = await request.json();\r\n\r\n const project = await prisma.project.create({\r\n data: {\r\n title: body.title || 'Nouveau Roman',\r\n author: body.author || session.user.name || 'Auteur',\r\n settings: body.settings || null,\r\n userId: session.user.id,\r\n },\r\n });\r\n\r\n return NextResponse.json(project, { status: 201 });\r\n}\r\n"],"names":[],"mappings":";;;;;;;;AAEA;AACA;AACA;;;;;AAJO,MAAM,UAAU;;;;AAOhB,eAAe;IAClB,MAAM,UAAU,MAAM,IAAA,wKAAI;IAC1B,IAAI,CAAC,SAAS,MAAM,IAAI;QACpB,OAAO,4LAAY,CAAC,IAAI,CAAC;YAAE,OAAO;QAAe,GAAG;YAAE,QAAQ;QAAI;IACtE;IAEA,MAAM,WAAW,MAAM,IAAA,6KAAK,IAAG,OAAO,CAAC,QAAQ,CAAC;QAC5C,OAAO;YAAE,QAAQ,QAAQ,IAAI,CAAC,EAAE;QAAC;QACjC,SAAS;YAAE,WAAW;QAAO;QAC7B,SAAS;YACL,QAAQ;gBAAE,QAAQ;oBAAE,UAAU;oBAAM,UAAU;gBAAK;YAAE;QACzD;IACJ;IAEA,OAAO,4LAAY,CAAC,IAAI,CAAC;AAC7B;AAKO,eAAe,KAAK,OAAoB;IAC3C,MAAM,UAAU,MAAM,IAAA,wKAAI;IAC1B,IAAI,CAAC,SAAS,MAAM,IAAI;QACpB,OAAO,4LAAY,CAAC,IAAI,CAAC;YAAE,OAAO;QAAe,GAAG;YAAE,QAAQ;QAAI;IACtE;IAEA,oBAAoB;IACpB,MAAM,SAAS,IAAA,6KAAK;IACpB,MAAM,OAAO,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC;QACtC,OAAO;YAAE,IAAI,QAAQ,IAAI,CAAC,EAAE;QAAC;QAC7B,SAAS;YAAE,kBAAkB;QAAK;IACtC,IAAW,iDAAiD;IAE5D,MAAM,QAAQ,MAAM,kBAAkB,eAAe;IACrD,MAAM,WAAW,MAAM,kBAAkB,eAAe;IACxD,MAAM,eAAe,MAAM,OAAO,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO;YAAE,QAAQ,QAAQ,IAAI,CAAC,EAAE;QAAC;IAAE;IAErF,IAAI,UAAU,CAAC,KAAK,gBAAgB,OAAO;QACvC,OAAO,4LAAY,CAAC,IAAI,CACpB;YAAE,OAAO,CAAC,UAAU,EAAE,MAAM,+BAA+B,EAAE,SAAS,4BAA4B,CAAC;QAAC,GACpG;YAAE,QAAQ;QAAI;IAEtB;IAEA,MAAM,OAAO,MAAM,QAAQ,IAAI;IAE/B,MAAM,UAAU,MAAM,OAAO,OAAO,CAAC,MAAM,CAAC;QACxC,MAAM;YACF,OAAO,KAAK,KAAK,IAAI;YACrB,QAAQ,KAAK,MAAM,IAAI,QAAQ,IAAI,CAAC,IAAI,IAAI;YAC5C,UAAU,KAAK,QAAQ,IAAI;YAC3B,QAAQ,QAAQ,IAAI,CAAC,EAAE;QAC3B;IACJ;IAEA,OAAO,4LAAY,CAAC,IAAI,CAAC,SAAS;QAAE,QAAQ;IAAI;AACpD"}}] } \ No newline at end of file diff --git a/.next/dev/server/chunks/ssr/[root-of-the-server]__2aea0639._.js b/.next/dev/server/chunks/ssr/[root-of-the-server]__2aea0639._.js index 311c55e..fd35bb0 100644 --- a/.next/dev/server/chunks/ssr/[root-of-the-server]__2aea0639._.js +++ b/.next/dev/server/chunks/ssr/[root-of-the-server]__2aea0639._.js @@ -552,7 +552,7 @@ const Dashboard = ({ user, projects, onSelect, onCreate, onLogout, onPricing, on children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "px-3 py-1 rounded-full bg-indigo-100 text-indigo-700 text-[10px] uppercase font-black tracking-widest", - children: user.subscription.plan + children: user.subscription.planDetails?.displayName || user.subscription.plan }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Dashboard.tsx", lineNumber: 33, diff --git a/.next/dev/server/chunks/ssr/[root-of-the-server]__2aea0639._.js.map b/.next/dev/server/chunks/ssr/[root-of-the-server]__2aea0639._.js.map index fbcc393..80da606 100644 --- a/.next/dev/server/chunks/ssr/[root-of-the-server]__2aea0639._.js.map +++ b/.next/dev/server/chunks/ssr/[root-of-the-server]__2aea0639._.js.map @@ -2,9 +2,9 @@ "version": 3, "sources": [], "sections": [ - {"offset": {"line": 22, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/types.ts"],"sourcesContent":["\nexport enum EntityType {\n CHARACTER = 'Personnage',\n LOCATION = 'Lieu',\n OBJECT = 'Objet',\n NOTE = 'Note'\n}\n\nexport interface CharacterAttributes {\n age: number;\n height: number;\n hair: string;\n eyes: string;\n archetype: string;\n role: 'protagonist' | 'antagonist' | 'support' | 'extra';\n personality: {\n spectrumIntrovertExtravert: number;\n spectrumEmotionalRational: number;\n spectrumChaoticLawful: number;\n };\n physicalQuirk: string;\n behavioralQuirk: string;\n}\n\nexport type CustomFieldType = 'text' | 'textarea' | 'number' | 'boolean' | 'select';\n\nexport interface CustomFieldDefinition {\n id: string;\n label: string;\n type: CustomFieldType;\n options?: string[];\n placeholder?: string;\n}\n\nexport interface EntityTemplate {\n entityType: EntityType;\n fields: CustomFieldDefinition[];\n}\n\nexport interface Entity {\n id: string;\n type: EntityType;\n name: string;\n description: string;\n details: string;\n storyContext?: string;\n attributes?: CharacterAttributes;\n customValues?: Record;\n}\n\nexport interface Chapter {\n id: string;\n title: string;\n content: string;\n summary?: string;\n}\n\nexport type PlotNodeType = 'story' | 'dialogue' | 'action';\n\nexport interface PlotNode {\n id: string;\n x: number;\n y: number;\n title: string;\n description: string;\n color: string;\n type?: PlotNodeType;\n}\n\nexport interface PlotConnection {\n id: string;\n source: string;\n target: string;\n}\n\nexport interface WorkflowData {\n nodes: PlotNode[];\n connections: PlotConnection[];\n}\n\nexport type IdeaStatus = 'todo' | 'progress' | 'done';\nexport type IdeaCategory = 'plot' | 'character' | 'research' | 'todo';\n\nexport interface Idea {\n id: string;\n title: string;\n description: string;\n status: IdeaStatus;\n category: IdeaCategory;\n createdAt: number;\n}\n\nexport interface BookSettings {\n genre: string;\n subGenre?: string;\n targetAudience: string;\n tone: string;\n pov: string;\n tense: string;\n synopsis: string;\n themes: string;\n}\n\nexport interface BookProject {\n id: string;\n title: string;\n author: string;\n lastModified: number;\n settings?: BookSettings;\n // Direct fields sometimes used in creation/updates before settings normalization\n genre?: string;\n pov?: string;\n tense?: string;\n chapters: Chapter[];\n entities: Entity[];\n workflow?: WorkflowData;\n templates?: EntityTemplate[];\n styleGuide?: string;\n ideas?: Idea[];\n}\n\nexport interface ChatMessage {\n id: string;\n role: 'user' | 'model';\n text: string;\n responseType?: 'draft' | 'reflection';\n isLoading?: boolean;\n}\n\n// --- SAAS TYPES ---\n\nexport type PlanType = 'free' | 'pro' | 'master';\n\nexport interface Subscription {\n plan: PlanType;\n startDate: number;\n status: 'active' | 'canceled' | 'past_due';\n}\n\nexport interface UserUsage {\n aiActionsCurrent: number;\n aiActionsLimit: number;\n projectsLimit: number;\n}\n\nexport interface UserPreferences {\n theme: 'light' | 'dark' | 'sepia';\n dailyWordGoal: number;\n language: 'fr' | 'en';\n}\n\nexport interface UserStats {\n totalWordsWritten: number;\n writingStreak: number;\n lastWriteDate: number;\n}\n\nexport interface UserProfile {\n id: string;\n email: string;\n name: string;\n avatar?: string;\n bio?: string;\n subscription: Subscription;\n usage: UserUsage;\n preferences: UserPreferences;\n stats: UserStats;\n}\n\nexport type ViewMode = 'write' | 'world_building' | 'workflow' | 'settings' | 'preview' | 'ideas' | 'landing' | 'features' | 'pricing' | 'checkout' | 'dashboard' | 'auth' | 'signup' | 'profile';\n"],"names":[],"mappings":";;;;AACO,IAAA,AAAK,oCAAA;;;;;WAAA"}}, + {"offset": {"line": 22, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/types.ts"],"sourcesContent":["\nexport enum EntityType {\n CHARACTER = 'Personnage',\n LOCATION = 'Lieu',\n OBJECT = 'Objet',\n NOTE = 'Note'\n}\n\nexport interface CharacterAttributes {\n age: number;\n height: number;\n hair: string;\n eyes: string;\n archetype: string;\n role: 'protagonist' | 'antagonist' | 'support' | 'extra';\n personality: {\n spectrumIntrovertExtravert: number;\n spectrumEmotionalRational: number;\n spectrumChaoticLawful: number;\n };\n physicalQuirk: string;\n behavioralQuirk: string;\n}\n\nexport type CustomFieldType = 'text' | 'textarea' | 'number' | 'boolean' | 'select';\n\nexport interface CustomFieldDefinition {\n id: string;\n label: string;\n type: CustomFieldType;\n options?: string[];\n placeholder?: string;\n}\n\nexport interface EntityTemplate {\n entityType: EntityType;\n fields: CustomFieldDefinition[];\n}\n\nexport interface Entity {\n id: string;\n type: EntityType;\n name: string;\n description: string;\n details: string;\n storyContext?: string;\n attributes?: CharacterAttributes;\n customValues?: Record;\n}\n\nexport interface Chapter {\n id: string;\n title: string;\n content: string;\n summary?: string;\n}\n\nexport type PlotNodeType = 'story' | 'dialogue' | 'action';\n\nexport interface PlotNode {\n id: string;\n x: number;\n y: number;\n title: string;\n description: string;\n color: string;\n type?: PlotNodeType;\n}\n\nexport interface PlotConnection {\n id: string;\n source: string;\n target: string;\n}\n\nexport interface WorkflowData {\n nodes: PlotNode[];\n connections: PlotConnection[];\n}\n\nexport type IdeaStatus = 'todo' | 'progress' | 'done';\nexport type IdeaCategory = 'plot' | 'character' | 'research' | 'todo';\n\nexport interface Idea {\n id: string;\n title: string;\n description: string;\n status: IdeaStatus;\n category: IdeaCategory;\n createdAt: number;\n}\n\nexport interface BookSettings {\n genre: string;\n subGenre?: string;\n targetAudience: string;\n tone: string;\n pov: string;\n tense: string;\n synopsis: string;\n themes: string;\n}\n\nexport interface BookProject {\n id: string;\n title: string;\n author: string;\n lastModified: number;\n settings?: BookSettings;\n // Direct fields sometimes used in creation/updates before settings normalization\n genre?: string;\n pov?: string;\n tense?: string;\n chapters: Chapter[];\n entities: Entity[];\n workflow?: WorkflowData;\n templates?: EntityTemplate[];\n styleGuide?: string;\n ideas?: Idea[];\n}\n\nexport interface ChatMessage {\n id: string;\n role: 'user' | 'model';\n text: string;\n responseType?: 'draft' | 'reflection';\n isLoading?: boolean;\n}\n\n// --- SAAS TYPES ---\n\nexport interface PlanData {\n id: string;\n name: string;\n displayName: string;\n price: number;\n description: string;\n features: string[];\n isPopular: boolean;\n maxProjects: number;\n maxAiActions: number;\n}\n\nexport interface Subscription {\n plan: string; // The ID of the plan\n planDetails?: PlanData; // The populated plan details from DB\n startDate: number;\n status: 'active' | 'canceled' | 'past_due';\n}\n\nexport interface UserUsage {\n aiActionsCurrent: number;\n aiActionsLimit: number;\n projectsLimit: number;\n}\n\nexport interface UserPreferences {\n theme: 'light' | 'dark' | 'sepia';\n dailyWordGoal: number;\n language: 'fr' | 'en';\n}\n\nexport interface UserStats {\n totalWordsWritten: number;\n writingStreak: number;\n lastWriteDate: number;\n}\n\nexport interface UserProfile {\n id: string;\n email: string;\n name: string;\n avatar?: string;\n bio?: string;\n subscription: Subscription;\n usage: UserUsage;\n preferences: UserPreferences;\n stats: UserStats;\n}\n\nexport type ViewMode = 'write' | 'world_building' | 'workflow' | 'settings' | 'preview' | 'ideas' | 'landing' | 'features' | 'pricing' | 'checkout' | 'dashboard' | 'auth' | 'signup' | 'profile';\n"],"names":[],"mappings":";;;;AACO,IAAA,AAAK,oCAAA;;;;;WAAA"}}, {"offset": {"line": 37, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/constants.ts"],"sourcesContent":["\nimport { EntityType } from \"./types\";\n\nexport const DEFAULT_BOOK_TITLE = \"Nouveau Roman\";\nexport const DEFAULT_AUTHOR = \"Auteur Inconnu\";\n\nexport const INITIAL_CHAPTER = {\n id: 'chap-1',\n title: 'Chapitre 1',\n content: '

Il était une fois...

',\n summary: 'Début de l\\'histoire.'\n};\n\nexport const ENTITY_ICONS: Record = {\n [EntityType.CHARACTER]: '👤',\n [EntityType.LOCATION]: '🏰',\n [EntityType.OBJECT]: '🗝️',\n [EntityType.NOTE]: '📝',\n};\n\n// Colors for tags\nexport const ENTITY_COLORS: Record = {\n [EntityType.CHARACTER]: 'bg-blue-100 text-blue-800 border-blue-200',\n [EntityType.LOCATION]: 'bg-green-100 text-green-800 border-green-200',\n [EntityType.OBJECT]: 'bg-amber-100 text-amber-800 border-amber-200',\n [EntityType.NOTE]: 'bg-gray-100 text-gray-800 border-gray-200',\n};\n\n// --- Character Creation Lists ---\n\nexport const HAIR_COLORS = [\n \"Brun\", \"Noir\", \"Blond\", \"Roux\", \"Auburn\", \"Gris\", \"Blanc\", \"Châtain\", \"Chauve\", \"Teinture (Bleu/Rose/Etc)\"\n];\n\nexport const EYE_COLORS = [\n \"Marron\", \"Bleu\", \"Vert\", \"Noisette\", \"Gris\", \"Noir\", \"Vairons\", \"Ambre\"\n];\n\nexport const ARCHETYPES = [\n \"Le Héros\", \"L'Ombre / Le Méchant\", \"Le Mentor\", \"Le Gardien du Seuil\",\n \"Le Shapeshifter (Changeforme)\", \"Le Trickster (Farceur)\", \"L'Allié\", \"L'Élu\",\n \"Le Rebelle\", \"Le Séducteur\", \"Le Sage\", \"Le Guerrier\", \"L'Innocent\"\n];\n\n// --- Book Settings Lists ---\n\nexport const GENRES = [\n \"Fantasy\", \"Science-Fiction\", \"Thriller / Polar\", \"Romance\", \"Historique\",\n \"Horreur\", \"Aventure\", \"Contemporain\", \"Jeunesse / Young Adult\", \"Dystopie\"\n];\n\nexport const TONES = [\n \"Sombre & Sérieux\", \"Léger & Humoristique\", \"Épique & Grandiose\",\n \"Mélancolique\", \"Mystérieux\", \"Optimiste\", \"Cynique\", \"Romantique\"\n];\n\nexport const POV_OPTIONS = [\n \"1ère personne (Je)\",\n \"3ème personne (Limitée au protagoniste)\",\n \"3ème personne (Omnisciente)\",\n \"Multi-points de vue (Alterné)\"\n];\n\nexport const TENSE_OPTIONS = [\n \"Passé (Passé simple / Imparfait)\",\n \"Présent de narration\"\n];"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AAEO,MAAM,qBAAqB;AAC3B,MAAM,iBAAiB;AAEvB,MAAM,kBAAkB;IAC7B,IAAI;IACJ,OAAO;IACP,SAAS;IACT,SAAS;AACX;AAEO,MAAM,eAA2C;IACtD,CAAC,6KAAU,CAAC,SAAS,CAAC,EAAE;IACxB,CAAC,6KAAU,CAAC,QAAQ,CAAC,EAAE;IACvB,CAAC,6KAAU,CAAC,MAAM,CAAC,EAAE;IACrB,CAAC,6KAAU,CAAC,IAAI,CAAC,EAAE;AACrB;AAGO,MAAM,gBAA4C;IACvD,CAAC,6KAAU,CAAC,SAAS,CAAC,EAAE;IACxB,CAAC,6KAAU,CAAC,QAAQ,CAAC,EAAE;IACvB,CAAC,6KAAU,CAAC,MAAM,CAAC,EAAE;IACrB,CAAC,6KAAU,CAAC,IAAI,CAAC,EAAE;AACrB;AAIO,MAAM,cAAc;IACzB;IAAQ;IAAQ;IAAS;IAAQ;IAAU;IAAQ;IAAS;IAAW;IAAU;CAClF;AAEM,MAAM,aAAa;IACxB;IAAU;IAAQ;IAAQ;IAAY;IAAQ;IAAQ;IAAW;CAClE;AAEM,MAAM,aAAa;IACxB;IAAY;IAAwB;IAAa;IACjD;IAAiC;IAA0B;IAAW;IACtE;IAAc;IAAgB;IAAW;IAAe;CACzD;AAIM,MAAM,SAAS;IACpB;IAAW;IAAmB;IAAoB;IAAW;IAC7D;IAAW;IAAY;IAAgB;IAA0B;CAClE;AAEM,MAAM,QAAQ;IACnB;IAAoB;IAAwB;IAC5C;IAAgB;IAAc;IAAa;IAAW;CACvD;AAEM,MAAM,cAAc;IACzB;IACA;IACA;IACA;CACD;AAEM,MAAM,gBAAgB;IAC3B;IACA;CACD"}}, {"offset": {"line": 158, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/hooks/useProjects.ts"],"sourcesContent":["'use client';\r\n\r\nimport { useState, useEffect } from 'react';\r\nimport {\r\n BookProject,\r\n Chapter,\r\n Entity,\r\n EntityType,\r\n UserProfile,\r\n} from '@/lib/types';\r\nimport api from '@/lib/api';\r\nimport {\r\n DEFAULT_BOOK_TITLE,\r\n DEFAULT_AUTHOR,\r\n INITIAL_CHAPTER\r\n} from '@/lib/constants';\r\n\r\nexport const useProjects = (user: UserProfile | null) => {\r\n const [projects, setProjects] = useState([]);\r\n const [currentProjectId, setCurrentProjectId] = useState(null);\r\n const [loading, setLoading] = useState(false);\r\n\r\n // Load Projects\r\n useEffect(() => {\r\n if (!user) {\r\n setProjects([]);\r\n return;\r\n }\r\n const loadProjects = async () => {\r\n setLoading(true);\r\n try {\r\n const data = await api.projects.list();\r\n const mapped: BookProject[] = (data || []).map((p: any) => ({\r\n id: p.id,\r\n title: p.title,\r\n author: p.author,\r\n lastModified: new Date(p.updatedAt).getTime(),\r\n // Use _count for display before full details are loaded\r\n chapters: Array.from({ length: p._count?.chapters || 0 }, (_, i) => ({ id: `placeholder-${i}`, title: '', content: '' })),\r\n entities: Array.from({ length: p._count?.entities || 0 }, (_, i) => ({ id: `placeholder-${i}`, type: 'character' as any, name: '', description: '' })),\r\n ideas: [],\r\n settings: p.settings || undefined\r\n }));\r\n setProjects(mapped);\r\n } catch (err) {\r\n console.error('Failed to load projects', err);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n loadProjects();\r\n }, [user]);\r\n\r\n // Load details when project is selected\r\n useEffect(() => {\r\n if (!currentProjectId) return;\r\n\r\n const loadProjectDetails = async () => {\r\n try {\r\n const fullProject = await api.projects.get(currentProjectId);\r\n const mapped: BookProject = {\r\n id: fullProject.id,\r\n title: fullProject.title,\r\n author: fullProject.author,\r\n lastModified: new Date(fullProject.updatedAt).getTime(),\r\n settings: fullProject.settings || undefined,\r\n styleGuide: fullProject.styleGuide || undefined,\r\n chapters: (fullProject.chapters || []).map((c: any) => ({\r\n id: c.id,\r\n title: c.title,\r\n content: c.content,\r\n summary: c.summary,\r\n })),\r\n entities: (fullProject.entities || []).map((e: any) => ({\r\n id: e.id,\r\n type: e.type,\r\n name: e.name,\r\n description: e.description,\r\n details: e.details,\r\n storyContext: e.storyContext,\r\n attributes: e.attributes,\r\n customValues: e.customValues,\r\n })),\r\n ideas: (fullProject.ideas || []).map((i: any) => ({\r\n id: i.id,\r\n title: i.title,\r\n description: i.description,\r\n status: i.status,\r\n category: i.category,\r\n createdAt: new Date(i.createdAt).getTime(),\r\n })),\r\n workflow: {\r\n nodes: (fullProject.plotNodes || []).map((n: any) => ({\r\n id: n.id,\r\n x: n.x,\r\n y: n.y,\r\n title: n.title,\r\n description: n.description,\r\n color: n.color,\r\n type: n.type,\r\n })),\r\n connections: (fullProject.plotConnections || []).map((c: any) => ({\r\n id: c.id,\r\n source: c.source,\r\n target: c.target,\r\n })),\r\n },\r\n };\r\n setProjects(prev => prev.map(p => p.id === currentProjectId ? mapped : p));\r\n } catch (err) {\r\n console.error(\"Failed to load project details\", err);\r\n }\r\n };\r\n loadProjectDetails();\r\n }, [currentProjectId]);\r\n\r\n const createProject = async () => {\r\n if (!user) return;\r\n\r\n try {\r\n const created = await api.projects.create({\r\n title: DEFAULT_BOOK_TITLE,\r\n author: user.name || DEFAULT_AUTHOR,\r\n settings: { genre: 'Fantasy', targetAudience: 'Adult', tone: 'Epic' },\r\n });\r\n\r\n const newProject: BookProject = {\r\n id: created.id,\r\n title: created.title,\r\n author: created.author,\r\n lastModified: Date.now(),\r\n chapters: [],\r\n entities: [],\r\n ideas: [],\r\n settings: created.settings,\r\n };\r\n\r\n setProjects(prev => [...prev, newProject]);\r\n await addChapter(created.id, INITIAL_CHAPTER);\r\n return created.id;\r\n } catch (err) {\r\n console.error('Failed to create project', err);\r\n throw err;\r\n }\r\n };\r\n\r\n const updateProject = async (id: string, data: Partial) => {\r\n setProjects(prev => prev.map(p => p.id === id ? { ...p, ...data } : p));\r\n\r\n try {\r\n // Persist project fields\r\n const payload: any = {};\r\n if (data.title !== undefined) payload.title = data.title;\r\n if (data.author !== undefined) payload.author = data.author;\r\n if (data.settings !== undefined) payload.settings = data.settings;\r\n if (data.styleGuide !== undefined) payload.styleGuide = data.styleGuide;\r\n if (Object.keys(payload).length > 0) {\r\n await api.projects.update(id, payload);\r\n }\r\n\r\n // Persist workflow (nodes + connections) separately\r\n if (data.workflow) {\r\n await api.projects.syncWorkflow(id, {\r\n nodes: data.workflow.nodes || [],\r\n connections: data.workflow.connections || [],\r\n });\r\n }\r\n } catch (err) {\r\n console.error(\"Failed to update project\", err);\r\n }\r\n };\r\n\r\n const addChapter = async (projectId: string, chapterData: Partial) => {\r\n try {\r\n const newChap = await api.chapters.create({\r\n projectId,\r\n title: chapterData.title || 'New Chapter',\r\n content: chapterData.content || '',\r\n summary: chapterData.summary || undefined,\r\n });\r\n\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n chapters: [...p.chapters, {\r\n id: newChap.id,\r\n title: newChap.title,\r\n content: newChap.content,\r\n summary: newChap.summary,\r\n }]\r\n };\r\n }));\r\n return newChap.id;\r\n } catch (err) {\r\n console.error(\"Failed to add chapter\", err);\r\n return null;\r\n }\r\n };\r\n\r\n const updateChapter = async (projectId: string, chapterId: string, data: Partial) => {\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n chapters: p.chapters.map(c => c.id === chapterId ? { ...c, ...data } : c)\r\n };\r\n }));\r\n\r\n try {\r\n await api.chapters.update(chapterId, data);\r\n } catch (err) {\r\n console.error(\"Failed to update chapter\", err);\r\n }\r\n };\r\n\r\n const createEntity = async (projectId: string, type: EntityType, initialData?: Partial) => {\r\n try {\r\n const newEntity = await api.entities.create({\r\n projectId,\r\n type,\r\n name: initialData?.name || `Nouveau ${type}`,\r\n description: initialData?.description || '',\r\n details: initialData?.details || '',\r\n attributes: initialData?.attributes || undefined,\r\n customValues: initialData?.customValues || undefined,\r\n });\r\n\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n entities: [...p.entities, {\r\n id: newEntity.id,\r\n type: newEntity.type,\r\n name: newEntity.name,\r\n description: newEntity.description,\r\n details: newEntity.details,\r\n attributes: newEntity.attributes,\r\n customValues: newEntity.customValues || {},\r\n }]\r\n };\r\n }));\r\n return newEntity.id;\r\n } catch (err) {\r\n console.error(\"Failed to create entity\", err);\r\n throw err;\r\n }\r\n };\r\n\r\n const updateEntity = async (projectId: string, entityId: string, data: Partial) => {\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n entities: p.entities.map(e => e.id === entityId ? { ...e, ...data } : e)\r\n };\r\n }));\r\n\r\n try {\r\n await api.entities.update(entityId, data);\r\n } catch (err) {\r\n console.error(\"Failed to update entity\", err);\r\n }\r\n };\r\n\r\n const deleteEntity = async (projectId: string, entityId: string) => {\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n entities: p.entities.filter(e => e.id !== entityId)\r\n };\r\n }));\r\n\r\n try {\r\n await api.entities.delete(entityId);\r\n } catch (err) {\r\n console.error(\"Failed to delete entity\", err);\r\n }\r\n };\r\n\r\n return {\r\n projects,\r\n currentProjectId,\r\n setCurrentProjectId,\r\n createProject,\r\n updateProject,\r\n addChapter,\r\n updateChapter,\r\n createEntity,\r\n updateEntity,\r\n deleteEntity,\r\n deleteProject: async (projectId: string) => {\r\n try {\r\n // Cascade delete is handled by Prisma, just delete the project\r\n await api.projects.delete(projectId);\r\n\r\n setProjects(prev => prev.filter(p => p.id !== projectId));\r\n if (currentProjectId === projectId) {\r\n setCurrentProjectId(null);\r\n }\r\n } catch (err) {\r\n console.error(\"Failed to delete project\", err);\r\n }\r\n }\r\n };\r\n};\r\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 481, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/components/Dashboard.tsx"],"sourcesContent":["'use client';\n\n\nimport React from 'react';\nimport { BookProject, UserProfile } from '@/lib/types';\nimport { Plus, Book, Clock, Star, ChevronRight, LogOut, LayoutDashboard, User, Target, Flame, Edit3 } from 'lucide-react';\n\ninterface DashboardProps {\n user: UserProfile;\n projects: BookProject[];\n onSelect: (id: string) => void;\n onCreate: () => void;\n onLogout: () => void;\n onPricing: () => void;\n onProfile: () => void;\n}\n\nconst Dashboard: React.FC = ({ user, projects, onSelect, onCreate, onLogout, onPricing, onProfile }) => {\n return (\n
\n
\n\n {/* User Card */}\n
\n
\n
\n \"Avatar\"\n
\n
\n
\n

Bonjour, {user.name} 👋

\n
\n {user.subscription.plan}\n Membre depuis le 24 janv.\n
\n
\n
\n
\n \n \n
\n
\n\n {/* Stats Section */}\n
\n
\n
\n
\n

Série actuelle

\n

{user.stats.writingStreak} Jours

\n
\n
\n
\n
\n
\n

Mots écrits

\n

{user.stats.totalWordsWritten.toLocaleString()}

\n
\n
\n
\n
\n
\n

Objectif du jour

\n

{user.preferences.dailyWordGoal} Mots

\n
\n
\n
\n\n
\n {/* Project List */}\n
\n
\n

Mes Romans

\n \n Écrire un nouveau livre\n \n
\n\n
\n {projects.map(p => (\n onSelect(p.id)}\n className=\"bg-white p-8 rounded-[2.5rem] border border-indigo-50 shadow-sm hover:shadow-2xl hover:scale-[1.02] transition-all cursor-pointer group flex flex-col justify-between h-64\"\n >\n
\n
\n \n
\n

{p.title}

\n

Dernière modification : {new Date(p.lastModified).toLocaleDateString()}

\n
\n
\n {p.chapters.length} Chapitres\n \n
\n
\n ))}\n {projects.length === 0 && (\n
\n \n

Prêt à commencer votre premier roman ?

\n \n
\n )}\n
\n
\n\n {/* Sidebar Stats & Plan */}\n
\n
\n
\n

Utilisation

\n
\n
\n
\n Actions IA\n {user.usage.aiActionsCurrent} / {user.usage.aiActionsLimit === 999999 ? '∞' : user.usage.aiActionsLimit}\n
\n
\n \n
\n
\n
\n
\n Emplacements Roman\n {projects.length} / {user.usage.projectsLimit}\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n
\n );\n};\n\nexport default Dashboard;\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 481, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/components/Dashboard.tsx"],"sourcesContent":["'use client';\n\n\nimport React from 'react';\nimport { BookProject, UserProfile } from '@/lib/types';\nimport { Plus, Book, Clock, Star, ChevronRight, LogOut, LayoutDashboard, User, Target, Flame, Edit3 } from 'lucide-react';\n\ninterface DashboardProps {\n user: UserProfile;\n projects: BookProject[];\n onSelect: (id: string) => void;\n onCreate: () => void;\n onLogout: () => void;\n onPricing: () => void;\n onProfile: () => void;\n}\n\nconst Dashboard: React.FC = ({ user, projects, onSelect, onCreate, onLogout, onPricing, onProfile }) => {\n return (\n
\n
\n\n {/* User Card */}\n
\n
\n
\n \"Avatar\"\n
\n
\n
\n

Bonjour, {user.name} 👋

\n
\n {user.subscription.planDetails?.displayName || user.subscription.plan}\n Membre depuis le 24 janv.\n
\n
\n
\n
\n \n \n
\n
\n\n {/* Stats Section */}\n
\n
\n
\n
\n

Série actuelle

\n

{user.stats.writingStreak} Jours

\n
\n
\n
\n
\n
\n

Mots écrits

\n

{user.stats.totalWordsWritten.toLocaleString()}

\n
\n
\n
\n
\n
\n

Objectif du jour

\n

{user.preferences.dailyWordGoal} Mots

\n
\n
\n
\n\n
\n {/* Project List */}\n
\n
\n

Mes Romans

\n \n Écrire un nouveau livre\n \n
\n\n
\n {projects.map(p => (\n onSelect(p.id)}\n className=\"bg-white p-8 rounded-[2.5rem] border border-indigo-50 shadow-sm hover:shadow-2xl hover:scale-[1.02] transition-all cursor-pointer group flex flex-col justify-between h-64\"\n >\n
\n
\n \n
\n

{p.title}

\n

Dernière modification : {new Date(p.lastModified).toLocaleDateString()}

\n
\n
\n {p.chapters.length} Chapitres\n \n
\n
\n ))}\n {projects.length === 0 && (\n
\n \n

Prêt à commencer votre premier roman ?

\n \n
\n )}\n
\n
\n\n {/* Sidebar Stats & Plan */}\n
\n
\n
\n

Utilisation

\n
\n
\n
\n Actions IA\n {user.usage.aiActionsCurrent} / {user.usage.aiActionsLimit === 999999 ? '∞' : user.usage.aiActionsLimit}\n
\n
\n \n
\n
\n
\n
\n Emplacements Roman\n {projects.length} / {user.usage.projectsLimit}\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n
\n );\n};\n\nexport default Dashboard;\n"],"names":[],"mappings":"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"}}, {"offset": {"line": 1144, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/dashboard/page.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { useRouter } from 'next/navigation';\r\nimport { useAuthContext } from '@/providers/AuthProvider';\r\nimport { useProjects } from '@/hooks/useProjects';\r\nimport Dashboard from '@/components/Dashboard';\r\nimport { Loader2, BookOpen } from 'lucide-react';\r\nimport { useEffect } from 'react';\r\n\r\nexport default function DashboardPage() {\r\n const router = useRouter();\r\n const { user, logout, loading } = useAuthContext();\r\n const { projects, setCurrentProjectId, createProject } = useProjects(user);\r\n\r\n useEffect(() => {\r\n if (!loading && !user) {\r\n router.replace('/login');\r\n }\r\n }, [user, loading, router]);\r\n\r\n if (loading || !user) {\r\n return (\r\n
\r\n \r\n
\r\n \r\n PlumeIA\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n {\r\n setCurrentProjectId(id);\r\n router.push(`/project/${id}`);\r\n }}\r\n onCreate={async () => {\r\n try {\r\n const id = await createProject();\r\n if (id) {\r\n setCurrentProjectId(id);\r\n router.push(`/project/${id}`);\r\n }\r\n } catch (err: any) {\r\n if (err?.message?.includes('Limite')) {\r\n alert(err.message);\r\n router.push('/pricing');\r\n } else {\r\n alert('Erreur lors de la création du projet');\r\n }\r\n }\r\n }}\r\n onLogout={() => {\r\n logout();\r\n router.push('/');\r\n }}\r\n onPricing={() => router.push('/pricing')}\r\n onProfile={() => router.push('/profile')}\r\n />\r\n );\r\n}\r\n"],"names":[],"mappings":";;;;;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAPA;;;;;;;;AASe,SAAS;IACpB,MAAM,SAAS,IAAA,2LAAS;IACxB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,+LAAc;IAChD,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,aAAa,EAAE,GAAG,IAAA,sLAAW,EAAC;IAErE,IAAA,8PAAS,EAAC;QACN,IAAI,CAAC,WAAW,CAAC,MAAM;YACnB,OAAO,OAAO,CAAC;QACnB;IACJ,GAAG;QAAC;QAAM;QAAS;KAAO;IAE1B,IAAI,WAAW,CAAC,MAAM;QAClB,qBACI,0RAAC;YAAI,WAAU;;8BACX,0RAAC,wQAAO;oBAAC,WAAU;oBAAkC,MAAM;;;;;;8BAC3D,0RAAC;oBAAI,WAAU;;sCACX,0RAAC,sQAAQ;4BAAC,WAAU;4BAAgB,MAAM;;;;;;sCAC1C,0RAAC;4BAAK,WAAU;sCAAoB;;;;;;;;;;;;;;;;;;IAIpD;IAEA,qBACI,0RAAC,sLAAS;QACN,MAAM;QACN,UAAU;QACV,UAAU,CAAC;YACP,oBAAoB;YACpB,OAAO,IAAI,CAAC,CAAC,SAAS,EAAE,IAAI;QAChC;QACA,UAAU;YACN,IAAI;gBACA,MAAM,KAAK,MAAM;gBACjB,IAAI,IAAI;oBACJ,oBAAoB;oBACpB,OAAO,IAAI,CAAC,CAAC,SAAS,EAAE,IAAI;gBAChC;YACJ,EAAE,OAAO,KAAU;gBACf,IAAI,KAAK,SAAS,SAAS,WAAW;oBAClC,MAAM,IAAI,OAAO;oBACjB,OAAO,IAAI,CAAC;gBAChB,OAAO;oBACH,MAAM;gBACV;YACJ;QACJ;QACA,UAAU;YACN;YACA,OAAO,IAAI,CAAC;QAChB;QACA,WAAW,IAAM,OAAO,IAAI,CAAC;QAC7B,WAAW,IAAM,OAAO,IAAI,CAAC;;;;;;AAGzC"}}] } \ No newline at end of file diff --git a/.next/dev/server/chunks/ssr/[root-of-the-server]__661e4e50._.js b/.next/dev/server/chunks/ssr/[root-of-the-server]__661e4e50._.js index c34cb6d..9461d78 100644 --- a/.next/dev/server/chunks/ssr/[root-of-the-server]__661e4e50._.js +++ b/.next/dev/server/chunks/ssr/[root-of-the-server]__661e4e50._.js @@ -38,7 +38,7 @@ function ProjectProvider({ value, children }) { children: children }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/providers/ProjectProvider.tsx", - lineNumber: 26, + lineNumber: 30, columnNumber: 12 }, this); } @@ -3309,7 +3309,7 @@ function ProjectLayout({ children }) { const pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["usePathname"])(); const projectId = params.id; const { user, logout, incrementUsage, loading: authLoading } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$providers$2f$AuthProvider$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useAuthContext"])(); - const { projects, setCurrentProjectId, updateProject, updateChapter, addChapter } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$hooks$2f$useProjects$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useProjects"])(user); + const { projects, setCurrentProjectId, updateProject, updateChapter, addChapter, createEntity, updateEntity, deleteEntity, deleteProject } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$hooks$2f$useProjects$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useProjects"])(user); const { chatHistory, isGenerating, sendMessage } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$hooks$2f$useChat$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useChat"])(); const [currentChapterId, setCurrentChapterId] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(''); const [isExportModalOpen, setIsExportModalOpen] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(false); @@ -3346,7 +3346,7 @@ function ProjectLayout({ children }) { size: 48 }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 61, + lineNumber: 62, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3357,7 +3357,7 @@ function ProjectLayout({ children }) { size: 20 }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 63, + lineNumber: 64, columnNumber: 21 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { @@ -3365,19 +3365,19 @@ function ProjectLayout({ children }) { children: "PlumeIA" }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 64, + lineNumber: 65, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 62, + lineNumber: 63, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 60, + lineNumber: 61, columnNumber: 13 }, this); } @@ -3390,7 +3390,7 @@ function ProjectLayout({ children }) { size: 48 }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 73, + lineNumber: 74, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { @@ -3398,13 +3398,13 @@ function ProjectLayout({ children }) { children: "Chargement du projet..." }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 74, + lineNumber: 75, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 72, + lineNumber: 73, columnNumber: 13 }, this); } @@ -3442,6 +3442,10 @@ function ProjectLayout({ children }) { setCurrentChapterId, updateProject: (updates)=>updateProject(projectId, updates), updateChapter: (chapterId, data)=>updateChapter(projectId, chapterId, data), + createEntity: (type, data)=>createEntity(projectId, type, data), + updateEntity: (entityId, data)=>updateEntity(projectId, entityId, data), + deleteEntity: (entityId)=>deleteEntity(projectId, entityId), + deleteProject: ()=>deleteProject(projectId), incrementUsage }, children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$components$2f$layout$2f$EditorShell$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { @@ -3491,7 +3495,7 @@ function ProjectLayout({ children }) { onPrint: ()=>{} }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 135, + lineNumber: 140, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$components$2f$HelpModal$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { @@ -3500,19 +3504,19 @@ function ProjectLayout({ children }) { viewMode: viewMode }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 136, + lineNumber: 141, columnNumber: 17 }, this), children ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 103, + lineNumber: 108, columnNumber: 13 }, this) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 93, + lineNumber: 94, columnNumber: 9 }, this); } diff --git a/.next/dev/server/chunks/ssr/[root-of-the-server]__661e4e50._.js.map b/.next/dev/server/chunks/ssr/[root-of-the-server]__661e4e50._.js.map index 62258e1..f1dcf45 100644 --- a/.next/dev/server/chunks/ssr/[root-of-the-server]__661e4e50._.js.map +++ b/.next/dev/server/chunks/ssr/[root-of-the-server]__661e4e50._.js.map @@ -2,8 +2,8 @@ "version": 3, "sources": [], "sections": [ - {"offset": {"line": 22, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/providers/ProjectProvider.tsx"],"sourcesContent":["'use client';\r\n\r\nimport React, { createContext, useContext } from 'react';\r\nimport { BookProject, UserProfile } from '@/lib/types';\r\n\r\ninterface ProjectContextType {\r\n project: BookProject;\r\n user: UserProfile;\r\n projectId: string;\r\n currentChapterId: string;\r\n setCurrentChapterId: (id: string) => void;\r\n updateProject: (updates: Partial) => void;\r\n updateChapter: (chapterId: string, data: any) => void;\r\n incrementUsage: () => void;\r\n}\r\n\r\nconst ProjectContext = createContext(null);\r\n\r\nexport function ProjectProvider({\r\n value,\r\n children,\r\n}: {\r\n value: ProjectContextType;\r\n children: React.ReactNode;\r\n}) {\r\n return {children};\r\n}\r\n\r\nexport function useProjectContext(): ProjectContextType {\r\n const ctx = useContext(ProjectContext);\r\n if (!ctx) throw new Error('useProjectContext must be used within ProjectProvider');\r\n return ctx;\r\n}\r\n"],"names":[],"mappings":";;;;;;;AAEA;AAFA;;;AAgBA,MAAM,+BAAiB,IAAA,kQAAa,EAA4B;AAEzD,SAAS,gBAAgB,EAC5B,KAAK,EACL,QAAQ,EAIX;IACG,qBAAO,0RAAC,eAAe,QAAQ;QAAC,OAAO;kBAAQ;;;;;;AACnD;AAEO,SAAS;IACZ,MAAM,MAAM,IAAA,+PAAU,EAAC;IACvB,IAAI,CAAC,KAAK,MAAM,IAAI,MAAM;IAC1B,OAAO;AACX"}}, - {"offset": {"line": 53, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/types.ts"],"sourcesContent":["\nexport enum EntityType {\n CHARACTER = 'Personnage',\n LOCATION = 'Lieu',\n OBJECT = 'Objet',\n NOTE = 'Note'\n}\n\nexport interface CharacterAttributes {\n age: number;\n height: number;\n hair: string;\n eyes: string;\n archetype: string;\n role: 'protagonist' | 'antagonist' | 'support' | 'extra';\n personality: {\n spectrumIntrovertExtravert: number;\n spectrumEmotionalRational: number;\n spectrumChaoticLawful: number;\n };\n physicalQuirk: string;\n behavioralQuirk: string;\n}\n\nexport type CustomFieldType = 'text' | 'textarea' | 'number' | 'boolean' | 'select';\n\nexport interface CustomFieldDefinition {\n id: string;\n label: string;\n type: CustomFieldType;\n options?: string[];\n placeholder?: string;\n}\n\nexport interface EntityTemplate {\n entityType: EntityType;\n fields: CustomFieldDefinition[];\n}\n\nexport interface Entity {\n id: string;\n type: EntityType;\n name: string;\n description: string;\n details: string;\n storyContext?: string;\n attributes?: CharacterAttributes;\n customValues?: Record;\n}\n\nexport interface Chapter {\n id: string;\n title: string;\n content: string;\n summary?: string;\n}\n\nexport type PlotNodeType = 'story' | 'dialogue' | 'action';\n\nexport interface PlotNode {\n id: string;\n x: number;\n y: number;\n title: string;\n description: string;\n color: string;\n type?: PlotNodeType;\n}\n\nexport interface PlotConnection {\n id: string;\n source: string;\n target: string;\n}\n\nexport interface WorkflowData {\n nodes: PlotNode[];\n connections: PlotConnection[];\n}\n\nexport type IdeaStatus = 'todo' | 'progress' | 'done';\nexport type IdeaCategory = 'plot' | 'character' | 'research' | 'todo';\n\nexport interface Idea {\n id: string;\n title: string;\n description: string;\n status: IdeaStatus;\n category: IdeaCategory;\n createdAt: number;\n}\n\nexport interface BookSettings {\n genre: string;\n subGenre?: string;\n targetAudience: string;\n tone: string;\n pov: string;\n tense: string;\n synopsis: string;\n themes: string;\n}\n\nexport interface BookProject {\n id: string;\n title: string;\n author: string;\n lastModified: number;\n settings?: BookSettings;\n // Direct fields sometimes used in creation/updates before settings normalization\n genre?: string;\n pov?: string;\n tense?: string;\n chapters: Chapter[];\n entities: Entity[];\n workflow?: WorkflowData;\n templates?: EntityTemplate[];\n styleGuide?: string;\n ideas?: Idea[];\n}\n\nexport interface ChatMessage {\n id: string;\n role: 'user' | 'model';\n text: string;\n responseType?: 'draft' | 'reflection';\n isLoading?: boolean;\n}\n\n// --- SAAS TYPES ---\n\nexport type PlanType = 'free' | 'pro' | 'master';\n\nexport interface Subscription {\n plan: PlanType;\n startDate: number;\n status: 'active' | 'canceled' | 'past_due';\n}\n\nexport interface UserUsage {\n aiActionsCurrent: number;\n aiActionsLimit: number;\n projectsLimit: number;\n}\n\nexport interface UserPreferences {\n theme: 'light' | 'dark' | 'sepia';\n dailyWordGoal: number;\n language: 'fr' | 'en';\n}\n\nexport interface UserStats {\n totalWordsWritten: number;\n writingStreak: number;\n lastWriteDate: number;\n}\n\nexport interface UserProfile {\n id: string;\n email: string;\n name: string;\n avatar?: string;\n bio?: string;\n subscription: Subscription;\n usage: UserUsage;\n preferences: UserPreferences;\n stats: UserStats;\n}\n\nexport type ViewMode = 'write' | 'world_building' | 'workflow' | 'settings' | 'preview' | 'ideas' | 'landing' | 'features' | 'pricing' | 'checkout' | 'dashboard' | 'auth' | 'signup' | 'profile';\n"],"names":[],"mappings":";;;;AACO,IAAA,AAAK,oCAAA;;;;;WAAA"}}, + {"offset": {"line": 22, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/providers/ProjectProvider.tsx"],"sourcesContent":["'use client';\r\n\r\nimport React, { createContext, useContext } from 'react';\r\nimport { BookProject, UserProfile, Entity, EntityType } from '@/lib/types';\r\n\r\ninterface ProjectContextType {\r\n project: BookProject;\r\n user: UserProfile;\r\n projectId: string;\r\n currentChapterId: string;\r\n setCurrentChapterId: (id: string) => void;\r\n updateProject: (updates: Partial) => void;\r\n updateChapter: (chapterId: string, data: any) => void;\r\n createEntity: (type: EntityType, initialData?: Partial) => Promise;\r\n updateEntity: (entityId: string, data: Partial) => Promise;\r\n deleteEntity: (entityId: string) => Promise;\r\n deleteProject: () => Promise;\r\n incrementUsage: () => void;\r\n}\r\n\r\nconst ProjectContext = createContext(null);\r\n\r\nexport function ProjectProvider({\r\n value,\r\n children,\r\n}: {\r\n value: ProjectContextType;\r\n children: React.ReactNode;\r\n}) {\r\n return {children};\r\n}\r\n\r\nexport function useProjectContext(): ProjectContextType {\r\n const ctx = useContext(ProjectContext);\r\n if (!ctx) throw new Error('useProjectContext must be used within ProjectProvider');\r\n return ctx;\r\n}\r\n"],"names":[],"mappings":";;;;;;;AAEA;AAFA;;;AAoBA,MAAM,+BAAiB,IAAA,kQAAa,EAA4B;AAEzD,SAAS,gBAAgB,EAC5B,KAAK,EACL,QAAQ,EAIX;IACG,qBAAO,0RAAC,eAAe,QAAQ;QAAC,OAAO;kBAAQ;;;;;;AACnD;AAEO,SAAS;IACZ,MAAM,MAAM,IAAA,+PAAU,EAAC;IACvB,IAAI,CAAC,KAAK,MAAM,IAAI,MAAM;IAC1B,OAAO;AACX"}}, + {"offset": {"line": 53, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/types.ts"],"sourcesContent":["\nexport enum EntityType {\n CHARACTER = 'Personnage',\n LOCATION = 'Lieu',\n OBJECT = 'Objet',\n NOTE = 'Note'\n}\n\nexport interface CharacterAttributes {\n age: number;\n height: number;\n hair: string;\n eyes: string;\n archetype: string;\n role: 'protagonist' | 'antagonist' | 'support' | 'extra';\n personality: {\n spectrumIntrovertExtravert: number;\n spectrumEmotionalRational: number;\n spectrumChaoticLawful: number;\n };\n physicalQuirk: string;\n behavioralQuirk: string;\n}\n\nexport type CustomFieldType = 'text' | 'textarea' | 'number' | 'boolean' | 'select';\n\nexport interface CustomFieldDefinition {\n id: string;\n label: string;\n type: CustomFieldType;\n options?: string[];\n placeholder?: string;\n}\n\nexport interface EntityTemplate {\n entityType: EntityType;\n fields: CustomFieldDefinition[];\n}\n\nexport interface Entity {\n id: string;\n type: EntityType;\n name: string;\n description: string;\n details: string;\n storyContext?: string;\n attributes?: CharacterAttributes;\n customValues?: Record;\n}\n\nexport interface Chapter {\n id: string;\n title: string;\n content: string;\n summary?: string;\n}\n\nexport type PlotNodeType = 'story' | 'dialogue' | 'action';\n\nexport interface PlotNode {\n id: string;\n x: number;\n y: number;\n title: string;\n description: string;\n color: string;\n type?: PlotNodeType;\n}\n\nexport interface PlotConnection {\n id: string;\n source: string;\n target: string;\n}\n\nexport interface WorkflowData {\n nodes: PlotNode[];\n connections: PlotConnection[];\n}\n\nexport type IdeaStatus = 'todo' | 'progress' | 'done';\nexport type IdeaCategory = 'plot' | 'character' | 'research' | 'todo';\n\nexport interface Idea {\n id: string;\n title: string;\n description: string;\n status: IdeaStatus;\n category: IdeaCategory;\n createdAt: number;\n}\n\nexport interface BookSettings {\n genre: string;\n subGenre?: string;\n targetAudience: string;\n tone: string;\n pov: string;\n tense: string;\n synopsis: string;\n themes: string;\n}\n\nexport interface BookProject {\n id: string;\n title: string;\n author: string;\n lastModified: number;\n settings?: BookSettings;\n // Direct fields sometimes used in creation/updates before settings normalization\n genre?: string;\n pov?: string;\n tense?: string;\n chapters: Chapter[];\n entities: Entity[];\n workflow?: WorkflowData;\n templates?: EntityTemplate[];\n styleGuide?: string;\n ideas?: Idea[];\n}\n\nexport interface ChatMessage {\n id: string;\n role: 'user' | 'model';\n text: string;\n responseType?: 'draft' | 'reflection';\n isLoading?: boolean;\n}\n\n// --- SAAS TYPES ---\n\nexport interface PlanData {\n id: string;\n name: string;\n displayName: string;\n price: number;\n description: string;\n features: string[];\n isPopular: boolean;\n maxProjects: number;\n maxAiActions: number;\n}\n\nexport interface Subscription {\n plan: string; // The ID of the plan\n planDetails?: PlanData; // The populated plan details from DB\n startDate: number;\n status: 'active' | 'canceled' | 'past_due';\n}\n\nexport interface UserUsage {\n aiActionsCurrent: number;\n aiActionsLimit: number;\n projectsLimit: number;\n}\n\nexport interface UserPreferences {\n theme: 'light' | 'dark' | 'sepia';\n dailyWordGoal: number;\n language: 'fr' | 'en';\n}\n\nexport interface UserStats {\n totalWordsWritten: number;\n writingStreak: number;\n lastWriteDate: number;\n}\n\nexport interface UserProfile {\n id: string;\n email: string;\n name: string;\n avatar?: string;\n bio?: string;\n subscription: Subscription;\n usage: UserUsage;\n preferences: UserPreferences;\n stats: UserStats;\n}\n\nexport type ViewMode = 'write' | 'world_building' | 'workflow' | 'settings' | 'preview' | 'ideas' | 'landing' | 'features' | 'pricing' | 'checkout' | 'dashboard' | 'auth' | 'signup' | 'profile';\n"],"names":[],"mappings":";;;;AACO,IAAA,AAAK,oCAAA;;;;;WAAA"}}, {"offset": {"line": 68, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/constants.ts"],"sourcesContent":["\nimport { EntityType } from \"./types\";\n\nexport const DEFAULT_BOOK_TITLE = \"Nouveau Roman\";\nexport const DEFAULT_AUTHOR = \"Auteur Inconnu\";\n\nexport const INITIAL_CHAPTER = {\n id: 'chap-1',\n title: 'Chapitre 1',\n content: '

Il était une fois...

',\n summary: 'Début de l\\'histoire.'\n};\n\nexport const ENTITY_ICONS: Record = {\n [EntityType.CHARACTER]: '👤',\n [EntityType.LOCATION]: '🏰',\n [EntityType.OBJECT]: '🗝️',\n [EntityType.NOTE]: '📝',\n};\n\n// Colors for tags\nexport const ENTITY_COLORS: Record = {\n [EntityType.CHARACTER]: 'bg-blue-100 text-blue-800 border-blue-200',\n [EntityType.LOCATION]: 'bg-green-100 text-green-800 border-green-200',\n [EntityType.OBJECT]: 'bg-amber-100 text-amber-800 border-amber-200',\n [EntityType.NOTE]: 'bg-gray-100 text-gray-800 border-gray-200',\n};\n\n// --- Character Creation Lists ---\n\nexport const HAIR_COLORS = [\n \"Brun\", \"Noir\", \"Blond\", \"Roux\", \"Auburn\", \"Gris\", \"Blanc\", \"Châtain\", \"Chauve\", \"Teinture (Bleu/Rose/Etc)\"\n];\n\nexport const EYE_COLORS = [\n \"Marron\", \"Bleu\", \"Vert\", \"Noisette\", \"Gris\", \"Noir\", \"Vairons\", \"Ambre\"\n];\n\nexport const ARCHETYPES = [\n \"Le Héros\", \"L'Ombre / Le Méchant\", \"Le Mentor\", \"Le Gardien du Seuil\",\n \"Le Shapeshifter (Changeforme)\", \"Le Trickster (Farceur)\", \"L'Allié\", \"L'Élu\",\n \"Le Rebelle\", \"Le Séducteur\", \"Le Sage\", \"Le Guerrier\", \"L'Innocent\"\n];\n\n// --- Book Settings Lists ---\n\nexport const GENRES = [\n \"Fantasy\", \"Science-Fiction\", \"Thriller / Polar\", \"Romance\", \"Historique\",\n \"Horreur\", \"Aventure\", \"Contemporain\", \"Jeunesse / Young Adult\", \"Dystopie\"\n];\n\nexport const TONES = [\n \"Sombre & Sérieux\", \"Léger & Humoristique\", \"Épique & Grandiose\",\n \"Mélancolique\", \"Mystérieux\", \"Optimiste\", \"Cynique\", \"Romantique\"\n];\n\nexport const POV_OPTIONS = [\n \"1ère personne (Je)\",\n \"3ème personne (Limitée au protagoniste)\",\n \"3ème personne (Omnisciente)\",\n \"Multi-points de vue (Alterné)\"\n];\n\nexport const TENSE_OPTIONS = [\n \"Passé (Passé simple / Imparfait)\",\n \"Présent de narration\"\n];"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AAEO,MAAM,qBAAqB;AAC3B,MAAM,iBAAiB;AAEvB,MAAM,kBAAkB;IAC7B,IAAI;IACJ,OAAO;IACP,SAAS;IACT,SAAS;AACX;AAEO,MAAM,eAA2C;IACtD,CAAC,6KAAU,CAAC,SAAS,CAAC,EAAE;IACxB,CAAC,6KAAU,CAAC,QAAQ,CAAC,EAAE;IACvB,CAAC,6KAAU,CAAC,MAAM,CAAC,EAAE;IACrB,CAAC,6KAAU,CAAC,IAAI,CAAC,EAAE;AACrB;AAGO,MAAM,gBAA4C;IACvD,CAAC,6KAAU,CAAC,SAAS,CAAC,EAAE;IACxB,CAAC,6KAAU,CAAC,QAAQ,CAAC,EAAE;IACvB,CAAC,6KAAU,CAAC,MAAM,CAAC,EAAE;IACrB,CAAC,6KAAU,CAAC,IAAI,CAAC,EAAE;AACrB;AAIO,MAAM,cAAc;IACzB;IAAQ;IAAQ;IAAS;IAAQ;IAAU;IAAQ;IAAS;IAAW;IAAU;CAClF;AAEM,MAAM,aAAa;IACxB;IAAU;IAAQ;IAAQ;IAAY;IAAQ;IAAQ;IAAW;CAClE;AAEM,MAAM,aAAa;IACxB;IAAY;IAAwB;IAAa;IACjD;IAAiC;IAA0B;IAAW;IACtE;IAAc;IAAgB;IAAW;IAAe;CACzD;AAIM,MAAM,SAAS;IACpB;IAAW;IAAmB;IAAoB;IAAW;IAC7D;IAAW;IAAY;IAAgB;IAA0B;CAClE;AAEM,MAAM,QAAQ;IACnB;IAAoB;IAAwB;IAC5C;IAAgB;IAAc;IAAa;IAAW;CACvD;AAEM,MAAM,cAAc;IACzB;IACA;IACA;IACA;CACD;AAEM,MAAM,gBAAgB;IAC3B;IACA;CACD"}}, {"offset": {"line": 189, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/hooks/useProjects.ts"],"sourcesContent":["'use client';\r\n\r\nimport { useState, useEffect } from 'react';\r\nimport {\r\n BookProject,\r\n Chapter,\r\n Entity,\r\n EntityType,\r\n UserProfile,\r\n} from '@/lib/types';\r\nimport api from '@/lib/api';\r\nimport {\r\n DEFAULT_BOOK_TITLE,\r\n DEFAULT_AUTHOR,\r\n INITIAL_CHAPTER\r\n} from '@/lib/constants';\r\n\r\nexport const useProjects = (user: UserProfile | null) => {\r\n const [projects, setProjects] = useState([]);\r\n const [currentProjectId, setCurrentProjectId] = useState(null);\r\n const [loading, setLoading] = useState(false);\r\n\r\n // Load Projects\r\n useEffect(() => {\r\n if (!user) {\r\n setProjects([]);\r\n return;\r\n }\r\n const loadProjects = async () => {\r\n setLoading(true);\r\n try {\r\n const data = await api.projects.list();\r\n const mapped: BookProject[] = (data || []).map((p: any) => ({\r\n id: p.id,\r\n title: p.title,\r\n author: p.author,\r\n lastModified: new Date(p.updatedAt).getTime(),\r\n // Use _count for display before full details are loaded\r\n chapters: Array.from({ length: p._count?.chapters || 0 }, (_, i) => ({ id: `placeholder-${i}`, title: '', content: '' })),\r\n entities: Array.from({ length: p._count?.entities || 0 }, (_, i) => ({ id: `placeholder-${i}`, type: 'character' as any, name: '', description: '' })),\r\n ideas: [],\r\n settings: p.settings || undefined\r\n }));\r\n setProjects(mapped);\r\n } catch (err) {\r\n console.error('Failed to load projects', err);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n loadProjects();\r\n }, [user]);\r\n\r\n // Load details when project is selected\r\n useEffect(() => {\r\n if (!currentProjectId) return;\r\n\r\n const loadProjectDetails = async () => {\r\n try {\r\n const fullProject = await api.projects.get(currentProjectId);\r\n const mapped: BookProject = {\r\n id: fullProject.id,\r\n title: fullProject.title,\r\n author: fullProject.author,\r\n lastModified: new Date(fullProject.updatedAt).getTime(),\r\n settings: fullProject.settings || undefined,\r\n styleGuide: fullProject.styleGuide || undefined,\r\n chapters: (fullProject.chapters || []).map((c: any) => ({\r\n id: c.id,\r\n title: c.title,\r\n content: c.content,\r\n summary: c.summary,\r\n })),\r\n entities: (fullProject.entities || []).map((e: any) => ({\r\n id: e.id,\r\n type: e.type,\r\n name: e.name,\r\n description: e.description,\r\n details: e.details,\r\n storyContext: e.storyContext,\r\n attributes: e.attributes,\r\n customValues: e.customValues,\r\n })),\r\n ideas: (fullProject.ideas || []).map((i: any) => ({\r\n id: i.id,\r\n title: i.title,\r\n description: i.description,\r\n status: i.status,\r\n category: i.category,\r\n createdAt: new Date(i.createdAt).getTime(),\r\n })),\r\n workflow: {\r\n nodes: (fullProject.plotNodes || []).map((n: any) => ({\r\n id: n.id,\r\n x: n.x,\r\n y: n.y,\r\n title: n.title,\r\n description: n.description,\r\n color: n.color,\r\n type: n.type,\r\n })),\r\n connections: (fullProject.plotConnections || []).map((c: any) => ({\r\n id: c.id,\r\n source: c.source,\r\n target: c.target,\r\n })),\r\n },\r\n };\r\n setProjects(prev => prev.map(p => p.id === currentProjectId ? mapped : p));\r\n } catch (err) {\r\n console.error(\"Failed to load project details\", err);\r\n }\r\n };\r\n loadProjectDetails();\r\n }, [currentProjectId]);\r\n\r\n const createProject = async () => {\r\n if (!user) return;\r\n\r\n try {\r\n const created = await api.projects.create({\r\n title: DEFAULT_BOOK_TITLE,\r\n author: user.name || DEFAULT_AUTHOR,\r\n settings: { genre: 'Fantasy', targetAudience: 'Adult', tone: 'Epic' },\r\n });\r\n\r\n const newProject: BookProject = {\r\n id: created.id,\r\n title: created.title,\r\n author: created.author,\r\n lastModified: Date.now(),\r\n chapters: [],\r\n entities: [],\r\n ideas: [],\r\n settings: created.settings,\r\n };\r\n\r\n setProjects(prev => [...prev, newProject]);\r\n await addChapter(created.id, INITIAL_CHAPTER);\r\n return created.id;\r\n } catch (err) {\r\n console.error('Failed to create project', err);\r\n throw err;\r\n }\r\n };\r\n\r\n const updateProject = async (id: string, data: Partial) => {\r\n setProjects(prev => prev.map(p => p.id === id ? { ...p, ...data } : p));\r\n\r\n try {\r\n // Persist project fields\r\n const payload: any = {};\r\n if (data.title !== undefined) payload.title = data.title;\r\n if (data.author !== undefined) payload.author = data.author;\r\n if (data.settings !== undefined) payload.settings = data.settings;\r\n if (data.styleGuide !== undefined) payload.styleGuide = data.styleGuide;\r\n if (Object.keys(payload).length > 0) {\r\n await api.projects.update(id, payload);\r\n }\r\n\r\n // Persist workflow (nodes + connections) separately\r\n if (data.workflow) {\r\n await api.projects.syncWorkflow(id, {\r\n nodes: data.workflow.nodes || [],\r\n connections: data.workflow.connections || [],\r\n });\r\n }\r\n } catch (err) {\r\n console.error(\"Failed to update project\", err);\r\n }\r\n };\r\n\r\n const addChapter = async (projectId: string, chapterData: Partial) => {\r\n try {\r\n const newChap = await api.chapters.create({\r\n projectId,\r\n title: chapterData.title || 'New Chapter',\r\n content: chapterData.content || '',\r\n summary: chapterData.summary || undefined,\r\n });\r\n\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n chapters: [...p.chapters, {\r\n id: newChap.id,\r\n title: newChap.title,\r\n content: newChap.content,\r\n summary: newChap.summary,\r\n }]\r\n };\r\n }));\r\n return newChap.id;\r\n } catch (err) {\r\n console.error(\"Failed to add chapter\", err);\r\n return null;\r\n }\r\n };\r\n\r\n const updateChapter = async (projectId: string, chapterId: string, data: Partial) => {\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n chapters: p.chapters.map(c => c.id === chapterId ? { ...c, ...data } : c)\r\n };\r\n }));\r\n\r\n try {\r\n await api.chapters.update(chapterId, data);\r\n } catch (err) {\r\n console.error(\"Failed to update chapter\", err);\r\n }\r\n };\r\n\r\n const createEntity = async (projectId: string, type: EntityType, initialData?: Partial) => {\r\n try {\r\n const newEntity = await api.entities.create({\r\n projectId,\r\n type,\r\n name: initialData?.name || `Nouveau ${type}`,\r\n description: initialData?.description || '',\r\n details: initialData?.details || '',\r\n attributes: initialData?.attributes || undefined,\r\n customValues: initialData?.customValues || undefined,\r\n });\r\n\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n entities: [...p.entities, {\r\n id: newEntity.id,\r\n type: newEntity.type,\r\n name: newEntity.name,\r\n description: newEntity.description,\r\n details: newEntity.details,\r\n attributes: newEntity.attributes,\r\n customValues: newEntity.customValues || {},\r\n }]\r\n };\r\n }));\r\n return newEntity.id;\r\n } catch (err) {\r\n console.error(\"Failed to create entity\", err);\r\n throw err;\r\n }\r\n };\r\n\r\n const updateEntity = async (projectId: string, entityId: string, data: Partial) => {\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n entities: p.entities.map(e => e.id === entityId ? { ...e, ...data } : e)\r\n };\r\n }));\r\n\r\n try {\r\n await api.entities.update(entityId, data);\r\n } catch (err) {\r\n console.error(\"Failed to update entity\", err);\r\n }\r\n };\r\n\r\n const deleteEntity = async (projectId: string, entityId: string) => {\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n entities: p.entities.filter(e => e.id !== entityId)\r\n };\r\n }));\r\n\r\n try {\r\n await api.entities.delete(entityId);\r\n } catch (err) {\r\n console.error(\"Failed to delete entity\", err);\r\n }\r\n };\r\n\r\n return {\r\n projects,\r\n currentProjectId,\r\n setCurrentProjectId,\r\n createProject,\r\n updateProject,\r\n addChapter,\r\n updateChapter,\r\n createEntity,\r\n updateEntity,\r\n deleteEntity,\r\n deleteProject: async (projectId: string) => {\r\n try {\r\n // Cascade delete is handled by Prisma, just delete the project\r\n await api.projects.delete(projectId);\r\n\r\n setProjects(prev => prev.filter(p => p.id !== projectId));\r\n if (currentProjectId === projectId) {\r\n setCurrentProjectId(null);\r\n }\r\n } catch (err) {\r\n console.error(\"Failed to delete project\", err);\r\n }\r\n }\r\n };\r\n};\r\n"],"names":[],"mappings":"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"}}, {"offset": {"line": 512, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/hooks/useChat.ts"],"sourcesContent":["'use client';\r\n\r\nimport { useState } from 'react';\r\nimport {\r\n BookProject,\r\n ChatMessage,\r\n UserProfile,\r\n} from '@/lib/types';\r\nimport api from '@/lib/api';\r\n\r\nexport const useChat = () => {\r\n const [chatHistory, setChatHistory] = useState([]);\r\n const [isGenerating, setIsGenerating] = useState(false);\r\n\r\n const sendMessage = async (\r\n project: BookProject,\r\n context: string,\r\n text: string,\r\n user: UserProfile,\r\n incrementUsage: () => void\r\n ) => {\r\n const userMsg: ChatMessage = {\r\n id: Date.now().toString(),\r\n role: 'user',\r\n text: text\r\n };\r\n setChatHistory(prev => [...prev, userMsg]);\r\n setIsGenerating(true);\r\n\r\n try {\r\n const response = await api.ai.generate(\r\n project,\r\n context === 'global' ? '' : context,\r\n text,\r\n user\r\n );\r\n\r\n incrementUsage();\r\n\r\n const aiMsg: ChatMessage = {\r\n id: (Date.now() + 1).toString(),\r\n role: 'model',\r\n text: response.text,\r\n responseType: response.type\r\n };\r\n setChatHistory(prev => [...prev, aiMsg]);\r\n } catch {\r\n setChatHistory(prev => [...prev, {\r\n id: Date.now().toString(),\r\n role: 'model',\r\n text: \"Désolé, une erreur est survenue lors de la génération.\"\r\n }]);\r\n } finally {\r\n setIsGenerating(false);\r\n }\r\n };\r\n\r\n return { chatHistory, isGenerating, sendMessage };\r\n};\r\n"],"names":[],"mappings":";;;;AAEA;AAMA;AARA;;;AAUO,MAAM,UAAU;IACnB,MAAM,CAAC,aAAa,eAAe,GAAG,IAAA,6PAAQ,EAAgB,EAAE;IAChE,MAAM,CAAC,cAAc,gBAAgB,GAAG,IAAA,6PAAQ,EAAC;IAEjD,MAAM,cAAc,OAChB,SACA,SACA,MACA,MACA;QAEA,MAAM,UAAuB;YACzB,IAAI,KAAK,GAAG,GAAG,QAAQ;YACvB,MAAM;YACN,MAAM;QACV;QACA,eAAe,CAAA,OAAQ;mBAAI;gBAAM;aAAQ;QACzC,gBAAgB;QAEhB,IAAI;YACA,MAAM,WAAW,MAAM,wKAAG,CAAC,EAAE,CAAC,QAAQ,CAClC,SACA,YAAY,WAAW,KAAK,SAC5B,MACA;YAGJ;YAEA,MAAM,QAAqB;gBACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE,QAAQ;gBAC7B,MAAM;gBACN,MAAM,SAAS,IAAI;gBACnB,cAAc,SAAS,IAAI;YAC/B;YACA,eAAe,CAAA,OAAQ;uBAAI;oBAAM;iBAAM;QAC3C,EAAE,OAAM;YACJ,eAAe,CAAA,OAAQ;uBAAI;oBAAM;wBAC7B,IAAI,KAAK,GAAG,GAAG,QAAQ;wBACvB,MAAM;wBACN,MAAM;oBACV;iBAAE;QACN,SAAU;YACN,gBAAgB;QACpB;IACJ;IAEA,OAAO;QAAE;QAAa;QAAc;IAAY;AACpD"}}, @@ -11,5 +11,5 @@ {"offset": {"line": 874, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/components/layout/EditorShell.tsx"],"sourcesContent":["'use client';\n\n\nimport React, { useState } from 'react';\nimport { BookProject, UserProfile, ViewMode, ChatMessage } from '@/lib/types';\nimport AIPanel from '@/components/AIPanel';\nimport { Book, FileText, Globe, GitGraph, Lightbulb, Settings, Menu, ChevronRight, ChevronLeft, Share2, HelpCircle, LogOut, LayoutDashboard, User, Plus, Trash2 } from 'lucide-react';\n\ninterface EditorShellProps {\n project: BookProject;\n user: UserProfile;\n viewMode: ViewMode;\n currentChapterId: string;\n chatHistory: ChatMessage[];\n isGenerating: boolean;\n onViewModeChange: (mode: ViewMode) => void;\n onChapterSelect: (id: string) => void;\n onUpdateProject: (updates: Partial) => void;\n onAddChapter: () => Promise;\n onDeleteChapter: (id: string) => void;\n onLogout: () => void;\n onSendMessage: (msg: string) => void;\n onInsertText: (text: string) => void;\n onOpenExport: () => void;\n onOpenHelp: () => void;\n children: React.ReactNode;\n}\n\nconst EditorShell: React.FC = (props) => {\n const { project, user, viewMode, currentChapterId, children } = props;\n const [isSidebarOpen, setIsSidebarOpen] = useState(true);\n const [isAiPanelOpen, setIsAiPanelOpen] = useState(true);\n\n const currentChapter = project.chapters.find(c => c.id === currentChapterId);\n\n return (\n
\n\n {/* SIDEBAR */}\n \n\n {/* MAIN CONTENT */}\n
\n
\n
\n \n {viewMode === 'write' ? (\n props.onUpdateProject({ chapters: project.chapters.map(c => c.id === currentChapterId ? { ...c, title: e.target.value } : c) })}\n className=\"font-serif font-bold text-lg bg-transparent border-b border-transparent focus:border-blue-500 focus:outline-none\"\n />\n ) : (\n {viewMode}\n )}\n
\n
\n \n \n \n
\n
\n\n
\n {children}\n
\n
\n\n {/* AI PANEL */}\n
\n {isAiPanelOpen && }\n
\n
\n );\n};\n\nexport default EditorShell;\n"],"names":[],"mappings":"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"}}, {"offset": {"line": 1410, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/components/ExportModal.tsx"],"sourcesContent":["'use client';\n\nimport React, { useState } from 'react';\nimport { BookProject } from '@/lib/types';\nimport { FileText, FileType, Printer, X, Download, Book, FileJson } from 'lucide-react';\n\ninterface ExportModalProps {\n isOpen: boolean;\n onClose: () => void;\n project: BookProject;\n onPrint: (options: { includeCover: boolean, includeTOC: boolean }) => void;\n}\n\ntype ExportFormat = 'pdf' | 'word' | 'epub' | 'markdown';\ntype PageSize = 'A4' | 'A5' | 'Letter';\n\nconst ExportModal: React.FC = ({ isOpen, onClose, project, onPrint }) => {\n const [format, setFormat] = useState('pdf');\n const [pageSize, setPageSize] = useState('A4');\n const [includeCover, setIncludeCover] = useState(true);\n const [includeTOC, setIncludeTOC] = useState(true);\n\n if (!isOpen) return null;\n\n const generateContentHTML = () => {\n let html = `\n \n \n \n \n ${project.title}\n \n \n \n `;\n\n if (includeCover) {\n html += `\n
\n

${project.title}

\n

${project.author}

\n
\n `;\n }\n\n if (includeTOC) {\n html += `

Table des Matières

    `;\n project.chapters.forEach((chap, idx) => {\n html += `
  • ${chap.title}
  • `;\n });\n html += `
`;\n }\n\n project.chapters.forEach((chap, idx) => {\n html += `\n
\n

${chap.title}

\n ${chap.content}\n
\n `;\n });\n\n html += ``;\n return html;\n };\n\n const handleExport = () => {\n const filename = project.title.replace(/[^a-z0-9]/gi, '_').toLowerCase();\n\n if (format === 'pdf') {\n // Open print dialog with the formatted content\n const content = generateContentHTML();\n const printWindow = window.open('', '_blank');\n if (printWindow) {\n printWindow.document.write(content);\n printWindow.document.close();\n printWindow.focus();\n setTimeout(() => {\n printWindow.print();\n }, 300);\n }\n onClose();\n }\n else if (format === 'word') {\n // Export as HTML with specific Word namespaces -> interpreted as doc by Word\n const content = generateContentHTML();\n const blob = new Blob(['\\ufeff', content], {\n type: 'application/msword'\n });\n downloadBlob(blob, `${filename}.doc`);\n }\n else if (format === 'epub') {\n // Export as a single XHTML file (Ebook ready)\n const content = generateContentHTML();\n const blob = new Blob([content], {\n type: 'application/xhtml+xml'\n });\n downloadBlob(blob, `${filename}.xhtml`);\n }\n else if (format === 'markdown') {\n let md = `# ${project.title}\\nBy ${project.author}\\n\\n`;\n project.chapters.forEach(c => {\n // Very basic HTML to Text conversion\n const text = c.content.replace(/<[^>]+>/g, '\\n');\n md += `## ${c.title}\\n\\n${text}\\n\\n---\\n\\n`;\n });\n const blob = new Blob([md], { type: 'text/markdown' });\n downloadBlob(blob, `${filename}.md`);\n }\n };\n\n const downloadBlob = (blob: Blob, name: string) => {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = name;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n onClose();\n };\n\n return (\n
\n
\n\n {/* Header */}\n
\n
\n

\n Exporter le livre\n

\n

{project.title}

\n
\n \n
\n\n {/* Body */}\n
\n\n {/* Format Selection */}\n
\n setFormat('pdf')}\n className={`p-4 rounded-lg border-2 flex flex-col items-center gap-3 transition-all ${format === 'pdf' ? 'border-blue-600 bg-blue-50 text-blue-800' : 'border-slate-200 hover:border-slate-300 text-slate-600'}`}\n >\n \n
PDF (Impression)
\n \n\n setFormat('word')}\n className={`p-4 rounded-lg border-2 flex flex-col items-center gap-3 transition-all ${format === 'word' ? 'border-blue-600 bg-blue-50 text-blue-800' : 'border-slate-200 hover:border-slate-300 text-slate-600'}`}\n >\n \n
Microsoft Word
\n \n\n setFormat('epub')}\n className={`p-4 rounded-lg border-2 flex flex-col items-center gap-3 transition-all ${format === 'epub' ? 'border-blue-600 bg-blue-50 text-blue-800' : 'border-slate-200 hover:border-slate-300 text-slate-600'}`}\n >\n \n
EPUB / Ebook
\n \n\n setFormat('markdown')}\n className={`p-4 rounded-lg border-2 flex flex-col items-center gap-3 transition-all ${format === 'markdown' ? 'border-blue-600 bg-blue-50 text-blue-800' : 'border-slate-200 hover:border-slate-300 text-slate-600'}`}\n >\n \n
Markdown
\n \n
\n\n {/* Options Section */}\n
\n

\n Paramètres d'exportation ({format.toUpperCase()})\n

\n\n
\n {format === 'pdf' && (\n
\n
\n \n Géré par l'imprimante (A4, A5...)\n
\n
Auto
\n
\n )}\n\n
\n \n setIncludeCover(e.target.checked)}\n className=\"w-5 h-5 rounded border-slate-300 text-blue-600 focus:ring-blue-500\"\n />\n
\n\n
\n \n setIncludeTOC(e.target.checked)}\n className=\"w-5 h-5 rounded border-slate-300 text-blue-600 focus:ring-blue-500\"\n />\n
\n\n {format === 'epub' && (\n

\n Note: L'export EPUB génère un fichier XHTML optimisé prêt à être converti par Calibre ou Kindle Previewer.\n

\n )}\n
\n
\n
\n\n {/* Footer */}\n
\n \n Annuler\n \n \n {format === 'pdf' ? : }\n {format === 'pdf' ? 'Imprimer / Enregistrer PDF' : `Télécharger .${format === 'word' ? 'doc' : format === 'epub' ? 'xhtml' : 'md'}`}\n \n
\n
\n
\n );\n};\n\nexport default ExportModal;"],"names":[],"mappings":"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"}}, {"offset": {"line": 1916, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/components/HelpModal.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport { X, Keyboard, MousePointerClick, MessageCircle, Sparkles, GitGraph, BookOpen, Command, Globe, Layout, Settings, Lightbulb } from 'lucide-react';\nimport { ViewMode } from '@/lib/types';\n\ninterface HelpModalProps {\n isOpen: boolean;\n onClose: () => void;\n viewMode: ViewMode;\n}\n\nconst Kbd: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n \n {children}\n \n);\n\nconst HelpModal: React.FC = ({ isOpen, onClose, viewMode }) => {\n if (!isOpen) return null;\n\n const renderContent = () => {\n switch (viewMode) {\n case 'ideas':\n return (\n
\n

\n Boîte à Idées & Tâches\n

\n
\n

\n Un espace de type Kanban pour ne rien oublier. Utilisez-le pour noter des idées fugaces, planifier des recherches ou lister les scènes à écrire.\n

\n
    \n
  • \n \n \n Glisser-Déposer : Déplacez les cartes d'une colonne à l'autre (À faire → En cours → Validé) pour suivre votre progression.\n \n
  • \n
  • \n \n \n Catégories : Utilisez les catégories (Intrigue, Personnage, Recherche) pour filtrer visuellement vos tâches grâce aux codes couleurs.\n \n
  • \n
\n
\n
\n );\n\n case 'workflow':\n return (\n <>\n {/* Workflow Section */}\n
\n

\n Organisation Narrative\n

\n
\n
    \n
  • \n \n \n Sélection : Ctrl + Clic pour sélectionner plusieurs cartes. Glissez pour déplacer tout un groupe.\n \n
  • \n
  • \n \n \n Copier / Coller : Ctrl + C pour copier les nœuds sélectionnés, Ctrl + V pour coller.\n \n
  • \n
  • \n \n \n Connexions : Tirez depuis le cercle à droite d'une carte pour lier les événements.\n \n
  • \n
\n
\n
\n\n {/* Dialogue Intelligent */}\n
\n

\n Mode Dialogue (Workflow)\n

\n
\n
\n
Écriture Rapide
\n

\n Tapez un nom et Entrée : le formatage Nom: s'ajoute seul.\n

\n

\n Dans un dialogue, Entrée change de ligne et devine le prochain interlocuteur automatiquement.\n

\n
\n
\n
Rotation & Insertion
\n

\n Tab permute instantanément entre les personnages présents dans la scène.\n

\n

\n Utilisez @ pour insérer un personnage, # pour un lieu.\n

\n
\n
\n
\n \n );\n\n case 'world_building':\n return (\n
\n

\n Bible du Monde\n

\n
\n

\n La bible du monde permet de centraliser toutes les informations sur vos personnages et lieux.\n Ces informations sont lues par l'IA pour assurer la cohérence de l'histoire.\n

\n
\n
\n

Modèles Personnalisés

\n

\n Cliquez sur le bouton \"Modèles\" pour ajouter des champs spécifiques (ex: \"Type de Magie\", \"Allégeance\") à tous vos personnages ou lieux.\n

\n
\n
\n

Contexte Automatique

\n

\n Le champ \"Contexte Narratif\" se remplit automatiquement au fur et à mesure que vous écrivez votre histoire et que l'IA détecte l'évolution des personnages.\n

\n
\n
\n
\n
\n );\n\n case 'settings':\n return (\n
\n

\n Paramètres du Livre\n

\n

\n Ces réglages sont cruciaux pour l'Assistant IA. Ils définissent le \"ton\" de toutes les générations de texte.\n

\n
    \n
  • Style Guide : Soyez précis sur le style (ex: \"phrases courtes\", \"beaucoup de métaphores\", \"humour noir\").
  • \n
  • POV (Point de Vue) : Définit si l'IA doit écrire en \"Je\" ou \"Il/Elle\".
  • \n
\n
\n );\n\n case 'write':\n default:\n return (\n
\n

\n Éditeur & Assistant IA\n

\n
\n
\n

Menu Contextuel Intelligent

\n

Sélectionnez du texte et faites un clic droit pour :

\n
    \n
  • Corriger l'orthographe
  • \n
  • Reformuler / Améliorer
  • \n
  • Développer (Show, don't tell)
  • \n
  • Continuer l'écriture
  • \n
\n
\n

\n Historique des versions : Activez la marge de droite (icône horloge) pour voir toutes les interventions de l'IA et revenir en arrière si nécessaire.\n

\n

\n Chat Latéral : Posez des questions sur votre histoire, demandez des résumés ou des idées de rebondissements. L'IA connaît le contexte de vos chapitres précédents et de vos fiches personnages.\n

\n \n
\n

\n Raccourcis Clavier (Éditeur)\n

\n
\n
\n
\n Mettre en Gras\n Ctrl + B\n
\n
\n Mettre en Italique\n Ctrl + I\n
\n
\n Souligner\n Ctrl + U\n
\n
\n
\n
\n Tout sélectionner\n Ctrl + A\n
\n
\n Annuler\n Ctrl + Z\n
\n
\n Rétablir\n Ctrl + Shift + Z\n
\n
\n
\n
\n
\n
\n );\n }\n };\n\n return (\n
\n
\n \n {/* Header */}\n
\n
\n

\n Aide : {\n viewMode === 'workflow' ? 'Workflow & Dialogues' :\n viewMode === 'world_building' ? 'Bible du Monde' :\n viewMode === 'settings' ? 'Paramètres' :\n viewMode === 'ideas' ? 'Boîte à Idées' :\n 'Éditeur & IA'\n }\n

\n

Astuces pour l'écran actuel.

\n
\n \n
\n\n {/* Content */}\n
\n \n {/* Context Specific Content */}\n {renderContent()}\n\n {/* General Footer Section (Always visible) */}\n
\n

Raccourcis Généraux

\n
\n
\n Sauvegarde Automatique\n Permanente\n
\n
\n Menu Latéral\n Clic sur le burger\n
\n
\n
\n\n
\n\n {/* Footer */}\n
\n \n
\n\n
\n
\n );\n};\n\nexport default HelpModal;"],"names":[],"mappings":"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"}}, - {"offset": {"line": 3270, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/project/%5Bid%5D/layout.tsx"],"sourcesContent":["'use client';\r\n\r\nimport React, { useState, useEffect } from 'react';\r\nimport { useParams, useRouter, usePathname } from 'next/navigation';\r\nimport { useAuthContext } from '@/providers/AuthProvider';\r\nimport { ProjectProvider } from '@/providers/ProjectProvider';\r\nimport { useProjects } from '@/hooks/useProjects';\r\nimport { useChat } from '@/hooks/useChat';\r\nimport { ViewMode } from '@/lib/types';\r\nimport EditorShell from '@/components/layout/EditorShell';\r\nimport ExportModal from '@/components/ExportModal';\r\nimport HelpModal from '@/components/HelpModal';\r\nimport { Loader2, BookOpen } from 'lucide-react';\r\n\r\nfunction getViewModeFromPath(pathname: string): ViewMode {\r\n if (pathname.endsWith('/world')) return 'world_building';\r\n if (pathname.endsWith('/ideas')) return 'ideas';\r\n if (pathname.endsWith('/workflow')) return 'workflow';\r\n if (pathname.endsWith('/settings')) return 'settings';\r\n return 'write';\r\n}\r\n\r\nexport default function ProjectLayout({ children }: { children: React.ReactNode }) {\r\n const params = useParams();\r\n const router = useRouter();\r\n const pathname = usePathname();\r\n const projectId = params.id as string;\r\n\r\n const { user, logout, incrementUsage, loading: authLoading } = useAuthContext();\r\n const {\r\n projects, setCurrentProjectId,\r\n updateProject, updateChapter, addChapter,\r\n } = useProjects(user);\r\n const { chatHistory, isGenerating, sendMessage } = useChat();\r\n\r\n const [currentChapterId, setCurrentChapterId] = useState('');\r\n const [isExportModalOpen, setIsExportModalOpen] = useState(false);\r\n const [isHelpModalOpen, setIsHelpModalOpen] = useState(false);\r\n\r\n const viewMode = getViewModeFromPath(pathname);\r\n\r\n useEffect(() => {\r\n if (projectId) setCurrentProjectId(projectId);\r\n }, [projectId, setCurrentProjectId]);\r\n\r\n useEffect(() => {\r\n if (!authLoading && !user) router.replace('/login');\r\n }, [user, authLoading, router]);\r\n\r\n const project = projects.find(p => p.id === projectId);\r\n\r\n useEffect(() => {\r\n if (project && (!currentChapterId || !project.chapters.some(c => c.id === currentChapterId))) {\r\n setCurrentChapterId(project.chapters[0]?.id || '');\r\n }\r\n }, [project, currentChapterId]);\r\n\r\n if (authLoading || !user) {\r\n return (\r\n
\r\n \r\n
\r\n \r\n PlumeIA\r\n
\r\n
\r\n );\r\n }\r\n\r\n if (!project) {\r\n return (\r\n
\r\n \r\n

Chargement du projet...

\r\n
\r\n );\r\n }\r\n\r\n const handleViewModeChange = (mode: ViewMode) => {\r\n const base = `/project/${projectId}`;\r\n switch (mode) {\r\n case 'write': router.push(base); break;\r\n case 'world_building': router.push(`${base}/world`); break;\r\n case 'ideas': router.push(`${base}/ideas`); break;\r\n case 'workflow': router.push(`${base}/workflow`); break;\r\n case 'settings': router.push(`${base}/settings`); break;\r\n case 'dashboard': router.push('/dashboard'); break;\r\n default: router.push(base);\r\n }\r\n };\r\n\r\n return (\r\n updateProject(projectId, updates),\r\n updateChapter: (chapterId, data) => updateChapter(projectId, chapterId, data),\r\n incrementUsage,\r\n }}>\r\n { setCurrentChapterId(id); router.push(`/project/${projectId}`); }}\r\n onUpdateProject={(updates) => updateProject(projectId, updates)}\r\n onAddChapter={async () => {\r\n const id = await addChapter(projectId, {});\r\n if (id) {\r\n setCurrentChapterId(id);\r\n router.push(`/project/${projectId}`);\r\n }\r\n }}\r\n onDeleteChapter={(id) => {\r\n if (project.chapters.length > 1) {\r\n const newChapters = project.chapters.filter(c => c.id !== id);\r\n updateProject(projectId, { chapters: newChapters });\r\n if (currentChapterId === id) setCurrentChapterId(newChapters[0].id);\r\n }\r\n }}\r\n onLogout={() => { logout(); router.push('/'); }}\r\n onSendMessage={(msg) => {\r\n if (project && user) sendMessage(project, 'global', msg, user, incrementUsage);\r\n }}\r\n onInsertText={() => { }}\r\n onOpenExport={() => setIsExportModalOpen(true)}\r\n onOpenHelp={() => setIsHelpModalOpen(true)}\r\n >\r\n setIsExportModalOpen(false)} project={project} onPrint={() => { }} />\r\n setIsHelpModalOpen(false)} viewMode={viewMode} />\r\n {children}\r\n \r\n \r\n );\r\n}\r\n"],"names":[],"mappings":";;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAZA;;;;;;;;;;;;AAcA,SAAS,oBAAoB,QAAgB;IACzC,IAAI,SAAS,QAAQ,CAAC,WAAW,OAAO;IACxC,IAAI,SAAS,QAAQ,CAAC,WAAW,OAAO;IACxC,IAAI,SAAS,QAAQ,CAAC,cAAc,OAAO;IAC3C,IAAI,SAAS,QAAQ,CAAC,cAAc,OAAO;IAC3C,OAAO;AACX;AAEe,SAAS,cAAc,EAAE,QAAQ,EAAiC;IAC7E,MAAM,SAAS,IAAA,2LAAS;IACxB,MAAM,SAAS,IAAA,2LAAS;IACxB,MAAM,WAAW,IAAA,6LAAW;IAC5B,MAAM,YAAY,OAAO,EAAE;IAE3B,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,WAAW,EAAE,GAAG,IAAA,+LAAc;IAC7E,MAAM,EACF,QAAQ,EAAE,mBAAmB,EAC7B,aAAa,EAAE,aAAa,EAAE,UAAU,EAC3C,GAAG,IAAA,sLAAW,EAAC;IAChB,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,IAAA,8KAAO;IAE1D,MAAM,CAAC,kBAAkB,oBAAoB,GAAG,IAAA,6PAAQ,EAAC;IACzD,MAAM,CAAC,mBAAmB,qBAAqB,GAAG,IAAA,6PAAQ,EAAC;IAC3D,MAAM,CAAC,iBAAiB,mBAAmB,GAAG,IAAA,6PAAQ,EAAC;IAEvD,MAAM,WAAW,oBAAoB;IAErC,IAAA,8PAAS,EAAC;QACN,IAAI,WAAW,oBAAoB;IACvC,GAAG;QAAC;QAAW;KAAoB;IAEnC,IAAA,8PAAS,EAAC;QACN,IAAI,CAAC,eAAe,CAAC,MAAM,OAAO,OAAO,CAAC;IAC9C,GAAG;QAAC;QAAM;QAAa;KAAO;IAE9B,MAAM,UAAU,SAAS,IAAI,CAAC,CAAA,IAAK,EAAE,EAAE,KAAK;IAE5C,IAAA,8PAAS,EAAC;QACN,IAAI,WAAW,CAAC,CAAC,oBAAoB,CAAC,QAAQ,QAAQ,CAAC,IAAI,CAAC,CAAA,IAAK,EAAE,EAAE,KAAK,iBAAiB,GAAG;YAC1F,oBAAoB,QAAQ,QAAQ,CAAC,EAAE,EAAE,MAAM;QACnD;IACJ,GAAG;QAAC;QAAS;KAAiB;IAE9B,IAAI,eAAe,CAAC,MAAM;QACtB,qBACI,0RAAC;YAAI,WAAU;;8BACX,0RAAC,wQAAO;oBAAC,WAAU;oBAAkC,MAAM;;;;;;8BAC3D,0RAAC;oBAAI,WAAU;;sCACX,0RAAC,sQAAQ;4BAAC,WAAU;4BAAgB,MAAM;;;;;;sCAC1C,0RAAC;4BAAK,WAAU;sCAAoB;;;;;;;;;;;;;;;;;;IAIpD;IAEA,IAAI,CAAC,SAAS;QACV,qBACI,0RAAC;YAAI,WAAU;;8BACX,0RAAC,wQAAO;oBAAC,WAAU;oBAAkC,MAAM;;;;;;8BAC3D,0RAAC;oBAAE,WAAU;8BAAiB;;;;;;;;;;;;IAG1C;IAEA,MAAM,uBAAuB,CAAC;QAC1B,MAAM,OAAO,CAAC,SAAS,EAAE,WAAW;QACpC,OAAQ;YACJ,KAAK;gBAAS,OAAO,IAAI,CAAC;gBAAO;YACjC,KAAK;gBAAkB,OAAO,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC;gBAAG;YACrD,KAAK;gBAAS,OAAO,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC;gBAAG;YAC5C,KAAK;gBAAY,OAAO,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC;gBAAG;YAClD,KAAK;gBAAY,OAAO,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC;gBAAG;YAClD,KAAK;gBAAa,OAAO,IAAI,CAAC;gBAAe;YAC7C;gBAAS,OAAO,IAAI,CAAC;QACzB;IACJ;IAEA,qBACI,0RAAC,mMAAe;QAAC,OAAO;YACpB;YACA;YACA;YACA;YACA;YACA,eAAe,CAAC,UAAY,cAAc,WAAW;YACrD,eAAe,CAAC,WAAW,OAAS,cAAc,WAAW,WAAW;YACxE;QACJ;kBACI,cAAA,0RAAC,kMAAW;YACR,SAAS;YACT,MAAM;YACN,UAAU;YACV,kBAAkB;YAClB,aAAa;YACb,cAAc;YACd,kBAAkB;YAClB,iBAAiB,CAAC;gBAAS,oBAAoB;gBAAK,OAAO,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW;YAAG;YAC1F,iBAAiB,CAAC,UAAY,cAAc,WAAW;YACvD,cAAc;gBACV,MAAM,KAAK,MAAM,WAAW,WAAW,CAAC;gBACxC,IAAI,IAAI;oBACJ,oBAAoB;oBACpB,OAAO,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW;gBACvC;YACJ;YACA,iBAAiB,CAAC;gBACd,IAAI,QAAQ,QAAQ,CAAC,MAAM,GAAG,GAAG;oBAC7B,MAAM,cAAc,QAAQ,QAAQ,CAAC,MAAM,CAAC,CAAA,IAAK,EAAE,EAAE,KAAK;oBAC1D,cAAc,WAAW;wBAAE,UAAU;oBAAY;oBACjD,IAAI,qBAAqB,IAAI,oBAAoB,WAAW,CAAC,EAAE,CAAC,EAAE;gBACtE;YACJ;YACA,UAAU;gBAAQ;gBAAU,OAAO,IAAI,CAAC;YAAM;YAC9C,eAAe,CAAC;gBACZ,IAAI,WAAW,MAAM,YAAY,SAAS,UAAU,KAAK,MAAM;YACnE;YACA,cAAc,KAAQ;YACtB,cAAc,IAAM,qBAAqB;YACzC,YAAY,IAAM,mBAAmB;;8BAErC,0RAAC,wLAAW;oBAAC,QAAQ;oBAAmB,SAAS,IAAM,qBAAqB;oBAAQ,SAAS;oBAAS,SAAS,KAAQ;;;;;;8BACvH,0RAAC,sLAAS;oBAAC,QAAQ;oBAAiB,SAAS,IAAM,mBAAmB;oBAAQ,UAAU;;;;;;gBACvF;;;;;;;;;;;;AAIjB"}}] + {"offset": {"line": 3270, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/project/%5Bid%5D/layout.tsx"],"sourcesContent":["'use client';\r\n\r\nimport React, { useState, useEffect } from 'react';\r\nimport { useParams, useRouter, usePathname } from 'next/navigation';\r\nimport { useAuthContext } from '@/providers/AuthProvider';\r\nimport { ProjectProvider } from '@/providers/ProjectProvider';\r\nimport { useProjects } from '@/hooks/useProjects';\r\nimport { useChat } from '@/hooks/useChat';\r\nimport { ViewMode } from '@/lib/types';\r\nimport EditorShell from '@/components/layout/EditorShell';\r\nimport ExportModal from '@/components/ExportModal';\r\nimport HelpModal from '@/components/HelpModal';\r\nimport { Loader2, BookOpen } from 'lucide-react';\r\n\r\nfunction getViewModeFromPath(pathname: string): ViewMode {\r\n if (pathname.endsWith('/world')) return 'world_building';\r\n if (pathname.endsWith('/ideas')) return 'ideas';\r\n if (pathname.endsWith('/workflow')) return 'workflow';\r\n if (pathname.endsWith('/settings')) return 'settings';\r\n return 'write';\r\n}\r\n\r\nexport default function ProjectLayout({ children }: { children: React.ReactNode }) {\r\n const params = useParams();\r\n const router = useRouter();\r\n const pathname = usePathname();\r\n const projectId = params.id as string;\r\n\r\n const { user, logout, incrementUsage, loading: authLoading } = useAuthContext();\r\n const {\r\n projects, setCurrentProjectId,\r\n updateProject, updateChapter, addChapter,\r\n createEntity, updateEntity, deleteEntity, deleteProject\r\n } = useProjects(user);\r\n const { chatHistory, isGenerating, sendMessage } = useChat();\r\n\r\n const [currentChapterId, setCurrentChapterId] = useState('');\r\n const [isExportModalOpen, setIsExportModalOpen] = useState(false);\r\n const [isHelpModalOpen, setIsHelpModalOpen] = useState(false);\r\n\r\n const viewMode = getViewModeFromPath(pathname);\r\n\r\n useEffect(() => {\r\n if (projectId) setCurrentProjectId(projectId);\r\n }, [projectId, setCurrentProjectId]);\r\n\r\n useEffect(() => {\r\n if (!authLoading && !user) router.replace('/login');\r\n }, [user, authLoading, router]);\r\n\r\n const project = projects.find(p => p.id === projectId);\r\n\r\n useEffect(() => {\r\n if (project && (!currentChapterId || !project.chapters.some(c => c.id === currentChapterId))) {\r\n setCurrentChapterId(project.chapters[0]?.id || '');\r\n }\r\n }, [project, currentChapterId]);\r\n\r\n if (authLoading || !user) {\r\n return (\r\n
\r\n \r\n
\r\n \r\n PlumeIA\r\n
\r\n
\r\n );\r\n }\r\n\r\n if (!project) {\r\n return (\r\n
\r\n \r\n

Chargement du projet...

\r\n
\r\n );\r\n }\r\n\r\n const handleViewModeChange = (mode: ViewMode) => {\r\n const base = `/project/${projectId}`;\r\n switch (mode) {\r\n case 'write': router.push(base); break;\r\n case 'world_building': router.push(`${base}/world`); break;\r\n case 'ideas': router.push(`${base}/ideas`); break;\r\n case 'workflow': router.push(`${base}/workflow`); break;\r\n case 'settings': router.push(`${base}/settings`); break;\r\n case 'dashboard': router.push('/dashboard'); break;\r\n default: router.push(base);\r\n }\r\n };\r\n\r\n return (\r\n updateProject(projectId, updates),\r\n updateChapter: (chapterId, data) => updateChapter(projectId, chapterId, data),\r\n createEntity: (type, data) => createEntity(projectId, type, data),\r\n updateEntity: (entityId, data) => updateEntity(projectId, entityId, data),\r\n deleteEntity: (entityId) => deleteEntity(projectId, entityId),\r\n deleteProject: () => deleteProject(projectId),\r\n incrementUsage,\r\n }}>\r\n { setCurrentChapterId(id); router.push(`/project/${projectId}`); }}\r\n onUpdateProject={(updates) => updateProject(projectId, updates)}\r\n onAddChapter={async () => {\r\n const id = await addChapter(projectId, {});\r\n if (id) {\r\n setCurrentChapterId(id);\r\n router.push(`/project/${projectId}`);\r\n }\r\n }}\r\n onDeleteChapter={(id) => {\r\n if (project.chapters.length > 1) {\r\n const newChapters = project.chapters.filter(c => c.id !== id);\r\n updateProject(projectId, { chapters: newChapters });\r\n if (currentChapterId === id) setCurrentChapterId(newChapters[0].id);\r\n }\r\n }}\r\n onLogout={() => { logout(); router.push('/'); }}\r\n onSendMessage={(msg) => {\r\n if (project && user) sendMessage(project, 'global', msg, user, incrementUsage);\r\n }}\r\n onInsertText={() => { }}\r\n onOpenExport={() => setIsExportModalOpen(true)}\r\n onOpenHelp={() => setIsHelpModalOpen(true)}\r\n >\r\n setIsExportModalOpen(false)} project={project} onPrint={() => { }} />\r\n setIsHelpModalOpen(false)} viewMode={viewMode} />\r\n {children}\r\n \r\n \r\n );\r\n}\r\n"],"names":[],"mappings":"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"}}] } \ No newline at end of file diff --git a/.next/dev/server/chunks/ssr/[root-of-the-server]__bcada481._.js b/.next/dev/server/chunks/ssr/[root-of-the-server]__bcada481._.js index c125cb4..9e3761b 100644 --- a/.next/dev/server/chunks/ssr/[root-of-the-server]__bcada481._.js +++ b/.next/dev/server/chunks/ssr/[root-of-the-server]__bcada481._.js @@ -12,45 +12,7 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__proje 'use client'; ; ; -const Pricing = ({ currentPlan, onBack, onSelectPlan })=>{ - const plans = [ - { - id: 'free', - name: 'Gratuit', - price: '0€', - desc: 'Idéal pour découvrir PlumeIA.', - features: [ - '10 actions IA / mois', - '1 projet actif', - 'Bible du monde simple' - ] - }, - { - id: 'pro', - name: 'Auteur Pro', - price: '12€', - desc: 'Pour les écrivains sérieux.', - features: [ - '500 actions IA / mois', - 'Projets illimités', - 'Export Word & EPUB', - 'Support prioritaire' - ], - popular: true - }, - { - id: 'master', - name: 'Maître Plume', - price: '29€', - desc: 'Le summum de l\'écriture IA.', - features: [ - 'Actions IA illimitées', - 'Accès Gemini 3 Pro', - 'Bible du monde avancée', - 'Outils de révision avancés' - ] - } - ]; +const Pricing = ({ plans, currentPlan, onBack, onSelectPlan, isLoading })=>{ return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "min-h-screen bg-[#eef2ff] py-20 px-8", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -64,14 +26,14 @@ const Pricing = ({ currentPlan, onBack, onSelectPlan })=>{ size: 20 }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 25, - columnNumber: 13 + lineNumber: 30, + columnNumber: 11 }, ("TURBOPACK compile-time value", void 0)), " Retour" ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 24, + lineNumber: 29, columnNumber: 9 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -82,131 +44,142 @@ const Pricing = ({ currentPlan, onBack, onSelectPlan })=>{ children: "Choisissez votre destin d'écrivain." }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 28, - columnNumber: 13 + lineNumber: 33, + columnNumber: 11 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { className: "text-slate-500", children: "Passez au plan supérieur pour libérer toute la puissance de l'IA." }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 29, - columnNumber: 13 + lineNumber: 34, + columnNumber: 11 }, ("TURBOPACK compile-time value", void 0)) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 27, + lineNumber: 32, columnNumber: 9 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-8", - children: plans.map((p)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { - className: `bg-white rounded-3xl p-8 border transition-all ${p.popular ? 'border-blue-500 shadow-2xl scale-105 z-10' : 'border-indigo-100 shadow-xl'}`, - children: [ - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { - className: "mb-8", - children: [ - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("h4", { - className: "text-xl font-bold text-slate-900 mb-2", - children: p.name - }, void 0, false, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 35, - columnNumber: 25 - }, ("TURBOPACK compile-time value", void 0)), - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { - className: "text-4xl font-black text-slate-900 mb-2", - children: [ - p.price, - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: "text-sm font-normal text-slate-400", - children: "/mois" - }, void 0, false, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 36, - columnNumber: 91 - }, ("TURBOPACK compile-time value", void 0)) - ] - }, void 0, true, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 36, - columnNumber: 25 - }, ("TURBOPACK compile-time value", void 0)), - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { - className: "text-sm text-slate-500", - children: p.desc - }, void 0, false, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 37, - columnNumber: 25 - }, ("TURBOPACK compile-time value", void 0)) - ] - }, void 0, true, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 34, - columnNumber: 21 - }, ("TURBOPACK compile-time value", void 0)), - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("ul", { - className: "space-y-4 mb-10", - children: p.features.map((f, i)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("li", { - className: "flex items-center gap-3 text-sm text-slate-700", - children: [ - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { - className: "text-blue-500 bg-blue-50 p-0.5 rounded-full", - children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Check$3e$__["Check"], { - size: 14 + children: [ + isLoading && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + className: "text-center col-span-3 py-10", + children: "Chargement des offres..." + }, void 0, false, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 37, + columnNumber: 25 + }, ("TURBOPACK compile-time value", void 0)), + !isLoading && plans.map((p)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: `bg-white rounded-3xl p-8 border transition-all ${p.isPopular ? 'border-blue-500 shadow-2xl scale-105 z-10' : 'border-indigo-100 shadow-xl'}`, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "mb-8", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("h4", { + className: "text-xl font-bold text-slate-900 mb-2", + children: p.displayName + }, void 0, false, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 41, + columnNumber: 17 + }, ("TURBOPACK compile-time value", void 0)), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "text-4xl font-black text-slate-900 mb-2", + children: [ + p.price, + "€", + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "text-sm font-normal text-slate-400", + children: "/mois" }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", lineNumber: 42, - columnNumber: 94 + columnNumber: 84 }, ("TURBOPACK compile-time value", void 0)) - }, void 0, false, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 42, - columnNumber: 33 - }, ("TURBOPACK compile-time value", void 0)), - f - ] - }, i, true, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 41, - columnNumber: 29 - }, ("TURBOPACK compile-time value", void 0))) - }, void 0, false, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 39, - columnNumber: 21 - }, ("TURBOPACK compile-time value", void 0)), - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { - onClick: ()=>onSelectPlan(p.id), - className: `w-full py-4 rounded-2xl font-black transition-all ${p.id === currentPlan ? 'bg-slate-100 text-slate-400 cursor-default' : p.popular ? 'bg-blue-600 text-white hover:bg-blue-700' : 'bg-slate-900 text-white hover:bg-slate-800'}`, - children: p.id === currentPlan ? 'Plan Actuel' : 'Sélectionner' - }, void 0, false, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 47, - columnNumber: 21 - }, ("TURBOPACK compile-time value", void 0)) - ] - }, p.id, true, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 33, - columnNumber: 17 - }, ("TURBOPACK compile-time value", void 0))) - }, void 0, false, { + ] + }, void 0, true, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 42, + columnNumber: 17 + }, ("TURBOPACK compile-time value", void 0)), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + className: "text-sm text-slate-500", + children: p.description + }, void 0, false, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 43, + columnNumber: 17 + }, ("TURBOPACK compile-time value", void 0)) + ] + }, void 0, true, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 40, + columnNumber: 15 + }, ("TURBOPACK compile-time value", void 0)), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("ul", { + className: "space-y-4 mb-10", + children: p.features.map((f, i)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("li", { + className: "flex items-center gap-3 text-sm text-slate-700", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "text-blue-500 bg-blue-50 p-0.5 rounded-full", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Check$3e$__["Check"], { + size: 14 + }, void 0, false, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 48, + columnNumber: 82 + }, ("TURBOPACK compile-time value", void 0)) + }, void 0, false, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 48, + columnNumber: 21 + }, ("TURBOPACK compile-time value", void 0)), + f + ] + }, i, true, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 47, + columnNumber: 19 + }, ("TURBOPACK compile-time value", void 0))) + }, void 0, false, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 45, + columnNumber: 15 + }, ("TURBOPACK compile-time value", void 0)), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + onClick: ()=>onSelectPlan(p.id), + className: `w-full py-4 rounded-2xl font-black transition-all ${p.id === currentPlan ? 'bg-slate-100 text-slate-400 cursor-default' : p.isPopular ? 'bg-blue-600 text-white hover:bg-blue-700' : 'bg-slate-900 text-white hover:bg-slate-800'}`, + children: p.id === currentPlan ? 'Plan Actuel' : 'Sélectionner' + }, void 0, false, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 53, + columnNumber: 15 + }, ("TURBOPACK compile-time value", void 0)) + ] + }, p.id, true, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 39, + columnNumber: 13 + }, ("TURBOPACK compile-time value", void 0))) + ] + }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 31, + lineNumber: 36, columnNumber: 9 }, ("TURBOPACK compile-time value", void 0)) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 23, + lineNumber: 28, columnNumber: 7 }, ("TURBOPACK compile-time value", void 0)) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 22, + lineNumber: 27, columnNumber: 5 }, ("TURBOPACK compile-time value", void 0)); }; @@ -238,6 +211,7 @@ __turbopack_context__.s([ ()=>PricingPage ]); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js [app-ssr] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$components$2f$Pricing$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx [app-ssr] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/navigation.js [app-ssr] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$providers$2f$AuthProvider$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/providers/AuthProvider.tsx [app-ssr] (ecmascript)"); @@ -246,16 +220,32 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__proje ; ; ; +; function PricingPage() { const router = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRouter"])(); const { user } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$providers$2f$AuthProvider$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useAuthContext"])(); + const [plans, setPlans] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])([]); + const [isLoading, setIsLoading] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(true); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"])(()=>{ + fetch('/api/plans', { + cache: 'no-store' + }).then((res)=>res.json()).then((data)=>{ + setPlans(data); + setIsLoading(false); + }).catch((err)=>{ + console.error(err); + setIsLoading(false); + }); + }, []); return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$components$2f$Pricing$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], { + plans: plans, + isLoading: isLoading, currentPlan: user?.subscription.plan || 'free', onBack: ()=>router.push(user ? '/dashboard' : '/'), onSelectPlan: ()=>router.push(user ? '/checkout' : '/login') }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/pricing/page.tsx", - lineNumber: 12, + lineNumber: 29, columnNumber: 9 }, this); } diff --git a/.next/dev/server/chunks/ssr/[root-of-the-server]__bcada481._.js.map b/.next/dev/server/chunks/ssr/[root-of-the-server]__bcada481._.js.map index a5245f6..66ea4ee 100644 --- a/.next/dev/server/chunks/ssr/[root-of-the-server]__bcada481._.js.map +++ b/.next/dev/server/chunks/ssr/[root-of-the-server]__bcada481._.js.map @@ -2,45 +2,45 @@ "version": 3, "sources": [], "sections": [ - {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/components/Pricing.tsx"],"sourcesContent":["'use client';\n\n\nimport React from 'react';\nimport { Check, ArrowLeft } from 'lucide-react';\nimport { PlanType } from '@/lib/types';\n\ninterface PricingProps {\n currentPlan: PlanType;\n onBack: () => void;\n onSelectPlan: (plan: PlanType) => void;\n}\n\nconst Pricing: React.FC = ({ currentPlan, onBack, onSelectPlan }) => {\n const plans = [\n { id: 'free', name: 'Gratuit', price: '0€', desc: 'Idéal pour découvrir PlumeIA.', features: ['10 actions IA / mois', '1 projet actif', 'Bible du monde simple'] },\n { id: 'pro', name: 'Auteur Pro', price: '12€', desc: 'Pour les écrivains sérieux.', features: ['500 actions IA / mois', 'Projets illimités', 'Export Word & EPUB', 'Support prioritaire'], popular: true },\n { id: 'master', name: 'Maître Plume', price: '29€', desc: 'Le summum de l\\'écriture IA.', features: ['Actions IA illimitées', 'Accès Gemini 3 Pro', 'Bible du monde avancée', 'Outils de révision avancés'] },\n ];\n\n return (\n
\n
\n \n
\n

Choisissez votre destin d'écrivain.

\n

Passez au plan supérieur pour libérer toute la puissance de l'IA.

\n
\n
\n {plans.map((p) => (\n
\n
\n

{p.name}

\n
{p.price}/mois
\n

{p.desc}

\n
\n
    \n {p.features.map((f, i) => (\n
  • \n
    \n {f}\n
  • \n ))}\n
\n \n
\n ))}\n
\n
\n
\n );\n};\n\nexport default Pricing;\n"],"names":[],"mappings":";;;;;AAIA;AAAA;AAJA;;;AAaA,MAAM,UAAkC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE;IAC5E,MAAM,QAAQ;QACZ;YAAE,IAAI;YAAQ,MAAM;YAAW,OAAO;YAAM,MAAM;YAAiC,UAAU;gBAAC;gBAAwB;gBAAkB;aAAwB;QAAC;QACjK;YAAE,IAAI;YAAO,MAAM;YAAc,OAAO;YAAO,MAAM;YAA+B,UAAU;gBAAC;gBAAyB;gBAAqB;gBAAsB;aAAsB;YAAE,SAAS;QAAK;QACzM;YAAE,IAAI;YAAU,MAAM;YAAgB,OAAO;YAAO,MAAM;YAAgC,UAAU;gBAAC;gBAAyB;gBAAsB;gBAA0B;aAA6B;QAAC;KAC7M;IAED,qBACE,0RAAC;QAAI,WAAU;kBACb,cAAA,0RAAC;YAAI,WAAU;;8BACb,0RAAC;oBAAO,SAAS;oBAAQ,WAAU;;sCAC/B,0RAAC,yQAAS;4BAAC,MAAM;;;;;;wBAAM;;;;;;;8BAE3B,0RAAC;oBAAI,WAAU;;sCACX,0RAAC;4BAAG,WAAU;sCAA0C;;;;;;sCACxD,0RAAC;4BAAE,WAAU;sCAAiB;;;;;;;;;;;;8BAElC,0RAAC;oBAAI,WAAU;8BACV,MAAM,GAAG,CAAC,CAAC,kBACR,0RAAC;4BAAe,WAAW,CAAC,+CAA+C,EAAE,EAAE,OAAO,GAAG,8CAA8C,+BAA+B;;8CAClK,0RAAC;oCAAI,WAAU;;sDACX,0RAAC;4CAAG,WAAU;sDAAyC,EAAE,IAAI;;;;;;sDAC7D,0RAAC;4CAAI,WAAU;;gDAA2C,EAAE,KAAK;8DAAC,0RAAC;oDAAK,WAAU;8DAAqC;;;;;;;;;;;;sDACvH,0RAAC;4CAAE,WAAU;sDAA0B,EAAE,IAAI;;;;;;;;;;;;8CAEjD,0RAAC;oCAAG,WAAU;8CACT,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,kBAChB,0RAAC;4CAAW,WAAU;;8DAClB,0RAAC;oDAAI,WAAU;8DAA8C,cAAA,0RAAC,yPAAK;wDAAC,MAAM;;;;;;;;;;;gDACzE;;2CAFI;;;;;;;;;;8CAMjB,0RAAC;oCACG,SAAS,IAAM,aAAa,EAAE,EAAE;oCAChC,WAAW,CAAC,kDAAkD,EAAE,EAAE,EAAE,KAAK,cAAc,+CAA+C,EAAE,OAAO,GAAG,6CAA6C,8CAA8C;8CAE5O,EAAE,EAAE,KAAK,cAAc,gBAAgB;;;;;;;2BAlBtC,EAAE,EAAE;;;;;;;;;;;;;;;;;;;;;AA0B9B;uCAEe"}}, - {"offset": {"line": 235, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/pricing/page.tsx"],"sourcesContent":["'use client';\r\n\r\nimport Pricing from '@/components/Pricing';\r\nimport { useRouter } from 'next/navigation';\r\nimport { useAuthContext } from '@/providers/AuthProvider';\r\n\r\nexport default function PricingPage() {\r\n const router = useRouter();\r\n const { user } = useAuthContext();\r\n\r\n return (\r\n router.push(user ? '/dashboard' : '/')}\r\n onSelectPlan={() => router.push(user ? '/checkout' : '/login')}\r\n />\r\n );\r\n}\r\n"],"names":[],"mappings":";;;;;AAEA;AACA;AACA;AAJA;;;;;AAMe,SAAS;IACpB,MAAM,SAAS,IAAA,2LAAS;IACxB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,+LAAc;IAE/B,qBACI,0RAAC,oLAAO;QACJ,aAAa,MAAM,aAAa,QAAQ;QACxC,QAAQ,IAAM,OAAO,IAAI,CAAC,OAAO,eAAe;QAChD,cAAc,IAAM,OAAO,IAAI,CAAC,OAAO,cAAc;;;;;;AAGjE"}}, - {"offset": {"line": 265, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/mergeClasses.ts"],"sourcesContent":["/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = (...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n"],"names":[],"mappings":";;;;;;;;;IAMO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,YAAA,CAAA,CAAA,CAAe,CAAA,GAA2C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GACrE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA,GAAO,KAAA,CAAA,CAAA,CAAA,CAAA,CAAU;QACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,OAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqB,CAAA,CAAA,CAAA,CAAA,CAAA,MAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CACjC,KAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,KAAM,CAAA,CAAA,CAAA,CAAA,CAAA;IAEjC,CAAC,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAG,CAAA,CACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}}, - {"offset": {"line": 283, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/toKebabCase.ts"],"sourcesContent":["/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n"],"names":[],"mappings":";;;;;;;;;IAMO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAsB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}}, - {"offset": {"line": 299, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/toCamelCase.ts"],"sourcesContent":["/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = (string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n"],"names":[],"mappings":";;;;;;;;;IAMO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,WAAA,CAAA,CAAA,CAAc,CAAmB,MAAA,CAAA,CAAA,CAAA,AAC5C,CAD4C,AAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAyB,CAAC,CAAA,CAAA,CAAA,CAAA,GAAO,CAAA,CAAA,CAAA,CAAI,EAAA,CAAA,CAAA,CAAA,AAClD,CADkD,AAClD,IAAK,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAI,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}}, - {"offset": {"line": 315, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/toPascalCase.ts"],"sourcesContent":["import { CamelToPascal } from '../utility-types';\nimport { toCamelCase } from './toCamelCase';\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = (string: T): CamelToPascal => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal;\n};\n"],"names":[],"mappings":";;;;;;;;;;;AASO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgC;IAC7E,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,wOAAA,EAAY,MAAM,CAAA;IAEpC,OAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAY,GAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA;AAC/D,CAAA"}}, - {"offset": {"line": 336, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/defaultAttributes.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/defaultAttributes.ts"],"sourcesContent":["export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n"],"names":[],"mappings":";;;;;;;;;IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe;IACb,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACP,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,CAAA,CAAA;IACP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,CAAA,CAAA;IACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACT,CAAA,CAAA,CAAA,CAAA,EAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAa,CAAA;IACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACf,cAAA,CAAA,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAClB,CAAA"}}, - {"offset": {"line": 362, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/hasA11yProp.ts"],"sourcesContent":["/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n\n return false;\n};\n"],"names":[],"mappings":";;;;;;;;;IAMO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA+B;IACzD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,KAAQ,KAAA,CAAA,AAAO;QACxB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,EAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,KAAK,CAAA,CAAA,CAAA,CAAA,KAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,MAAS,OAAA,CAAA,CAAS;YACnE,OAAO,CAAA,CAAA,CAAA,CAAA;QACT;IACF;IAEA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AACT,CAAA"}}, - {"offset": {"line": 385, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/Icon.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/Icon.ts"],"sourcesContent":["import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) =>\n createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n ),\n);\n\nexport default Icon;\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 426, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/createLucideIcon.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/createLucideIcon.ts"],"sourcesContent":["import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAWA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,gBAAA,CAAA,CAAA,CAAmB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,QAAA,CAAA,CAAA,CAAA,CAAA,CAAuB;IACjE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,sPAAA,EAAuC,CAAC,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,GAAM,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GACjF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,sPAAA,EAAc,6MAAA,CAAA,CAAM;YAClB,CAAA,CAAA,CAAA;YACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,yOAAA,EACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,wOAAA,MAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,yOAAA,EAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAC7C,CAAA,OAAA,EAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,EAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAEF,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CACJ;IAGH,SAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,yOAAA,EAAa,QAAQ,CAAA;IAE7C,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACT,CAAA"}}, - {"offset": {"line": 461, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/check.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/icons/check.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]];\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgNiA5IDE3bC01LTUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('check', __iconNode);\n\nexport default Check;\n"],"names":[],"mappings":";;;;;;;;;;;;;AAGO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAuB;IAAC;QAAC,MAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,iBAAA,CAAA;YAAmB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAC;CAAA;AAatF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,KAAA,CAAA,CAAA,KAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,0MAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA"}}, - {"offset": {"line": 499, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/arrow-left.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/icons/arrow-left.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm12 19-7-7 7-7', key: '1l729n' }],\n ['path', { d: 'M19 12H5', key: 'x3x0zl' }],\n];\n\n/**\n * @component @name ArrowLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTIgMTktNy03IDctNyIgLz4KICA8cGF0aCBkPSJNMTkgMTJINSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/arrow-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowLeft = createLucideIcon('arrow-left', __iconNode);\n\nexport default ArrowLeft;\n"],"names":[],"mappings":";;;;;;;;;;;;;AAGO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,UAAA,CAAA,CAAA,CAAuB;IAClC;QAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAAkB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAA;IAC/C;QAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAAY,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAA;CAC3C;AAaA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,SAAA,CAAA,CAAA,KAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,0MAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA"}}, - {"offset": {"line": 544, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/%40swc/helpers/cjs/_interop_require_wildcard.cjs"],"sourcesContent":["\"use strict\";\n\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) return obj;\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") return { default: obj };\n\n var cache = _getRequireWildcardCache(nodeInterop);\n\n if (cache && cache.has(obj)) return cache.get(obj);\n\n var newObj = { __proto__: null };\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);\n else newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n\n if (cache) cache.set(obj, newObj);\n\n return newObj;\n}\nexports._ = _interop_require_wildcard;\n"],"names":[],"mappings":"AAEA,SAAS,yBAAyB,WAAW;IACzC,IAAI,OAAO,YAAY,YAAY,OAAO;IAE1C,IAAI,oBAAoB,IAAI;IAC5B,IAAI,mBAAmB,IAAI;IAE3B,OAAO,CAAC,2BAA2B,SAAS,WAAW;QACnD,OAAO,cAAc,mBAAmB;IAC5C,CAAC,EAAE;AACP;AACA,SAAS,0BAA0B,GAAG,EAAE,WAAW;IAC/C,IAAI,CAAC,eAAe,OAAO,IAAI,UAAU,EAAE,OAAO;IAClD,IAAI,QAAQ,QAAQ,OAAO,QAAQ,YAAY,OAAO,QAAQ,YAAY,OAAO;QAAE,SAAS;IAAI;IAEhG,IAAI,QAAQ,yBAAyB;IAErC,IAAI,SAAS,MAAM,GAAG,CAAC,MAAM,OAAO,MAAM,GAAG,CAAC;IAE9C,IAAI,SAAS;QAAE,WAAW;IAAK;IAC/B,IAAI,wBAAwB,OAAO,cAAc,IAAI,OAAO,wBAAwB;IAEpF,IAAK,IAAI,OAAO,IAAK;QACjB,IAAI,QAAQ,aAAa,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,MAAM;YACrE,IAAI,OAAO,wBAAwB,OAAO,wBAAwB,CAAC,KAAK,OAAO;YAC/E,IAAI,QAAQ,CAAC,KAAK,GAAG,IAAI,KAAK,GAAG,GAAG,OAAO,cAAc,CAAC,QAAQ,KAAK;iBAClE,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;QAC/B;IACJ;IAEA,OAAO,OAAO,GAAG;IAEjB,IAAI,OAAO,MAAM,GAAG,CAAC,KAAK;IAE1B,OAAO;AACX;AACA,QAAQ,CAAC,GAAG","ignoreList":[0]}}, - {"offset": {"line": 579, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/route-modules/app-page/vendored/contexts/app-router-context.ts"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].AppRouterContext\n"],"names":["module","exports","require","vendored","AppRouterContext"],"mappings":"AAAAA,OAAOC,OAAO,GACZC,QAAQ,0JACRC,QAAQ,CAAC,WAAW,CAACC,gBAAgB","ignoreList":[0]}}, - {"offset": {"line": 584, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/route-modules/app-page/vendored/contexts/hooks-client-context.ts"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].HooksClientContext\n"],"names":["module","exports","require","vendored","HooksClientContext"],"mappings":"AAAAA,OAAOC,OAAO,GACZC,QAAQ,0JACRC,QAAQ,CAAC,WAAW,CAACC,kBAAkB","ignoreList":[0]}}, - {"offset": {"line": 589, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/shared/lib/segment.ts"],"sourcesContent":["import type { FlightRouterState, Segment } from './app-router-types'\n\nexport function getSegmentValue(segment: Segment) {\n return Array.isArray(segment) ? segment[1] : segment\n}\n\nexport function isGroupSegment(segment: string) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')')\n}\n\nexport function isParallelRouteSegment(segment: string) {\n return segment.startsWith('@') && segment !== '@children'\n}\n\nexport function addSearchParamsIfPageSegment(\n segment: Segment,\n searchParams: Record\n) {\n const isPageSegment = segment.includes(PAGE_SEGMENT_KEY)\n\n if (isPageSegment) {\n const stringifiedQuery = JSON.stringify(searchParams)\n return stringifiedQuery !== '{}'\n ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery\n : PAGE_SEGMENT_KEY\n }\n\n return segment\n}\n\nexport function computeSelectedLayoutSegment(\n segments: string[] | null,\n parallelRouteKey: string\n): string | null {\n if (!segments || segments.length === 0) {\n return null\n }\n\n // For 'children', use first segment; for other parallel routes, use last segment\n const rawSegment =\n parallelRouteKey === 'children'\n ? segments[0]\n : segments[segments.length - 1]\n\n // If the default slot is showing, return null since it's not technically \"selected\" (it's a fallback)\n // Returning an internal value like `__DEFAULT__` would be confusing\n return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment\n}\n\n/** Get the canonical parameters from the current level to the leaf node. */\nexport function getSelectedLayoutSegmentPath(\n tree: FlightRouterState,\n parallelRouteKey: string,\n first = true,\n segmentPath: string[] = []\n): string[] {\n let node: FlightRouterState\n if (first) {\n // Use the provided parallel route key on the first parallel route\n node = tree[1][parallelRouteKey]\n } else {\n // After first parallel route prefer children, if there's no children pick the first parallel route.\n const parallelRoutes = tree[1]\n node = parallelRoutes.children ?? Object.values(parallelRoutes)[0]\n }\n\n if (!node) return segmentPath\n const segment = node[0]\n\n let segmentValue = getSegmentValue(segment)\n\n if (!segmentValue || segmentValue.startsWith(PAGE_SEGMENT_KEY)) {\n return segmentPath\n }\n\n segmentPath.push(segmentValue)\n\n return getSelectedLayoutSegmentPath(\n node,\n parallelRouteKey,\n false,\n segmentPath\n )\n}\n\nexport const PAGE_SEGMENT_KEY = '__PAGE__'\nexport const DEFAULT_SEGMENT_KEY = '__DEFAULT__'\nexport const NOT_FOUND_SEGMENT_KEY = '/_not-found'\n"],"names":["DEFAULT_SEGMENT_KEY","NOT_FOUND_SEGMENT_KEY","PAGE_SEGMENT_KEY","addSearchParamsIfPageSegment","computeSelectedLayoutSegment","getSegmentValue","getSelectedLayoutSegmentPath","isGroupSegment","isParallelRouteSegment","segment","Array","isArray","endsWith","startsWith","searchParams","isPageSegment","includes","stringifiedQuery","JSON","stringify","segments","parallelRouteKey","length","rawSegment","tree","first","segmentPath","node","parallelRoutes","children","Object","values","segmentValue","push"],"mappings":";;;;;;;;;;;;;;;;;;;;;IAuFaA,mBAAmB,EAAA;eAAnBA;;IACAC,qBAAqB,EAAA;eAArBA;;IAFAC,gBAAgB,EAAA;eAAhBA;;IAvEGC,4BAA4B,EAAA;eAA5BA;;IAgBAC,4BAA4B,EAAA;eAA5BA;;IA7BAC,eAAe,EAAA;eAAfA;;IAiDAC,4BAA4B,EAAA;eAA5BA;;IA7CAC,cAAc,EAAA;eAAdA;;IAKAC,sBAAsB,EAAA;eAAtBA;;;AATT,SAASH,gBAAgBI,OAAgB;IAC9C,OAAOC,MAAMC,OAAO,CAACF,WAAWA,OAAO,CAAC,EAAE,GAAGA;AAC/C;AAEO,SAASF,eAAeE,OAAe;IAC5C,sCAAsC;IACtC,OAAOA,OAAO,CAAC,EAAE,KAAK,OAAOA,QAAQG,QAAQ,CAAC;AAChD;AAEO,SAASJ,uBAAuBC,OAAe;IACpD,OAAOA,QAAQI,UAAU,CAAC,QAAQJ,YAAY;AAChD;AAEO,SAASN,6BACdM,OAAgB,EAChBK,YAA2D;IAE3D,MAAMC,gBAAgBN,QAAQO,QAAQ,CAACd;IAEvC,IAAIa,eAAe;QACjB,MAAME,mBAAmBC,KAAKC,SAAS,CAACL;QACxC,OAAOG,qBAAqB,OACxBf,mBAAmB,MAAMe,mBACzBf;IACN;IAEA,OAAOO;AACT;AAEO,SAASL,6BACdgB,QAAyB,EACzBC,gBAAwB;IAExB,IAAI,CAACD,YAAYA,SAASE,MAAM,KAAK,GAAG;QACtC,OAAO;IACT;IAEA,iFAAiF;IACjF,MAAMC,aACJF,qBAAqB,aACjBD,QAAQ,CAAC,EAAE,GACXA,QAAQ,CAACA,SAASE,MAAM,GAAG,EAAE;IAEnC,sGAAsG;IACtG,oEAAoE;IACpE,OAAOC,eAAevB,sBAAsB,OAAOuB;AACrD;AAGO,SAASjB,6BACdkB,IAAuB,EACvBH,gBAAwB,EACxBI,QAAQ,IAAI,EACZC,cAAwB,EAAE;IAE1B,IAAIC;IACJ,IAAIF,OAAO;QACT,kEAAkE;QAClEE,OAAOH,IAAI,CAAC,EAAE,CAACH,iBAAiB;IAClC,OAAO;QACL,oGAAoG;QACpG,MAAMO,iBAAiBJ,IAAI,CAAC,EAAE;QAC9BG,OAAOC,eAAeC,QAAQ,IAAIC,OAAOC,MAAM,CAACH,eAAe,CAAC,EAAE;IACpE;IAEA,IAAI,CAACD,MAAM,OAAOD;IAClB,MAAMjB,UAAUkB,IAAI,CAAC,EAAE;IAEvB,IAAIK,eAAe3B,gBAAgBI;IAEnC,IAAI,CAACuB,gBAAgBA,aAAanB,UAAU,CAACX,mBAAmB;QAC9D,OAAOwB;IACT;IAEAA,YAAYO,IAAI,CAACD;IAEjB,OAAO1B,6BACLqB,MACAN,kBACA,OACAK;AAEJ;AAEO,MAAMxB,mBAAmB;AACzB,MAAMF,sBAAsB;AAC5B,MAAMC,wBAAwB","ignoreList":[0]}}, - {"offset": {"line": 692, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/route-modules/app-page/vendored/contexts/server-inserted-html.ts"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].ServerInsertedHtml\n"],"names":["module","exports","require","vendored","ServerInsertedHtml"],"mappings":"AAAAA,OAAOC,OAAO,GACZC,QAAQ,0JACRC,QAAQ,CAAC,WAAW,CAACC,kBAAkB","ignoreList":[0]}}, - {"offset": {"line": 697, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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": 738, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/client/components/readonly-url-search-params.ts"],"sourcesContent":["/**\n * ReadonlyURLSearchParams implementation shared between client and server.\n * This file is intentionally not marked as 'use client' or 'use server'\n * so it can be imported by both environments.\n */\n\n/** @internal */\nclass ReadonlyURLSearchParamsError extends Error {\n constructor() {\n super(\n 'Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams'\n )\n }\n}\n\n/**\n * A read-only version of URLSearchParams that throws errors when mutation methods are called.\n * This ensures that the URLSearchParams returned by useSearchParams() cannot be mutated.\n */\nexport class ReadonlyURLSearchParams extends URLSearchParams {\n /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */\n append() {\n throw new ReadonlyURLSearchParamsError()\n }\n /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */\n delete() {\n throw new ReadonlyURLSearchParamsError()\n }\n /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */\n set() {\n throw new ReadonlyURLSearchParamsError()\n }\n /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */\n sort() {\n throw new ReadonlyURLSearchParamsError()\n }\n}\n"],"names":["ReadonlyURLSearchParams","ReadonlyURLSearchParamsError","Error","constructor","URLSearchParams","append","delete","set","sort"],"mappings":"AAAA;;;;CAIC,GAED,cAAc;;;+BAaDA,2BAAAA;;;eAAAA;;;AAZb,MAAMC,qCAAqCC;IACzCC,aAAc;QACZ,KAAK,CACH;IAEJ;AACF;AAMO,MAAMH,gCAAgCI;IAC3C,wKAAwK,GACxKC,SAAS;QACP,MAAM,IAAIJ;IACZ;IACA,wKAAwK,GACxKK,SAAS;QACP,MAAM,IAAIL;IACZ;IACA,wKAAwK,GACxKM,MAAM;QACJ,MAAM,IAAIN;IACZ;IACA,wKAAwK,GACxKO,OAAO;QACL,MAAM,IAAIP;IACZ;AACF","ignoreList":[0]}}, - {"offset": {"line": 781, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/client/components/redirect-status-code.ts"],"sourcesContent":["export enum RedirectStatusCode {\n SeeOther = 303,\n TemporaryRedirect = 307,\n PermanentRedirect = 308,\n}\n"],"names":["RedirectStatusCode"],"mappings":";;;+BAAYA,sBAAAA;;;eAAAA;;;AAAL,IAAKA,qBAAAA,WAAAA,GAAAA,SAAAA,kBAAAA;;;;WAAAA","ignoreList":[0]}}, - {"offset": {"line": 807, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/client/components/redirect-error.ts"],"sourcesContent":["import { RedirectStatusCode } from './redirect-status-code'\n\nexport const REDIRECT_ERROR_CODE = 'NEXT_REDIRECT'\n\nexport enum RedirectType {\n push = 'push',\n replace = 'replace',\n}\n\nexport type RedirectError = Error & {\n digest: `${typeof REDIRECT_ERROR_CODE};${RedirectType};${string};${RedirectStatusCode};`\n}\n\n/**\n * Checks an error to determine if it's an error generated by the\n * `redirect(url)` helper.\n *\n * @param error the error that may reference a redirect error\n * @returns true if the error is a redirect error\n */\nexport function isRedirectError(error: unknown): error is RedirectError {\n if (\n typeof error !== 'object' ||\n error === null ||\n !('digest' in error) ||\n typeof error.digest !== 'string'\n ) {\n return false\n }\n\n const digest = error.digest.split(';')\n const [errorCode, type] = digest\n const destination = digest.slice(2, -2).join(';')\n const status = digest.at(-2)\n\n const statusCode = Number(status)\n\n return (\n errorCode === REDIRECT_ERROR_CODE &&\n (type === 'replace' || type === 'push') &&\n typeof destination === 'string' &&\n !isNaN(statusCode) &&\n statusCode in RedirectStatusCode\n )\n}\n"],"names":["REDIRECT_ERROR_CODE","RedirectType","isRedirectError","error","digest","split","errorCode","type","destination","slice","join","status","at","statusCode","Number","isNaN","RedirectStatusCode"],"mappings":";;;;;;;;;;;;;;;IAEaA,mBAAmB,EAAA;eAAnBA;;IAEDC,YAAY,EAAA;eAAZA;;IAgBIC,eAAe,EAAA;eAAfA;;;oCApBmB;AAE5B,MAAMF,sBAAsB;AAE5B,IAAKC,eAAAA,WAAAA,GAAAA,SAAAA,YAAAA;;;WAAAA;;AAgBL,SAASC,gBAAgBC,KAAc;IAC5C,IACE,OAAOA,UAAU,YACjBA,UAAU,QACV,CAAE,CAAA,YAAYA,KAAI,KAClB,OAAOA,MAAMC,MAAM,KAAK,UACxB;QACA,OAAO;IACT;IAEA,MAAMA,SAASD,MAAMC,MAAM,CAACC,KAAK,CAAC;IAClC,MAAM,CAACC,WAAWC,KAAK,GAAGH;IAC1B,MAAMI,cAAcJ,OAAOK,KAAK,CAAC,GAAG,CAAC,GAAGC,IAAI,CAAC;IAC7C,MAAMC,SAASP,OAAOQ,EAAE,CAAC,CAAC;IAE1B,MAAMC,aAAaC,OAAOH;IAE1B,OACEL,cAAcN,uBACbO,CAAAA,SAAS,aAAaA,SAAS,MAAK,KACrC,OAAOC,gBAAgB,YACvB,CAACO,MAAMF,eACPA,cAAcG,oBAAAA,kBAAkB;AAEpC","ignoreList":[0]}}, - {"offset": {"line": 861, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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,qBAEZC,QAAQ,2KACRF,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": 954, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/client/components/http-access-fallback/http-access-fallback.ts"],"sourcesContent":["export const HTTPAccessErrorStatus = {\n NOT_FOUND: 404,\n FORBIDDEN: 403,\n UNAUTHORIZED: 401,\n}\n\nconst ALLOWED_CODES = new Set(Object.values(HTTPAccessErrorStatus))\n\nexport const HTTP_ERROR_FALLBACK_ERROR_CODE = 'NEXT_HTTP_ERROR_FALLBACK'\n\nexport type HTTPAccessFallbackError = Error & {\n digest: `${typeof HTTP_ERROR_FALLBACK_ERROR_CODE};${string}`\n}\n\n/**\n * Checks an error to determine if it's an error generated by\n * the HTTP navigation APIs `notFound()`, `forbidden()` or `unauthorized()`.\n *\n * @param error the error that may reference a HTTP access error\n * @returns true if the error is a HTTP access error\n */\nexport function isHTTPAccessFallbackError(\n error: unknown\n): error is HTTPAccessFallbackError {\n if (\n typeof error !== 'object' ||\n error === null ||\n !('digest' in error) ||\n typeof error.digest !== 'string'\n ) {\n return false\n }\n const [prefix, httpStatus] = error.digest.split(';')\n\n return (\n prefix === HTTP_ERROR_FALLBACK_ERROR_CODE &&\n ALLOWED_CODES.has(Number(httpStatus))\n )\n}\n\nexport function getAccessFallbackHTTPStatus(\n error: HTTPAccessFallbackError\n): number {\n const httpStatus = error.digest.split(';')[1]\n return Number(httpStatus)\n}\n\nexport function getAccessFallbackErrorTypeByStatus(\n status: number\n): 'not-found' | 'forbidden' | 'unauthorized' | undefined {\n switch (status) {\n case 401:\n return 'unauthorized'\n case 403:\n return 'forbidden'\n case 404:\n return 'not-found'\n default:\n return\n }\n}\n"],"names":["HTTPAccessErrorStatus","HTTP_ERROR_FALLBACK_ERROR_CODE","getAccessFallbackErrorTypeByStatus","getAccessFallbackHTTPStatus","isHTTPAccessFallbackError","NOT_FOUND","FORBIDDEN","UNAUTHORIZED","ALLOWED_CODES","Set","Object","values","error","digest","prefix","httpStatus","split","has","Number","status"],"mappings":";;;;;;;;;;;;;;;;;IAAaA,qBAAqB,EAAA;eAArBA;;IAQAC,8BAA8B,EAAA;eAA9BA;;IAuCGC,kCAAkC,EAAA;eAAlCA;;IAPAC,2BAA2B,EAAA;eAA3BA;;IAnBAC,yBAAyB,EAAA;eAAzBA;;;AArBT,MAAMJ,wBAAwB;IACnCK,WAAW;IACXC,WAAW;IACXC,cAAc;AAChB;AAEA,MAAMC,gBAAgB,IAAIC,IAAIC,OAAOC,MAAM,CAACX;AAErC,MAAMC,iCAAiC;AAavC,SAASG,0BACdQ,KAAc;IAEd,IACE,OAAOA,UAAU,YACjBA,UAAU,QACV,CAAE,CAAA,YAAYA,KAAI,KAClB,OAAOA,MAAMC,MAAM,KAAK,UACxB;QACA,OAAO;IACT;IACA,MAAM,CAACC,QAAQC,WAAW,GAAGH,MAAMC,MAAM,CAACG,KAAK,CAAC;IAEhD,OACEF,WAAWb,kCACXO,cAAcS,GAAG,CAACC,OAAOH;AAE7B;AAEO,SAASZ,4BACdS,KAA8B;IAE9B,MAAMG,aAAaH,MAAMC,MAAM,CAACG,KAAK,CAAC,IAAI,CAAC,EAAE;IAC7C,OAAOE,OAAOH;AAChB;AAEO,SAASb,mCACdiB,MAAc;IAEd,OAAQA;QACN,KAAK;YACH,OAAO;QACT,KAAK;YACH,OAAO;QACT,KAAK;YACH,OAAO;QACT;YACE;IACJ;AACF","ignoreList":[0]}}, - {"offset": {"line": 1028, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/client/components/not-found.ts"],"sourcesContent":["import {\n HTTP_ERROR_FALLBACK_ERROR_CODE,\n type HTTPAccessFallbackError,\n} from './http-access-fallback/http-access-fallback'\n\n/**\n * This function allows you to render the [not-found.js file](https://nextjs.org/docs/app/api-reference/file-conventions/not-found)\n * within a route segment as well as inject a tag.\n *\n * `notFound()` 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 and set the status code to 404.\n * - In a Route Handler or Server Action, it will serve a 404 to the caller.\n *\n * Read more: [Next.js Docs: `notFound`](https://nextjs.org/docs/app/api-reference/functions/not-found)\n */\n\nconst DIGEST = `${HTTP_ERROR_FALLBACK_ERROR_CODE};404`\n\nexport function notFound(): never {\n const error = new Error(DIGEST) as HTTPAccessFallbackError\n ;(error as HTTPAccessFallbackError).digest = DIGEST\n\n throw error\n}\n"],"names":["notFound","DIGEST","HTTP_ERROR_FALLBACK_ERROR_CODE","error","Error","digest"],"mappings":";;;+BAsBgBA,YAAAA;;;eAAAA;;;oCAnBT;AAEP;;;;;;;;;;;;;CAaC,GAED,MAAMC,SAAS,GAAGC,oBAAAA,8BAA8B,CAAC,IAAI,CAAC;AAE/C,SAASF;IACd,MAAMG,QAAQ,OAAA,cAAiB,CAAjB,IAAIC,MAAMH,SAAV,qBAAA;eAAA;oBAAA;sBAAA;IAAgB;IAC5BE,MAAkCE,MAAM,GAAGJ;IAE7C,MAAME;AACR","ignoreList":[0]}}, - {"offset": {"line": 1072, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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":";;;+BAqBgBA,aAAAA;;;eAAAA;;;oCAlBT;AAEP,6BAA6B;AAC7B;;;;;;;;;;;CAWC,GAED,MAAMC,SAAS,GAAGC,oBAAAA,8BAA8B,CAAC,IAAI,CAAC;AAE/C,SAASF;IACd,IAAI,CAACG,QAAQC,GAAG,CAACC,uBAAqC,YAAF;QAClD,MAAM,OAAA,cAEL,CAFK,IAAIC,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": 1122, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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":";;;+BAsBgBA,gBAAAA;;;eAAAA;;;oCAnBT;AAEP,gCAAgC;AAChC;;;;;;;;;;;;CAYC,GAED,MAAMC,SAAS,GAAGC,oBAAAA,8BAA8B,CAAC,IAAI,CAAC;AAE/C,SAASF;IACd,IAAI,CAACG,QAAQC,GAAG,CAACC,uBAAqC,YAAF;QAClD,MAAM,OAAA,cAEL,CAFK,IAAIC,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": 1173, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/dynamic-rendering-utils.ts"],"sourcesContent":["import type { NonStaticRenderStage } from './app-render/staged-rendering'\nimport type { RequestStore } from './app-render/work-unit-async-storage.external'\n\nexport function isHangingPromiseRejectionError(\n err: unknown\n): err is HangingPromiseRejectionError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === HANGING_PROMISE_REJECTION\n}\n\nconst HANGING_PROMISE_REJECTION = 'HANGING_PROMISE_REJECTION'\n\nclass HangingPromiseRejectionError extends Error {\n public readonly digest = HANGING_PROMISE_REJECTION\n\n constructor(\n public readonly route: string,\n public readonly expression: string\n ) {\n super(\n `During prerendering, ${expression} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${expression} to a different context by using \\`setTimeout\\`, \\`after\\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route \"${route}\".`\n )\n }\n}\n\ntype AbortListeners = Array<(err: unknown) => void>\nconst abortListenersBySignal = new WeakMap()\n\n/**\n * This function constructs a promise that will never resolve. This is primarily\n * useful for cacheComponents where we use promise resolution timing to determine which\n * parts of a render can be included in a prerender.\n *\n * @internal\n */\nexport function makeHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string\n): Promise {\n if (signal.aborted) {\n return Promise.reject(new HangingPromiseRejectionError(route, expression))\n } else {\n const hangingPromise = new Promise((_, reject) => {\n const boundRejection = reject.bind(\n null,\n new HangingPromiseRejectionError(route, expression)\n )\n let currentListeners = abortListenersBySignal.get(signal)\n if (currentListeners) {\n currentListeners.push(boundRejection)\n } else {\n const listeners = [boundRejection]\n abortListenersBySignal.set(signal, listeners)\n signal.addEventListener(\n 'abort',\n () => {\n for (let i = 0; i < listeners.length; i++) {\n listeners[i]()\n }\n },\n { once: true }\n )\n }\n })\n // We are fine if no one actually awaits this promise. We shouldn't consider this an unhandled rejection so\n // we attach a noop catch handler here to suppress this warning. If you actually await somewhere or construct\n // your own promise out of it you'll need to ensure you handle the error when it rejects.\n hangingPromise.catch(ignoreReject)\n return hangingPromise\n }\n}\n\nfunction ignoreReject() {}\n\nexport function makeDevtoolsIOAwarePromise(\n underlying: T,\n requestStore: RequestStore,\n stage: NonStaticRenderStage\n): Promise {\n if (requestStore.stagedRendering) {\n // We resolve each stage in a timeout, so React DevTools will pick this up as IO.\n return requestStore.stagedRendering.delayUntilStage(\n stage,\n undefined,\n underlying\n )\n }\n // in React DevTools if we resolve in a setTimeout we will observe\n // the promise resolution as something that can suspend a boundary or root.\n return new Promise((resolve) => {\n // Must use setTimeout to be considered IO React DevTools. setImmediate will not work.\n setTimeout(() => {\n resolve(underlying)\n }, 0)\n })\n}\n"],"names":["isHangingPromiseRejectionError","makeDevtoolsIOAwarePromise","makeHangingPromise","err","digest","HANGING_PROMISE_REJECTION","HangingPromiseRejectionError","Error","constructor","route","expression","abortListenersBySignal","WeakMap","signal","aborted","Promise","reject","hangingPromise","_","boundRejection","bind","currentListeners","get","push","listeners","set","addEventListener","i","length","once","catch","ignoreReject","underlying","requestStore","stage","stagedRendering","delayUntilStage","undefined","resolve","setTimeout"],"mappings":";;;;;;;;;;;;;;;IAGgBA,8BAA8B,EAAA;eAA9BA;;IA2EAC,0BAA0B,EAAA;eAA1BA;;IAxCAC,kBAAkB,EAAA;eAAlBA;;;AAnCT,SAASF,+BACdG,GAAY;IAEZ,IAAI,OAAOA,QAAQ,YAAYA,QAAQ,QAAQ,CAAE,CAAA,YAAYA,GAAE,GAAI;QACjE,OAAO;IACT;IAEA,OAAOA,IAAIC,MAAM,KAAKC;AACxB;AAEA,MAAMA,4BAA4B;AAElC,MAAMC,qCAAqCC;IAGzCC,YACkBC,KAAa,EACbC,UAAkB,CAClC;QACA,KAAK,CACH,CAAC,qBAAqB,EAAEA,WAAW,qGAAqG,EAAEA,WAAW,8KAA8K,EAAED,MAAM,EAAE,CAAC,GAAA,IAAA,CAJhUA,KAAAA,GAAAA,OAAAA,IAAAA,CACAC,UAAAA,GAAAA,YAAAA,IAAAA,CAJFN,MAAAA,GAASC;IASzB;AACF;AAGA,MAAMM,yBAAyB,IAAIC;AAS5B,SAASV,mBACdW,MAAmB,EACnBJ,KAAa,EACbC,UAAkB;IAElB,IAAIG,OAAOC,OAAO,EAAE;QAClB,OAAOC,QAAQC,MAAM,CAAC,IAAIV,6BAA6BG,OAAOC;IAChE,OAAO;QACL,MAAMO,iBAAiB,IAAIF,QAAW,CAACG,GAAGF;YACxC,MAAMG,iBAAiBH,OAAOI,IAAI,CAChC,MACA,IAAId,6BAA6BG,OAAOC;YAE1C,IAAIW,mBAAmBV,uBAAuBW,GAAG,CAACT;YAClD,IAAIQ,kBAAkB;gBACpBA,iBAAiBE,IAAI,CAACJ;YACxB,OAAO;gBACL,MAAMK,YAAY;oBAACL;iBAAe;gBAClCR,uBAAuBc,GAAG,CAACZ,QAAQW;gBACnCX,OAAOa,gBAAgB,CACrB,SACA;oBACE,IAAK,IAAIC,IAAI,GAAGA,IAAIH,UAAUI,MAAM,EAAED,IAAK;wBACzCH,SAAS,CAACG,EAAE;oBACd;gBACF,GACA;oBAAEE,MAAM;gBAAK;YAEjB;QACF;QACA,2GAA2G;QAC3G,6GAA6G;QAC7G,yFAAyF;QACzFZ,eAAea,KAAK,CAACC;QACrB,OAAOd;IACT;AACF;AAEA,SAASc,gBAAgB;AAElB,SAAS9B,2BACd+B,UAAa,EACbC,YAA0B,EAC1BC,KAA2B;IAE3B,IAAID,aAAaE,eAAe,EAAE;QAChC,iFAAiF;QACjF,OAAOF,aAAaE,eAAe,CAACC,eAAe,CACjDF,OACAG,WACAL;IAEJ;IACA,kEAAkE;IAClE,2EAA2E;IAC3E,OAAO,IAAIjB,QAAW,CAACuB;QACrB,sFAAsF;QACtFC,WAAW;YACTD,QAAQN;QACV,GAAG;IACL;AACF","ignoreList":[0]}}, - {"offset": {"line": 1260, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/lib/router-utils/is-postpone.ts"],"sourcesContent":["const REACT_POSTPONE_TYPE: symbol = Symbol.for('react.postpone')\n\nexport function isPostpone(error: any): boolean {\n return (\n typeof error === 'object' &&\n error !== null &&\n error.$$typeof === REACT_POSTPONE_TYPE\n )\n}\n"],"names":["isPostpone","REACT_POSTPONE_TYPE","Symbol","for","error","$$typeof"],"mappings":";;;+BAEgBA,cAAAA;;;eAAAA;;;AAFhB,MAAMC,sBAA8BC,OAAOC,GAAG,CAAC;AAExC,SAASH,WAAWI,KAAU;IACnC,OACE,OAAOA,UAAU,YACjBA,UAAU,QACVA,MAAMC,QAAQ,KAAKJ;AAEvB","ignoreList":[0]}}, - {"offset": {"line": 1277, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/shared/lib/lazy-dynamic/bailout-to-csr.ts"],"sourcesContent":["// This has to be a shared module which is shared between client component error boundary and dynamic component\nconst BAILOUT_TO_CSR = 'BAILOUT_TO_CLIENT_SIDE_RENDERING'\n\n/** An error that should be thrown when we want to bail out to client-side rendering. */\nexport class BailoutToCSRError extends Error {\n public readonly digest = BAILOUT_TO_CSR\n\n constructor(public readonly reason: string) {\n super(`Bail out to client-side rendering: ${reason}`)\n }\n}\n\n/** Checks if a passed argument is an error that is thrown if we want to bail out to client-side rendering. */\nexport function isBailoutToCSRError(err: unknown): err is BailoutToCSRError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === BAILOUT_TO_CSR\n}\n"],"names":["BailoutToCSRError","isBailoutToCSRError","BAILOUT_TO_CSR","Error","constructor","reason","digest","err"],"mappings":"AAAA,+GAA+G;;;;;;;;;;;;;;;IAIlGA,iBAAiB,EAAA;eAAjBA;;IASGC,mBAAmB,EAAA;eAAnBA;;;AAZhB,MAAMC,iBAAiB;AAGhB,MAAMF,0BAA0BG;IAGrCC,YAA4BC,MAAc,CAAE;QAC1C,KAAK,CAAC,CAAC,mCAAmC,EAAEA,QAAQ,GAAA,IAAA,CAD1BA,MAAAA,GAAAA,QAAAA,IAAAA,CAFZC,MAAAA,GAASJ;IAIzB;AACF;AAGO,SAASD,oBAAoBM,GAAY;IAC9C,IAAI,OAAOA,QAAQ,YAAYA,QAAQ,QAAQ,CAAE,CAAA,YAAYA,GAAE,GAAI;QACjE,OAAO;IACT;IAEA,OAAOA,IAAID,MAAM,KAAKJ;AACxB","ignoreList":[0]}}, - {"offset": {"line": 1315, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/client/components/is-next-router-error.ts"],"sourcesContent":["import {\n isHTTPAccessFallbackError,\n type HTTPAccessFallbackError,\n} from './http-access-fallback/http-access-fallback'\nimport { isRedirectError, type RedirectError } from './redirect-error'\n\n/**\n * Returns true if the error is a navigation signal error. These errors are\n * thrown by user code to perform navigation operations and interrupt the React\n * render.\n */\nexport function isNextRouterError(\n error: unknown\n): error is RedirectError | HTTPAccessFallbackError {\n return isRedirectError(error) || isHTTPAccessFallbackError(error)\n}\n"],"names":["isNextRouterError","error","isRedirectError","isHTTPAccessFallbackError"],"mappings":";;;+BAWgBA,qBAAAA;;;eAAAA;;;oCART;+BAC6C;AAO7C,SAASA,kBACdC,KAAc;IAEd,OAAOC,CAAAA,GAAAA,eAAAA,eAAe,EAACD,UAAUE,CAAAA,GAAAA,oBAAAA,yBAAyB,EAACF;AAC7D","ignoreList":[0]}}, - {"offset": {"line": 1340, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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": 1384, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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": 1428, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/lib/framework/boundary-constants.tsx"],"sourcesContent":["export const METADATA_BOUNDARY_NAME = '__next_metadata_boundary__'\nexport const VIEWPORT_BOUNDARY_NAME = '__next_viewport_boundary__'\nexport const OUTLET_BOUNDARY_NAME = '__next_outlet_boundary__'\nexport const ROOT_LAYOUT_BOUNDARY_NAME = '__next_root_layout_boundary__'\n"],"names":["METADATA_BOUNDARY_NAME","OUTLET_BOUNDARY_NAME","ROOT_LAYOUT_BOUNDARY_NAME","VIEWPORT_BOUNDARY_NAME"],"mappings":";;;;;;;;;;;;;;;;IAAaA,sBAAsB,EAAA;eAAtBA;;IAEAC,oBAAoB,EAAA;eAApBA;;IACAC,yBAAyB,EAAA;eAAzBA;;IAFAC,sBAAsB,EAAA;eAAtBA;;;AADN,MAAMH,yBAAyB;AAC/B,MAAMG,yBAAyB;AAC/B,MAAMF,uBAAuB;AAC7B,MAAMC,4BAA4B","ignoreList":[0]}}, - {"offset": {"line": 1465, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/lib/scheduler.ts"],"sourcesContent":["export type ScheduledFn = () => T | PromiseLike\nexport type SchedulerFn = (cb: ScheduledFn) => void\n\n/**\n * Schedules a function to be called on the next tick after the other promises\n * have been resolved.\n *\n * @param cb the function to schedule\n */\nexport const scheduleOnNextTick = (cb: ScheduledFn) => {\n // We use Promise.resolve().then() here so that the operation is scheduled at\n // the end of the promise job queue, we then add it to the next process tick\n // to ensure it's evaluated afterwards.\n //\n // This was inspired by the implementation of the DataLoader interface: https://github.com/graphql/dataloader/blob/d336bd15282664e0be4b4a657cb796f09bafbc6b/src/index.js#L213-L255\n //\n Promise.resolve().then(() => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n process.nextTick(cb)\n }\n })\n}\n\n/**\n * Schedules a function to be called using `setImmediate` or `setTimeout` if\n * `setImmediate` is not available (like in the Edge runtime).\n *\n * @param cb the function to schedule\n */\nexport const scheduleImmediate = (cb: ScheduledFn): void => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n setImmediate(cb)\n }\n}\n\n/**\n * returns a promise than resolves in a future task. There is no guarantee that the task it resolves in\n * will be the next task but if you await it you can at least be sure that the current task is over and\n * most usefully that the entire microtask queue of the current task has been emptied.\n */\nexport function atLeastOneTask() {\n return new Promise((resolve) => scheduleImmediate(resolve))\n}\n\n/**\n * This utility function is extracted to make it easier to find places where we are doing\n * specific timing tricks to try to schedule work after React has rendered. This is especially\n * important at the moment because Next.js uses the edge builds of React which use setTimeout to\n * schedule work when you might expect that something like setImmediate would do the trick.\n *\n * Long term we should switch to the node versions of React rendering when possible and then\n * update this to use setImmediate rather than setTimeout\n */\nexport function waitAtLeastOneReactRenderTask(): Promise {\n if (process.env.NEXT_RUNTIME === 'edge') {\n return new Promise((r) => setTimeout(r, 0))\n } else {\n return new Promise((r) => setImmediate(r))\n }\n}\n"],"names":["atLeastOneTask","scheduleImmediate","scheduleOnNextTick","waitAtLeastOneReactRenderTask","cb","Promise","resolve","then","process","env","NEXT_RUNTIME","setTimeout","nextTick","setImmediate","r"],"mappings":";;;;;;;;;;;;;;;;IA4CgBA,cAAc,EAAA;eAAdA;;IAbHC,iBAAiB,EAAA;eAAjBA;;IAtBAC,kBAAkB,EAAA;eAAlBA;;IAgDGC,6BAA6B,EAAA;eAA7BA;;;AAhDT,MAAMD,qBAAqB,CAACE;IACjC,6EAA6E;IAC7E,4EAA4E;IAC5E,uCAAuC;IACvC,EAAE;IACF,kLAAkL;IAClL,EAAE;IACFC,QAAQC,OAAO,GAAGC,IAAI,CAAC;QACrB,IAAIC,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;aAElC;YACLF,QAAQI,QAAQ,CAACR;QACnB;IACF;AACF;AAQO,MAAMH,oBAAoB,CAACG;IAChC,IAAII,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;SAElC;QACLG,aAAaT;IACf;AACF;AAOO,SAASJ;IACd,OAAO,IAAIK,QAAc,CAACC,UAAYL,kBAAkBK;AAC1D;AAWO,SAASH;IACd,IAAIK,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;SAElC;QACL,OAAO,IAAIL,QAAQ,CAACS,IAAMD,aAAaC;IACzC;AACF","ignoreList":[0]}}, - {"offset": {"line": 1530, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/shared/lib/invariant-error.ts"],"sourcesContent":["export class InvariantError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(\n `Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`,\n options\n )\n this.name = 'InvariantError'\n }\n}\n"],"names":["InvariantError","Error","constructor","message","options","endsWith","name"],"mappings":";;;+BAAaA,kBAAAA;;;eAAAA;;;AAAN,MAAMA,uBAAuBC;IAClCC,YAAYC,OAAe,EAAEC,OAAsB,CAAE;QACnD,KAAK,CACH,CAAC,WAAW,EAAED,QAAQE,QAAQ,CAAC,OAAOF,UAAUA,UAAU,IAAI,0BAA0B,CAAC,EACzFC;QAEF,IAAI,CAACE,IAAI,GAAG;IACd;AACF","ignoreList":[0]}}, - {"offset": {"line": 1549, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/app-render/dynamic-rendering.ts"],"sourcesContent":["/**\n * The functions provided by this module are used to communicate certain properties\n * about the currently running code so that Next.js can make decisions on how to handle\n * the current execution in different rendering modes such as pre-rendering, resuming, and SSR.\n *\n * Today Next.js treats all code as potentially static. Certain APIs may only make sense when dynamically rendering.\n * Traditionally this meant deopting the entire render to dynamic however with PPR we can now deopt parts\n * of a React tree as dynamic while still keeping other parts static. There are really two different kinds of\n * Dynamic indications.\n *\n * The first is simply an intention to be dynamic. unstable_noStore is an example of this where\n * the currently executing code simply declares that the current scope is dynamic but if you use it\n * inside unstable_cache it can still be cached. This type of indication can be removed if we ever\n * make the default dynamic to begin with because the only way you would ever be static is inside\n * a cache scope which this indication does not affect.\n *\n * The second is an indication that a dynamic data source was read. This is a stronger form of dynamic\n * because it means that it is inappropriate to cache this at all. using a dynamic data source inside\n * unstable_cache should error. If you want to use some dynamic data inside unstable_cache you should\n * read that data outside the cache and pass it in as an argument to the cached function.\n */\n\nimport type { WorkStore } from '../app-render/work-async-storage.external'\nimport type {\n WorkUnitStore,\n PrerenderStoreLegacy,\n PrerenderStoreModern,\n PrerenderStoreModernRuntime,\n} from '../app-render/work-unit-async-storage.external'\n\n// Once postpone is in stable we should switch to importing the postpone export directly\nimport React from 'react'\n\nimport { DynamicServerError } from '../../client/components/hooks-server-context'\nimport { StaticGenBailoutError } from '../../client/components/static-generation-bailout'\nimport {\n getRuntimeStagePromise,\n throwForMissingRequestStore,\n workUnitAsyncStorage,\n} from './work-unit-async-storage.external'\nimport { workAsyncStorage } from '../app-render/work-async-storage.external'\nimport { makeHangingPromise } from '../dynamic-rendering-utils'\nimport {\n METADATA_BOUNDARY_NAME,\n VIEWPORT_BOUNDARY_NAME,\n OUTLET_BOUNDARY_NAME,\n ROOT_LAYOUT_BOUNDARY_NAME,\n} from '../../lib/framework/boundary-constants'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\nimport { BailoutToCSRError } from '../../shared/lib/lazy-dynamic/bailout-to-csr'\nimport { InvariantError } from '../../shared/lib/invariant-error'\n\nconst hasPostpone = typeof React.unstable_postpone === 'function'\n\nexport type DynamicAccess = {\n /**\n * If debugging, this will contain the stack trace of where the dynamic access\n * occurred. This is used to provide more information to the user about why\n * their page is being rendered dynamically.\n */\n stack?: string\n\n /**\n * The expression that was accessed dynamically.\n */\n expression: string\n}\n\n// Stores dynamic reasons used during an RSC render.\nexport type DynamicTrackingState = {\n /**\n * When true, stack information will also be tracked during dynamic access.\n */\n readonly isDebugDynamicAccesses: boolean | undefined\n\n /**\n * The dynamic accesses that occurred during the render.\n */\n readonly dynamicAccesses: Array\n\n syncDynamicErrorWithStack: null | Error\n}\n\n// Stores dynamic reasons used during an SSR render.\nexport type DynamicValidationState = {\n hasSuspenseAboveBody: boolean\n hasDynamicMetadata: boolean\n dynamicMetadata: null | Error\n hasDynamicViewport: boolean\n hasAllowedDynamic: boolean\n dynamicErrors: Array\n}\n\nexport function createDynamicTrackingState(\n isDebugDynamicAccesses: boolean | undefined\n): DynamicTrackingState {\n return {\n isDebugDynamicAccesses,\n dynamicAccesses: [],\n syncDynamicErrorWithStack: null,\n }\n}\n\nexport function createDynamicValidationState(): DynamicValidationState {\n return {\n hasSuspenseAboveBody: false,\n hasDynamicMetadata: false,\n dynamicMetadata: null,\n hasDynamicViewport: false,\n hasAllowedDynamic: false,\n dynamicErrors: [],\n }\n}\n\nexport function getFirstDynamicReason(\n trackingState: DynamicTrackingState\n): undefined | string {\n return trackingState.dynamicAccesses[0]?.expression\n}\n\n/**\n * This function communicates that the current scope should be treated as dynamic.\n *\n * In most cases this function is a no-op but if called during\n * a PPR prerender it will postpone the current sub-tree and calling\n * it during a normal prerender will cause the entire prerender to abort\n */\nexport function markCurrentScopeAsDynamic(\n store: WorkStore,\n workUnitStore: undefined | Exclude,\n expression: string\n): void {\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'cache':\n case 'unstable-cache':\n // Inside cache scopes, marking a scope as dynamic has no effect,\n // because the outer cache scope creates a cache boundary. This is\n // subtly different from reading a dynamic data source, which is\n // forbidden inside a cache scope.\n return\n case 'private-cache':\n // A private cache scope is already dynamic by definition.\n return\n case 'prerender-legacy':\n case 'prerender-ppr':\n case 'request':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n // If we're forcing dynamic rendering or we're forcing static rendering, we\n // don't need to do anything here because the entire page is already dynamic\n // or it's static and it should not throw or postpone here.\n if (store.forceDynamic || store.forceStatic) return\n\n if (store.dynamicShouldError) {\n throw new StaticGenBailoutError(\n `Route ${store.route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n }\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender-ppr':\n return postponeWithTracking(\n store.route,\n expression,\n workUnitStore.dynamicTracking\n )\n case 'prerender-legacy':\n workUnitStore.revalidate = 0\n\n // We aren't prerendering, but we are generating a static page. We need\n // to bail out of static generation.\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n case 'request':\n if (process.env.NODE_ENV !== 'production') {\n workUnitStore.usedDynamic = true\n }\n break\n default:\n workUnitStore satisfies never\n }\n }\n}\n\n/**\n * This function is meant to be used when prerendering without cacheComponents or PPR.\n * When called during a build it will cause Next.js to consider the route as dynamic.\n *\n * @internal\n */\nexport function throwToInterruptStaticGeneration(\n expression: string,\n store: WorkStore,\n prerenderStore: PrerenderStoreLegacy\n): never {\n // We aren't prerendering but we are generating a static page. We need to bail out of static generation\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n\n prerenderStore.revalidate = 0\n\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n}\n\n/**\n * This function should be used to track whether something dynamic happened even when\n * we are in a dynamic render. This is useful for Dev where all renders are dynamic but\n * we still track whether dynamic APIs were accessed for helpful messaging\n *\n * @internal\n */\nexport function trackDynamicDataInDynamicRender(workUnitStore: WorkUnitStore) {\n switch (workUnitStore.type) {\n case 'cache':\n case 'unstable-cache':\n // Inside cache scopes, marking a scope as dynamic has no effect,\n // because the outer cache scope creates a cache boundary. This is\n // subtly different from reading a dynamic data source, which is\n // forbidden inside a cache scope.\n return\n case 'private-cache':\n // A private cache scope is already dynamic by definition.\n return\n case 'prerender':\n case 'prerender-runtime':\n case 'prerender-legacy':\n case 'prerender-ppr':\n case 'prerender-client':\n break\n case 'request':\n if (process.env.NODE_ENV !== 'production') {\n workUnitStore.usedDynamic = true\n }\n break\n default:\n workUnitStore satisfies never\n }\n}\n\nfunction abortOnSynchronousDynamicDataAccess(\n route: string,\n expression: string,\n prerenderStore: PrerenderStoreModern\n): void {\n const reason = `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`\n\n const error = createPrerenderInterruptedError(reason)\n\n prerenderStore.controller.abort(error)\n\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n // When we aren't debugging, we don't need to create another error for the\n // stack trace.\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n}\n\nexport function abortOnSynchronousPlatformIOAccess(\n route: string,\n expression: string,\n errorWithStack: Error,\n prerenderStore: PrerenderStoreModern\n): void {\n const dynamicTracking = prerenderStore.dynamicTracking\n abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore)\n // It is important that we set this tracking value after aborting. Aborts are executed\n // synchronously except for the case where you abort during render itself. By setting this\n // value late we can use it to determine if any of the aborted tasks are the task that\n // called the sync IO expression in the first place.\n if (dynamicTracking) {\n if (dynamicTracking.syncDynamicErrorWithStack === null) {\n dynamicTracking.syncDynamicErrorWithStack = errorWithStack\n }\n }\n}\n\n/**\n * use this function when prerendering with cacheComponents. If we are doing a\n * prospective prerender we don't actually abort because we want to discover\n * all caches for the shell. If this is the actual prerender we do abort.\n *\n * This function accepts a prerenderStore but the caller should ensure we're\n * actually running in cacheComponents mode.\n *\n * @internal\n */\nexport function abortAndThrowOnSynchronousRequestDataAccess(\n route: string,\n expression: string,\n errorWithStack: Error,\n prerenderStore: PrerenderStoreModern\n): never {\n const prerenderSignal = prerenderStore.controller.signal\n if (prerenderSignal.aborted === false) {\n // TODO it would be better to move this aborted check into the callsite so we can avoid making\n // the error object when it isn't relevant to the aborting of the prerender however\n // since we need the throw semantics regardless of whether we abort it is easier to land\n // this way. See how this was handled with `abortOnSynchronousPlatformIOAccess` for a closer\n // to ideal implementation\n abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore)\n // It is important that we set this tracking value after aborting. Aborts are executed\n // synchronously except for the case where you abort during render itself. By setting this\n // value late we can use it to determine if any of the aborted tasks are the task that\n // called the sync IO expression in the first place.\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n if (dynamicTracking.syncDynamicErrorWithStack === null) {\n dynamicTracking.syncDynamicErrorWithStack = errorWithStack\n }\n }\n }\n throw createPrerenderInterruptedError(\n `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`\n )\n}\n\n/**\n * This component will call `React.postpone` that throws the postponed error.\n */\ntype PostponeProps = {\n reason: string\n route: string\n}\nexport function Postpone({ reason, route }: PostponeProps): never {\n const prerenderStore = workUnitAsyncStorage.getStore()\n const dynamicTracking =\n prerenderStore && prerenderStore.type === 'prerender-ppr'\n ? prerenderStore.dynamicTracking\n : null\n postponeWithTracking(route, reason, dynamicTracking)\n}\n\nexport function postponeWithTracking(\n route: string,\n expression: string,\n dynamicTracking: null | DynamicTrackingState\n): never {\n assertPostpone()\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n // When we aren't debugging, we don't need to create another error for the\n // stack trace.\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n\n React.unstable_postpone(createPostponeReason(route, expression))\n}\n\nfunction createPostponeReason(route: string, expression: string) {\n return (\n `Route ${route} needs to bail out of prerendering at this point because it used ${expression}. ` +\n `React throws this special object to indicate where. It should not be caught by ` +\n `your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error`\n )\n}\n\nexport function isDynamicPostpone(err: unknown) {\n if (\n typeof err === 'object' &&\n err !== null &&\n typeof (err as any).message === 'string'\n ) {\n return isDynamicPostponeReason((err as any).message)\n }\n return false\n}\n\nfunction isDynamicPostponeReason(reason: string) {\n return (\n reason.includes(\n 'needs to bail out of prerendering at this point because it used'\n ) &&\n reason.includes(\n 'Learn more: https://nextjs.org/docs/messages/ppr-caught-error'\n )\n )\n}\n\nif (isDynamicPostponeReason(createPostponeReason('%%%', '^^^')) === false) {\n throw new Error(\n 'Invariant: isDynamicPostpone misidentified a postpone reason. This is a bug in Next.js'\n )\n}\n\nconst NEXT_PRERENDER_INTERRUPTED = 'NEXT_PRERENDER_INTERRUPTED'\n\nfunction createPrerenderInterruptedError(message: string): Error {\n const error = new Error(message)\n ;(error as any).digest = NEXT_PRERENDER_INTERRUPTED\n return error\n}\n\ntype DigestError = Error & {\n digest: string\n}\n\nexport function isPrerenderInterruptedError(\n error: unknown\n): error is DigestError {\n return (\n typeof error === 'object' &&\n error !== null &&\n (error as any).digest === NEXT_PRERENDER_INTERRUPTED &&\n 'name' in error &&\n 'message' in error &&\n error instanceof Error\n )\n}\n\nexport function accessedDynamicData(\n dynamicAccesses: Array\n): boolean {\n return dynamicAccesses.length > 0\n}\n\nexport function consumeDynamicAccess(\n serverDynamic: DynamicTrackingState,\n clientDynamic: DynamicTrackingState\n): DynamicTrackingState['dynamicAccesses'] {\n // We mutate because we only call this once we are no longer writing\n // to the dynamicTrackingState and it's more efficient than creating a new\n // array.\n serverDynamic.dynamicAccesses.push(...clientDynamic.dynamicAccesses)\n return serverDynamic.dynamicAccesses\n}\n\nexport function formatDynamicAPIAccesses(\n dynamicAccesses: Array\n): string[] {\n return dynamicAccesses\n .filter(\n (access): access is Required =>\n typeof access.stack === 'string' && access.stack.length > 0\n )\n .map(({ expression, stack }) => {\n stack = stack\n .split('\\n')\n // Remove the \"Error: \" prefix from the first line of the stack trace as\n // well as the first 4 lines of the stack trace which is the distance\n // from the user code and the `new Error().stack` call.\n .slice(4)\n .filter((line) => {\n // Exclude Next.js internals from the stack trace.\n if (line.includes('node_modules/next/')) {\n return false\n }\n\n // Exclude anonymous functions from the stack trace.\n if (line.includes(' ()')) {\n return false\n }\n\n // Exclude Node.js internals from the stack trace.\n if (line.includes(' (node:')) {\n return false\n }\n\n return true\n })\n .join('\\n')\n return `Dynamic API Usage Debug - ${expression}:\\n${stack}`\n })\n}\n\nfunction assertPostpone() {\n if (!hasPostpone) {\n throw new Error(\n `Invariant: React.unstable_postpone is not defined. This suggests the wrong version of React was loaded. This is a bug in Next.js`\n )\n }\n}\n\n/**\n * This is a bit of a hack to allow us to abort a render using a Postpone instance instead of an Error which changes React's\n * abort semantics slightly.\n */\nexport function createRenderInBrowserAbortSignal(): AbortSignal {\n const controller = new AbortController()\n controller.abort(new BailoutToCSRError('Render in Browser'))\n return controller.signal\n}\n\n/**\n * In a prerender, we may end up with hanging Promises as inputs due them\n * stalling on connection() or because they're loading dynamic data. In that\n * case we need to abort the encoding of arguments since they'll never complete.\n */\nexport function createHangingInputAbortSignal(\n workUnitStore: WorkUnitStore\n): AbortSignal | undefined {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-runtime':\n const controller = new AbortController()\n\n if (workUnitStore.cacheSignal) {\n // If we have a cacheSignal it means we're in a prospective render. If\n // the input we're waiting on is coming from another cache, we do want\n // to wait for it so that we can resolve this cache entry too.\n workUnitStore.cacheSignal.inputReady().then(() => {\n controller.abort()\n })\n } else {\n // Otherwise we're in the final render and we should already have all\n // our caches filled.\n // If the prerender uses stages, we have wait until the runtime stage,\n // at which point all runtime inputs will be resolved.\n // (otherwise, a runtime prerender might consider `cookies()` hanging\n // even though they'd resolve in the next task.)\n //\n // We might still be waiting on some microtasks so we\n // wait one tick before giving up. When we give up, we still want to\n // render the content of this cache as deeply as we can so that we can\n // suspend as deeply as possible in the tree or not at all if we don't\n // end up waiting for the input.\n const runtimeStagePromise = getRuntimeStagePromise(workUnitStore)\n if (runtimeStagePromise) {\n runtimeStagePromise.then(() =>\n scheduleOnNextTick(() => controller.abort())\n )\n } else {\n scheduleOnNextTick(() => controller.abort())\n }\n }\n\n return controller.signal\n case 'prerender-client':\n case 'prerender-ppr':\n case 'prerender-legacy':\n case 'request':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n return undefined\n default:\n workUnitStore satisfies never\n }\n}\n\nexport function annotateDynamicAccess(\n expression: string,\n prerenderStore: PrerenderStoreModern\n) {\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n}\n\nexport function useDynamicRouteParams(expression: string) {\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workStore && workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender-client':\n case 'prerender': {\n const fallbackParams = workUnitStore.fallbackRouteParams\n\n if (fallbackParams && fallbackParams.size > 0) {\n // We are in a prerender with cacheComponents semantics. We are going to\n // hang here and never resolve. This will cause the currently\n // rendering component to effectively be a dynamic hole.\n React.use(\n makeHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n expression\n )\n )\n }\n break\n }\n case 'prerender-ppr': {\n const fallbackParams = workUnitStore.fallbackRouteParams\n if (fallbackParams && fallbackParams.size > 0) {\n return postponeWithTracking(\n workStore.route,\n expression,\n workUnitStore.dynamicTracking\n )\n }\n break\n }\n case 'prerender-runtime':\n throw new InvariantError(\n `\\`${expression}\\` was called during a runtime prerender. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`\n )\n case 'cache':\n case 'private-cache':\n throw new InvariantError(\n `\\`${expression}\\` was called inside a cache scope. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`\n )\n case 'prerender-legacy':\n case 'request':\n case 'unstable-cache':\n break\n default:\n workUnitStore satisfies never\n }\n }\n}\n\nexport function useDynamicSearchParams(expression: string) {\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n if (!workStore) {\n // We assume pages router context and just return\n return\n }\n\n if (!workUnitStore) {\n throwForMissingRequestStore(expression)\n }\n\n switch (workUnitStore.type) {\n case 'prerender-client': {\n React.use(\n makeHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n expression\n )\n )\n break\n }\n case 'prerender-legacy':\n case 'prerender-ppr': {\n if (workStore.forceStatic) {\n return\n }\n throw new BailoutToCSRError(expression)\n }\n case 'prerender':\n case 'prerender-runtime':\n throw new InvariantError(\n `\\`${expression}\\` was called from a Server Component. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`\n )\n case 'cache':\n case 'unstable-cache':\n case 'private-cache':\n throw new InvariantError(\n `\\`${expression}\\` was called inside a cache scope. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`\n )\n case 'request':\n return\n default:\n workUnitStore satisfies never\n }\n}\n\nconst hasSuspenseRegex = /\\n\\s+at Suspense \\(\\)/\n\n// Common implicit body tags that React will treat as body when placed directly in html\nconst bodyAndImplicitTags =\n 'body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6'\n\n// Detects when RootLayoutBoundary (our framework marker component) appears\n// after Suspense in the component stack, indicating the root layout is wrapped\n// within a Suspense boundary. Ensures no body/html/implicit-body components are in between.\n//\n// Example matches:\n// at Suspense ()\n// at __next_root_layout_boundary__ ()\n//\n// Or with other components in between (but not body/html/implicit-body):\n// at Suspense ()\n// at SomeComponent ()\n// at __next_root_layout_boundary__ ()\nconst hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex = new RegExp(\n `\\\\n\\\\s+at Suspense \\\\(\\\\)(?:(?!\\\\n\\\\s+at (?:${bodyAndImplicitTags}) \\\\(\\\\))[\\\\s\\\\S])*?\\\\n\\\\s+at ${ROOT_LAYOUT_BOUNDARY_NAME} \\\\([^\\\\n]*\\\\)`\n)\n\nconst hasMetadataRegex = new RegExp(\n `\\\\n\\\\s+at ${METADATA_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst hasViewportRegex = new RegExp(\n `\\\\n\\\\s+at ${VIEWPORT_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst hasOutletRegex = new RegExp(`\\\\n\\\\s+at ${OUTLET_BOUNDARY_NAME}[\\\\n\\\\s]`)\n\nexport function trackAllowedDynamicAccess(\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState\n) {\n if (hasOutletRegex.test(componentStack)) {\n // We don't need to track that this is dynamic. It is only so when something else is also dynamic.\n return\n } else if (hasMetadataRegex.test(componentStack)) {\n dynamicValidation.hasDynamicMetadata = true\n return\n } else if (hasViewportRegex.test(componentStack)) {\n dynamicValidation.hasDynamicViewport = true\n return\n } else if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule.\n // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense\n // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering.\n dynamicValidation.hasAllowedDynamic = true\n dynamicValidation.hasSuspenseAboveBody = true\n return\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it so we don't need to report it as a source\n // of disallowed\n dynamicValidation.hasAllowedDynamic = true\n return\n } else if (clientDynamic.syncDynamicErrorWithStack) {\n // This task was the task that called the sync error.\n dynamicValidation.dynamicErrors.push(\n clientDynamic.syncDynamicErrorWithStack\n )\n return\n } else {\n const message =\n `Route \"${workStore.route}\": Uncached data was accessed outside of ` +\n '. This delays the entire page from rendering, resulting in a ' +\n 'slow user experience. Learn more: ' +\n 'https://nextjs.org/docs/messages/blocking-route'\n const error = createErrorWithComponentOrOwnerStack(message, componentStack)\n dynamicValidation.dynamicErrors.push(error)\n return\n }\n}\n\nexport function trackDynamicHoleInRuntimeShell(\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState\n) {\n if (hasOutletRegex.test(componentStack)) {\n // We don't need to track that this is dynamic. It is only so when something else is also dynamic.\n return\n } else if (hasMetadataRegex.test(componentStack)) {\n const message = `Route \"${workStore.route}\": Uncached data or \\`connection()\\` was accessed inside \\`generateMetadata\\`. Except for this instance, the page would have been entirely prerenderable which may have been the intended behavior. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`\n const error = createErrorWithComponentOrOwnerStack(message, componentStack)\n dynamicValidation.dynamicMetadata = error\n return\n } else if (hasViewportRegex.test(componentStack)) {\n const message = `Route \"${workStore.route}\": Uncached data or \\`connection()\\` was accessed inside \\`generateViewport\\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`\n const error = createErrorWithComponentOrOwnerStack(message, componentStack)\n dynamicValidation.dynamicErrors.push(error)\n return\n } else if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule.\n // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense\n // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering.\n dynamicValidation.hasAllowedDynamic = true\n dynamicValidation.hasSuspenseAboveBody = true\n return\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it so we don't need to report it as a source\n // of disallowed\n dynamicValidation.hasAllowedDynamic = true\n return\n } else if (clientDynamic.syncDynamicErrorWithStack) {\n // This task was the task that called the sync error.\n dynamicValidation.dynamicErrors.push(\n clientDynamic.syncDynamicErrorWithStack\n )\n return\n } else {\n const message = `Route \"${workStore.route}\": Uncached data or \\`connection()\\` was accessed outside of \\`\\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`\n const error = createErrorWithComponentOrOwnerStack(message, componentStack)\n dynamicValidation.dynamicErrors.push(error)\n return\n }\n}\n\nexport function trackDynamicHoleInStaticShell(\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState\n) {\n if (hasOutletRegex.test(componentStack)) {\n // We don't need to track that this is dynamic. It is only so when something else is also dynamic.\n return\n } else if (hasMetadataRegex.test(componentStack)) {\n const message = `Route \"${workStore.route}\": Runtime data such as \\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` was accessed inside \\`generateMetadata\\` or you have file-based metadata such as icons that depend on dynamic params segments. Except for this instance, the page would have been entirely prerenderable which may have been the intended behavior. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`\n const error = createErrorWithComponentOrOwnerStack(message, componentStack)\n dynamicValidation.dynamicMetadata = error\n return\n } else if (hasViewportRegex.test(componentStack)) {\n const message = `Route \"${workStore.route}\": Runtime data such as \\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` was accessed inside \\`generateViewport\\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`\n const error = createErrorWithComponentOrOwnerStack(message, componentStack)\n dynamicValidation.dynamicErrors.push(error)\n return\n } else if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule.\n // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense\n // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering.\n dynamicValidation.hasAllowedDynamic = true\n dynamicValidation.hasSuspenseAboveBody = true\n return\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it so we don't need to report it as a source\n // of disallowed\n dynamicValidation.hasAllowedDynamic = true\n return\n } else if (clientDynamic.syncDynamicErrorWithStack) {\n // This task was the task that called the sync error.\n dynamicValidation.dynamicErrors.push(\n clientDynamic.syncDynamicErrorWithStack\n )\n return\n } else {\n const message = `Route \"${workStore.route}\": Runtime data such as \\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` was accessed outside of \\`\\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`\n const error = createErrorWithComponentOrOwnerStack(message, componentStack)\n dynamicValidation.dynamicErrors.push(error)\n return\n }\n}\n\n/**\n * In dev mode, we prefer using the owner stack, otherwise the provided\n * component stack is used.\n */\nfunction createErrorWithComponentOrOwnerStack(\n message: string,\n componentStack: string\n) {\n const ownerStack =\n process.env.NODE_ENV !== 'production' && React.captureOwnerStack\n ? React.captureOwnerStack()\n : null\n\n const error = new Error(message)\n // TODO go back to owner stack here if available. This is temporarily using componentStack to get the right\n //\n error.stack = error.name + ': ' + message + (ownerStack || componentStack)\n return error\n}\n\nexport enum PreludeState {\n Full = 0,\n Empty = 1,\n Errored = 2,\n}\n\nexport function logDisallowedDynamicError(\n workStore: WorkStore,\n error: Error\n): void {\n console.error(error)\n\n if (!workStore.dev) {\n if (workStore.hasReadableErrorStacks) {\n console.error(\n `To get a more detailed stack trace and pinpoint the issue, start the app in development mode by running \\`next dev\\`, then open \"${workStore.route}\" in your browser to investigate the error.`\n )\n } else {\n console.error(`To get a more detailed stack trace and pinpoint the issue, try one of the following:\n - Start the app in development mode by running \\`next dev\\`, then open \"${workStore.route}\" in your browser to investigate the error.\n - Rerun the production build with \\`next build --debug-prerender\\` to generate better stack traces.`)\n }\n }\n}\n\nexport function throwIfDisallowedDynamic(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n serverDynamic: DynamicTrackingState\n): void {\n if (serverDynamic.syncDynamicErrorWithStack) {\n logDisallowedDynamicError(\n workStore,\n serverDynamic.syncDynamicErrorWithStack\n )\n throw new StaticGenBailoutError()\n }\n\n if (prelude !== PreludeState.Full) {\n if (dynamicValidation.hasSuspenseAboveBody) {\n // This route has opted into allowing fully dynamic rendering\n // by including a Suspense boundary above the body. In this case\n // a lack of a shell is not considered disallowed so we simply return\n return\n }\n\n // We didn't have any sync bailouts but there may be user code which\n // blocked the root. We would have captured these during the prerender\n // and can log them here and then terminate the build/validating render\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n for (let i = 0; i < dynamicErrors.length; i++) {\n logDisallowedDynamicError(workStore, dynamicErrors[i])\n }\n\n throw new StaticGenBailoutError()\n }\n\n // If we got this far then the only other thing that could be blocking\n // the root is dynamic Viewport. If this is dynamic then\n // you need to opt into that by adding a Suspense boundary above the body\n // to indicate your are ok with fully dynamic rendering.\n if (dynamicValidation.hasDynamicViewport) {\n console.error(\n `Route \"${workStore.route}\" has a \\`generateViewport\\` that depends on Request data (\\`cookies()\\`, etc...) or uncached external data (\\`fetch(...)\\`, etc...) without explicitly allowing fully dynamic rendering. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`\n )\n throw new StaticGenBailoutError()\n }\n\n if (prelude === PreludeState.Empty) {\n // If we ever get this far then we messed up the tracking of invalid dynamic.\n // We still adhere to the constraint that you must produce a shell but invite the\n // user to report this as a bug in Next.js.\n console.error(\n `Route \"${workStore.route}\" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`\n )\n throw new StaticGenBailoutError()\n }\n } else {\n if (\n dynamicValidation.hasAllowedDynamic === false &&\n dynamicValidation.hasDynamicMetadata\n ) {\n console.error(\n `Route \"${workStore.route}\" has a \\`generateMetadata\\` that depends on Request data (\\`cookies()\\`, etc...) or uncached external data (\\`fetch(...)\\`, etc...) when the rest of the route does not. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`\n )\n throw new StaticGenBailoutError()\n }\n }\n}\n\nexport function getStaticShellDisallowedDynamicReasons(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState\n): Array {\n if (dynamicValidation.hasSuspenseAboveBody) {\n // This route has opted into allowing fully dynamic rendering\n // by including a Suspense boundary above the body. In this case\n // a lack of a shell is not considered disallowed so we simply return\n return []\n }\n\n if (prelude !== PreludeState.Full) {\n // We didn't have any sync bailouts but there may be user code which\n // blocked the root. We would have captured these during the prerender\n // and can log them here and then terminate the build/validating render\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n if (prelude === PreludeState.Empty) {\n // If we ever get this far then we messed up the tracking of invalid dynamic.\n // We still adhere to the constraint that you must produce a shell but invite the\n // user to report this as a bug in Next.js.\n return [\n new InvariantError(\n `Route \"${workStore.route}\" did not produce a static shell and Next.js was unable to determine a reason.`\n ),\n ]\n }\n } else {\n // We have a prelude but we might still have dynamic metadata without any other dynamic access\n if (\n dynamicValidation.hasAllowedDynamic === false &&\n dynamicValidation.dynamicErrors.length === 0 &&\n dynamicValidation.dynamicMetadata\n ) {\n return [dynamicValidation.dynamicMetadata]\n }\n }\n // We had a non-empty prelude and there are no dynamic holes\n return []\n}\n\nexport function delayUntilRuntimeStage(\n prerenderStore: PrerenderStoreModernRuntime,\n result: Promise\n): Promise {\n if (prerenderStore.runtimeStagePromise) {\n return prerenderStore.runtimeStagePromise.then(() => result)\n }\n return result\n}\n"],"names":["Postpone","PreludeState","abortAndThrowOnSynchronousRequestDataAccess","abortOnSynchronousPlatformIOAccess","accessedDynamicData","annotateDynamicAccess","consumeDynamicAccess","createDynamicTrackingState","createDynamicValidationState","createHangingInputAbortSignal","createRenderInBrowserAbortSignal","delayUntilRuntimeStage","formatDynamicAPIAccesses","getFirstDynamicReason","getStaticShellDisallowedDynamicReasons","isDynamicPostpone","isPrerenderInterruptedError","logDisallowedDynamicError","markCurrentScopeAsDynamic","postponeWithTracking","throwIfDisallowedDynamic","throwToInterruptStaticGeneration","trackAllowedDynamicAccess","trackDynamicDataInDynamicRender","trackDynamicHoleInRuntimeShell","trackDynamicHoleInStaticShell","useDynamicRouteParams","useDynamicSearchParams","hasPostpone","React","unstable_postpone","isDebugDynamicAccesses","dynamicAccesses","syncDynamicErrorWithStack","hasSuspenseAboveBody","hasDynamicMetadata","dynamicMetadata","hasDynamicViewport","hasAllowedDynamic","dynamicErrors","trackingState","expression","store","workUnitStore","type","forceDynamic","forceStatic","dynamicShouldError","StaticGenBailoutError","route","dynamicTracking","revalidate","err","DynamicServerError","dynamicUsageDescription","dynamicUsageStack","stack","process","env","NODE_ENV","usedDynamic","prerenderStore","abortOnSynchronousDynamicDataAccess","reason","error","createPrerenderInterruptedError","controller","abort","push","Error","undefined","errorWithStack","prerenderSignal","signal","aborted","workUnitAsyncStorage","getStore","assertPostpone","createPostponeReason","message","isDynamicPostponeReason","includes","NEXT_PRERENDER_INTERRUPTED","digest","length","serverDynamic","clientDynamic","filter","access","map","split","slice","line","join","AbortController","BailoutToCSRError","cacheSignal","inputReady","then","runtimeStagePromise","getRuntimeStagePromise","scheduleOnNextTick","workStore","workAsyncStorage","fallbackParams","fallbackRouteParams","size","use","makeHangingPromise","renderSignal","InvariantError","throwForMissingRequestStore","hasSuspenseRegex","bodyAndImplicitTags","hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex","RegExp","ROOT_LAYOUT_BOUNDARY_NAME","hasMetadataRegex","METADATA_BOUNDARY_NAME","hasViewportRegex","VIEWPORT_BOUNDARY_NAME","hasOutletRegex","OUTLET_BOUNDARY_NAME","componentStack","dynamicValidation","test","createErrorWithComponentOrOwnerStack","ownerStack","captureOwnerStack","name","console","dev","hasReadableErrorStacks","prelude","i","result"],"mappings":"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","ignoreList":[0]}}, - {"offset": {"line": 2378, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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": 2412, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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,qBAEZC,QAAQ,sJACRF,gBAAgB,GAEhBE,QAAQ,8BACRF,gBAAgB","ignoreList":[0]}}, - {"offset": {"line": 2439, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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": 2513, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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": 2712, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/navigation.js"],"sourcesContent":["module.exports = require('./dist/client/components/navigation')\n"],"names":[],"mappings":"AAAA,OAAO,OAAO","ignoreList":[0]}}] + {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/components/Pricing.tsx"],"sourcesContent":["'use client';\n\n\nimport React from 'react';\nimport { Check, ArrowLeft } from 'lucide-react';\n\ninterface PlanData {\n id: string;\n name: string;\n displayName: string;\n price: number;\n description: string;\n features: string[];\n isPopular: boolean;\n}\n\ninterface PricingProps {\n plans: PlanData[];\n currentPlan: string;\n onBack: () => void;\n onSelectPlan: (planId: string) => void;\n isLoading?: boolean;\n}\n\nconst Pricing: React.FC = ({ plans, currentPlan, onBack, onSelectPlan, isLoading }) => {\n return (\n
\n
\n \n
\n

Choisissez votre destin d'écrivain.

\n

Passez au plan supérieur pour libérer toute la puissance de l'IA.

\n
\n
\n {isLoading &&

Chargement des offres...

}\n {!isLoading && plans.map((p) => (\n
\n
\n

{p.displayName}

\n
{p.price}€/mois
\n

{p.description}

\n
\n
    \n {p.features.map((f, i) => (\n
  • \n
    \n {f}\n
  • \n ))}\n
\n onSelectPlan(p.id)}\n className={`w-full py-4 rounded-2xl font-black transition-all ${p.id === currentPlan ? 'bg-slate-100 text-slate-400 cursor-default' : p.isPopular ? 'bg-blue-600 text-white hover:bg-blue-700' : 'bg-slate-900 text-white hover:bg-slate-800'}`}\n >\n {p.id === currentPlan ? 'Plan Actuel' : 'Sélectionner'}\n \n
\n ))}\n
\n
\n
\n );\n};\n\nexport default Pricing;\n"],"names":[],"mappings":";;;;;AAIA;AAAA;AAJA;;;AAwBA,MAAM,UAAkC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE;IAC9F,qBACE,0RAAC;QAAI,WAAU;kBACb,cAAA,0RAAC;YAAI,WAAU;;8BACb,0RAAC;oBAAO,SAAS;oBAAQ,WAAU;;sCACjC,0RAAC,yQAAS;4BAAC,MAAM;;;;;;wBAAM;;;;;;;8BAEzB,0RAAC;oBAAI,WAAU;;sCACb,0RAAC;4BAAG,WAAU;sCAA0C;;;;;;sCACxD,0RAAC;4BAAE,WAAU;sCAAiB;;;;;;;;;;;;8BAEhC,0RAAC;oBAAI,WAAU;;wBACZ,2BAAa,0RAAC;4BAAE,WAAU;sCAA+B;;;;;;wBACzD,CAAC,aAAa,MAAM,GAAG,CAAC,CAAC,kBACxB,0RAAC;gCAAe,WAAW,CAAC,+CAA+C,EAAE,EAAE,SAAS,GAAG,8CAA8C,+BAA+B;;kDACtK,0RAAC;wCAAI,WAAU;;0DACb,0RAAC;gDAAG,WAAU;0DAAyC,EAAE,WAAW;;;;;;0DACpE,0RAAC;gDAAI,WAAU;;oDAA2C,EAAE,KAAK;oDAAC;kEAAC,0RAAC;wDAAK,WAAU;kEAAqC;;;;;;;;;;;;0DACxH,0RAAC;gDAAE,WAAU;0DAA0B,EAAE,WAAW;;;;;;;;;;;;kDAEtD,0RAAC;wCAAG,WAAU;kDACX,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,kBAClB,0RAAC;gDAAW,WAAU;;kEACpB,0RAAC;wDAAI,WAAU;kEAA8C,cAAA,0RAAC,yPAAK;4DAAC,MAAM;;;;;;;;;;;oDACzE;;+CAFM;;;;;;;;;;kDAMb,0RAAC;wCACC,SAAS,IAAM,aAAa,EAAE,EAAE;wCAChC,WAAW,CAAC,kDAAkD,EAAE,EAAE,EAAE,KAAK,cAAc,+CAA+C,EAAE,SAAS,GAAG,6CAA6C,8CAA8C;kDAE9O,EAAE,EAAE,KAAK,cAAc,gBAAgB;;;;;;;+BAlBlC,EAAE,EAAE;;;;;;;;;;;;;;;;;;;;;;AA0B1B;uCAEe"}}, + {"offset": {"line": 208, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/pricing/page.tsx"],"sourcesContent":["'use client';\r\n\r\nimport React, { useState, useEffect } from 'react';\r\nimport Pricing from '@/components/Pricing';\r\nimport { useRouter } from 'next/navigation';\r\nimport { useAuthContext } from '@/providers/AuthProvider';\r\n\r\nexport default function PricingPage() {\r\n const router = useRouter();\r\n const { user } = useAuthContext();\r\n\r\n const [plans, setPlans] = useState([]);\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n fetch('/api/plans', { cache: 'no-store' })\r\n .then(res => res.json())\r\n .then(data => {\r\n setPlans(data);\r\n setIsLoading(false);\r\n })\r\n .catch(err => {\r\n console.error(err);\r\n setIsLoading(false);\r\n });\r\n }, []);\r\n\r\n return (\r\n router.push(user ? '/dashboard' : '/')}\r\n onSelectPlan={() => router.push(user ? '/checkout' : '/login')}\r\n />\r\n );\r\n}\r\n"],"names":[],"mappings":";;;;;AAEA;AACA;AACA;AACA;AALA;;;;;;AAOe,SAAS;IACpB,MAAM,SAAS,IAAA,2LAAS;IACxB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,+LAAc;IAE/B,MAAM,CAAC,OAAO,SAAS,GAAG,IAAA,6PAAQ,EAAC,EAAE;IACrC,MAAM,CAAC,WAAW,aAAa,GAAG,IAAA,6PAAQ,EAAC;IAE3C,IAAA,8PAAS,EAAC;QACN,MAAM,cAAc;YAAE,OAAO;QAAW,GACnC,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA;YACF,SAAS;YACT,aAAa;QACjB,GACC,KAAK,CAAC,CAAA;YACH,QAAQ,KAAK,CAAC;YACd,aAAa;QACjB;IACR,GAAG,EAAE;IAEL,qBACI,0RAAC,oLAAO;QACJ,OAAO;QACP,WAAW;QACX,aAAa,MAAM,aAAa,QAAQ;QACxC,QAAQ,IAAM,OAAO,IAAI,CAAC,OAAO,eAAe;QAChD,cAAc,IAAM,OAAO,IAAI,CAAC,OAAO,cAAc;;;;;;AAGjE"}}, + {"offset": {"line": 255, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/mergeClasses.ts"],"sourcesContent":["/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = (...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n"],"names":[],"mappings":";;;;;;;;;IAMO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,YAAA,CAAA,CAAA,CAAe,CAAA,GAA2C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GACrE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA,GAAO,KAAA,CAAA,CAAA,CAAA,CAAA,CAAU;QACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,OAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqB,CAAA,CAAA,CAAA,CAAA,CAAA,MAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CACjC,KAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,KAAM,CAAA,CAAA,CAAA,CAAA,CAAA;IAEjC,CAAC,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAG,CAAA,CACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}}, + {"offset": {"line": 273, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/toKebabCase.ts"],"sourcesContent":["/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n"],"names":[],"mappings":";;;;;;;;;IAMO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAsB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}}, + {"offset": {"line": 289, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/toCamelCase.ts"],"sourcesContent":["/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = (string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n"],"names":[],"mappings":";;;;;;;;;IAMO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,WAAA,CAAA,CAAA,CAAc,CAAmB,MAAA,CAAA,CAAA,CAAA,AAC5C,CAD4C,AAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAyB,CAAC,CAAA,CAAA,CAAA,CAAA,GAAO,CAAA,CAAA,CAAA,CAAI,EAAA,CAAA,CAAA,CAAA,AAClD,CADkD,AAClD,IAAK,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAI,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}}, + {"offset": {"line": 305, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/toPascalCase.ts"],"sourcesContent":["import { CamelToPascal } from '../utility-types';\nimport { toCamelCase } from './toCamelCase';\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = (string: T): CamelToPascal => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal;\n};\n"],"names":[],"mappings":";;;;;;;;;;;AASO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgC;IAC7E,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,wOAAA,EAAY,MAAM,CAAA;IAEpC,OAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAY,GAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA;AAC/D,CAAA"}}, + {"offset": {"line": 326, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/defaultAttributes.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/defaultAttributes.ts"],"sourcesContent":["export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n"],"names":[],"mappings":";;;;;;;;;IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe;IACb,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACP,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,CAAA,CAAA;IACP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,CAAA,CAAA;IACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACT,CAAA,CAAA,CAAA,CAAA,EAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAa,CAAA;IACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACf,cAAA,CAAA,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAClB,CAAA"}}, + {"offset": {"line": 352, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/hasA11yProp.ts"],"sourcesContent":["/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n\n return false;\n};\n"],"names":[],"mappings":";;;;;;;;;IAMO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA+B;IACzD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,KAAQ,KAAA,CAAA,AAAO;QACxB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,EAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,KAAK,CAAA,CAAA,CAAA,CAAA,KAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,MAAS,OAAA,CAAA,CAAS;YACnE,OAAO,CAAA,CAAA,CAAA,CAAA;QACT;IACF;IAEA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AACT,CAAA"}}, + {"offset": {"line": 375, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/Icon.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/Icon.ts"],"sourcesContent":["import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) =>\n createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n ),\n);\n\nexport default Icon;\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 416, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/createLucideIcon.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/createLucideIcon.ts"],"sourcesContent":["import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAWA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,gBAAA,CAAA,CAAA,CAAmB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,QAAA,CAAA,CAAA,CAAA,CAAA,CAAuB;IACjE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,sPAAA,EAAuC,CAAC,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,GAAM,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GACjF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,sPAAA,EAAc,6MAAA,CAAA,CAAM;YAClB,CAAA,CAAA,CAAA;YACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,yOAAA,EACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,wOAAA,MAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,yOAAA,EAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAC7C,CAAA,OAAA,EAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,EAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAEF,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CACJ;IAGH,SAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,yOAAA,EAAa,QAAQ,CAAA;IAE7C,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACT,CAAA"}}, + {"offset": {"line": 451, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/check.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/icons/check.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]];\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgNiA5IDE3bC01LTUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('check', __iconNode);\n\nexport default Check;\n"],"names":[],"mappings":";;;;;;;;;;;;;AAGO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAuB;IAAC;QAAC,MAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,iBAAA,CAAA;YAAmB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAC;CAAA;AAatF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,KAAA,CAAA,CAAA,KAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,0MAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA"}}, + {"offset": {"line": 489, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/arrow-left.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/icons/arrow-left.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm12 19-7-7 7-7', key: '1l729n' }],\n ['path', { d: 'M19 12H5', key: 'x3x0zl' }],\n];\n\n/**\n * @component @name ArrowLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTIgMTktNy03IDctNyIgLz4KICA8cGF0aCBkPSJNMTkgMTJINSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/arrow-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowLeft = createLucideIcon('arrow-left', __iconNode);\n\nexport default ArrowLeft;\n"],"names":[],"mappings":";;;;;;;;;;;;;AAGO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,UAAA,CAAA,CAAA,CAAuB;IAClC;QAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAAkB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAA;IAC/C;QAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAAY,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAA;CAC3C;AAaA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,SAAA,CAAA,CAAA,KAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,0MAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA"}}, + {"offset": {"line": 534, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/%40swc/helpers/cjs/_interop_require_wildcard.cjs"],"sourcesContent":["\"use strict\";\n\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) return obj;\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") return { default: obj };\n\n var cache = _getRequireWildcardCache(nodeInterop);\n\n if (cache && cache.has(obj)) return cache.get(obj);\n\n var newObj = { __proto__: null };\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);\n else newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n\n if (cache) cache.set(obj, newObj);\n\n return newObj;\n}\nexports._ = _interop_require_wildcard;\n"],"names":[],"mappings":"AAEA,SAAS,yBAAyB,WAAW;IACzC,IAAI,OAAO,YAAY,YAAY,OAAO;IAE1C,IAAI,oBAAoB,IAAI;IAC5B,IAAI,mBAAmB,IAAI;IAE3B,OAAO,CAAC,2BAA2B,SAAS,WAAW;QACnD,OAAO,cAAc,mBAAmB;IAC5C,CAAC,EAAE;AACP;AACA,SAAS,0BAA0B,GAAG,EAAE,WAAW;IAC/C,IAAI,CAAC,eAAe,OAAO,IAAI,UAAU,EAAE,OAAO;IAClD,IAAI,QAAQ,QAAQ,OAAO,QAAQ,YAAY,OAAO,QAAQ,YAAY,OAAO;QAAE,SAAS;IAAI;IAEhG,IAAI,QAAQ,yBAAyB;IAErC,IAAI,SAAS,MAAM,GAAG,CAAC,MAAM,OAAO,MAAM,GAAG,CAAC;IAE9C,IAAI,SAAS;QAAE,WAAW;IAAK;IAC/B,IAAI,wBAAwB,OAAO,cAAc,IAAI,OAAO,wBAAwB;IAEpF,IAAK,IAAI,OAAO,IAAK;QACjB,IAAI,QAAQ,aAAa,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,MAAM;YACrE,IAAI,OAAO,wBAAwB,OAAO,wBAAwB,CAAC,KAAK,OAAO;YAC/E,IAAI,QAAQ,CAAC,KAAK,GAAG,IAAI,KAAK,GAAG,GAAG,OAAO,cAAc,CAAC,QAAQ,KAAK;iBAClE,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;QAC/B;IACJ;IAEA,OAAO,OAAO,GAAG;IAEjB,IAAI,OAAO,MAAM,GAAG,CAAC,KAAK;IAE1B,OAAO;AACX;AACA,QAAQ,CAAC,GAAG","ignoreList":[0]}}, + {"offset": {"line": 569, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/route-modules/app-page/vendored/contexts/app-router-context.ts"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].AppRouterContext\n"],"names":["module","exports","require","vendored","AppRouterContext"],"mappings":"AAAAA,OAAOC,OAAO,GACZC,QAAQ,0JACRC,QAAQ,CAAC,WAAW,CAACC,gBAAgB","ignoreList":[0]}}, + {"offset": {"line": 574, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/route-modules/app-page/vendored/contexts/hooks-client-context.ts"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].HooksClientContext\n"],"names":["module","exports","require","vendored","HooksClientContext"],"mappings":"AAAAA,OAAOC,OAAO,GACZC,QAAQ,0JACRC,QAAQ,CAAC,WAAW,CAACC,kBAAkB","ignoreList":[0]}}, + {"offset": {"line": 579, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/shared/lib/segment.ts"],"sourcesContent":["import type { FlightRouterState, Segment } from './app-router-types'\n\nexport function getSegmentValue(segment: Segment) {\n return Array.isArray(segment) ? segment[1] : segment\n}\n\nexport function isGroupSegment(segment: string) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')')\n}\n\nexport function isParallelRouteSegment(segment: string) {\n return segment.startsWith('@') && segment !== '@children'\n}\n\nexport function addSearchParamsIfPageSegment(\n segment: Segment,\n searchParams: Record\n) {\n const isPageSegment = segment.includes(PAGE_SEGMENT_KEY)\n\n if (isPageSegment) {\n const stringifiedQuery = JSON.stringify(searchParams)\n return stringifiedQuery !== '{}'\n ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery\n : PAGE_SEGMENT_KEY\n }\n\n return segment\n}\n\nexport function computeSelectedLayoutSegment(\n segments: string[] | null,\n parallelRouteKey: string\n): string | null {\n if (!segments || segments.length === 0) {\n return null\n }\n\n // For 'children', use first segment; for other parallel routes, use last segment\n const rawSegment =\n parallelRouteKey === 'children'\n ? segments[0]\n : segments[segments.length - 1]\n\n // If the default slot is showing, return null since it's not technically \"selected\" (it's a fallback)\n // Returning an internal value like `__DEFAULT__` would be confusing\n return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment\n}\n\n/** Get the canonical parameters from the current level to the leaf node. */\nexport function getSelectedLayoutSegmentPath(\n tree: FlightRouterState,\n parallelRouteKey: string,\n first = true,\n segmentPath: string[] = []\n): string[] {\n let node: FlightRouterState\n if (first) {\n // Use the provided parallel route key on the first parallel route\n node = tree[1][parallelRouteKey]\n } else {\n // After first parallel route prefer children, if there's no children pick the first parallel route.\n const parallelRoutes = tree[1]\n node = parallelRoutes.children ?? Object.values(parallelRoutes)[0]\n }\n\n if (!node) return segmentPath\n const segment = node[0]\n\n let segmentValue = getSegmentValue(segment)\n\n if (!segmentValue || segmentValue.startsWith(PAGE_SEGMENT_KEY)) {\n return segmentPath\n }\n\n segmentPath.push(segmentValue)\n\n return getSelectedLayoutSegmentPath(\n node,\n parallelRouteKey,\n false,\n segmentPath\n )\n}\n\nexport const PAGE_SEGMENT_KEY = '__PAGE__'\nexport const DEFAULT_SEGMENT_KEY = '__DEFAULT__'\nexport const NOT_FOUND_SEGMENT_KEY = '/_not-found'\n"],"names":["DEFAULT_SEGMENT_KEY","NOT_FOUND_SEGMENT_KEY","PAGE_SEGMENT_KEY","addSearchParamsIfPageSegment","computeSelectedLayoutSegment","getSegmentValue","getSelectedLayoutSegmentPath","isGroupSegment","isParallelRouteSegment","segment","Array","isArray","endsWith","startsWith","searchParams","isPageSegment","includes","stringifiedQuery","JSON","stringify","segments","parallelRouteKey","length","rawSegment","tree","first","segmentPath","node","parallelRoutes","children","Object","values","segmentValue","push"],"mappings":";;;;;;;;;;;;;;;;;;;;;IAuFaA,mBAAmB,EAAA;eAAnBA;;IACAC,qBAAqB,EAAA;eAArBA;;IAFAC,gBAAgB,EAAA;eAAhBA;;IAvEGC,4BAA4B,EAAA;eAA5BA;;IAgBAC,4BAA4B,EAAA;eAA5BA;;IA7BAC,eAAe,EAAA;eAAfA;;IAiDAC,4BAA4B,EAAA;eAA5BA;;IA7CAC,cAAc,EAAA;eAAdA;;IAKAC,sBAAsB,EAAA;eAAtBA;;;AATT,SAASH,gBAAgBI,OAAgB;IAC9C,OAAOC,MAAMC,OAAO,CAACF,WAAWA,OAAO,CAAC,EAAE,GAAGA;AAC/C;AAEO,SAASF,eAAeE,OAAe;IAC5C,sCAAsC;IACtC,OAAOA,OAAO,CAAC,EAAE,KAAK,OAAOA,QAAQG,QAAQ,CAAC;AAChD;AAEO,SAASJ,uBAAuBC,OAAe;IACpD,OAAOA,QAAQI,UAAU,CAAC,QAAQJ,YAAY;AAChD;AAEO,SAASN,6BACdM,OAAgB,EAChBK,YAA2D;IAE3D,MAAMC,gBAAgBN,QAAQO,QAAQ,CAACd;IAEvC,IAAIa,eAAe;QACjB,MAAME,mBAAmBC,KAAKC,SAAS,CAACL;QACxC,OAAOG,qBAAqB,OACxBf,mBAAmB,MAAMe,mBACzBf;IACN;IAEA,OAAOO;AACT;AAEO,SAASL,6BACdgB,QAAyB,EACzBC,gBAAwB;IAExB,IAAI,CAACD,YAAYA,SAASE,MAAM,KAAK,GAAG;QACtC,OAAO;IACT;IAEA,iFAAiF;IACjF,MAAMC,aACJF,qBAAqB,aACjBD,QAAQ,CAAC,EAAE,GACXA,QAAQ,CAACA,SAASE,MAAM,GAAG,EAAE;IAEnC,sGAAsG;IACtG,oEAAoE;IACpE,OAAOC,eAAevB,sBAAsB,OAAOuB;AACrD;AAGO,SAASjB,6BACdkB,IAAuB,EACvBH,gBAAwB,EACxBI,QAAQ,IAAI,EACZC,cAAwB,EAAE;IAE1B,IAAIC;IACJ,IAAIF,OAAO;QACT,kEAAkE;QAClEE,OAAOH,IAAI,CAAC,EAAE,CAACH,iBAAiB;IAClC,OAAO;QACL,oGAAoG;QACpG,MAAMO,iBAAiBJ,IAAI,CAAC,EAAE;QAC9BG,OAAOC,eAAeC,QAAQ,IAAIC,OAAOC,MAAM,CAACH,eAAe,CAAC,EAAE;IACpE;IAEA,IAAI,CAACD,MAAM,OAAOD;IAClB,MAAMjB,UAAUkB,IAAI,CAAC,EAAE;IAEvB,IAAIK,eAAe3B,gBAAgBI;IAEnC,IAAI,CAACuB,gBAAgBA,aAAanB,UAAU,CAACX,mBAAmB;QAC9D,OAAOwB;IACT;IAEAA,YAAYO,IAAI,CAACD;IAEjB,OAAO1B,6BACLqB,MACAN,kBACA,OACAK;AAEJ;AAEO,MAAMxB,mBAAmB;AACzB,MAAMF,sBAAsB;AAC5B,MAAMC,wBAAwB","ignoreList":[0]}}, + {"offset": {"line": 682, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/route-modules/app-page/vendored/contexts/server-inserted-html.ts"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].ServerInsertedHtml\n"],"names":["module","exports","require","vendored","ServerInsertedHtml"],"mappings":"AAAAA,OAAOC,OAAO,GACZC,QAAQ,0JACRC,QAAQ,CAAC,WAAW,CAACC,kBAAkB","ignoreList":[0]}}, + {"offset": {"line": 687, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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": 728, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/client/components/readonly-url-search-params.ts"],"sourcesContent":["/**\n * ReadonlyURLSearchParams implementation shared between client and server.\n * This file is intentionally not marked as 'use client' or 'use server'\n * so it can be imported by both environments.\n */\n\n/** @internal */\nclass ReadonlyURLSearchParamsError extends Error {\n constructor() {\n super(\n 'Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams'\n )\n }\n}\n\n/**\n * A read-only version of URLSearchParams that throws errors when mutation methods are called.\n * This ensures that the URLSearchParams returned by useSearchParams() cannot be mutated.\n */\nexport class ReadonlyURLSearchParams extends URLSearchParams {\n /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */\n append() {\n throw new ReadonlyURLSearchParamsError()\n }\n /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */\n delete() {\n throw new ReadonlyURLSearchParamsError()\n }\n /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */\n set() {\n throw new ReadonlyURLSearchParamsError()\n }\n /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */\n sort() {\n throw new ReadonlyURLSearchParamsError()\n }\n}\n"],"names":["ReadonlyURLSearchParams","ReadonlyURLSearchParamsError","Error","constructor","URLSearchParams","append","delete","set","sort"],"mappings":"AAAA;;;;CAIC,GAED,cAAc;;;+BAaDA,2BAAAA;;;eAAAA;;;AAZb,MAAMC,qCAAqCC;IACzCC,aAAc;QACZ,KAAK,CACH;IAEJ;AACF;AAMO,MAAMH,gCAAgCI;IAC3C,wKAAwK,GACxKC,SAAS;QACP,MAAM,IAAIJ;IACZ;IACA,wKAAwK,GACxKK,SAAS;QACP,MAAM,IAAIL;IACZ;IACA,wKAAwK,GACxKM,MAAM;QACJ,MAAM,IAAIN;IACZ;IACA,wKAAwK,GACxKO,OAAO;QACL,MAAM,IAAIP;IACZ;AACF","ignoreList":[0]}}, + {"offset": {"line": 771, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/client/components/redirect-status-code.ts"],"sourcesContent":["export enum RedirectStatusCode {\n SeeOther = 303,\n TemporaryRedirect = 307,\n PermanentRedirect = 308,\n}\n"],"names":["RedirectStatusCode"],"mappings":";;;+BAAYA,sBAAAA;;;eAAAA;;;AAAL,IAAKA,qBAAAA,WAAAA,GAAAA,SAAAA,kBAAAA;;;;WAAAA","ignoreList":[0]}}, + {"offset": {"line": 797, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/client/components/redirect-error.ts"],"sourcesContent":["import { RedirectStatusCode } from './redirect-status-code'\n\nexport const REDIRECT_ERROR_CODE = 'NEXT_REDIRECT'\n\nexport enum RedirectType {\n push = 'push',\n replace = 'replace',\n}\n\nexport type RedirectError = Error & {\n digest: `${typeof REDIRECT_ERROR_CODE};${RedirectType};${string};${RedirectStatusCode};`\n}\n\n/**\n * Checks an error to determine if it's an error generated by the\n * `redirect(url)` helper.\n *\n * @param error the error that may reference a redirect error\n * @returns true if the error is a redirect error\n */\nexport function isRedirectError(error: unknown): error is RedirectError {\n if (\n typeof error !== 'object' ||\n error === null ||\n !('digest' in error) ||\n typeof error.digest !== 'string'\n ) {\n return false\n }\n\n const digest = error.digest.split(';')\n const [errorCode, type] = digest\n const destination = digest.slice(2, -2).join(';')\n const status = digest.at(-2)\n\n const statusCode = Number(status)\n\n return (\n errorCode === REDIRECT_ERROR_CODE &&\n (type === 'replace' || type === 'push') &&\n typeof destination === 'string' &&\n !isNaN(statusCode) &&\n statusCode in RedirectStatusCode\n )\n}\n"],"names":["REDIRECT_ERROR_CODE","RedirectType","isRedirectError","error","digest","split","errorCode","type","destination","slice","join","status","at","statusCode","Number","isNaN","RedirectStatusCode"],"mappings":";;;;;;;;;;;;;;;IAEaA,mBAAmB,EAAA;eAAnBA;;IAEDC,YAAY,EAAA;eAAZA;;IAgBIC,eAAe,EAAA;eAAfA;;;oCApBmB;AAE5B,MAAMF,sBAAsB;AAE5B,IAAKC,eAAAA,WAAAA,GAAAA,SAAAA,YAAAA;;;WAAAA;;AAgBL,SAASC,gBAAgBC,KAAc;IAC5C,IACE,OAAOA,UAAU,YACjBA,UAAU,QACV,CAAE,CAAA,YAAYA,KAAI,KAClB,OAAOA,MAAMC,MAAM,KAAK,UACxB;QACA,OAAO;IACT;IAEA,MAAMA,SAASD,MAAMC,MAAM,CAACC,KAAK,CAAC;IAClC,MAAM,CAACC,WAAWC,KAAK,GAAGH;IAC1B,MAAMI,cAAcJ,OAAOK,KAAK,CAAC,GAAG,CAAC,GAAGC,IAAI,CAAC;IAC7C,MAAMC,SAASP,OAAOQ,EAAE,CAAC,CAAC;IAE1B,MAAMC,aAAaC,OAAOH;IAE1B,OACEL,cAAcN,uBACbO,CAAAA,SAAS,aAAaA,SAAS,MAAK,KACrC,OAAOC,gBAAgB,YACvB,CAACO,MAAMF,eACPA,cAAcG,oBAAAA,kBAAkB;AAEpC","ignoreList":[0]}}, + {"offset": {"line": 851, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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,qBAEZC,QAAQ,2KACRF,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": 944, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/client/components/http-access-fallback/http-access-fallback.ts"],"sourcesContent":["export const HTTPAccessErrorStatus = {\n NOT_FOUND: 404,\n FORBIDDEN: 403,\n UNAUTHORIZED: 401,\n}\n\nconst ALLOWED_CODES = new Set(Object.values(HTTPAccessErrorStatus))\n\nexport const HTTP_ERROR_FALLBACK_ERROR_CODE = 'NEXT_HTTP_ERROR_FALLBACK'\n\nexport type HTTPAccessFallbackError = Error & {\n digest: `${typeof HTTP_ERROR_FALLBACK_ERROR_CODE};${string}`\n}\n\n/**\n * Checks an error to determine if it's an error generated by\n * the HTTP navigation APIs `notFound()`, `forbidden()` or `unauthorized()`.\n *\n * @param error the error that may reference a HTTP access error\n * @returns true if the error is a HTTP access error\n */\nexport function isHTTPAccessFallbackError(\n error: unknown\n): error is HTTPAccessFallbackError {\n if (\n typeof error !== 'object' ||\n error === null ||\n !('digest' in error) ||\n typeof error.digest !== 'string'\n ) {\n return false\n }\n const [prefix, httpStatus] = error.digest.split(';')\n\n return (\n prefix === HTTP_ERROR_FALLBACK_ERROR_CODE &&\n ALLOWED_CODES.has(Number(httpStatus))\n )\n}\n\nexport function getAccessFallbackHTTPStatus(\n error: HTTPAccessFallbackError\n): number {\n const httpStatus = error.digest.split(';')[1]\n return Number(httpStatus)\n}\n\nexport function getAccessFallbackErrorTypeByStatus(\n status: number\n): 'not-found' | 'forbidden' | 'unauthorized' | undefined {\n switch (status) {\n case 401:\n return 'unauthorized'\n case 403:\n return 'forbidden'\n case 404:\n return 'not-found'\n default:\n return\n }\n}\n"],"names":["HTTPAccessErrorStatus","HTTP_ERROR_FALLBACK_ERROR_CODE","getAccessFallbackErrorTypeByStatus","getAccessFallbackHTTPStatus","isHTTPAccessFallbackError","NOT_FOUND","FORBIDDEN","UNAUTHORIZED","ALLOWED_CODES","Set","Object","values","error","digest","prefix","httpStatus","split","has","Number","status"],"mappings":";;;;;;;;;;;;;;;;;IAAaA,qBAAqB,EAAA;eAArBA;;IAQAC,8BAA8B,EAAA;eAA9BA;;IAuCGC,kCAAkC,EAAA;eAAlCA;;IAPAC,2BAA2B,EAAA;eAA3BA;;IAnBAC,yBAAyB,EAAA;eAAzBA;;;AArBT,MAAMJ,wBAAwB;IACnCK,WAAW;IACXC,WAAW;IACXC,cAAc;AAChB;AAEA,MAAMC,gBAAgB,IAAIC,IAAIC,OAAOC,MAAM,CAACX;AAErC,MAAMC,iCAAiC;AAavC,SAASG,0BACdQ,KAAc;IAEd,IACE,OAAOA,UAAU,YACjBA,UAAU,QACV,CAAE,CAAA,YAAYA,KAAI,KAClB,OAAOA,MAAMC,MAAM,KAAK,UACxB;QACA,OAAO;IACT;IACA,MAAM,CAACC,QAAQC,WAAW,GAAGH,MAAMC,MAAM,CAACG,KAAK,CAAC;IAEhD,OACEF,WAAWb,kCACXO,cAAcS,GAAG,CAACC,OAAOH;AAE7B;AAEO,SAASZ,4BACdS,KAA8B;IAE9B,MAAMG,aAAaH,MAAMC,MAAM,CAACG,KAAK,CAAC,IAAI,CAAC,EAAE;IAC7C,OAAOE,OAAOH;AAChB;AAEO,SAASb,mCACdiB,MAAc;IAEd,OAAQA;QACN,KAAK;YACH,OAAO;QACT,KAAK;YACH,OAAO;QACT,KAAK;YACH,OAAO;QACT;YACE;IACJ;AACF","ignoreList":[0]}}, + {"offset": {"line": 1018, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/client/components/not-found.ts"],"sourcesContent":["import {\n HTTP_ERROR_FALLBACK_ERROR_CODE,\n type HTTPAccessFallbackError,\n} from './http-access-fallback/http-access-fallback'\n\n/**\n * This function allows you to render the [not-found.js file](https://nextjs.org/docs/app/api-reference/file-conventions/not-found)\n * within a route segment as well as inject a tag.\n *\n * `notFound()` 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 and set the status code to 404.\n * - In a Route Handler or Server Action, it will serve a 404 to the caller.\n *\n * Read more: [Next.js Docs: `notFound`](https://nextjs.org/docs/app/api-reference/functions/not-found)\n */\n\nconst DIGEST = `${HTTP_ERROR_FALLBACK_ERROR_CODE};404`\n\nexport function notFound(): never {\n const error = new Error(DIGEST) as HTTPAccessFallbackError\n ;(error as HTTPAccessFallbackError).digest = DIGEST\n\n throw error\n}\n"],"names":["notFound","DIGEST","HTTP_ERROR_FALLBACK_ERROR_CODE","error","Error","digest"],"mappings":";;;+BAsBgBA,YAAAA;;;eAAAA;;;oCAnBT;AAEP;;;;;;;;;;;;;CAaC,GAED,MAAMC,SAAS,GAAGC,oBAAAA,8BAA8B,CAAC,IAAI,CAAC;AAE/C,SAASF;IACd,MAAMG,QAAQ,OAAA,cAAiB,CAAjB,IAAIC,MAAMH,SAAV,qBAAA;eAAA;oBAAA;sBAAA;IAAgB;IAC5BE,MAAkCE,MAAM,GAAGJ;IAE7C,MAAME;AACR","ignoreList":[0]}}, + {"offset": {"line": 1062, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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":";;;+BAqBgBA,aAAAA;;;eAAAA;;;oCAlBT;AAEP,6BAA6B;AAC7B;;;;;;;;;;;CAWC,GAED,MAAMC,SAAS,GAAGC,oBAAAA,8BAA8B,CAAC,IAAI,CAAC;AAE/C,SAASF;IACd,IAAI,CAACG,QAAQC,GAAG,CAACC,uBAAqC,YAAF;QAClD,MAAM,OAAA,cAEL,CAFK,IAAIC,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": 1112, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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":";;;+BAsBgBA,gBAAAA;;;eAAAA;;;oCAnBT;AAEP,gCAAgC;AAChC;;;;;;;;;;;;CAYC,GAED,MAAMC,SAAS,GAAGC,oBAAAA,8BAA8B,CAAC,IAAI,CAAC;AAE/C,SAASF;IACd,IAAI,CAACG,QAAQC,GAAG,CAACC,uBAAqC,YAAF;QAClD,MAAM,OAAA,cAEL,CAFK,IAAIC,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": 1163, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/dynamic-rendering-utils.ts"],"sourcesContent":["import type { NonStaticRenderStage } from './app-render/staged-rendering'\nimport type { RequestStore } from './app-render/work-unit-async-storage.external'\n\nexport function isHangingPromiseRejectionError(\n err: unknown\n): err is HangingPromiseRejectionError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === HANGING_PROMISE_REJECTION\n}\n\nconst HANGING_PROMISE_REJECTION = 'HANGING_PROMISE_REJECTION'\n\nclass HangingPromiseRejectionError extends Error {\n public readonly digest = HANGING_PROMISE_REJECTION\n\n constructor(\n public readonly route: string,\n public readonly expression: string\n ) {\n super(\n `During prerendering, ${expression} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${expression} to a different context by using \\`setTimeout\\`, \\`after\\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route \"${route}\".`\n )\n }\n}\n\ntype AbortListeners = Array<(err: unknown) => void>\nconst abortListenersBySignal = new WeakMap()\n\n/**\n * This function constructs a promise that will never resolve. This is primarily\n * useful for cacheComponents where we use promise resolution timing to determine which\n * parts of a render can be included in a prerender.\n *\n * @internal\n */\nexport function makeHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string\n): Promise {\n if (signal.aborted) {\n return Promise.reject(new HangingPromiseRejectionError(route, expression))\n } else {\n const hangingPromise = new Promise((_, reject) => {\n const boundRejection = reject.bind(\n null,\n new HangingPromiseRejectionError(route, expression)\n )\n let currentListeners = abortListenersBySignal.get(signal)\n if (currentListeners) {\n currentListeners.push(boundRejection)\n } else {\n const listeners = [boundRejection]\n abortListenersBySignal.set(signal, listeners)\n signal.addEventListener(\n 'abort',\n () => {\n for (let i = 0; i < listeners.length; i++) {\n listeners[i]()\n }\n },\n { once: true }\n )\n }\n })\n // We are fine if no one actually awaits this promise. We shouldn't consider this an unhandled rejection so\n // we attach a noop catch handler here to suppress this warning. If you actually await somewhere or construct\n // your own promise out of it you'll need to ensure you handle the error when it rejects.\n hangingPromise.catch(ignoreReject)\n return hangingPromise\n }\n}\n\nfunction ignoreReject() {}\n\nexport function makeDevtoolsIOAwarePromise(\n underlying: T,\n requestStore: RequestStore,\n stage: NonStaticRenderStage\n): Promise {\n if (requestStore.stagedRendering) {\n // We resolve each stage in a timeout, so React DevTools will pick this up as IO.\n return requestStore.stagedRendering.delayUntilStage(\n stage,\n undefined,\n underlying\n )\n }\n // in React DevTools if we resolve in a setTimeout we will observe\n // the promise resolution as something that can suspend a boundary or root.\n return new Promise((resolve) => {\n // Must use setTimeout to be considered IO React DevTools. setImmediate will not work.\n setTimeout(() => {\n resolve(underlying)\n }, 0)\n })\n}\n"],"names":["isHangingPromiseRejectionError","makeDevtoolsIOAwarePromise","makeHangingPromise","err","digest","HANGING_PROMISE_REJECTION","HangingPromiseRejectionError","Error","constructor","route","expression","abortListenersBySignal","WeakMap","signal","aborted","Promise","reject","hangingPromise","_","boundRejection","bind","currentListeners","get","push","listeners","set","addEventListener","i","length","once","catch","ignoreReject","underlying","requestStore","stage","stagedRendering","delayUntilStage","undefined","resolve","setTimeout"],"mappings":";;;;;;;;;;;;;;;IAGgBA,8BAA8B,EAAA;eAA9BA;;IA2EAC,0BAA0B,EAAA;eAA1BA;;IAxCAC,kBAAkB,EAAA;eAAlBA;;;AAnCT,SAASF,+BACdG,GAAY;IAEZ,IAAI,OAAOA,QAAQ,YAAYA,QAAQ,QAAQ,CAAE,CAAA,YAAYA,GAAE,GAAI;QACjE,OAAO;IACT;IAEA,OAAOA,IAAIC,MAAM,KAAKC;AACxB;AAEA,MAAMA,4BAA4B;AAElC,MAAMC,qCAAqCC;IAGzCC,YACkBC,KAAa,EACbC,UAAkB,CAClC;QACA,KAAK,CACH,CAAC,qBAAqB,EAAEA,WAAW,qGAAqG,EAAEA,WAAW,8KAA8K,EAAED,MAAM,EAAE,CAAC,GAAA,IAAA,CAJhUA,KAAAA,GAAAA,OAAAA,IAAAA,CACAC,UAAAA,GAAAA,YAAAA,IAAAA,CAJFN,MAAAA,GAASC;IASzB;AACF;AAGA,MAAMM,yBAAyB,IAAIC;AAS5B,SAASV,mBACdW,MAAmB,EACnBJ,KAAa,EACbC,UAAkB;IAElB,IAAIG,OAAOC,OAAO,EAAE;QAClB,OAAOC,QAAQC,MAAM,CAAC,IAAIV,6BAA6BG,OAAOC;IAChE,OAAO;QACL,MAAMO,iBAAiB,IAAIF,QAAW,CAACG,GAAGF;YACxC,MAAMG,iBAAiBH,OAAOI,IAAI,CAChC,MACA,IAAId,6BAA6BG,OAAOC;YAE1C,IAAIW,mBAAmBV,uBAAuBW,GAAG,CAACT;YAClD,IAAIQ,kBAAkB;gBACpBA,iBAAiBE,IAAI,CAACJ;YACxB,OAAO;gBACL,MAAMK,YAAY;oBAACL;iBAAe;gBAClCR,uBAAuBc,GAAG,CAACZ,QAAQW;gBACnCX,OAAOa,gBAAgB,CACrB,SACA;oBACE,IAAK,IAAIC,IAAI,GAAGA,IAAIH,UAAUI,MAAM,EAAED,IAAK;wBACzCH,SAAS,CAACG,EAAE;oBACd;gBACF,GACA;oBAAEE,MAAM;gBAAK;YAEjB;QACF;QACA,2GAA2G;QAC3G,6GAA6G;QAC7G,yFAAyF;QACzFZ,eAAea,KAAK,CAACC;QACrB,OAAOd;IACT;AACF;AAEA,SAASc,gBAAgB;AAElB,SAAS9B,2BACd+B,UAAa,EACbC,YAA0B,EAC1BC,KAA2B;IAE3B,IAAID,aAAaE,eAAe,EAAE;QAChC,iFAAiF;QACjF,OAAOF,aAAaE,eAAe,CAACC,eAAe,CACjDF,OACAG,WACAL;IAEJ;IACA,kEAAkE;IAClE,2EAA2E;IAC3E,OAAO,IAAIjB,QAAW,CAACuB;QACrB,sFAAsF;QACtFC,WAAW;YACTD,QAAQN;QACV,GAAG;IACL;AACF","ignoreList":[0]}}, + {"offset": {"line": 1250, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/lib/router-utils/is-postpone.ts"],"sourcesContent":["const REACT_POSTPONE_TYPE: symbol = Symbol.for('react.postpone')\n\nexport function isPostpone(error: any): boolean {\n return (\n typeof error === 'object' &&\n error !== null &&\n error.$$typeof === REACT_POSTPONE_TYPE\n )\n}\n"],"names":["isPostpone","REACT_POSTPONE_TYPE","Symbol","for","error","$$typeof"],"mappings":";;;+BAEgBA,cAAAA;;;eAAAA;;;AAFhB,MAAMC,sBAA8BC,OAAOC,GAAG,CAAC;AAExC,SAASH,WAAWI,KAAU;IACnC,OACE,OAAOA,UAAU,YACjBA,UAAU,QACVA,MAAMC,QAAQ,KAAKJ;AAEvB","ignoreList":[0]}}, + {"offset": {"line": 1267, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/shared/lib/lazy-dynamic/bailout-to-csr.ts"],"sourcesContent":["// This has to be a shared module which is shared between client component error boundary and dynamic component\nconst BAILOUT_TO_CSR = 'BAILOUT_TO_CLIENT_SIDE_RENDERING'\n\n/** An error that should be thrown when we want to bail out to client-side rendering. */\nexport class BailoutToCSRError extends Error {\n public readonly digest = BAILOUT_TO_CSR\n\n constructor(public readonly reason: string) {\n super(`Bail out to client-side rendering: ${reason}`)\n }\n}\n\n/** Checks if a passed argument is an error that is thrown if we want to bail out to client-side rendering. */\nexport function isBailoutToCSRError(err: unknown): err is BailoutToCSRError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === BAILOUT_TO_CSR\n}\n"],"names":["BailoutToCSRError","isBailoutToCSRError","BAILOUT_TO_CSR","Error","constructor","reason","digest","err"],"mappings":"AAAA,+GAA+G;;;;;;;;;;;;;;;IAIlGA,iBAAiB,EAAA;eAAjBA;;IASGC,mBAAmB,EAAA;eAAnBA;;;AAZhB,MAAMC,iBAAiB;AAGhB,MAAMF,0BAA0BG;IAGrCC,YAA4BC,MAAc,CAAE;QAC1C,KAAK,CAAC,CAAC,mCAAmC,EAAEA,QAAQ,GAAA,IAAA,CAD1BA,MAAAA,GAAAA,QAAAA,IAAAA,CAFZC,MAAAA,GAASJ;IAIzB;AACF;AAGO,SAASD,oBAAoBM,GAAY;IAC9C,IAAI,OAAOA,QAAQ,YAAYA,QAAQ,QAAQ,CAAE,CAAA,YAAYA,GAAE,GAAI;QACjE,OAAO;IACT;IAEA,OAAOA,IAAID,MAAM,KAAKJ;AACxB","ignoreList":[0]}}, + {"offset": {"line": 1305, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/client/components/is-next-router-error.ts"],"sourcesContent":["import {\n isHTTPAccessFallbackError,\n type HTTPAccessFallbackError,\n} from './http-access-fallback/http-access-fallback'\nimport { isRedirectError, type RedirectError } from './redirect-error'\n\n/**\n * Returns true if the error is a navigation signal error. These errors are\n * thrown by user code to perform navigation operations and interrupt the React\n * render.\n */\nexport function isNextRouterError(\n error: unknown\n): error is RedirectError | HTTPAccessFallbackError {\n return isRedirectError(error) || isHTTPAccessFallbackError(error)\n}\n"],"names":["isNextRouterError","error","isRedirectError","isHTTPAccessFallbackError"],"mappings":";;;+BAWgBA,qBAAAA;;;eAAAA;;;oCART;+BAC6C;AAO7C,SAASA,kBACdC,KAAc;IAEd,OAAOC,CAAAA,GAAAA,eAAAA,eAAe,EAACD,UAAUE,CAAAA,GAAAA,oBAAAA,yBAAyB,EAACF;AAC7D","ignoreList":[0]}}, + {"offset": {"line": 1330, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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": 1374, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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": 1418, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/lib/framework/boundary-constants.tsx"],"sourcesContent":["export const METADATA_BOUNDARY_NAME = '__next_metadata_boundary__'\nexport const VIEWPORT_BOUNDARY_NAME = '__next_viewport_boundary__'\nexport const OUTLET_BOUNDARY_NAME = '__next_outlet_boundary__'\nexport const ROOT_LAYOUT_BOUNDARY_NAME = '__next_root_layout_boundary__'\n"],"names":["METADATA_BOUNDARY_NAME","OUTLET_BOUNDARY_NAME","ROOT_LAYOUT_BOUNDARY_NAME","VIEWPORT_BOUNDARY_NAME"],"mappings":";;;;;;;;;;;;;;;;IAAaA,sBAAsB,EAAA;eAAtBA;;IAEAC,oBAAoB,EAAA;eAApBA;;IACAC,yBAAyB,EAAA;eAAzBA;;IAFAC,sBAAsB,EAAA;eAAtBA;;;AADN,MAAMH,yBAAyB;AAC/B,MAAMG,yBAAyB;AAC/B,MAAMF,uBAAuB;AAC7B,MAAMC,4BAA4B","ignoreList":[0]}}, + {"offset": {"line": 1455, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/lib/scheduler.ts"],"sourcesContent":["export type ScheduledFn = () => T | PromiseLike\nexport type SchedulerFn = (cb: ScheduledFn) => void\n\n/**\n * Schedules a function to be called on the next tick after the other promises\n * have been resolved.\n *\n * @param cb the function to schedule\n */\nexport const scheduleOnNextTick = (cb: ScheduledFn) => {\n // We use Promise.resolve().then() here so that the operation is scheduled at\n // the end of the promise job queue, we then add it to the next process tick\n // to ensure it's evaluated afterwards.\n //\n // This was inspired by the implementation of the DataLoader interface: https://github.com/graphql/dataloader/blob/d336bd15282664e0be4b4a657cb796f09bafbc6b/src/index.js#L213-L255\n //\n Promise.resolve().then(() => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n process.nextTick(cb)\n }\n })\n}\n\n/**\n * Schedules a function to be called using `setImmediate` or `setTimeout` if\n * `setImmediate` is not available (like in the Edge runtime).\n *\n * @param cb the function to schedule\n */\nexport const scheduleImmediate = (cb: ScheduledFn): void => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n setImmediate(cb)\n }\n}\n\n/**\n * returns a promise than resolves in a future task. There is no guarantee that the task it resolves in\n * will be the next task but if you await it you can at least be sure that the current task is over and\n * most usefully that the entire microtask queue of the current task has been emptied.\n */\nexport function atLeastOneTask() {\n return new Promise((resolve) => scheduleImmediate(resolve))\n}\n\n/**\n * This utility function is extracted to make it easier to find places where we are doing\n * specific timing tricks to try to schedule work after React has rendered. This is especially\n * important at the moment because Next.js uses the edge builds of React which use setTimeout to\n * schedule work when you might expect that something like setImmediate would do the trick.\n *\n * Long term we should switch to the node versions of React rendering when possible and then\n * update this to use setImmediate rather than setTimeout\n */\nexport function waitAtLeastOneReactRenderTask(): Promise {\n if (process.env.NEXT_RUNTIME === 'edge') {\n return new Promise((r) => setTimeout(r, 0))\n } else {\n return new Promise((r) => setImmediate(r))\n }\n}\n"],"names":["atLeastOneTask","scheduleImmediate","scheduleOnNextTick","waitAtLeastOneReactRenderTask","cb","Promise","resolve","then","process","env","NEXT_RUNTIME","setTimeout","nextTick","setImmediate","r"],"mappings":";;;;;;;;;;;;;;;;IA4CgBA,cAAc,EAAA;eAAdA;;IAbHC,iBAAiB,EAAA;eAAjBA;;IAtBAC,kBAAkB,EAAA;eAAlBA;;IAgDGC,6BAA6B,EAAA;eAA7BA;;;AAhDT,MAAMD,qBAAqB,CAACE;IACjC,6EAA6E;IAC7E,4EAA4E;IAC5E,uCAAuC;IACvC,EAAE;IACF,kLAAkL;IAClL,EAAE;IACFC,QAAQC,OAAO,GAAGC,IAAI,CAAC;QACrB,IAAIC,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;aAElC;YACLF,QAAQI,QAAQ,CAACR;QACnB;IACF;AACF;AAQO,MAAMH,oBAAoB,CAACG;IAChC,IAAII,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;SAElC;QACLG,aAAaT;IACf;AACF;AAOO,SAASJ;IACd,OAAO,IAAIK,QAAc,CAACC,UAAYL,kBAAkBK;AAC1D;AAWO,SAASH;IACd,IAAIK,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;SAElC;QACL,OAAO,IAAIL,QAAQ,CAACS,IAAMD,aAAaC;IACzC;AACF","ignoreList":[0]}}, + {"offset": {"line": 1520, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/shared/lib/invariant-error.ts"],"sourcesContent":["export class InvariantError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(\n `Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`,\n options\n )\n this.name = 'InvariantError'\n }\n}\n"],"names":["InvariantError","Error","constructor","message","options","endsWith","name"],"mappings":";;;+BAAaA,kBAAAA;;;eAAAA;;;AAAN,MAAMA,uBAAuBC;IAClCC,YAAYC,OAAe,EAAEC,OAAsB,CAAE;QACnD,KAAK,CACH,CAAC,WAAW,EAAED,QAAQE,QAAQ,CAAC,OAAOF,UAAUA,UAAU,IAAI,0BAA0B,CAAC,EACzFC;QAEF,IAAI,CAACE,IAAI,GAAG;IACd;AACF","ignoreList":[0]}}, + {"offset": {"line": 1539, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/app-render/dynamic-rendering.ts"],"sourcesContent":["/**\n * The functions provided by this module are used to communicate certain properties\n * about the currently running code so that Next.js can make decisions on how to handle\n * the current execution in different rendering modes such as pre-rendering, resuming, and SSR.\n *\n * Today Next.js treats all code as potentially static. Certain APIs may only make sense when dynamically rendering.\n * Traditionally this meant deopting the entire render to dynamic however with PPR we can now deopt parts\n * of a React tree as dynamic while still keeping other parts static. There are really two different kinds of\n * Dynamic indications.\n *\n * The first is simply an intention to be dynamic. unstable_noStore is an example of this where\n * the currently executing code simply declares that the current scope is dynamic but if you use it\n * inside unstable_cache it can still be cached. This type of indication can be removed if we ever\n * make the default dynamic to begin with because the only way you would ever be static is inside\n * a cache scope which this indication does not affect.\n *\n * The second is an indication that a dynamic data source was read. This is a stronger form of dynamic\n * because it means that it is inappropriate to cache this at all. using a dynamic data source inside\n * unstable_cache should error. If you want to use some dynamic data inside unstable_cache you should\n * read that data outside the cache and pass it in as an argument to the cached function.\n */\n\nimport type { WorkStore } from '../app-render/work-async-storage.external'\nimport type {\n WorkUnitStore,\n PrerenderStoreLegacy,\n PrerenderStoreModern,\n PrerenderStoreModernRuntime,\n} from '../app-render/work-unit-async-storage.external'\n\n// Once postpone is in stable we should switch to importing the postpone export directly\nimport React from 'react'\n\nimport { DynamicServerError } from '../../client/components/hooks-server-context'\nimport { StaticGenBailoutError } from '../../client/components/static-generation-bailout'\nimport {\n getRuntimeStagePromise,\n throwForMissingRequestStore,\n workUnitAsyncStorage,\n} from './work-unit-async-storage.external'\nimport { workAsyncStorage } from '../app-render/work-async-storage.external'\nimport { makeHangingPromise } from '../dynamic-rendering-utils'\nimport {\n METADATA_BOUNDARY_NAME,\n VIEWPORT_BOUNDARY_NAME,\n OUTLET_BOUNDARY_NAME,\n ROOT_LAYOUT_BOUNDARY_NAME,\n} from '../../lib/framework/boundary-constants'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\nimport { BailoutToCSRError } from '../../shared/lib/lazy-dynamic/bailout-to-csr'\nimport { InvariantError } from '../../shared/lib/invariant-error'\n\nconst hasPostpone = typeof React.unstable_postpone === 'function'\n\nexport type DynamicAccess = {\n /**\n * If debugging, this will contain the stack trace of where the dynamic access\n * occurred. This is used to provide more information to the user about why\n * their page is being rendered dynamically.\n */\n stack?: string\n\n /**\n * The expression that was accessed dynamically.\n */\n expression: string\n}\n\n// Stores dynamic reasons used during an RSC render.\nexport type DynamicTrackingState = {\n /**\n * When true, stack information will also be tracked during dynamic access.\n */\n readonly isDebugDynamicAccesses: boolean | undefined\n\n /**\n * The dynamic accesses that occurred during the render.\n */\n readonly dynamicAccesses: Array\n\n syncDynamicErrorWithStack: null | Error\n}\n\n// Stores dynamic reasons used during an SSR render.\nexport type DynamicValidationState = {\n hasSuspenseAboveBody: boolean\n hasDynamicMetadata: boolean\n dynamicMetadata: null | Error\n hasDynamicViewport: boolean\n hasAllowedDynamic: boolean\n dynamicErrors: Array\n}\n\nexport function createDynamicTrackingState(\n isDebugDynamicAccesses: boolean | undefined\n): DynamicTrackingState {\n return {\n isDebugDynamicAccesses,\n dynamicAccesses: [],\n syncDynamicErrorWithStack: null,\n }\n}\n\nexport function createDynamicValidationState(): DynamicValidationState {\n return {\n hasSuspenseAboveBody: false,\n hasDynamicMetadata: false,\n dynamicMetadata: null,\n hasDynamicViewport: false,\n hasAllowedDynamic: false,\n dynamicErrors: [],\n }\n}\n\nexport function getFirstDynamicReason(\n trackingState: DynamicTrackingState\n): undefined | string {\n return trackingState.dynamicAccesses[0]?.expression\n}\n\n/**\n * This function communicates that the current scope should be treated as dynamic.\n *\n * In most cases this function is a no-op but if called during\n * a PPR prerender it will postpone the current sub-tree and calling\n * it during a normal prerender will cause the entire prerender to abort\n */\nexport function markCurrentScopeAsDynamic(\n store: WorkStore,\n workUnitStore: undefined | Exclude,\n expression: string\n): void {\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'cache':\n case 'unstable-cache':\n // Inside cache scopes, marking a scope as dynamic has no effect,\n // because the outer cache scope creates a cache boundary. This is\n // subtly different from reading a dynamic data source, which is\n // forbidden inside a cache scope.\n return\n case 'private-cache':\n // A private cache scope is already dynamic by definition.\n return\n case 'prerender-legacy':\n case 'prerender-ppr':\n case 'request':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n // If we're forcing dynamic rendering or we're forcing static rendering, we\n // don't need to do anything here because the entire page is already dynamic\n // or it's static and it should not throw or postpone here.\n if (store.forceDynamic || store.forceStatic) return\n\n if (store.dynamicShouldError) {\n throw new StaticGenBailoutError(\n `Route ${store.route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n }\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender-ppr':\n return postponeWithTracking(\n store.route,\n expression,\n workUnitStore.dynamicTracking\n )\n case 'prerender-legacy':\n workUnitStore.revalidate = 0\n\n // We aren't prerendering, but we are generating a static page. We need\n // to bail out of static generation.\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n case 'request':\n if (process.env.NODE_ENV !== 'production') {\n workUnitStore.usedDynamic = true\n }\n break\n default:\n workUnitStore satisfies never\n }\n }\n}\n\n/**\n * This function is meant to be used when prerendering without cacheComponents or PPR.\n * When called during a build it will cause Next.js to consider the route as dynamic.\n *\n * @internal\n */\nexport function throwToInterruptStaticGeneration(\n expression: string,\n store: WorkStore,\n prerenderStore: PrerenderStoreLegacy\n): never {\n // We aren't prerendering but we are generating a static page. We need to bail out of static generation\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n\n prerenderStore.revalidate = 0\n\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n}\n\n/**\n * This function should be used to track whether something dynamic happened even when\n * we are in a dynamic render. This is useful for Dev where all renders are dynamic but\n * we still track whether dynamic APIs were accessed for helpful messaging\n *\n * @internal\n */\nexport function trackDynamicDataInDynamicRender(workUnitStore: WorkUnitStore) {\n switch (workUnitStore.type) {\n case 'cache':\n case 'unstable-cache':\n // Inside cache scopes, marking a scope as dynamic has no effect,\n // because the outer cache scope creates a cache boundary. This is\n // subtly different from reading a dynamic data source, which is\n // forbidden inside a cache scope.\n return\n case 'private-cache':\n // A private cache scope is already dynamic by definition.\n return\n case 'prerender':\n case 'prerender-runtime':\n case 'prerender-legacy':\n case 'prerender-ppr':\n case 'prerender-client':\n break\n case 'request':\n if (process.env.NODE_ENV !== 'production') {\n workUnitStore.usedDynamic = true\n }\n break\n default:\n workUnitStore satisfies never\n }\n}\n\nfunction abortOnSynchronousDynamicDataAccess(\n route: string,\n expression: string,\n prerenderStore: PrerenderStoreModern\n): void {\n const reason = `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`\n\n const error = createPrerenderInterruptedError(reason)\n\n prerenderStore.controller.abort(error)\n\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n // When we aren't debugging, we don't need to create another error for the\n // stack trace.\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n}\n\nexport function abortOnSynchronousPlatformIOAccess(\n route: string,\n expression: string,\n errorWithStack: Error,\n prerenderStore: PrerenderStoreModern\n): void {\n const dynamicTracking = prerenderStore.dynamicTracking\n abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore)\n // It is important that we set this tracking value after aborting. Aborts are executed\n // synchronously except for the case where you abort during render itself. By setting this\n // value late we can use it to determine if any of the aborted tasks are the task that\n // called the sync IO expression in the first place.\n if (dynamicTracking) {\n if (dynamicTracking.syncDynamicErrorWithStack === null) {\n dynamicTracking.syncDynamicErrorWithStack = errorWithStack\n }\n }\n}\n\n/**\n * use this function when prerendering with cacheComponents. If we are doing a\n * prospective prerender we don't actually abort because we want to discover\n * all caches for the shell. If this is the actual prerender we do abort.\n *\n * This function accepts a prerenderStore but the caller should ensure we're\n * actually running in cacheComponents mode.\n *\n * @internal\n */\nexport function abortAndThrowOnSynchronousRequestDataAccess(\n route: string,\n expression: string,\n errorWithStack: Error,\n prerenderStore: PrerenderStoreModern\n): never {\n const prerenderSignal = prerenderStore.controller.signal\n if (prerenderSignal.aborted === false) {\n // TODO it would be better to move this aborted check into the callsite so we can avoid making\n // the error object when it isn't relevant to the aborting of the prerender however\n // since we need the throw semantics regardless of whether we abort it is easier to land\n // this way. See how this was handled with `abortOnSynchronousPlatformIOAccess` for a closer\n // to ideal implementation\n abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore)\n // It is important that we set this tracking value after aborting. Aborts are executed\n // synchronously except for the case where you abort during render itself. By setting this\n // value late we can use it to determine if any of the aborted tasks are the task that\n // called the sync IO expression in the first place.\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n if (dynamicTracking.syncDynamicErrorWithStack === null) {\n dynamicTracking.syncDynamicErrorWithStack = errorWithStack\n }\n }\n }\n throw createPrerenderInterruptedError(\n `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`\n )\n}\n\n/**\n * This component will call `React.postpone` that throws the postponed error.\n */\ntype PostponeProps = {\n reason: string\n route: string\n}\nexport function Postpone({ reason, route }: PostponeProps): never {\n const prerenderStore = workUnitAsyncStorage.getStore()\n const dynamicTracking =\n prerenderStore && prerenderStore.type === 'prerender-ppr'\n ? prerenderStore.dynamicTracking\n : null\n postponeWithTracking(route, reason, dynamicTracking)\n}\n\nexport function postponeWithTracking(\n route: string,\n expression: string,\n dynamicTracking: null | DynamicTrackingState\n): never {\n assertPostpone()\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n // When we aren't debugging, we don't need to create another error for the\n // stack trace.\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n\n React.unstable_postpone(createPostponeReason(route, expression))\n}\n\nfunction createPostponeReason(route: string, expression: string) {\n return (\n `Route ${route} needs to bail out of prerendering at this point because it used ${expression}. ` +\n `React throws this special object to indicate where. It should not be caught by ` +\n `your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error`\n )\n}\n\nexport function isDynamicPostpone(err: unknown) {\n if (\n typeof err === 'object' &&\n err !== null &&\n typeof (err as any).message === 'string'\n ) {\n return isDynamicPostponeReason((err as any).message)\n }\n return false\n}\n\nfunction isDynamicPostponeReason(reason: string) {\n return (\n reason.includes(\n 'needs to bail out of prerendering at this point because it used'\n ) &&\n reason.includes(\n 'Learn more: https://nextjs.org/docs/messages/ppr-caught-error'\n )\n )\n}\n\nif (isDynamicPostponeReason(createPostponeReason('%%%', '^^^')) === false) {\n throw new Error(\n 'Invariant: isDynamicPostpone misidentified a postpone reason. This is a bug in Next.js'\n )\n}\n\nconst NEXT_PRERENDER_INTERRUPTED = 'NEXT_PRERENDER_INTERRUPTED'\n\nfunction createPrerenderInterruptedError(message: string): Error {\n const error = new Error(message)\n ;(error as any).digest = NEXT_PRERENDER_INTERRUPTED\n return error\n}\n\ntype DigestError = Error & {\n digest: string\n}\n\nexport function isPrerenderInterruptedError(\n error: unknown\n): error is DigestError {\n return (\n typeof error === 'object' &&\n error !== null &&\n (error as any).digest === NEXT_PRERENDER_INTERRUPTED &&\n 'name' in error &&\n 'message' in error &&\n error instanceof Error\n )\n}\n\nexport function accessedDynamicData(\n dynamicAccesses: Array\n): boolean {\n return dynamicAccesses.length > 0\n}\n\nexport function consumeDynamicAccess(\n serverDynamic: DynamicTrackingState,\n clientDynamic: DynamicTrackingState\n): DynamicTrackingState['dynamicAccesses'] {\n // We mutate because we only call this once we are no longer writing\n // to the dynamicTrackingState and it's more efficient than creating a new\n // array.\n serverDynamic.dynamicAccesses.push(...clientDynamic.dynamicAccesses)\n return serverDynamic.dynamicAccesses\n}\n\nexport function formatDynamicAPIAccesses(\n dynamicAccesses: Array\n): string[] {\n return dynamicAccesses\n .filter(\n (access): access is Required =>\n typeof access.stack === 'string' && access.stack.length > 0\n )\n .map(({ expression, stack }) => {\n stack = stack\n .split('\\n')\n // Remove the \"Error: \" prefix from the first line of the stack trace as\n // well as the first 4 lines of the stack trace which is the distance\n // from the user code and the `new Error().stack` call.\n .slice(4)\n .filter((line) => {\n // Exclude Next.js internals from the stack trace.\n if (line.includes('node_modules/next/')) {\n return false\n }\n\n // Exclude anonymous functions from the stack trace.\n if (line.includes(' ()')) {\n return false\n }\n\n // Exclude Node.js internals from the stack trace.\n if (line.includes(' (node:')) {\n return false\n }\n\n return true\n })\n .join('\\n')\n return `Dynamic API Usage Debug - ${expression}:\\n${stack}`\n })\n}\n\nfunction assertPostpone() {\n if (!hasPostpone) {\n throw new Error(\n `Invariant: React.unstable_postpone is not defined. This suggests the wrong version of React was loaded. This is a bug in Next.js`\n )\n }\n}\n\n/**\n * This is a bit of a hack to allow us to abort a render using a Postpone instance instead of an Error which changes React's\n * abort semantics slightly.\n */\nexport function createRenderInBrowserAbortSignal(): AbortSignal {\n const controller = new AbortController()\n controller.abort(new BailoutToCSRError('Render in Browser'))\n return controller.signal\n}\n\n/**\n * In a prerender, we may end up with hanging Promises as inputs due them\n * stalling on connection() or because they're loading dynamic data. In that\n * case we need to abort the encoding of arguments since they'll never complete.\n */\nexport function createHangingInputAbortSignal(\n workUnitStore: WorkUnitStore\n): AbortSignal | undefined {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-runtime':\n const controller = new AbortController()\n\n if (workUnitStore.cacheSignal) {\n // If we have a cacheSignal it means we're in a prospective render. If\n // the input we're waiting on is coming from another cache, we do want\n // to wait for it so that we can resolve this cache entry too.\n workUnitStore.cacheSignal.inputReady().then(() => {\n controller.abort()\n })\n } else {\n // Otherwise we're in the final render and we should already have all\n // our caches filled.\n // If the prerender uses stages, we have wait until the runtime stage,\n // at which point all runtime inputs will be resolved.\n // (otherwise, a runtime prerender might consider `cookies()` hanging\n // even though they'd resolve in the next task.)\n //\n // We might still be waiting on some microtasks so we\n // wait one tick before giving up. When we give up, we still want to\n // render the content of this cache as deeply as we can so that we can\n // suspend as deeply as possible in the tree or not at all if we don't\n // end up waiting for the input.\n const runtimeStagePromise = getRuntimeStagePromise(workUnitStore)\n if (runtimeStagePromise) {\n runtimeStagePromise.then(() =>\n scheduleOnNextTick(() => controller.abort())\n )\n } else {\n scheduleOnNextTick(() => controller.abort())\n }\n }\n\n return controller.signal\n case 'prerender-client':\n case 'prerender-ppr':\n case 'prerender-legacy':\n case 'request':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n return undefined\n default:\n workUnitStore satisfies never\n }\n}\n\nexport function annotateDynamicAccess(\n expression: string,\n prerenderStore: PrerenderStoreModern\n) {\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n}\n\nexport function useDynamicRouteParams(expression: string) {\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workStore && workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender-client':\n case 'prerender': {\n const fallbackParams = workUnitStore.fallbackRouteParams\n\n if (fallbackParams && fallbackParams.size > 0) {\n // We are in a prerender with cacheComponents semantics. We are going to\n // hang here and never resolve. This will cause the currently\n // rendering component to effectively be a dynamic hole.\n React.use(\n makeHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n expression\n )\n )\n }\n break\n }\n case 'prerender-ppr': {\n const fallbackParams = workUnitStore.fallbackRouteParams\n if (fallbackParams && fallbackParams.size > 0) {\n return postponeWithTracking(\n workStore.route,\n expression,\n workUnitStore.dynamicTracking\n )\n }\n break\n }\n case 'prerender-runtime':\n throw new InvariantError(\n `\\`${expression}\\` was called during a runtime prerender. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`\n )\n case 'cache':\n case 'private-cache':\n throw new InvariantError(\n `\\`${expression}\\` was called inside a cache scope. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`\n )\n case 'prerender-legacy':\n case 'request':\n case 'unstable-cache':\n break\n default:\n workUnitStore satisfies never\n }\n }\n}\n\nexport function useDynamicSearchParams(expression: string) {\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n if (!workStore) {\n // We assume pages router context and just return\n return\n }\n\n if (!workUnitStore) {\n throwForMissingRequestStore(expression)\n }\n\n switch (workUnitStore.type) {\n case 'prerender-client': {\n React.use(\n makeHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n expression\n )\n )\n break\n }\n case 'prerender-legacy':\n case 'prerender-ppr': {\n if (workStore.forceStatic) {\n return\n }\n throw new BailoutToCSRError(expression)\n }\n case 'prerender':\n case 'prerender-runtime':\n throw new InvariantError(\n `\\`${expression}\\` was called from a Server Component. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`\n )\n case 'cache':\n case 'unstable-cache':\n case 'private-cache':\n throw new InvariantError(\n `\\`${expression}\\` was called inside a cache scope. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`\n )\n case 'request':\n return\n default:\n workUnitStore satisfies never\n }\n}\n\nconst hasSuspenseRegex = /\\n\\s+at Suspense \\(\\)/\n\n// Common implicit body tags that React will treat as body when placed directly in html\nconst bodyAndImplicitTags =\n 'body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6'\n\n// Detects when RootLayoutBoundary (our framework marker component) appears\n// after Suspense in the component stack, indicating the root layout is wrapped\n// within a Suspense boundary. Ensures no body/html/implicit-body components are in between.\n//\n// Example matches:\n// at Suspense ()\n// at __next_root_layout_boundary__ ()\n//\n// Or with other components in between (but not body/html/implicit-body):\n// at Suspense ()\n// at SomeComponent ()\n// at __next_root_layout_boundary__ ()\nconst hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex = new RegExp(\n `\\\\n\\\\s+at Suspense \\\\(\\\\)(?:(?!\\\\n\\\\s+at (?:${bodyAndImplicitTags}) \\\\(\\\\))[\\\\s\\\\S])*?\\\\n\\\\s+at ${ROOT_LAYOUT_BOUNDARY_NAME} \\\\([^\\\\n]*\\\\)`\n)\n\nconst hasMetadataRegex = new RegExp(\n `\\\\n\\\\s+at ${METADATA_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst hasViewportRegex = new RegExp(\n `\\\\n\\\\s+at ${VIEWPORT_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst hasOutletRegex = new RegExp(`\\\\n\\\\s+at ${OUTLET_BOUNDARY_NAME}[\\\\n\\\\s]`)\n\nexport function trackAllowedDynamicAccess(\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState\n) {\n if (hasOutletRegex.test(componentStack)) {\n // We don't need to track that this is dynamic. It is only so when something else is also dynamic.\n return\n } else if (hasMetadataRegex.test(componentStack)) {\n dynamicValidation.hasDynamicMetadata = true\n return\n } else if (hasViewportRegex.test(componentStack)) {\n dynamicValidation.hasDynamicViewport = true\n return\n } else if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule.\n // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense\n // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering.\n dynamicValidation.hasAllowedDynamic = true\n dynamicValidation.hasSuspenseAboveBody = true\n return\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it so we don't need to report it as a source\n // of disallowed\n dynamicValidation.hasAllowedDynamic = true\n return\n } else if (clientDynamic.syncDynamicErrorWithStack) {\n // This task was the task that called the sync error.\n dynamicValidation.dynamicErrors.push(\n clientDynamic.syncDynamicErrorWithStack\n )\n return\n } else {\n const message =\n `Route \"${workStore.route}\": Uncached data was accessed outside of ` +\n '. This delays the entire page from rendering, resulting in a ' +\n 'slow user experience. Learn more: ' +\n 'https://nextjs.org/docs/messages/blocking-route'\n const error = createErrorWithComponentOrOwnerStack(message, componentStack)\n dynamicValidation.dynamicErrors.push(error)\n return\n }\n}\n\nexport function trackDynamicHoleInRuntimeShell(\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState\n) {\n if (hasOutletRegex.test(componentStack)) {\n // We don't need to track that this is dynamic. It is only so when something else is also dynamic.\n return\n } else if (hasMetadataRegex.test(componentStack)) {\n const message = `Route \"${workStore.route}\": Uncached data or \\`connection()\\` was accessed inside \\`generateMetadata\\`. Except for this instance, the page would have been entirely prerenderable which may have been the intended behavior. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`\n const error = createErrorWithComponentOrOwnerStack(message, componentStack)\n dynamicValidation.dynamicMetadata = error\n return\n } else if (hasViewportRegex.test(componentStack)) {\n const message = `Route \"${workStore.route}\": Uncached data or \\`connection()\\` was accessed inside \\`generateViewport\\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`\n const error = createErrorWithComponentOrOwnerStack(message, componentStack)\n dynamicValidation.dynamicErrors.push(error)\n return\n } else if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule.\n // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense\n // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering.\n dynamicValidation.hasAllowedDynamic = true\n dynamicValidation.hasSuspenseAboveBody = true\n return\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it so we don't need to report it as a source\n // of disallowed\n dynamicValidation.hasAllowedDynamic = true\n return\n } else if (clientDynamic.syncDynamicErrorWithStack) {\n // This task was the task that called the sync error.\n dynamicValidation.dynamicErrors.push(\n clientDynamic.syncDynamicErrorWithStack\n )\n return\n } else {\n const message = `Route \"${workStore.route}\": Uncached data or \\`connection()\\` was accessed outside of \\`\\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`\n const error = createErrorWithComponentOrOwnerStack(message, componentStack)\n dynamicValidation.dynamicErrors.push(error)\n return\n }\n}\n\nexport function trackDynamicHoleInStaticShell(\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState\n) {\n if (hasOutletRegex.test(componentStack)) {\n // We don't need to track that this is dynamic. It is only so when something else is also dynamic.\n return\n } else if (hasMetadataRegex.test(componentStack)) {\n const message = `Route \"${workStore.route}\": Runtime data such as \\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` was accessed inside \\`generateMetadata\\` or you have file-based metadata such as icons that depend on dynamic params segments. Except for this instance, the page would have been entirely prerenderable which may have been the intended behavior. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`\n const error = createErrorWithComponentOrOwnerStack(message, componentStack)\n dynamicValidation.dynamicMetadata = error\n return\n } else if (hasViewportRegex.test(componentStack)) {\n const message = `Route \"${workStore.route}\": Runtime data such as \\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` was accessed inside \\`generateViewport\\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`\n const error = createErrorWithComponentOrOwnerStack(message, componentStack)\n dynamicValidation.dynamicErrors.push(error)\n return\n } else if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule.\n // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense\n // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering.\n dynamicValidation.hasAllowedDynamic = true\n dynamicValidation.hasSuspenseAboveBody = true\n return\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it so we don't need to report it as a source\n // of disallowed\n dynamicValidation.hasAllowedDynamic = true\n return\n } else if (clientDynamic.syncDynamicErrorWithStack) {\n // This task was the task that called the sync error.\n dynamicValidation.dynamicErrors.push(\n clientDynamic.syncDynamicErrorWithStack\n )\n return\n } else {\n const message = `Route \"${workStore.route}\": Runtime data such as \\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` was accessed outside of \\`\\`. This delays the entire page from rendering, resulting in a slow user experience. Learn more: https://nextjs.org/docs/messages/blocking-route`\n const error = createErrorWithComponentOrOwnerStack(message, componentStack)\n dynamicValidation.dynamicErrors.push(error)\n return\n }\n}\n\n/**\n * In dev mode, we prefer using the owner stack, otherwise the provided\n * component stack is used.\n */\nfunction createErrorWithComponentOrOwnerStack(\n message: string,\n componentStack: string\n) {\n const ownerStack =\n process.env.NODE_ENV !== 'production' && React.captureOwnerStack\n ? React.captureOwnerStack()\n : null\n\n const error = new Error(message)\n // TODO go back to owner stack here if available. This is temporarily using componentStack to get the right\n //\n error.stack = error.name + ': ' + message + (ownerStack || componentStack)\n return error\n}\n\nexport enum PreludeState {\n Full = 0,\n Empty = 1,\n Errored = 2,\n}\n\nexport function logDisallowedDynamicError(\n workStore: WorkStore,\n error: Error\n): void {\n console.error(error)\n\n if (!workStore.dev) {\n if (workStore.hasReadableErrorStacks) {\n console.error(\n `To get a more detailed stack trace and pinpoint the issue, start the app in development mode by running \\`next dev\\`, then open \"${workStore.route}\" in your browser to investigate the error.`\n )\n } else {\n console.error(`To get a more detailed stack trace and pinpoint the issue, try one of the following:\n - Start the app in development mode by running \\`next dev\\`, then open \"${workStore.route}\" in your browser to investigate the error.\n - Rerun the production build with \\`next build --debug-prerender\\` to generate better stack traces.`)\n }\n }\n}\n\nexport function throwIfDisallowedDynamic(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n serverDynamic: DynamicTrackingState\n): void {\n if (serverDynamic.syncDynamicErrorWithStack) {\n logDisallowedDynamicError(\n workStore,\n serverDynamic.syncDynamicErrorWithStack\n )\n throw new StaticGenBailoutError()\n }\n\n if (prelude !== PreludeState.Full) {\n if (dynamicValidation.hasSuspenseAboveBody) {\n // This route has opted into allowing fully dynamic rendering\n // by including a Suspense boundary above the body. In this case\n // a lack of a shell is not considered disallowed so we simply return\n return\n }\n\n // We didn't have any sync bailouts but there may be user code which\n // blocked the root. We would have captured these during the prerender\n // and can log them here and then terminate the build/validating render\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n for (let i = 0; i < dynamicErrors.length; i++) {\n logDisallowedDynamicError(workStore, dynamicErrors[i])\n }\n\n throw new StaticGenBailoutError()\n }\n\n // If we got this far then the only other thing that could be blocking\n // the root is dynamic Viewport. If this is dynamic then\n // you need to opt into that by adding a Suspense boundary above the body\n // to indicate your are ok with fully dynamic rendering.\n if (dynamicValidation.hasDynamicViewport) {\n console.error(\n `Route \"${workStore.route}\" has a \\`generateViewport\\` that depends on Request data (\\`cookies()\\`, etc...) or uncached external data (\\`fetch(...)\\`, etc...) without explicitly allowing fully dynamic rendering. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`\n )\n throw new StaticGenBailoutError()\n }\n\n if (prelude === PreludeState.Empty) {\n // If we ever get this far then we messed up the tracking of invalid dynamic.\n // We still adhere to the constraint that you must produce a shell but invite the\n // user to report this as a bug in Next.js.\n console.error(\n `Route \"${workStore.route}\" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`\n )\n throw new StaticGenBailoutError()\n }\n } else {\n if (\n dynamicValidation.hasAllowedDynamic === false &&\n dynamicValidation.hasDynamicMetadata\n ) {\n console.error(\n `Route \"${workStore.route}\" has a \\`generateMetadata\\` that depends on Request data (\\`cookies()\\`, etc...) or uncached external data (\\`fetch(...)\\`, etc...) when the rest of the route does not. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`\n )\n throw new StaticGenBailoutError()\n }\n }\n}\n\nexport function getStaticShellDisallowedDynamicReasons(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState\n): Array {\n if (dynamicValidation.hasSuspenseAboveBody) {\n // This route has opted into allowing fully dynamic rendering\n // by including a Suspense boundary above the body. In this case\n // a lack of a shell is not considered disallowed so we simply return\n return []\n }\n\n if (prelude !== PreludeState.Full) {\n // We didn't have any sync bailouts but there may be user code which\n // blocked the root. We would have captured these during the prerender\n // and can log them here and then terminate the build/validating render\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n if (prelude === PreludeState.Empty) {\n // If we ever get this far then we messed up the tracking of invalid dynamic.\n // We still adhere to the constraint that you must produce a shell but invite the\n // user to report this as a bug in Next.js.\n return [\n new InvariantError(\n `Route \"${workStore.route}\" did not produce a static shell and Next.js was unable to determine a reason.`\n ),\n ]\n }\n } else {\n // We have a prelude but we might still have dynamic metadata without any other dynamic access\n if (\n dynamicValidation.hasAllowedDynamic === false &&\n dynamicValidation.dynamicErrors.length === 0 &&\n dynamicValidation.dynamicMetadata\n ) {\n return [dynamicValidation.dynamicMetadata]\n }\n }\n // We had a non-empty prelude and there are no dynamic holes\n return []\n}\n\nexport function delayUntilRuntimeStage(\n prerenderStore: PrerenderStoreModernRuntime,\n result: Promise\n): Promise {\n if (prerenderStore.runtimeStagePromise) {\n return prerenderStore.runtimeStagePromise.then(() => result)\n }\n return result\n}\n"],"names":["Postpone","PreludeState","abortAndThrowOnSynchronousRequestDataAccess","abortOnSynchronousPlatformIOAccess","accessedDynamicData","annotateDynamicAccess","consumeDynamicAccess","createDynamicTrackingState","createDynamicValidationState","createHangingInputAbortSignal","createRenderInBrowserAbortSignal","delayUntilRuntimeStage","formatDynamicAPIAccesses","getFirstDynamicReason","getStaticShellDisallowedDynamicReasons","isDynamicPostpone","isPrerenderInterruptedError","logDisallowedDynamicError","markCurrentScopeAsDynamic","postponeWithTracking","throwIfDisallowedDynamic","throwToInterruptStaticGeneration","trackAllowedDynamicAccess","trackDynamicDataInDynamicRender","trackDynamicHoleInRuntimeShell","trackDynamicHoleInStaticShell","useDynamicRouteParams","useDynamicSearchParams","hasPostpone","React","unstable_postpone","isDebugDynamicAccesses","dynamicAccesses","syncDynamicErrorWithStack","hasSuspenseAboveBody","hasDynamicMetadata","dynamicMetadata","hasDynamicViewport","hasAllowedDynamic","dynamicErrors","trackingState","expression","store","workUnitStore","type","forceDynamic","forceStatic","dynamicShouldError","StaticGenBailoutError","route","dynamicTracking","revalidate","err","DynamicServerError","dynamicUsageDescription","dynamicUsageStack","stack","process","env","NODE_ENV","usedDynamic","prerenderStore","abortOnSynchronousDynamicDataAccess","reason","error","createPrerenderInterruptedError","controller","abort","push","Error","undefined","errorWithStack","prerenderSignal","signal","aborted","workUnitAsyncStorage","getStore","assertPostpone","createPostponeReason","message","isDynamicPostponeReason","includes","NEXT_PRERENDER_INTERRUPTED","digest","length","serverDynamic","clientDynamic","filter","access","map","split","slice","line","join","AbortController","BailoutToCSRError","cacheSignal","inputReady","then","runtimeStagePromise","getRuntimeStagePromise","scheduleOnNextTick","workStore","workAsyncStorage","fallbackParams","fallbackRouteParams","size","use","makeHangingPromise","renderSignal","InvariantError","throwForMissingRequestStore","hasSuspenseRegex","bodyAndImplicitTags","hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex","RegExp","ROOT_LAYOUT_BOUNDARY_NAME","hasMetadataRegex","METADATA_BOUNDARY_NAME","hasViewportRegex","VIEWPORT_BOUNDARY_NAME","hasOutletRegex","OUTLET_BOUNDARY_NAME","componentStack","dynamicValidation","test","createErrorWithComponentOrOwnerStack","ownerStack","captureOwnerStack","name","console","dev","hasReadableErrorStacks","prelude","i","result"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 2368, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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": 2402, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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,qBAEZC,QAAQ,sJACRF,gBAAgB,GAEhBE,QAAQ,8BACRF,gBAAgB","ignoreList":[0]}}, + {"offset": {"line": 2429, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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": 2503, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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": 2702, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/navigation.js"],"sourcesContent":["module.exports = require('./dist/client/components/navigation')\n"],"names":[],"mappings":"AAAA,OAAO,OAAO","ignoreList":[0]}}] } \ No newline at end of file diff --git a/.next/dev/server/chunks/ssr/[root-of-the-server]__de10d535._.js b/.next/dev/server/chunks/ssr/[root-of-the-server]__de10d535._.js index 1420bd4..0eef08d 100644 --- a/.next/dev/server/chunks/ssr/[root-of-the-server]__de10d535._.js +++ b/.next/dev/server/chunks/ssr/[root-of-the-server]__de10d535._.js @@ -187,20 +187,6 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__proje ; ; ; -const PLAN_LIMITS = { - free: { - aiActions: 100, - projects: 3 - }, - pro: { - aiActions: 5000, - projects: 20 - }, - master: { - aiActions: 999999, - projects: 999 - } -}; const useAuth = ()=>{ const { data: session, status } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useSession"])(); const [user, setUser] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(null); @@ -208,9 +194,16 @@ const useAuth = ()=>{ // Fetch real profile from DB when session is available (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"])(()=>{ if (session?.user?.id) { - fetch('/api/user/profile').then((res)=>res.json()).then((dbUser)=>{ - const plan = dbUser.plan || 'free'; - const limits = PLAN_LIMITS[plan] || PLAN_LIMITS.free; + fetch('/api/user/profile', { + cache: 'no-store' + }).then((res)=>res.json()).then((dbUser)=>{ + const planId = dbUser.plan || 'free'; + const planDetails = dbUser.planDetails || { + id: 'free', + displayName: 'Gratuit', + maxAiActions: 100, + maxProjects: 3 + }; setUser({ id: dbUser.id, email: dbUser.email, @@ -218,14 +211,15 @@ const useAuth = ()=>{ avatar: dbUser.avatar, bio: dbUser.bio, subscription: { - plan, + plan: planId, + planDetails: planDetails, startDate: new Date(dbUser.createdAt).getTime(), status: 'active' }, usage: { aiActionsCurrent: dbUser.aiActionsUsed || 0, - aiActionsLimit: limits.aiActions, - projectsLimit: limits.projects + aiActionsLimit: planDetails.maxAiActions, + projectsLimit: planDetails.maxProjects }, preferences: { theme: 'light', diff --git a/.next/dev/server/chunks/ssr/[root-of-the-server]__de10d535._.js.map b/.next/dev/server/chunks/ssr/[root-of-the-server]__de10d535._.js.map index 0bf2f17..e45e96a 100644 --- a/.next/dev/server/chunks/ssr/[root-of-the-server]__de10d535._.js.map +++ b/.next/dev/server/chunks/ssr/[root-of-the-server]__de10d535._.js.map @@ -3,13 +3,13 @@ "sources": [], "sections": [ {"offset": {"line": 10, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/api.ts"],"sourcesContent":["import { BookProject, UserProfile } from './types';\r\n\r\nconst API_BASE_URL = '/api';\r\n\r\n// --- API CLIENT ---\r\n\r\nconst api = {\r\n async request(endpoint: string, options: RequestInit = {}) {\r\n const url = `${API_BASE_URL}${endpoint}`;\r\n\r\n const headers: Record = {\r\n 'Content-Type': 'application/json',\r\n ...options.headers as Record,\r\n };\r\n\r\n const response = await fetch(url, {\r\n ...options,\r\n headers,\r\n });\r\n\r\n if (!response.ok) {\r\n let errorMsg = `Error ${response.status}: ${response.statusText}`;\r\n try {\r\n const errorJson = await response.json();\r\n if (errorJson.error) errorMsg = errorJson.error;\r\n if (errorJson.message) errorMsg = errorJson.message;\r\n } catch {\r\n // Ignore json parse error\r\n }\r\n throw new Error(errorMsg);\r\n }\r\n\r\n if (response.status === 204) return null;\r\n return response.json();\r\n },\r\n\r\n // --- AUTH ---\r\n auth: {\r\n async register(email: string, password: string, name: string) {\r\n return api.request('/auth/register', {\r\n method: 'POST',\r\n body: JSON.stringify({ email, password, name }),\r\n });\r\n },\r\n },\r\n\r\n // --- PROJECTS ---\r\n projects: {\r\n async list() {\r\n return api.request('/projects');\r\n },\r\n\r\n async get(id: string) {\r\n return api.request(`/projects/${id}`);\r\n },\r\n\r\n async create(data: { title: string; author: string; settings?: any }) {\r\n return api.request('/projects', {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n });\r\n },\r\n\r\n async update(id: string, data: any) {\r\n return api.request(`/projects/${id}`, {\r\n method: 'PUT',\r\n body: JSON.stringify(data),\r\n });\r\n },\r\n\r\n async delete(id: string) {\r\n return api.request(`/projects/${id}`, {\r\n method: 'DELETE',\r\n });\r\n },\r\n\r\n async syncWorkflow(id: string, data: { nodes: any[]; connections: any[] }) {\r\n return api.request(`/projects/${id}/workflow`, {\r\n method: 'PUT',\r\n body: JSON.stringify(data),\r\n });\r\n },\r\n },\r\n\r\n // --- CHAPTERS ---\r\n chapters: {\r\n async create(data: { projectId: string; title?: string; content?: string; summary?: string; orderIndex?: number }) {\r\n return api.request('/chapters', {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n });\r\n },\r\n\r\n async update(id: string, data: any) {\r\n return api.request(`/chapters/${id}`, {\r\n method: 'PUT',\r\n body: JSON.stringify(data),\r\n });\r\n },\r\n\r\n async delete(id: string) {\r\n return api.request(`/chapters/${id}`, {\r\n method: 'DELETE',\r\n });\r\n },\r\n },\r\n\r\n // --- ENTITIES ---\r\n entities: {\r\n async create(data: { projectId: string; type: string; name?: string; description?: string; details?: string; attributes?: any; customValues?: any }) {\r\n return api.request('/entities', {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n });\r\n },\r\n\r\n async update(id: string, data: any) {\r\n return api.request(`/entities/${id}`, {\r\n method: 'PUT',\r\n body: JSON.stringify(data),\r\n });\r\n },\r\n\r\n async delete(id: string) {\r\n return api.request(`/entities/${id}`, {\r\n method: 'DELETE',\r\n });\r\n },\r\n },\r\n\r\n // --- IDEAS ---\r\n ideas: {\r\n async create(data: { projectId: string; title?: string; description?: string; status?: string; category?: string }) {\r\n return api.request('/ideas', {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n });\r\n },\r\n\r\n async update(id: string, data: any) {\r\n return api.request(`/ideas/${id}`, {\r\n method: 'PUT',\r\n body: JSON.stringify(data),\r\n });\r\n },\r\n\r\n async delete(id: string) {\r\n return api.request(`/ideas/${id}`, {\r\n method: 'DELETE',\r\n });\r\n },\r\n },\r\n\r\n // --- AI (server-side via API routes) ---\r\n ai: {\r\n async generate(project: BookProject, chapterId: string, prompt: string, user: UserProfile) {\r\n return api.request<{ text: string; type: 'draft' | 'reflection' }>('/ai/generate', {\r\n method: 'POST',\r\n body: JSON.stringify({ project, chapterId, prompt, user }),\r\n });\r\n },\r\n\r\n async transform(text: string, mode: string, context: string, user: UserProfile) {\r\n const res = await api.request<{ text: string }>('/ai/transform', {\r\n method: 'POST',\r\n body: JSON.stringify({ text, mode, context, user }),\r\n });\r\n return res.text;\r\n },\r\n },\r\n};\r\n\r\nexport default api;\r\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 178, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/hooks/useAuth.ts"],"sourcesContent":["'use client';\r\n\r\nimport { useState, useEffect, useCallback } from 'react';\r\nimport { signIn, signOut, useSession } from 'next-auth/react';\r\nimport { UserProfile, PlanType } from '@/lib/types';\r\nimport api from '@/lib/api';\r\n\r\nconst PLAN_LIMITS: Record = {\r\n free: { aiActions: 100, projects: 3 },\r\n pro: { aiActions: 5000, projects: 20 },\r\n master: { aiActions: 999999, projects: 999 },\r\n};\r\n\r\nexport const useAuth = () => {\r\n const { data: session, status } = useSession();\r\n const [user, setUser] = useState(null);\r\n const loading = status === 'loading';\r\n\r\n // Fetch real profile from DB when session is available\r\n useEffect(() => {\r\n if (session?.user?.id) {\r\n fetch('/api/user/profile')\r\n .then(res => res.json())\r\n .then(dbUser => {\r\n const plan = (dbUser.plan || 'free') as PlanType;\r\n const limits = PLAN_LIMITS[plan] || PLAN_LIMITS.free;\r\n\r\n setUser({\r\n id: dbUser.id,\r\n email: dbUser.email,\r\n name: dbUser.name || 'User',\r\n avatar: dbUser.avatar,\r\n bio: dbUser.bio,\r\n subscription: { plan, startDate: new Date(dbUser.createdAt).getTime(), status: 'active' },\r\n usage: {\r\n aiActionsCurrent: dbUser.aiActionsUsed || 0,\r\n aiActionsLimit: limits.aiActions,\r\n projectsLimit: limits.projects,\r\n },\r\n preferences: { theme: 'light', dailyWordGoal: dbUser.dailyWordGoal || 500, language: 'fr' },\r\n stats: {\r\n totalWordsWritten: dbUser.totalWords || 0,\r\n writingStreak: dbUser.writingStreak || 0,\r\n lastWriteDate: dbUser.lastWriteDate ? new Date(dbUser.lastWriteDate).getTime() : 0,\r\n },\r\n });\r\n })\r\n .catch(err => {\r\n console.error('Failed to fetch user profile:', err);\r\n // Fallback to session data\r\n setUser({\r\n id: session.user.id || '',\r\n email: session.user.email || '',\r\n name: session.user.name || 'User',\r\n subscription: { plan: 'free', startDate: Date.now(), status: 'active' },\r\n usage: { aiActionsCurrent: 0, aiActionsLimit: 100, projectsLimit: 3 },\r\n preferences: { theme: 'light', dailyWordGoal: 500, language: 'fr' },\r\n stats: { totalWordsWritten: 0, writingStreak: 0, lastWriteDate: 0 },\r\n });\r\n });\r\n } else if (status === 'unauthenticated') {\r\n setUser(null);\r\n }\r\n }, [session, status]);\r\n\r\n const login = useCallback(async (email: string, password: string) => {\r\n const result = await signIn('credentials', {\r\n email,\r\n password,\r\n redirect: false,\r\n });\r\n\r\n if (result?.error) {\r\n throw new Error(result.error === 'CredentialsSignin'\r\n ? 'Email ou mot de passe incorrect'\r\n : result.error\r\n );\r\n }\r\n }, []);\r\n\r\n const signup = useCallback(async (email: string, password: string, name: string) => {\r\n await api.auth.register(email, password, name);\r\n const result = await signIn('credentials', {\r\n email,\r\n password,\r\n redirect: false,\r\n });\r\n if (result?.error) {\r\n throw new Error('Compte créé mais erreur de connexion automatique');\r\n }\r\n }, []);\r\n\r\n const logout = useCallback(async () => {\r\n await signOut({ redirect: false });\r\n setUser(null);\r\n }, []);\r\n\r\n const incrementUsage = useCallback((serverCount?: number) => {\r\n if (user) {\r\n setUser({\r\n ...user,\r\n usage: {\r\n ...user.usage,\r\n aiActionsCurrent: serverCount !== undefined ? serverCount : user.usage.aiActionsCurrent + 1,\r\n },\r\n });\r\n }\r\n }, [user]);\r\n\r\n return { user, login, signup, logout, incrementUsage, loading };\r\n};\r\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 329, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/providers/AuthProvider.tsx"],"sourcesContent":["'use client';\r\n\r\nimport React, { createContext, useContext } from 'react';\r\nimport { SessionProvider } from 'next-auth/react';\r\nimport { useAuth } from '@/hooks/useAuth';\r\n\r\nconst AuthContext = createContext(null);\r\n\r\nfunction AuthInner({ children }: { children: React.ReactNode }) {\r\n const auth = useAuth();\r\n return {children};\r\n}\r\n\r\nexport const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport function useAuthContext() {\r\n return useContext(AuthContext);\r\n}\r\n"],"names":[],"mappings":";;;;;;;AAEA;AACA;AACA;AAJA;;;;;AAMA,MAAM,4BAAc,IAAA,kQAAa,EAAM;AAEvC,SAAS,UAAU,EAAE,QAAQ,EAAiC;IAC1D,MAAM,OAAO,IAAA,8KAAO;IACpB,qBAAO,0RAAC,YAAY,QAAQ;QAAC,OAAO;kBAAO;;;;;;AAC/C;AAEO,MAAM,eAAwD,CAAC,EAAE,QAAQ,EAAE;IAC9E,qBACI,0RAAC,oMAAe;kBACZ,cAAA,0RAAC;sBAAW;;;;;;;;;;;AAGxB;AAEO,SAAS;IACZ,OAAO,IAAA,+PAAU,EAAC;AACtB"}}, - {"offset": {"line": 378, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/route-modules/app-page/module.compiled.js"],"sourcesContent":["if (process.env.NEXT_RUNTIME === 'edge') {\n module.exports = require('next/dist/server/route-modules/app-page/module.js')\n} else {\n if (process.env.__NEXT_EXPERIMENTAL_REACT) {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')\n }\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')\n }\n }\n }\n}\n"],"names":["process","env","NEXT_RUNTIME","module","exports","require","__NEXT_EXPERIMENTAL_REACT","NODE_ENV","TURBOPACK"],"mappings":"AAAA,IAAIA,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;KAElC;IACL,IAAIF,QAAQC,GAAG,CAACK,yBAAyB,EAAE;;SAcpC;QACL,IAAIN,QAAQC,GAAG,CAACM,QAAQ,KAAK,WAAe;YAC1C,IAAIP,QAAQC,GAAG,CAACO,SAAS,eAAE;gBACzBL,OAAOC,OAAO,GAAGC,QAAQ;YAC3B,OAAO;;QAGT,OAAO;;IAOT;AACF","ignoreList":[0]}}, - {"offset": {"line": 397, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.ts"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactJsxDevRuntime\n"],"names":["module","exports","require","vendored","ReactJsxDevRuntime"],"mappings":"AAAAA,OAAOC,OAAO,GACZC,QAAQ,0JACRC,QAAQ,CAAC,YAAY,CAAEC,kBAAkB","ignoreList":[0]}}, - {"offset": {"line": 402, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react.ts"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.React\n"],"names":["module","exports","require","vendored","React"],"mappings":"AAAAA,OAAOC,OAAO,GACZC,QAAQ,0JACRC,QAAQ,CAAC,YAAY,CAAEC,KAAK","ignoreList":[0]}}, - {"offset": {"line": 407, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.ts"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactJsxRuntime\n"],"names":["module","exports","require","vendored","ReactJsxRuntime"],"mappings":"AAAAA,OAAOC,OAAO,GACZC,QAAQ,0JACRC,QAAQ,CAAC,YAAY,CAAEC,eAAe","ignoreList":[0]}}, - {"offset": {"line": 412, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/%40auth/core/errors.js"],"sourcesContent":["/**\n * Base error class for all Auth.js errors.\n * It's optimized to be printed in the server logs in a nicely formatted way\n * via the [`logger.error`](https://authjs.dev/reference/core#logger) option.\n * @noInheritDoc\n */\nexport class AuthError extends Error {\n /** @internal */\n constructor(message, errorOptions) {\n if (message instanceof Error) {\n super(undefined, {\n cause: { err: message, ...message.cause, ...errorOptions },\n });\n }\n else if (typeof message === \"string\") {\n if (errorOptions instanceof Error) {\n errorOptions = { err: errorOptions, ...errorOptions.cause };\n }\n super(message, errorOptions);\n }\n else {\n super(undefined, message);\n }\n this.name = this.constructor.name;\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/3841\n this.type = this.constructor.type ?? \"AuthError\";\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/3841\n this.kind = this.constructor.kind ?? \"error\";\n Error.captureStackTrace?.(this, this.constructor);\n const url = `https://errors.authjs.dev#${this.type.toLowerCase()}`;\n this.message += `${this.message ? \". \" : \"\"}Read more at ${url}`;\n }\n}\n/**\n * Thrown when the user's sign-in attempt failed.\n * @noInheritDoc\n */\nexport class SignInError extends AuthError {\n}\n/** @internal */\nSignInError.kind = \"signIn\";\n/**\n * One of the database [`Adapter` methods](https://authjs.dev/reference/core/adapters#methods)\n * failed during execution.\n *\n * :::tip\n * If `debug: true` is set, you can check out `[auth][debug]` in the logs to learn more about the failed adapter method execution.\n * @example\n * ```sh\n * [auth][debug]: adapter_getUserByEmail\n * { \"args\": [undefined] }\n * ```\n * :::\n * @noInheritDoc\n */\nexport class AdapterError extends AuthError {\n}\nAdapterError.type = \"AdapterError\";\n/**\n * Thrown when the execution of the [`signIn` callback](https://authjs.dev/reference/core/types#signin) fails\n * or if it returns `false`.\n * @noInheritDoc\n */\nexport class AccessDenied extends AuthError {\n}\nAccessDenied.type = \"AccessDenied\";\n/**\n * This error occurs when the user cannot finish login.\n * Depending on the provider type, this could have happened for multiple reasons.\n *\n * :::tip\n * Check out `[auth][details]` in the logs to know which provider failed.\n * @example\n * ```sh\n * [auth][details]: { \"provider\": \"github\" }\n * ```\n * :::\n *\n * For an [OAuth provider](https://authjs.dev/getting-started/authentication/oauth), possible causes are:\n * - The user denied access to the application\n * - There was an error parsing the OAuth Profile:\n * Check out the provider's `profile` or `userinfo.request` method to make sure\n * it correctly fetches the user's profile.\n * - The `signIn` or `jwt` callback methods threw an uncaught error:\n * Check the callback method implementations.\n *\n * For an [Email provider](https://authjs.dev/getting-started/authentication/email), possible causes are:\n * - The provided email/token combination was invalid/missing:\n * Check if the provider's `sendVerificationRequest` method correctly sends the email.\n * - The provided email/token combination has expired:\n * Ask the user to log in again.\n * - There was an error with the database:\n * Check the database logs.\n *\n * For a [Credentials provider](https://authjs.dev/getting-started/authentication/credentials), possible causes are:\n * - The `authorize` method threw an uncaught error:\n * Check the provider's `authorize` method.\n * - The `signIn` or `jwt` callback methods threw an uncaught error:\n * Check the callback method implementations.\n *\n * :::tip\n * Check out `[auth][cause]` in the error message for more details.\n * It will show the original stack trace.\n * :::\n * @noInheritDoc\n */\nexport class CallbackRouteError extends AuthError {\n}\nCallbackRouteError.type = \"CallbackRouteError\";\n/**\n * Thrown when Auth.js is misconfigured and accidentally tried to require authentication on a custom error page.\n * To prevent an infinite loop, Auth.js will instead render its default error page.\n *\n * To fix this, make sure that the `error` page does not require authentication.\n *\n * Learn more at [Guide: Error pages](https://authjs.dev/guides/pages/error)\n * @noInheritDoc\n */\nexport class ErrorPageLoop extends AuthError {\n}\nErrorPageLoop.type = \"ErrorPageLoop\";\n/**\n * One of the [`events` methods](https://authjs.dev/reference/core/types#eventcallbacks)\n * failed during execution.\n *\n * Make sure that the `events` methods are implemented correctly and uncaught errors are handled.\n *\n * Learn more at [`events`](https://authjs.dev/reference/core/types#eventcallbacks)\n * @noInheritDoc\n */\nexport class EventError extends AuthError {\n}\nEventError.type = \"EventError\";\n/**\n * Thrown when Auth.js is unable to verify a `callbackUrl` value.\n * The browser either disabled cookies or the `callbackUrl` is not a valid URL.\n *\n * Somebody might have tried to manipulate the callback URL that Auth.js uses to redirect the user back to the configured `callbackUrl`/page.\n * This could be a malicious hacker trying to redirect the user to a phishing site.\n * To prevent this, Auth.js checks if the callback URL is valid and throws this error if it is not.\n *\n * There is no action required, but it might be an indicator that somebody is trying to attack your application.\n * @noInheritDoc\n */\nexport class InvalidCallbackUrl extends AuthError {\n}\nInvalidCallbackUrl.type = \"InvalidCallbackUrl\";\n/**\n * Can be thrown from the `authorize` callback of the Credentials provider.\n * When an error occurs during the `authorize` callback, two things can happen:\n * 1. The user is redirected to the signin page, with `error=CredentialsSignin&code=credentials` in the URL. `code` is configurable.\n * 2. If you throw this error in a framework that handles form actions server-side, this error is thrown, instead of redirecting the user, so you'll need to handle.\n * @noInheritDoc\n */\nexport class CredentialsSignin extends SignInError {\n constructor() {\n super(...arguments);\n /**\n * The error code that is set in the `code` query parameter of the redirect URL.\n *\n *\n * ⚠ NOTE: This property is going to be included in the URL, so make sure it does not hint at sensitive errors.\n *\n * The full error is always logged on the server, if you need to debug.\n *\n * Generally, we don't recommend hinting specifically if the user had either a wrong username or password specifically,\n * try rather something like \"Invalid credentials\".\n */\n this.code = \"credentials\";\n }\n}\nCredentialsSignin.type = \"CredentialsSignin\";\n/**\n * One of the configured OAuth or OIDC providers is missing the `authorization`, `token` or `userinfo`, or `issuer` configuration.\n * To perform OAuth or OIDC sign in, at least one of these endpoints is required.\n *\n * Learn more at [`OAuth2Config`](https://authjs.dev/reference/core/providers#oauth2configprofile) or [Guide: OAuth Provider](https://authjs.dev/guides/configuring-oauth-providers)\n * @noInheritDoc\n */\nexport class InvalidEndpoints extends AuthError {\n}\nInvalidEndpoints.type = \"InvalidEndpoints\";\n/**\n * Thrown when a PKCE, state or nonce OAuth check could not be performed.\n * This could happen if the OAuth provider is configured incorrectly or if the browser is blocking cookies.\n *\n * Learn more at [`checks`](https://authjs.dev/reference/core/providers#checks)\n * @noInheritDoc\n */\nexport class InvalidCheck extends AuthError {\n}\nInvalidCheck.type = \"InvalidCheck\";\n/**\n * Logged on the server when Auth.js could not decode or encode a JWT-based (`strategy: \"jwt\"`) session.\n *\n * Possible causes are either a misconfigured `secret` or a malformed JWT or `encode/decode` methods.\n *\n * :::note\n * When this error is logged, the session cookie is destroyed.\n * :::\n *\n * Learn more at [`secret`](https://authjs.dev/reference/core#secret), [`jwt.encode`](https://authjs.dev/reference/core/jwt#encode-1) or [`jwt.decode`](https://authjs.dev/reference/core/jwt#decode-2) for more information.\n * @noInheritDoc\n */\nexport class JWTSessionError extends AuthError {\n}\nJWTSessionError.type = \"JWTSessionError\";\n/**\n * Thrown if Auth.js is misconfigured. This could happen if you configured an Email provider but did not set up a database adapter,\n * or tried using a `strategy: \"database\"` session without a database adapter.\n * In both cases, make sure you either remove the configuration or add the missing adapter.\n *\n * Learn more at [Database Adapters](https://authjs.dev/getting-started/database), [Email provider](https://authjs.dev/getting-started/authentication/email) or [Concept: Database session strategy](https://authjs.dev/concepts/session-strategies#database-session)\n * @noInheritDoc\n */\nexport class MissingAdapter extends AuthError {\n}\nMissingAdapter.type = \"MissingAdapter\";\n/**\n * Thrown similarily to [`MissingAdapter`](https://authjs.dev/reference/core/errors#missingadapter), but only some required methods were missing.\n *\n * Make sure you either remove the configuration or add the missing methods to the adapter.\n *\n * Learn more at [Database Adapters](https://authjs.dev/getting-started/database)\n * @noInheritDoc\n */\nexport class MissingAdapterMethods extends AuthError {\n}\nMissingAdapterMethods.type = \"MissingAdapterMethods\";\n/**\n * Thrown when a Credentials provider is missing the `authorize` configuration.\n * To perform credentials sign in, the `authorize` method is required.\n *\n * Learn more at [Credentials provider](https://authjs.dev/getting-started/authentication/credentials)\n * @noInheritDoc\n */\nexport class MissingAuthorize extends AuthError {\n}\nMissingAuthorize.type = \"MissingAuthorize\";\n/**\n * Auth.js requires a secret or multiple secrets to be set, but none was not found. This is used to encrypt cookies, JWTs and other sensitive data.\n *\n * :::note\n * If you are using a framework like Next.js, we try to automatically infer the secret from the `AUTH_SECRET`, `AUTH_SECRET_1`, etc. environment variables.\n * Alternatively, you can also explicitly set the [`AuthConfig.secret`](https://authjs.dev/reference/core#secret) option.\n * :::\n *\n *\n * :::tip\n * To generate a random string, you can use the Auth.js CLI: `npx auth secret`\n * :::\n * @noInheritDoc\n */\nexport class MissingSecret extends AuthError {\n}\nMissingSecret.type = \"MissingSecret\";\n/**\n * Thrown when an Email address is already associated with an account\n * but the user is trying an OAuth account that is not linked to it.\n *\n * For security reasons, Auth.js does not automatically link OAuth accounts to existing accounts if the user is not signed in.\n *\n * :::tip\n * If you trust the OAuth provider to have verified the user's email address,\n * you can enable automatic account linking by setting [`allowDangerousEmailAccountLinking: true`](https://authjs.dev/reference/core/providers#allowdangerousemailaccountlinking)\n * in the provider configuration.\n * :::\n * @noInheritDoc\n */\nexport class OAuthAccountNotLinked extends SignInError {\n}\nOAuthAccountNotLinked.type = \"OAuthAccountNotLinked\";\n/**\n * Thrown when an OAuth provider returns an error during the sign in process.\n * This could happen for example if the user denied access to the application or there was a configuration error.\n *\n * For a full list of possible reasons, check out the specification [Authorization Code Grant: Error Response](https://www.rfc-editor.org/rfc/rfc6749#section-4.1.2.1)\n * @noInheritDoc\n */\nexport class OAuthCallbackError extends SignInError {\n}\nOAuthCallbackError.type = \"OAuthCallbackError\";\n/**\n * This error occurs during an OAuth sign in attempt when the provider's\n * response could not be parsed. This could for example happen if the provider's API\n * changed, or the [`OAuth2Config.profile`](https://authjs.dev/reference/core/providers#oauth2configprofile) method is not implemented correctly.\n * @noInheritDoc\n */\nexport class OAuthProfileParseError extends AuthError {\n}\nOAuthProfileParseError.type = \"OAuthProfileParseError\";\n/**\n * Logged on the server when Auth.js could not retrieve a session from the database (`strategy: \"database\"`).\n *\n * The database adapter might be misconfigured or the database is not reachable.\n *\n * Learn more at [Concept: Database session strategy](https://authjs.dev/concepts/session-strategies#database)\n * @noInheritDoc\n */\nexport class SessionTokenError extends AuthError {\n}\nSessionTokenError.type = \"SessionTokenError\";\n/**\n * Happens when login by [OAuth](https://authjs.dev/getting-started/authentication/oauth) could not be started.\n *\n * Possible causes are:\n * - The Authorization Server is not compliant with the [OAuth 2.0](https://www.ietf.org/rfc/rfc6749.html) or the [OIDC](https://openid.net/specs/openid-connect-core-1_0.html) specification.\n * Check the details in the error message.\n *\n * :::tip\n * Check out `[auth][details]` in the logs to know which provider failed.\n * @example\n * ```sh\n * [auth][details]: { \"provider\": \"github\" }\n * ```\n * :::\n * @noInheritDoc\n */\nexport class OAuthSignInError extends SignInError {\n}\nOAuthSignInError.type = \"OAuthSignInError\";\n/**\n * Happens when the login by an [Email provider](https://authjs.dev/getting-started/authentication/email) could not be started.\n *\n * Possible causes are:\n * - The email sent from the client is invalid, could not be normalized by [`EmailConfig.normalizeIdentifier`](https://authjs.dev/reference/core/providers/email#normalizeidentifier)\n * - The provided email/token combination has expired:\n * Ask the user to log in again.\n * - There was an error with the database:\n * Check the database logs.\n * @noInheritDoc\n */\nexport class EmailSignInError extends SignInError {\n}\nEmailSignInError.type = \"EmailSignInError\";\n/**\n * Represents an error that occurs during the sign-out process. This error\n * is logged when there are issues in terminating a user's session, either\n * by failing to delete the session from the database (in database session\n * strategies) or encountering issues during other parts of the sign-out\n * process, such as emitting sign-out events or clearing session cookies.\n *\n * The session cookie(s) are emptied even if this error is logged.\n * @noInheritDoc\n */\nexport class SignOutError extends AuthError {\n}\nSignOutError.type = \"SignOutError\";\n/**\n * Auth.js was requested to handle an operation that it does not support.\n *\n * See [`AuthAction`](https://authjs.dev/reference/core/types#authaction) for the supported actions.\n * @noInheritDoc\n */\nexport class UnknownAction extends AuthError {\n}\nUnknownAction.type = \"UnknownAction\";\n/**\n * Thrown when a Credentials provider is present but the JWT strategy (`strategy: \"jwt\"`) is not enabled.\n *\n * Learn more at [`strategy`](https://authjs.dev/reference/core#strategy) or [Credentials provider](https://authjs.dev/getting-started/authentication/credentials)\n * @noInheritDoc\n */\nexport class UnsupportedStrategy extends AuthError {\n}\nUnsupportedStrategy.type = \"UnsupportedStrategy\";\n/**\n * Thrown when an endpoint was incorrectly called without a provider, or with an unsupported provider.\n * @noInheritDoc\n */\nexport class InvalidProvider extends AuthError {\n}\nInvalidProvider.type = \"InvalidProvider\";\n/**\n * Thrown when the `trustHost` option was not set to `true`.\n *\n * Auth.js requires the `trustHost` option to be set to `true` since it's relying on the request headers' `host` value.\n *\n * :::note\n * Official Auth.js libraries might attempt to automatically set the `trustHost` option to `true` if the request is coming from a trusted host on a trusted platform.\n * :::\n *\n * Learn more at [`trustHost`](https://authjs.dev/reference/core#trusthost) or [Guide: Deployment](https://authjs.dev/getting-started/deployment)\n * @noInheritDoc\n */\nexport class UntrustedHost extends AuthError {\n}\nUntrustedHost.type = \"UntrustedHost\";\n/**\n * The user's email/token combination was invalid.\n * This could be because the email/token combination was not found in the database,\n * or because the token has expired. Ask the user to log in again.\n * @noInheritDoc\n */\nexport class Verification extends AuthError {\n}\nVerification.type = \"Verification\";\n/**\n * Error for missing CSRF tokens in client-side actions (`signIn`, `signOut`, `useSession#update`).\n * Thrown when actions lack the double submit cookie, essential for CSRF protection.\n *\n * CSRF ([Cross-Site Request Forgery](https://owasp.org/www-community/attacks/csrf))\n * is an attack leveraging authenticated user credentials for unauthorized actions.\n *\n * Double submit cookie pattern, a CSRF defense, requires matching values in a cookie\n * and request parameter. More on this at [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Glossary/CSRF).\n * @noInheritDoc\n */\nexport class MissingCSRF extends SignInError {\n}\nMissingCSRF.type = \"MissingCSRF\";\nconst clientErrors = new Set([\n \"CredentialsSignin\",\n \"OAuthAccountNotLinked\",\n \"OAuthCallbackError\",\n \"AccessDenied\",\n \"Verification\",\n \"MissingCSRF\",\n \"AccountNotLinked\",\n \"WebAuthnVerificationError\",\n]);\n/**\n * Used to only allow sending a certain subset of errors to the client.\n * Errors are always logged on the server, but to prevent leaking sensitive information,\n * only a subset of errors are sent to the client as-is.\n * @internal\n */\nexport function isClientError(error) {\n if (error instanceof AuthError)\n return clientErrors.has(error.type);\n return false;\n}\n/**\n * Thrown when multiple providers have `enableConditionalUI` set to `true`.\n * Only one provider can have this option enabled at a time.\n * @noInheritDoc\n */\nexport class DuplicateConditionalUI extends AuthError {\n}\nDuplicateConditionalUI.type = \"DuplicateConditionalUI\";\n/**\n * Thrown when a WebAuthn provider has `enableConditionalUI` set to `true` but no formField has `webauthn` in its autocomplete param.\n *\n * The `webauthn` autocomplete param is required for conditional UI to work.\n * @noInheritDoc\n */\nexport class MissingWebAuthnAutocomplete extends AuthError {\n}\nMissingWebAuthnAutocomplete.type = \"MissingWebAuthnAutocomplete\";\n/**\n * Thrown when a WebAuthn provider fails to verify a client response.\n * @noInheritDoc\n */\nexport class WebAuthnVerificationError extends AuthError {\n}\nWebAuthnVerificationError.type = \"WebAuthnVerificationError\";\n/**\n * Thrown when an Email address is already associated with an account\n * but the user is trying an account that is not linked to it.\n *\n * For security reasons, Auth.js does not automatically link accounts to existing accounts if the user is not signed in.\n * @noInheritDoc\n */\nexport class AccountNotLinked extends SignInError {\n}\nAccountNotLinked.type = \"AccountNotLinked\";\n/**\n * Thrown when an experimental feature is used but not enabled.\n * @noInheritDoc\n */\nexport class ExperimentalFeatureNotEnabled extends AuthError {\n}\nExperimentalFeatureNotEnabled.type = \"ExperimentalFeatureNotEnabled\";\n"],"names":[],"mappings":"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","ignoreList":[0]}}, - {"offset": {"line": 651, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next-auth/lib/client.js"],"sourcesContent":["\"use client\";\nimport * as React from \"react\";\nimport { AuthError } from \"@auth/core/errors\";\n/** @todo */\nclass ClientFetchError extends AuthError {\n}\n/** @todo */\nexport class ClientSessionError extends AuthError {\n}\n// ------------------------ Internal ------------------------\n/**\n * If passed 'appContext' via getInitialProps() in _app.js\n * then get the req object from ctx and use that for the\n * req value to allow `fetchData` to\n * work seemlessly in getInitialProps() on server side\n * pages *and* in _app.js.\n * @internal\n */\nexport async function fetchData(path, __NEXTAUTH, logger, req = {}) {\n const url = `${apiBaseUrl(__NEXTAUTH)}/${path}`;\n try {\n const options = {\n headers: {\n \"Content-Type\": \"application/json\",\n ...(req?.headers?.cookie ? { cookie: req.headers.cookie } : {}),\n },\n };\n if (req?.body) {\n options.body = JSON.stringify(req.body);\n options.method = \"POST\";\n }\n const res = await fetch(url, options);\n const data = await res.json();\n if (!res.ok)\n throw data;\n return data;\n }\n catch (error) {\n logger.error(new ClientFetchError(error.message, error));\n return null;\n }\n}\n/** @internal */\nexport function apiBaseUrl(__NEXTAUTH) {\n if (typeof window === \"undefined\") {\n // Return absolute path when called server side\n return `${__NEXTAUTH.baseUrlServer}${__NEXTAUTH.basePathServer}`;\n }\n // Return relative path when called client side\n return __NEXTAUTH.basePath;\n}\n/** @internal */\nexport function useOnline() {\n const [isOnline, setIsOnline] = React.useState(typeof navigator !== \"undefined\" ? navigator.onLine : false);\n const setOnline = () => setIsOnline(true);\n const setOffline = () => setIsOnline(false);\n React.useEffect(() => {\n window.addEventListener(\"online\", setOnline);\n window.addEventListener(\"offline\", setOffline);\n return () => {\n window.removeEventListener(\"online\", setOnline);\n window.removeEventListener(\"offline\", setOffline);\n };\n }, []);\n return isOnline;\n}\n/**\n * Returns the number of seconds elapsed since January 1, 1970 00:00:00 UTC.\n * @internal\n */\nexport function now() {\n return Math.floor(Date.now() / 1000);\n}\n/**\n * Returns an `URL` like object to make requests/redirects from server-side\n * @internal\n */\nexport function parseUrl(url) {\n const defaultUrl = new URL(\"http://localhost:3000/api/auth\");\n if (url && !url.startsWith(\"http\")) {\n url = `https://${url}`;\n }\n const _url = new URL(url || defaultUrl);\n const path = (_url.pathname === \"/\" ? defaultUrl.pathname : _url.pathname)\n // Remove trailing slash\n .replace(/\\/$/, \"\");\n const base = `${_url.origin}${path}`;\n return {\n origin: _url.origin,\n host: _url.host,\n path,\n base,\n toString: () => base,\n };\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;AACA;AACA;AAFA;;;AAGA,UAAU,GACV,MAAM,yBAAyB,iMAAS;AACxC;AAEO,MAAM,2BAA2B,iMAAS;AACjD;AAUO,eAAe,UAAU,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,WAAW,YAAY,CAAC,EAAE,MAAM;IAC/C,IAAI;QACA,MAAM,UAAU;YACZ,SAAS;gBACL,gBAAgB;gBAChB,GAAI,KAAK,SAAS,SAAS;oBAAE,QAAQ,IAAI,OAAO,CAAC,MAAM;gBAAC,IAAI,CAAC,CAAC;YAClE;QACJ;QACA,IAAI,KAAK,MAAM;YACX,QAAQ,IAAI,GAAG,KAAK,SAAS,CAAC,IAAI,IAAI;YACtC,QAAQ,MAAM,GAAG;QACrB;QACA,MAAM,MAAM,MAAM,MAAM,KAAK;QAC7B,MAAM,OAAO,MAAM,IAAI,IAAI;QAC3B,IAAI,CAAC,IAAI,EAAE,EACP,MAAM;QACV,OAAO;IACX,EACA,OAAO,OAAO;QACV,OAAO,KAAK,CAAC,IAAI,iBAAiB,MAAM,OAAO,EAAE;QACjD,OAAO;IACX;AACJ;AAEO,SAAS,WAAW,UAAU;IACjC,wCAAmC;QAC/B,+CAA+C;QAC/C,OAAO,GAAG,WAAW,aAAa,GAAG,WAAW,cAAc,EAAE;IACpE;;;AAGJ;AAEO,SAAS;IACZ,MAAM,CAAC,UAAU,YAAY,GAAG,6PAAc,CAAC,OAAO,cAAc,cAAc,UAAU,MAAM,GAAG;IACrG,MAAM,YAAY,IAAM,YAAY;IACpC,MAAM,aAAa,IAAM,YAAY;IACrC,8PAAe,CAAC;QACZ,OAAO,gBAAgB,CAAC,UAAU;QAClC,OAAO,gBAAgB,CAAC,WAAW;QACnC,OAAO;YACH,OAAO,mBAAmB,CAAC,UAAU;YACrC,OAAO,mBAAmB,CAAC,WAAW;QAC1C;IACJ,GAAG,EAAE;IACL,OAAO;AACX;AAKO,SAAS;IACZ,OAAO,KAAK,KAAK,CAAC,KAAK,GAAG,KAAK;AACnC;AAKO,SAAS,SAAS,GAAG;IACxB,MAAM,aAAa,IAAI,IAAI;IAC3B,IAAI,OAAO,CAAC,IAAI,UAAU,CAAC,SAAS;QAChC,MAAM,CAAC,QAAQ,EAAE,KAAK;IAC1B;IACA,MAAM,OAAO,IAAI,IAAI,OAAO;IAC5B,MAAM,OAAO,CAAC,KAAK,QAAQ,KAAK,MAAM,WAAW,QAAQ,GAAG,KAAK,QAAQ,CACrE,wBAAwB;KACvB,OAAO,CAAC,OAAO;IACpB,MAAM,OAAO,GAAG,KAAK,MAAM,GAAG,MAAM;IACpC,OAAO;QACH,QAAQ,KAAK,MAAM;QACnB,MAAM,KAAK,IAAI;QACf;QACA;QACA,UAAU,IAAM;IACpB;AACJ","ignoreList":[0]}}, - {"offset": {"line": 744, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next-auth/react.js"],"sourcesContent":["/**\n *\n * NextAuth.js is the official integration of Auth.js for Next.js applications. It supports both\n * [Client Components](https://nextjs.org/docs/app/building-your-application/rendering/client-components) and the\n * [Pages Router](https://nextjs.org/docs/pages). It includes methods for signing in, signing out, hooks, and a React\n * Context provider to wrap your application and make session data available anywhere.\n *\n * For use in [Server Actions](https://nextjs.org/docs/app/api-reference/functions/server-actions), check out [these methods](https://authjs.dev/guides/upgrade-to-v5#methods)\n *\n * @module react\n */\n\"use client\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport { apiBaseUrl, ClientSessionError, fetchData, now, parseUrl, useOnline, } from \"./lib/client.js\";\n// This behaviour mirrors the default behaviour for getting the site name that\n// happens server side in server/index.js\n// 1. An empty value is legitimate when the code is being invoked client side as\n// relative URLs are valid in that context and so defaults to empty.\n// 2. When invoked server side the value is picked up from an environment\n// variable and defaults to 'http://localhost:3000'.\nexport const __NEXTAUTH = {\n baseUrl: parseUrl(process.env.NEXTAUTH_URL ?? process.env.VERCEL_URL).origin,\n basePath: parseUrl(process.env.NEXTAUTH_URL).path,\n baseUrlServer: parseUrl(process.env.NEXTAUTH_URL_INTERNAL ??\n process.env.NEXTAUTH_URL ??\n process.env.VERCEL_URL).origin,\n basePathServer: parseUrl(process.env.NEXTAUTH_URL_INTERNAL ?? process.env.NEXTAUTH_URL).path,\n _lastSync: 0,\n _session: undefined,\n _getSession: () => { },\n};\n// https://github.com/nextauthjs/next-auth/pull/10762\nlet broadcastChannel = null;\nfunction getNewBroadcastChannel() {\n if (typeof BroadcastChannel === \"undefined\") {\n return {\n postMessage: () => { },\n addEventListener: () => { },\n removeEventListener: () => { },\n name: \"next-auth\",\n onmessage: null,\n onmessageerror: null,\n close: () => { },\n dispatchEvent: () => false,\n };\n }\n return new BroadcastChannel(\"next-auth\");\n}\nfunction broadcast() {\n if (broadcastChannel === null) {\n broadcastChannel = getNewBroadcastChannel();\n }\n return broadcastChannel;\n}\n// TODO:\nconst logger = {\n debug: console.debug,\n error: console.error,\n warn: console.warn,\n};\nexport const SessionContext = React.createContext?.(undefined);\n/**\n * React Hook that gives you access to the logged in user's session data and lets you modify it.\n *\n * :::info\n * `useSession` is for client-side use only and when using [Next.js App Router (`app/`)](https://nextjs.org/blog/next-13-4#nextjs-app-router) you should prefer the `auth()` export.\n * :::\n */\nexport function useSession(options) {\n if (!SessionContext) {\n throw new Error(\"React Context is unavailable in Server Components\");\n }\n // @ts-expect-error Satisfy TS if branch on line below\n const value = React.useContext(SessionContext);\n if (!value && process.env.NODE_ENV !== \"production\") {\n throw new Error(\"[next-auth]: `useSession` must be wrapped in a \");\n }\n const { required, onUnauthenticated } = options ?? {};\n const requiredAndNotLoading = required && value.status === \"unauthenticated\";\n React.useEffect(() => {\n if (requiredAndNotLoading) {\n const url = `${__NEXTAUTH.basePath}/signin?${new URLSearchParams({\n error: \"SessionRequired\",\n callbackUrl: window.location.href,\n })}`;\n if (onUnauthenticated)\n onUnauthenticated();\n else\n window.location.href = url;\n }\n }, [requiredAndNotLoading, onUnauthenticated]);\n if (requiredAndNotLoading) {\n return {\n data: value.data,\n update: value.update,\n status: \"loading\",\n };\n }\n return value;\n}\nexport async function getSession(params) {\n const session = await fetchData(\"session\", __NEXTAUTH, logger, params);\n if (params?.broadcast ?? true) {\n // https://github.com/nextauthjs/next-auth/pull/11470\n getNewBroadcastChannel().postMessage({\n event: \"session\",\n data: { trigger: \"getSession\" },\n });\n }\n return session;\n}\n/**\n * Returns the current Cross-Site Request Forgery Token (CSRF Token)\n * required to make requests that changes state. (e.g. signing in or out, or updating the session).\n *\n * [CSRF Prevention: Double Submit Cookie](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#double-submit-cookie)\n */\nexport async function getCsrfToken() {\n const response = await fetchData(\"csrf\", __NEXTAUTH, logger);\n return response?.csrfToken ?? \"\";\n}\nexport async function getProviders() {\n return fetchData(\"providers\", __NEXTAUTH, logger);\n}\nexport async function signIn(provider, options, authorizationParams) {\n const { callbackUrl, ...rest } = options ?? {};\n const { redirect = true, redirectTo = callbackUrl ?? window.location.href, ...signInParams } = rest;\n const baseUrl = apiBaseUrl(__NEXTAUTH);\n const providers = await getProviders();\n if (!providers) {\n const url = `${baseUrl}/error`;\n window.location.href = url;\n return; // TODO: Return error if `redirect: false`\n }\n if (!provider || !providers[provider]) {\n const url = `${baseUrl}/signin?${new URLSearchParams({\n callbackUrl: redirectTo,\n })}`;\n window.location.href = url;\n return; // TODO: Return error if `redirect: false`\n }\n const providerType = providers[provider].type;\n if (providerType === \"webauthn\") {\n // TODO: Add docs link with explanation\n throw new TypeError([\n `Provider id \"${provider}\" refers to a WebAuthn provider.`,\n 'Please use `import { signIn } from \"next-auth/webauthn\"` instead.',\n ].join(\"\\n\"));\n }\n const signInUrl = `${baseUrl}/${providerType === \"credentials\" ? \"callback\" : \"signin\"}/${provider}`;\n const csrfToken = await getCsrfToken();\n const res = await fetch(`${signInUrl}?${new URLSearchParams(authorizationParams)}`, {\n method: \"post\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"X-Auth-Return-Redirect\": \"1\",\n },\n body: new URLSearchParams({\n ...signInParams,\n csrfToken,\n callbackUrl: redirectTo,\n }),\n });\n const data = await res.json();\n if (redirect) {\n const url = data.url ?? redirectTo;\n window.location.href = url;\n // If url contains a hash, the browser does not reload the page. We reload manually\n if (url.includes(\"#\"))\n window.location.reload();\n return;\n }\n const error = new URL(data.url).searchParams.get(\"error\") ?? undefined;\n const code = new URL(data.url).searchParams.get(\"code\") ?? undefined;\n if (res.ok) {\n await __NEXTAUTH._getSession({ event: \"storage\" });\n }\n return {\n error,\n code,\n status: res.status,\n ok: res.ok,\n url: error ? null : data.url,\n };\n}\nexport async function signOut(options) {\n const { redirect = true, redirectTo = options?.callbackUrl ?? window.location.href, } = options ?? {};\n const baseUrl = apiBaseUrl(__NEXTAUTH);\n const csrfToken = await getCsrfToken();\n const res = await fetch(`${baseUrl}/signout`, {\n method: \"post\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"X-Auth-Return-Redirect\": \"1\",\n },\n body: new URLSearchParams({ csrfToken, callbackUrl: redirectTo }),\n });\n const data = await res.json();\n broadcast().postMessage({ event: \"session\", data: { trigger: \"signout\" } });\n if (redirect) {\n const url = data.url ?? redirectTo;\n window.location.href = url;\n // If url contains a hash, the browser does not reload the page. We reload manually\n if (url.includes(\"#\"))\n window.location.reload();\n return;\n }\n await __NEXTAUTH._getSession({ event: \"storage\" });\n return data;\n}\n/**\n * [React Context](https://react.dev/learn/passing-data-deeply-with-context) provider to wrap the app (`pages/`) to make session data available anywhere.\n *\n * When used, the session state is automatically synchronized across all open tabs/windows and they are all updated whenever they gain or lose focus\n * or the state changes (e.g. a user signs in or out) when {@link SessionProviderProps.refetchOnWindowFocus} is `true`.\n *\n * :::info\n * `SessionProvider` is for client-side use only and when using [Next.js App Router (`app/`)](https://nextjs.org/blog/next-13-4#nextjs-app-router) you should prefer the `auth()` export.\n * :::\n */\nexport function SessionProvider(props) {\n if (!SessionContext) {\n throw new Error(\"React Context is unavailable in Server Components\");\n }\n const { children, basePath, refetchInterval, refetchWhenOffline } = props;\n if (basePath)\n __NEXTAUTH.basePath = basePath;\n /**\n * If session was `null`, there was an attempt to fetch it,\n * but it failed, but we still treat it as a valid initial value.\n */\n const hasInitialSession = props.session !== undefined;\n /** If session was passed, initialize as already synced */\n __NEXTAUTH._lastSync = hasInitialSession ? now() : 0;\n const [session, setSession] = React.useState(() => {\n if (hasInitialSession)\n __NEXTAUTH._session = props.session;\n return props.session;\n });\n /** If session was passed, initialize as not loading */\n const [loading, setLoading] = React.useState(!hasInitialSession);\n React.useEffect(() => {\n __NEXTAUTH._getSession = async ({ event } = {}) => {\n try {\n const storageEvent = event === \"storage\";\n // We should always update if we don't have a client session yet\n // or if there are events from other tabs/windows\n if (storageEvent || __NEXTAUTH._session === undefined) {\n __NEXTAUTH._lastSync = now();\n __NEXTAUTH._session = await getSession({\n broadcast: !storageEvent,\n });\n setSession(__NEXTAUTH._session);\n return;\n }\n if (\n // If there is no time defined for when a session should be considered\n // stale, then it's okay to use the value we have until an event is\n // triggered which updates it\n !event ||\n // If the client doesn't have a session then we don't need to call\n // the server to check if it does (if they have signed in via another\n // tab or window that will come through as a \"stroage\" event\n // event anyway)\n __NEXTAUTH._session === null ||\n // Bail out early if the client session is not stale yet\n now() < __NEXTAUTH._lastSync) {\n return;\n }\n // An event or session staleness occurred, update the client session.\n __NEXTAUTH._lastSync = now();\n __NEXTAUTH._session = await getSession();\n setSession(__NEXTAUTH._session);\n }\n catch (error) {\n logger.error(new ClientSessionError(error.message, error));\n }\n finally {\n setLoading(false);\n }\n };\n __NEXTAUTH._getSession();\n return () => {\n __NEXTAUTH._lastSync = 0;\n __NEXTAUTH._session = undefined;\n __NEXTAUTH._getSession = () => { };\n };\n }, []);\n React.useEffect(() => {\n const handle = () => __NEXTAUTH._getSession({ event: \"storage\" });\n // Listen for storage events and update session if event fired from\n // another window (but suppress firing another event to avoid a loop)\n // Fetch new session data but tell it to not to fire another event to\n // avoid an infinite loop.\n // Note: We could pass session data through and do something like\n // `setData(message.data)` but that can cause problems depending\n // on how the session object is being used in the client; it is\n // more robust to have each window/tab fetch it's own copy of the\n // session object rather than share it across instances.\n broadcast().addEventListener(\"message\", handle);\n return () => broadcast().removeEventListener(\"message\", handle);\n }, []);\n React.useEffect(() => {\n const { refetchOnWindowFocus = true } = props;\n // Listen for when the page is visible, if the user switches tabs\n // and makes our tab visible again, re-fetch the session, but only if\n // this feature is not disabled.\n const visibilityHandler = () => {\n if (refetchOnWindowFocus && document.visibilityState === \"visible\")\n __NEXTAUTH._getSession({ event: \"visibilitychange\" });\n };\n document.addEventListener(\"visibilitychange\", visibilityHandler, false);\n return () => document.removeEventListener(\"visibilitychange\", visibilityHandler, false);\n }, [props.refetchOnWindowFocus]);\n const isOnline = useOnline();\n // TODO: Flip this behavior in next major version\n const shouldRefetch = refetchWhenOffline !== false || isOnline;\n React.useEffect(() => {\n if (refetchInterval && shouldRefetch) {\n const refetchIntervalTimer = setInterval(() => {\n if (__NEXTAUTH._session) {\n __NEXTAUTH._getSession({ event: \"poll\" });\n }\n }, refetchInterval * 1000);\n return () => clearInterval(refetchIntervalTimer);\n }\n }, [refetchInterval, shouldRefetch]);\n const value = React.useMemo(() => ({\n data: session,\n status: loading\n ? \"loading\"\n : session\n ? \"authenticated\"\n : \"unauthenticated\",\n async update(data) {\n if (loading)\n return;\n setLoading(true);\n const newSession = await fetchData(\"session\", __NEXTAUTH, logger, typeof data === \"undefined\"\n ? undefined\n : { body: { csrfToken: await getCsrfToken(), data } });\n setLoading(false);\n if (newSession) {\n setSession(newSession);\n broadcast().postMessage({\n event: \"session\",\n data: { trigger: \"getSession\" },\n });\n }\n return newSession;\n },\n }), [session, loading]);\n return (\n // @ts-expect-error\n _jsx(SessionContext.Provider, { value: value, children: children }));\n}\n"],"names":[],"mappings":"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","ignoreList":[0]}}] + {"offset": {"line": 178, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/hooks/useAuth.ts"],"sourcesContent":["'use client';\r\n\r\nimport { useState, useEffect, useCallback } from 'react';\r\nimport { signIn, signOut, useSession } from 'next-auth/react';\r\nimport { UserProfile } from '@/lib/types';\r\nimport api from '@/lib/api';\r\n\r\nexport const useAuth = () => {\r\n const { data: session, status } = useSession();\r\n const [user, setUser] = useState(null);\r\n const loading = status === 'loading';\r\n\r\n // Fetch real profile from DB when session is available\r\n useEffect(() => {\r\n if (session?.user?.id) {\r\n fetch('/api/user/profile', { cache: 'no-store' })\r\n .then(res => res.json())\r\n .then(dbUser => {\r\n const planId = dbUser.plan || 'free';\r\n const planDetails = dbUser.planDetails || {\r\n id: 'free',\r\n displayName: 'Gratuit',\r\n maxAiActions: 100,\r\n maxProjects: 3\r\n };\r\n\r\n setUser({\r\n id: dbUser.id,\r\n email: dbUser.email,\r\n name: dbUser.name || 'User',\r\n avatar: dbUser.avatar,\r\n bio: dbUser.bio,\r\n subscription: {\r\n plan: planId,\r\n planDetails: planDetails,\r\n startDate: new Date(dbUser.createdAt).getTime(),\r\n status: 'active'\r\n },\r\n usage: {\r\n aiActionsCurrent: dbUser.aiActionsUsed || 0,\r\n aiActionsLimit: planDetails.maxAiActions,\r\n projectsLimit: planDetails.maxProjects,\r\n },\r\n preferences: { theme: 'light', dailyWordGoal: dbUser.dailyWordGoal || 500, language: 'fr' },\r\n stats: {\r\n totalWordsWritten: dbUser.totalWords || 0,\r\n writingStreak: dbUser.writingStreak || 0,\r\n lastWriteDate: dbUser.lastWriteDate ? new Date(dbUser.lastWriteDate).getTime() : 0,\r\n },\r\n });\r\n })\r\n .catch(err => {\r\n console.error('Failed to fetch user profile:', err);\r\n // Fallback to session data\r\n setUser({\r\n id: session.user.id || '',\r\n email: session.user.email || '',\r\n name: session.user.name || 'User',\r\n subscription: { plan: 'free', startDate: Date.now(), status: 'active' },\r\n usage: { aiActionsCurrent: 0, aiActionsLimit: 100, projectsLimit: 3 },\r\n preferences: { theme: 'light', dailyWordGoal: 500, language: 'fr' },\r\n stats: { totalWordsWritten: 0, writingStreak: 0, lastWriteDate: 0 },\r\n });\r\n });\r\n } else if (status === 'unauthenticated') {\r\n setUser(null);\r\n }\r\n }, [session, status]);\r\n\r\n const login = useCallback(async (email: string, password: string) => {\r\n const result = await signIn('credentials', {\r\n email,\r\n password,\r\n redirect: false,\r\n });\r\n\r\n if (result?.error) {\r\n throw new Error(result.error === 'CredentialsSignin'\r\n ? 'Email ou mot de passe incorrect'\r\n : result.error\r\n );\r\n }\r\n }, []);\r\n\r\n const signup = useCallback(async (email: string, password: string, name: string) => {\r\n await api.auth.register(email, password, name);\r\n const result = await signIn('credentials', {\r\n email,\r\n password,\r\n redirect: false,\r\n });\r\n if (result?.error) {\r\n throw new Error('Compte créé mais erreur de connexion automatique');\r\n }\r\n }, []);\r\n\r\n const logout = useCallback(async () => {\r\n await signOut({ redirect: false });\r\n setUser(null);\r\n }, []);\r\n\r\n const incrementUsage = useCallback((serverCount?: number) => {\r\n if (user) {\r\n setUser({\r\n ...user,\r\n usage: {\r\n ...user.usage,\r\n aiActionsCurrent: serverCount !== undefined ? serverCount : user.usage.aiActionsCurrent + 1,\r\n },\r\n });\r\n }\r\n }, [user]);\r\n\r\n return { user, login, signup, logout, incrementUsage, loading };\r\n};\r\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 323, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/providers/AuthProvider.tsx"],"sourcesContent":["'use client';\r\n\r\nimport React, { createContext, useContext } from 'react';\r\nimport { SessionProvider } from 'next-auth/react';\r\nimport { useAuth } from '@/hooks/useAuth';\r\n\r\nconst AuthContext = createContext(null);\r\n\r\nfunction AuthInner({ children }: { children: React.ReactNode }) {\r\n const auth = useAuth();\r\n return {children};\r\n}\r\n\r\nexport const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport function useAuthContext() {\r\n return useContext(AuthContext);\r\n}\r\n"],"names":[],"mappings":";;;;;;;AAEA;AACA;AACA;AAJA;;;;;AAMA,MAAM,4BAAc,IAAA,kQAAa,EAAM;AAEvC,SAAS,UAAU,EAAE,QAAQ,EAAiC;IAC1D,MAAM,OAAO,IAAA,8KAAO;IACpB,qBAAO,0RAAC,YAAY,QAAQ;QAAC,OAAO;kBAAO;;;;;;AAC/C;AAEO,MAAM,eAAwD,CAAC,EAAE,QAAQ,EAAE;IAC9E,qBACI,0RAAC,oMAAe;kBACZ,cAAA,0RAAC;sBAAW;;;;;;;;;;;AAGxB;AAEO,SAAS;IACZ,OAAO,IAAA,+PAAU,EAAC;AACtB"}}, + {"offset": {"line": 372, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/route-modules/app-page/module.compiled.js"],"sourcesContent":["if (process.env.NEXT_RUNTIME === 'edge') {\n module.exports = require('next/dist/server/route-modules/app-page/module.js')\n} else {\n if (process.env.__NEXT_EXPERIMENTAL_REACT) {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')\n }\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')\n }\n }\n }\n}\n"],"names":["process","env","NEXT_RUNTIME","module","exports","require","__NEXT_EXPERIMENTAL_REACT","NODE_ENV","TURBOPACK"],"mappings":"AAAA,IAAIA,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;KAElC;IACL,IAAIF,QAAQC,GAAG,CAACK,yBAAyB,EAAE;;SAcpC;QACL,IAAIN,QAAQC,GAAG,CAACM,QAAQ,KAAK,WAAe;YAC1C,IAAIP,QAAQC,GAAG,CAACO,SAAS,eAAE;gBACzBL,OAAOC,OAAO,GAAGC,QAAQ;YAC3B,OAAO;;QAGT,OAAO;;IAOT;AACF","ignoreList":[0]}}, + {"offset": {"line": 391, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.ts"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactJsxDevRuntime\n"],"names":["module","exports","require","vendored","ReactJsxDevRuntime"],"mappings":"AAAAA,OAAOC,OAAO,GACZC,QAAQ,0JACRC,QAAQ,CAAC,YAAY,CAAEC,kBAAkB","ignoreList":[0]}}, + {"offset": {"line": 396, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react.ts"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.React\n"],"names":["module","exports","require","vendored","React"],"mappings":"AAAAA,OAAOC,OAAO,GACZC,QAAQ,0JACRC,QAAQ,CAAC,YAAY,CAAEC,KAAK","ignoreList":[0]}}, + {"offset": {"line": 401, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/src/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.ts"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-ssr']!.ReactJsxRuntime\n"],"names":["module","exports","require","vendored","ReactJsxRuntime"],"mappings":"AAAAA,OAAOC,OAAO,GACZC,QAAQ,0JACRC,QAAQ,CAAC,YAAY,CAAEC,eAAe","ignoreList":[0]}}, + {"offset": {"line": 406, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/%40auth/core/errors.js"],"sourcesContent":["/**\n * Base error class for all Auth.js errors.\n * It's optimized to be printed in the server logs in a nicely formatted way\n * via the [`logger.error`](https://authjs.dev/reference/core#logger) option.\n * @noInheritDoc\n */\nexport class AuthError extends Error {\n /** @internal */\n constructor(message, errorOptions) {\n if (message instanceof Error) {\n super(undefined, {\n cause: { err: message, ...message.cause, ...errorOptions },\n });\n }\n else if (typeof message === \"string\") {\n if (errorOptions instanceof Error) {\n errorOptions = { err: errorOptions, ...errorOptions.cause };\n }\n super(message, errorOptions);\n }\n else {\n super(undefined, message);\n }\n this.name = this.constructor.name;\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/3841\n this.type = this.constructor.type ?? \"AuthError\";\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/3841\n this.kind = this.constructor.kind ?? \"error\";\n Error.captureStackTrace?.(this, this.constructor);\n const url = `https://errors.authjs.dev#${this.type.toLowerCase()}`;\n this.message += `${this.message ? \". \" : \"\"}Read more at ${url}`;\n }\n}\n/**\n * Thrown when the user's sign-in attempt failed.\n * @noInheritDoc\n */\nexport class SignInError extends AuthError {\n}\n/** @internal */\nSignInError.kind = \"signIn\";\n/**\n * One of the database [`Adapter` methods](https://authjs.dev/reference/core/adapters#methods)\n * failed during execution.\n *\n * :::tip\n * If `debug: true` is set, you can check out `[auth][debug]` in the logs to learn more about the failed adapter method execution.\n * @example\n * ```sh\n * [auth][debug]: adapter_getUserByEmail\n * { \"args\": [undefined] }\n * ```\n * :::\n * @noInheritDoc\n */\nexport class AdapterError extends AuthError {\n}\nAdapterError.type = \"AdapterError\";\n/**\n * Thrown when the execution of the [`signIn` callback](https://authjs.dev/reference/core/types#signin) fails\n * or if it returns `false`.\n * @noInheritDoc\n */\nexport class AccessDenied extends AuthError {\n}\nAccessDenied.type = \"AccessDenied\";\n/**\n * This error occurs when the user cannot finish login.\n * Depending on the provider type, this could have happened for multiple reasons.\n *\n * :::tip\n * Check out `[auth][details]` in the logs to know which provider failed.\n * @example\n * ```sh\n * [auth][details]: { \"provider\": \"github\" }\n * ```\n * :::\n *\n * For an [OAuth provider](https://authjs.dev/getting-started/authentication/oauth), possible causes are:\n * - The user denied access to the application\n * - There was an error parsing the OAuth Profile:\n * Check out the provider's `profile` or `userinfo.request` method to make sure\n * it correctly fetches the user's profile.\n * - The `signIn` or `jwt` callback methods threw an uncaught error:\n * Check the callback method implementations.\n *\n * For an [Email provider](https://authjs.dev/getting-started/authentication/email), possible causes are:\n * - The provided email/token combination was invalid/missing:\n * Check if the provider's `sendVerificationRequest` method correctly sends the email.\n * - The provided email/token combination has expired:\n * Ask the user to log in again.\n * - There was an error with the database:\n * Check the database logs.\n *\n * For a [Credentials provider](https://authjs.dev/getting-started/authentication/credentials), possible causes are:\n * - The `authorize` method threw an uncaught error:\n * Check the provider's `authorize` method.\n * - The `signIn` or `jwt` callback methods threw an uncaught error:\n * Check the callback method implementations.\n *\n * :::tip\n * Check out `[auth][cause]` in the error message for more details.\n * It will show the original stack trace.\n * :::\n * @noInheritDoc\n */\nexport class CallbackRouteError extends AuthError {\n}\nCallbackRouteError.type = \"CallbackRouteError\";\n/**\n * Thrown when Auth.js is misconfigured and accidentally tried to require authentication on a custom error page.\n * To prevent an infinite loop, Auth.js will instead render its default error page.\n *\n * To fix this, make sure that the `error` page does not require authentication.\n *\n * Learn more at [Guide: Error pages](https://authjs.dev/guides/pages/error)\n * @noInheritDoc\n */\nexport class ErrorPageLoop extends AuthError {\n}\nErrorPageLoop.type = \"ErrorPageLoop\";\n/**\n * One of the [`events` methods](https://authjs.dev/reference/core/types#eventcallbacks)\n * failed during execution.\n *\n * Make sure that the `events` methods are implemented correctly and uncaught errors are handled.\n *\n * Learn more at [`events`](https://authjs.dev/reference/core/types#eventcallbacks)\n * @noInheritDoc\n */\nexport class EventError extends AuthError {\n}\nEventError.type = \"EventError\";\n/**\n * Thrown when Auth.js is unable to verify a `callbackUrl` value.\n * The browser either disabled cookies or the `callbackUrl` is not a valid URL.\n *\n * Somebody might have tried to manipulate the callback URL that Auth.js uses to redirect the user back to the configured `callbackUrl`/page.\n * This could be a malicious hacker trying to redirect the user to a phishing site.\n * To prevent this, Auth.js checks if the callback URL is valid and throws this error if it is not.\n *\n * There is no action required, but it might be an indicator that somebody is trying to attack your application.\n * @noInheritDoc\n */\nexport class InvalidCallbackUrl extends AuthError {\n}\nInvalidCallbackUrl.type = \"InvalidCallbackUrl\";\n/**\n * Can be thrown from the `authorize` callback of the Credentials provider.\n * When an error occurs during the `authorize` callback, two things can happen:\n * 1. The user is redirected to the signin page, with `error=CredentialsSignin&code=credentials` in the URL. `code` is configurable.\n * 2. If you throw this error in a framework that handles form actions server-side, this error is thrown, instead of redirecting the user, so you'll need to handle.\n * @noInheritDoc\n */\nexport class CredentialsSignin extends SignInError {\n constructor() {\n super(...arguments);\n /**\n * The error code that is set in the `code` query parameter of the redirect URL.\n *\n *\n * ⚠ NOTE: This property is going to be included in the URL, so make sure it does not hint at sensitive errors.\n *\n * The full error is always logged on the server, if you need to debug.\n *\n * Generally, we don't recommend hinting specifically if the user had either a wrong username or password specifically,\n * try rather something like \"Invalid credentials\".\n */\n this.code = \"credentials\";\n }\n}\nCredentialsSignin.type = \"CredentialsSignin\";\n/**\n * One of the configured OAuth or OIDC providers is missing the `authorization`, `token` or `userinfo`, or `issuer` configuration.\n * To perform OAuth or OIDC sign in, at least one of these endpoints is required.\n *\n * Learn more at [`OAuth2Config`](https://authjs.dev/reference/core/providers#oauth2configprofile) or [Guide: OAuth Provider](https://authjs.dev/guides/configuring-oauth-providers)\n * @noInheritDoc\n */\nexport class InvalidEndpoints extends AuthError {\n}\nInvalidEndpoints.type = \"InvalidEndpoints\";\n/**\n * Thrown when a PKCE, state or nonce OAuth check could not be performed.\n * This could happen if the OAuth provider is configured incorrectly or if the browser is blocking cookies.\n *\n * Learn more at [`checks`](https://authjs.dev/reference/core/providers#checks)\n * @noInheritDoc\n */\nexport class InvalidCheck extends AuthError {\n}\nInvalidCheck.type = \"InvalidCheck\";\n/**\n * Logged on the server when Auth.js could not decode or encode a JWT-based (`strategy: \"jwt\"`) session.\n *\n * Possible causes are either a misconfigured `secret` or a malformed JWT or `encode/decode` methods.\n *\n * :::note\n * When this error is logged, the session cookie is destroyed.\n * :::\n *\n * Learn more at [`secret`](https://authjs.dev/reference/core#secret), [`jwt.encode`](https://authjs.dev/reference/core/jwt#encode-1) or [`jwt.decode`](https://authjs.dev/reference/core/jwt#decode-2) for more information.\n * @noInheritDoc\n */\nexport class JWTSessionError extends AuthError {\n}\nJWTSessionError.type = \"JWTSessionError\";\n/**\n * Thrown if Auth.js is misconfigured. This could happen if you configured an Email provider but did not set up a database adapter,\n * or tried using a `strategy: \"database\"` session without a database adapter.\n * In both cases, make sure you either remove the configuration or add the missing adapter.\n *\n * Learn more at [Database Adapters](https://authjs.dev/getting-started/database), [Email provider](https://authjs.dev/getting-started/authentication/email) or [Concept: Database session strategy](https://authjs.dev/concepts/session-strategies#database-session)\n * @noInheritDoc\n */\nexport class MissingAdapter extends AuthError {\n}\nMissingAdapter.type = \"MissingAdapter\";\n/**\n * Thrown similarily to [`MissingAdapter`](https://authjs.dev/reference/core/errors#missingadapter), but only some required methods were missing.\n *\n * Make sure you either remove the configuration or add the missing methods to the adapter.\n *\n * Learn more at [Database Adapters](https://authjs.dev/getting-started/database)\n * @noInheritDoc\n */\nexport class MissingAdapterMethods extends AuthError {\n}\nMissingAdapterMethods.type = \"MissingAdapterMethods\";\n/**\n * Thrown when a Credentials provider is missing the `authorize` configuration.\n * To perform credentials sign in, the `authorize` method is required.\n *\n * Learn more at [Credentials provider](https://authjs.dev/getting-started/authentication/credentials)\n * @noInheritDoc\n */\nexport class MissingAuthorize extends AuthError {\n}\nMissingAuthorize.type = \"MissingAuthorize\";\n/**\n * Auth.js requires a secret or multiple secrets to be set, but none was not found. This is used to encrypt cookies, JWTs and other sensitive data.\n *\n * :::note\n * If you are using a framework like Next.js, we try to automatically infer the secret from the `AUTH_SECRET`, `AUTH_SECRET_1`, etc. environment variables.\n * Alternatively, you can also explicitly set the [`AuthConfig.secret`](https://authjs.dev/reference/core#secret) option.\n * :::\n *\n *\n * :::tip\n * To generate a random string, you can use the Auth.js CLI: `npx auth secret`\n * :::\n * @noInheritDoc\n */\nexport class MissingSecret extends AuthError {\n}\nMissingSecret.type = \"MissingSecret\";\n/**\n * Thrown when an Email address is already associated with an account\n * but the user is trying an OAuth account that is not linked to it.\n *\n * For security reasons, Auth.js does not automatically link OAuth accounts to existing accounts if the user is not signed in.\n *\n * :::tip\n * If you trust the OAuth provider to have verified the user's email address,\n * you can enable automatic account linking by setting [`allowDangerousEmailAccountLinking: true`](https://authjs.dev/reference/core/providers#allowdangerousemailaccountlinking)\n * in the provider configuration.\n * :::\n * @noInheritDoc\n */\nexport class OAuthAccountNotLinked extends SignInError {\n}\nOAuthAccountNotLinked.type = \"OAuthAccountNotLinked\";\n/**\n * Thrown when an OAuth provider returns an error during the sign in process.\n * This could happen for example if the user denied access to the application or there was a configuration error.\n *\n * For a full list of possible reasons, check out the specification [Authorization Code Grant: Error Response](https://www.rfc-editor.org/rfc/rfc6749#section-4.1.2.1)\n * @noInheritDoc\n */\nexport class OAuthCallbackError extends SignInError {\n}\nOAuthCallbackError.type = \"OAuthCallbackError\";\n/**\n * This error occurs during an OAuth sign in attempt when the provider's\n * response could not be parsed. This could for example happen if the provider's API\n * changed, or the [`OAuth2Config.profile`](https://authjs.dev/reference/core/providers#oauth2configprofile) method is not implemented correctly.\n * @noInheritDoc\n */\nexport class OAuthProfileParseError extends AuthError {\n}\nOAuthProfileParseError.type = \"OAuthProfileParseError\";\n/**\n * Logged on the server when Auth.js could not retrieve a session from the database (`strategy: \"database\"`).\n *\n * The database adapter might be misconfigured or the database is not reachable.\n *\n * Learn more at [Concept: Database session strategy](https://authjs.dev/concepts/session-strategies#database)\n * @noInheritDoc\n */\nexport class SessionTokenError extends AuthError {\n}\nSessionTokenError.type = \"SessionTokenError\";\n/**\n * Happens when login by [OAuth](https://authjs.dev/getting-started/authentication/oauth) could not be started.\n *\n * Possible causes are:\n * - The Authorization Server is not compliant with the [OAuth 2.0](https://www.ietf.org/rfc/rfc6749.html) or the [OIDC](https://openid.net/specs/openid-connect-core-1_0.html) specification.\n * Check the details in the error message.\n *\n * :::tip\n * Check out `[auth][details]` in the logs to know which provider failed.\n * @example\n * ```sh\n * [auth][details]: { \"provider\": \"github\" }\n * ```\n * :::\n * @noInheritDoc\n */\nexport class OAuthSignInError extends SignInError {\n}\nOAuthSignInError.type = \"OAuthSignInError\";\n/**\n * Happens when the login by an [Email provider](https://authjs.dev/getting-started/authentication/email) could not be started.\n *\n * Possible causes are:\n * - The email sent from the client is invalid, could not be normalized by [`EmailConfig.normalizeIdentifier`](https://authjs.dev/reference/core/providers/email#normalizeidentifier)\n * - The provided email/token combination has expired:\n * Ask the user to log in again.\n * - There was an error with the database:\n * Check the database logs.\n * @noInheritDoc\n */\nexport class EmailSignInError extends SignInError {\n}\nEmailSignInError.type = \"EmailSignInError\";\n/**\n * Represents an error that occurs during the sign-out process. This error\n * is logged when there are issues in terminating a user's session, either\n * by failing to delete the session from the database (in database session\n * strategies) or encountering issues during other parts of the sign-out\n * process, such as emitting sign-out events or clearing session cookies.\n *\n * The session cookie(s) are emptied even if this error is logged.\n * @noInheritDoc\n */\nexport class SignOutError extends AuthError {\n}\nSignOutError.type = \"SignOutError\";\n/**\n * Auth.js was requested to handle an operation that it does not support.\n *\n * See [`AuthAction`](https://authjs.dev/reference/core/types#authaction) for the supported actions.\n * @noInheritDoc\n */\nexport class UnknownAction extends AuthError {\n}\nUnknownAction.type = \"UnknownAction\";\n/**\n * Thrown when a Credentials provider is present but the JWT strategy (`strategy: \"jwt\"`) is not enabled.\n *\n * Learn more at [`strategy`](https://authjs.dev/reference/core#strategy) or [Credentials provider](https://authjs.dev/getting-started/authentication/credentials)\n * @noInheritDoc\n */\nexport class UnsupportedStrategy extends AuthError {\n}\nUnsupportedStrategy.type = \"UnsupportedStrategy\";\n/**\n * Thrown when an endpoint was incorrectly called without a provider, or with an unsupported provider.\n * @noInheritDoc\n */\nexport class InvalidProvider extends AuthError {\n}\nInvalidProvider.type = \"InvalidProvider\";\n/**\n * Thrown when the `trustHost` option was not set to `true`.\n *\n * Auth.js requires the `trustHost` option to be set to `true` since it's relying on the request headers' `host` value.\n *\n * :::note\n * Official Auth.js libraries might attempt to automatically set the `trustHost` option to `true` if the request is coming from a trusted host on a trusted platform.\n * :::\n *\n * Learn more at [`trustHost`](https://authjs.dev/reference/core#trusthost) or [Guide: Deployment](https://authjs.dev/getting-started/deployment)\n * @noInheritDoc\n */\nexport class UntrustedHost extends AuthError {\n}\nUntrustedHost.type = \"UntrustedHost\";\n/**\n * The user's email/token combination was invalid.\n * This could be because the email/token combination was not found in the database,\n * or because the token has expired. Ask the user to log in again.\n * @noInheritDoc\n */\nexport class Verification extends AuthError {\n}\nVerification.type = \"Verification\";\n/**\n * Error for missing CSRF tokens in client-side actions (`signIn`, `signOut`, `useSession#update`).\n * Thrown when actions lack the double submit cookie, essential for CSRF protection.\n *\n * CSRF ([Cross-Site Request Forgery](https://owasp.org/www-community/attacks/csrf))\n * is an attack leveraging authenticated user credentials for unauthorized actions.\n *\n * Double submit cookie pattern, a CSRF defense, requires matching values in a cookie\n * and request parameter. More on this at [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Glossary/CSRF).\n * @noInheritDoc\n */\nexport class MissingCSRF extends SignInError {\n}\nMissingCSRF.type = \"MissingCSRF\";\nconst clientErrors = new Set([\n \"CredentialsSignin\",\n \"OAuthAccountNotLinked\",\n \"OAuthCallbackError\",\n \"AccessDenied\",\n \"Verification\",\n \"MissingCSRF\",\n \"AccountNotLinked\",\n \"WebAuthnVerificationError\",\n]);\n/**\n * Used to only allow sending a certain subset of errors to the client.\n * Errors are always logged on the server, but to prevent leaking sensitive information,\n * only a subset of errors are sent to the client as-is.\n * @internal\n */\nexport function isClientError(error) {\n if (error instanceof AuthError)\n return clientErrors.has(error.type);\n return false;\n}\n/**\n * Thrown when multiple providers have `enableConditionalUI` set to `true`.\n * Only one provider can have this option enabled at a time.\n * @noInheritDoc\n */\nexport class DuplicateConditionalUI extends AuthError {\n}\nDuplicateConditionalUI.type = \"DuplicateConditionalUI\";\n/**\n * Thrown when a WebAuthn provider has `enableConditionalUI` set to `true` but no formField has `webauthn` in its autocomplete param.\n *\n * The `webauthn` autocomplete param is required for conditional UI to work.\n * @noInheritDoc\n */\nexport class MissingWebAuthnAutocomplete extends AuthError {\n}\nMissingWebAuthnAutocomplete.type = \"MissingWebAuthnAutocomplete\";\n/**\n * Thrown when a WebAuthn provider fails to verify a client response.\n * @noInheritDoc\n */\nexport class WebAuthnVerificationError extends AuthError {\n}\nWebAuthnVerificationError.type = \"WebAuthnVerificationError\";\n/**\n * Thrown when an Email address is already associated with an account\n * but the user is trying an account that is not linked to it.\n *\n * For security reasons, Auth.js does not automatically link accounts to existing accounts if the user is not signed in.\n * @noInheritDoc\n */\nexport class AccountNotLinked extends SignInError {\n}\nAccountNotLinked.type = \"AccountNotLinked\";\n/**\n * Thrown when an experimental feature is used but not enabled.\n * @noInheritDoc\n */\nexport class ExperimentalFeatureNotEnabled extends AuthError {\n}\nExperimentalFeatureNotEnabled.type = \"ExperimentalFeatureNotEnabled\";\n"],"names":[],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 645, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next-auth/lib/client.js"],"sourcesContent":["\"use client\";\nimport * as React from \"react\";\nimport { AuthError } from \"@auth/core/errors\";\n/** @todo */\nclass ClientFetchError extends AuthError {\n}\n/** @todo */\nexport class ClientSessionError extends AuthError {\n}\n// ------------------------ Internal ------------------------\n/**\n * If passed 'appContext' via getInitialProps() in _app.js\n * then get the req object from ctx and use that for the\n * req value to allow `fetchData` to\n * work seemlessly in getInitialProps() on server side\n * pages *and* in _app.js.\n * @internal\n */\nexport async function fetchData(path, __NEXTAUTH, logger, req = {}) {\n const url = `${apiBaseUrl(__NEXTAUTH)}/${path}`;\n try {\n const options = {\n headers: {\n \"Content-Type\": \"application/json\",\n ...(req?.headers?.cookie ? { cookie: req.headers.cookie } : {}),\n },\n };\n if (req?.body) {\n options.body = JSON.stringify(req.body);\n options.method = \"POST\";\n }\n const res = await fetch(url, options);\n const data = await res.json();\n if (!res.ok)\n throw data;\n return data;\n }\n catch (error) {\n logger.error(new ClientFetchError(error.message, error));\n return null;\n }\n}\n/** @internal */\nexport function apiBaseUrl(__NEXTAUTH) {\n if (typeof window === \"undefined\") {\n // Return absolute path when called server side\n return `${__NEXTAUTH.baseUrlServer}${__NEXTAUTH.basePathServer}`;\n }\n // Return relative path when called client side\n return __NEXTAUTH.basePath;\n}\n/** @internal */\nexport function useOnline() {\n const [isOnline, setIsOnline] = React.useState(typeof navigator !== \"undefined\" ? navigator.onLine : false);\n const setOnline = () => setIsOnline(true);\n const setOffline = () => setIsOnline(false);\n React.useEffect(() => {\n window.addEventListener(\"online\", setOnline);\n window.addEventListener(\"offline\", setOffline);\n return () => {\n window.removeEventListener(\"online\", setOnline);\n window.removeEventListener(\"offline\", setOffline);\n };\n }, []);\n return isOnline;\n}\n/**\n * Returns the number of seconds elapsed since January 1, 1970 00:00:00 UTC.\n * @internal\n */\nexport function now() {\n return Math.floor(Date.now() / 1000);\n}\n/**\n * Returns an `URL` like object to make requests/redirects from server-side\n * @internal\n */\nexport function parseUrl(url) {\n const defaultUrl = new URL(\"http://localhost:3000/api/auth\");\n if (url && !url.startsWith(\"http\")) {\n url = `https://${url}`;\n }\n const _url = new URL(url || defaultUrl);\n const path = (_url.pathname === \"/\" ? defaultUrl.pathname : _url.pathname)\n // Remove trailing slash\n .replace(/\\/$/, \"\");\n const base = `${_url.origin}${path}`;\n return {\n origin: _url.origin,\n host: _url.host,\n path,\n base,\n toString: () => base,\n };\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;AACA;AACA;AAFA;;;AAGA,UAAU,GACV,MAAM,yBAAyB,iMAAS;AACxC;AAEO,MAAM,2BAA2B,iMAAS;AACjD;AAUO,eAAe,UAAU,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,WAAW,YAAY,CAAC,EAAE,MAAM;IAC/C,IAAI;QACA,MAAM,UAAU;YACZ,SAAS;gBACL,gBAAgB;gBAChB,GAAI,KAAK,SAAS,SAAS;oBAAE,QAAQ,IAAI,OAAO,CAAC,MAAM;gBAAC,IAAI,CAAC,CAAC;YAClE;QACJ;QACA,IAAI,KAAK,MAAM;YACX,QAAQ,IAAI,GAAG,KAAK,SAAS,CAAC,IAAI,IAAI;YACtC,QAAQ,MAAM,GAAG;QACrB;QACA,MAAM,MAAM,MAAM,MAAM,KAAK;QAC7B,MAAM,OAAO,MAAM,IAAI,IAAI;QAC3B,IAAI,CAAC,IAAI,EAAE,EACP,MAAM;QACV,OAAO;IACX,EACA,OAAO,OAAO;QACV,OAAO,KAAK,CAAC,IAAI,iBAAiB,MAAM,OAAO,EAAE;QACjD,OAAO;IACX;AACJ;AAEO,SAAS,WAAW,UAAU;IACjC,wCAAmC;QAC/B,+CAA+C;QAC/C,OAAO,GAAG,WAAW,aAAa,GAAG,WAAW,cAAc,EAAE;IACpE;;;AAGJ;AAEO,SAAS;IACZ,MAAM,CAAC,UAAU,YAAY,GAAG,6PAAc,CAAC,OAAO,cAAc,cAAc,UAAU,MAAM,GAAG;IACrG,MAAM,YAAY,IAAM,YAAY;IACpC,MAAM,aAAa,IAAM,YAAY;IACrC,8PAAe,CAAC;QACZ,OAAO,gBAAgB,CAAC,UAAU;QAClC,OAAO,gBAAgB,CAAC,WAAW;QACnC,OAAO;YACH,OAAO,mBAAmB,CAAC,UAAU;YACrC,OAAO,mBAAmB,CAAC,WAAW;QAC1C;IACJ,GAAG,EAAE;IACL,OAAO;AACX;AAKO,SAAS;IACZ,OAAO,KAAK,KAAK,CAAC,KAAK,GAAG,KAAK;AACnC;AAKO,SAAS,SAAS,GAAG;IACxB,MAAM,aAAa,IAAI,IAAI;IAC3B,IAAI,OAAO,CAAC,IAAI,UAAU,CAAC,SAAS;QAChC,MAAM,CAAC,QAAQ,EAAE,KAAK;IAC1B;IACA,MAAM,OAAO,IAAI,IAAI,OAAO;IAC5B,MAAM,OAAO,CAAC,KAAK,QAAQ,KAAK,MAAM,WAAW,QAAQ,GAAG,KAAK,QAAQ,CACrE,wBAAwB;KACvB,OAAO,CAAC,OAAO;IACpB,MAAM,OAAO,GAAG,KAAK,MAAM,GAAG,MAAM;IACpC,OAAO;QACH,QAAQ,KAAK,MAAM;QACnB,MAAM,KAAK,IAAI;QACf;QACA;QACA,UAAU,IAAM;IACpB;AACJ","ignoreList":[0]}}, + {"offset": {"line": 738, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next-auth/react.js"],"sourcesContent":["/**\n *\n * NextAuth.js is the official integration of Auth.js for Next.js applications. It supports both\n * [Client Components](https://nextjs.org/docs/app/building-your-application/rendering/client-components) and the\n * [Pages Router](https://nextjs.org/docs/pages). It includes methods for signing in, signing out, hooks, and a React\n * Context provider to wrap your application and make session data available anywhere.\n *\n * For use in [Server Actions](https://nextjs.org/docs/app/api-reference/functions/server-actions), check out [these methods](https://authjs.dev/guides/upgrade-to-v5#methods)\n *\n * @module react\n */\n\"use client\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport { apiBaseUrl, ClientSessionError, fetchData, now, parseUrl, useOnline, } from \"./lib/client.js\";\n// This behaviour mirrors the default behaviour for getting the site name that\n// happens server side in server/index.js\n// 1. An empty value is legitimate when the code is being invoked client side as\n// relative URLs are valid in that context and so defaults to empty.\n// 2. When invoked server side the value is picked up from an environment\n// variable and defaults to 'http://localhost:3000'.\nexport const __NEXTAUTH = {\n baseUrl: parseUrl(process.env.NEXTAUTH_URL ?? process.env.VERCEL_URL).origin,\n basePath: parseUrl(process.env.NEXTAUTH_URL).path,\n baseUrlServer: parseUrl(process.env.NEXTAUTH_URL_INTERNAL ??\n process.env.NEXTAUTH_URL ??\n process.env.VERCEL_URL).origin,\n basePathServer: parseUrl(process.env.NEXTAUTH_URL_INTERNAL ?? process.env.NEXTAUTH_URL).path,\n _lastSync: 0,\n _session: undefined,\n _getSession: () => { },\n};\n// https://github.com/nextauthjs/next-auth/pull/10762\nlet broadcastChannel = null;\nfunction getNewBroadcastChannel() {\n if (typeof BroadcastChannel === \"undefined\") {\n return {\n postMessage: () => { },\n addEventListener: () => { },\n removeEventListener: () => { },\n name: \"next-auth\",\n onmessage: null,\n onmessageerror: null,\n close: () => { },\n dispatchEvent: () => false,\n };\n }\n return new BroadcastChannel(\"next-auth\");\n}\nfunction broadcast() {\n if (broadcastChannel === null) {\n broadcastChannel = getNewBroadcastChannel();\n }\n return broadcastChannel;\n}\n// TODO:\nconst logger = {\n debug: console.debug,\n error: console.error,\n warn: console.warn,\n};\nexport const SessionContext = React.createContext?.(undefined);\n/**\n * React Hook that gives you access to the logged in user's session data and lets you modify it.\n *\n * :::info\n * `useSession` is for client-side use only and when using [Next.js App Router (`app/`)](https://nextjs.org/blog/next-13-4#nextjs-app-router) you should prefer the `auth()` export.\n * :::\n */\nexport function useSession(options) {\n if (!SessionContext) {\n throw new Error(\"React Context is unavailable in Server Components\");\n }\n // @ts-expect-error Satisfy TS if branch on line below\n const value = React.useContext(SessionContext);\n if (!value && process.env.NODE_ENV !== \"production\") {\n throw new Error(\"[next-auth]: `useSession` must be wrapped in a \");\n }\n const { required, onUnauthenticated } = options ?? {};\n const requiredAndNotLoading = required && value.status === \"unauthenticated\";\n React.useEffect(() => {\n if (requiredAndNotLoading) {\n const url = `${__NEXTAUTH.basePath}/signin?${new URLSearchParams({\n error: \"SessionRequired\",\n callbackUrl: window.location.href,\n })}`;\n if (onUnauthenticated)\n onUnauthenticated();\n else\n window.location.href = url;\n }\n }, [requiredAndNotLoading, onUnauthenticated]);\n if (requiredAndNotLoading) {\n return {\n data: value.data,\n update: value.update,\n status: \"loading\",\n };\n }\n return value;\n}\nexport async function getSession(params) {\n const session = await fetchData(\"session\", __NEXTAUTH, logger, params);\n if (params?.broadcast ?? true) {\n // https://github.com/nextauthjs/next-auth/pull/11470\n getNewBroadcastChannel().postMessage({\n event: \"session\",\n data: { trigger: \"getSession\" },\n });\n }\n return session;\n}\n/**\n * Returns the current Cross-Site Request Forgery Token (CSRF Token)\n * required to make requests that changes state. (e.g. signing in or out, or updating the session).\n *\n * [CSRF Prevention: Double Submit Cookie](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#double-submit-cookie)\n */\nexport async function getCsrfToken() {\n const response = await fetchData(\"csrf\", __NEXTAUTH, logger);\n return response?.csrfToken ?? \"\";\n}\nexport async function getProviders() {\n return fetchData(\"providers\", __NEXTAUTH, logger);\n}\nexport async function signIn(provider, options, authorizationParams) {\n const { callbackUrl, ...rest } = options ?? {};\n const { redirect = true, redirectTo = callbackUrl ?? window.location.href, ...signInParams } = rest;\n const baseUrl = apiBaseUrl(__NEXTAUTH);\n const providers = await getProviders();\n if (!providers) {\n const url = `${baseUrl}/error`;\n window.location.href = url;\n return; // TODO: Return error if `redirect: false`\n }\n if (!provider || !providers[provider]) {\n const url = `${baseUrl}/signin?${new URLSearchParams({\n callbackUrl: redirectTo,\n })}`;\n window.location.href = url;\n return; // TODO: Return error if `redirect: false`\n }\n const providerType = providers[provider].type;\n if (providerType === \"webauthn\") {\n // TODO: Add docs link with explanation\n throw new TypeError([\n `Provider id \"${provider}\" refers to a WebAuthn provider.`,\n 'Please use `import { signIn } from \"next-auth/webauthn\"` instead.',\n ].join(\"\\n\"));\n }\n const signInUrl = `${baseUrl}/${providerType === \"credentials\" ? \"callback\" : \"signin\"}/${provider}`;\n const csrfToken = await getCsrfToken();\n const res = await fetch(`${signInUrl}?${new URLSearchParams(authorizationParams)}`, {\n method: \"post\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"X-Auth-Return-Redirect\": \"1\",\n },\n body: new URLSearchParams({\n ...signInParams,\n csrfToken,\n callbackUrl: redirectTo,\n }),\n });\n const data = await res.json();\n if (redirect) {\n const url = data.url ?? redirectTo;\n window.location.href = url;\n // If url contains a hash, the browser does not reload the page. We reload manually\n if (url.includes(\"#\"))\n window.location.reload();\n return;\n }\n const error = new URL(data.url).searchParams.get(\"error\") ?? undefined;\n const code = new URL(data.url).searchParams.get(\"code\") ?? undefined;\n if (res.ok) {\n await __NEXTAUTH._getSession({ event: \"storage\" });\n }\n return {\n error,\n code,\n status: res.status,\n ok: res.ok,\n url: error ? null : data.url,\n };\n}\nexport async function signOut(options) {\n const { redirect = true, redirectTo = options?.callbackUrl ?? window.location.href, } = options ?? {};\n const baseUrl = apiBaseUrl(__NEXTAUTH);\n const csrfToken = await getCsrfToken();\n const res = await fetch(`${baseUrl}/signout`, {\n method: \"post\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"X-Auth-Return-Redirect\": \"1\",\n },\n body: new URLSearchParams({ csrfToken, callbackUrl: redirectTo }),\n });\n const data = await res.json();\n broadcast().postMessage({ event: \"session\", data: { trigger: \"signout\" } });\n if (redirect) {\n const url = data.url ?? redirectTo;\n window.location.href = url;\n // If url contains a hash, the browser does not reload the page. We reload manually\n if (url.includes(\"#\"))\n window.location.reload();\n return;\n }\n await __NEXTAUTH._getSession({ event: \"storage\" });\n return data;\n}\n/**\n * [React Context](https://react.dev/learn/passing-data-deeply-with-context) provider to wrap the app (`pages/`) to make session data available anywhere.\n *\n * When used, the session state is automatically synchronized across all open tabs/windows and they are all updated whenever they gain or lose focus\n * or the state changes (e.g. a user signs in or out) when {@link SessionProviderProps.refetchOnWindowFocus} is `true`.\n *\n * :::info\n * `SessionProvider` is for client-side use only and when using [Next.js App Router (`app/`)](https://nextjs.org/blog/next-13-4#nextjs-app-router) you should prefer the `auth()` export.\n * :::\n */\nexport function SessionProvider(props) {\n if (!SessionContext) {\n throw new Error(\"React Context is unavailable in Server Components\");\n }\n const { children, basePath, refetchInterval, refetchWhenOffline } = props;\n if (basePath)\n __NEXTAUTH.basePath = basePath;\n /**\n * If session was `null`, there was an attempt to fetch it,\n * but it failed, but we still treat it as a valid initial value.\n */\n const hasInitialSession = props.session !== undefined;\n /** If session was passed, initialize as already synced */\n __NEXTAUTH._lastSync = hasInitialSession ? now() : 0;\n const [session, setSession] = React.useState(() => {\n if (hasInitialSession)\n __NEXTAUTH._session = props.session;\n return props.session;\n });\n /** If session was passed, initialize as not loading */\n const [loading, setLoading] = React.useState(!hasInitialSession);\n React.useEffect(() => {\n __NEXTAUTH._getSession = async ({ event } = {}) => {\n try {\n const storageEvent = event === \"storage\";\n // We should always update if we don't have a client session yet\n // or if there are events from other tabs/windows\n if (storageEvent || __NEXTAUTH._session === undefined) {\n __NEXTAUTH._lastSync = now();\n __NEXTAUTH._session = await getSession({\n broadcast: !storageEvent,\n });\n setSession(__NEXTAUTH._session);\n return;\n }\n if (\n // If there is no time defined for when a session should be considered\n // stale, then it's okay to use the value we have until an event is\n // triggered which updates it\n !event ||\n // If the client doesn't have a session then we don't need to call\n // the server to check if it does (if they have signed in via another\n // tab or window that will come through as a \"stroage\" event\n // event anyway)\n __NEXTAUTH._session === null ||\n // Bail out early if the client session is not stale yet\n now() < __NEXTAUTH._lastSync) {\n return;\n }\n // An event or session staleness occurred, update the client session.\n __NEXTAUTH._lastSync = now();\n __NEXTAUTH._session = await getSession();\n setSession(__NEXTAUTH._session);\n }\n catch (error) {\n logger.error(new ClientSessionError(error.message, error));\n }\n finally {\n setLoading(false);\n }\n };\n __NEXTAUTH._getSession();\n return () => {\n __NEXTAUTH._lastSync = 0;\n __NEXTAUTH._session = undefined;\n __NEXTAUTH._getSession = () => { };\n };\n }, []);\n React.useEffect(() => {\n const handle = () => __NEXTAUTH._getSession({ event: \"storage\" });\n // Listen for storage events and update session if event fired from\n // another window (but suppress firing another event to avoid a loop)\n // Fetch new session data but tell it to not to fire another event to\n // avoid an infinite loop.\n // Note: We could pass session data through and do something like\n // `setData(message.data)` but that can cause problems depending\n // on how the session object is being used in the client; it is\n // more robust to have each window/tab fetch it's own copy of the\n // session object rather than share it across instances.\n broadcast().addEventListener(\"message\", handle);\n return () => broadcast().removeEventListener(\"message\", handle);\n }, []);\n React.useEffect(() => {\n const { refetchOnWindowFocus = true } = props;\n // Listen for when the page is visible, if the user switches tabs\n // and makes our tab visible again, re-fetch the session, but only if\n // this feature is not disabled.\n const visibilityHandler = () => {\n if (refetchOnWindowFocus && document.visibilityState === \"visible\")\n __NEXTAUTH._getSession({ event: \"visibilitychange\" });\n };\n document.addEventListener(\"visibilitychange\", visibilityHandler, false);\n return () => document.removeEventListener(\"visibilitychange\", visibilityHandler, false);\n }, [props.refetchOnWindowFocus]);\n const isOnline = useOnline();\n // TODO: Flip this behavior in next major version\n const shouldRefetch = refetchWhenOffline !== false || isOnline;\n React.useEffect(() => {\n if (refetchInterval && shouldRefetch) {\n const refetchIntervalTimer = setInterval(() => {\n if (__NEXTAUTH._session) {\n __NEXTAUTH._getSession({ event: \"poll\" });\n }\n }, refetchInterval * 1000);\n return () => clearInterval(refetchIntervalTimer);\n }\n }, [refetchInterval, shouldRefetch]);\n const value = React.useMemo(() => ({\n data: session,\n status: loading\n ? \"loading\"\n : session\n ? \"authenticated\"\n : \"unauthenticated\",\n async update(data) {\n if (loading)\n return;\n setLoading(true);\n const newSession = await fetchData(\"session\", __NEXTAUTH, logger, typeof data === \"undefined\"\n ? undefined\n : { body: { csrfToken: await getCsrfToken(), data } });\n setLoading(false);\n if (newSession) {\n setSession(newSession);\n broadcast().postMessage({\n event: \"session\",\n data: { trigger: \"getSession\" },\n });\n }\n return newSession;\n },\n }), [session, loading]);\n return (\n // @ts-expect-error\n _jsx(SessionContext.Provider, { value: value, children: children }));\n}\n"],"names":[],"mappings":"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","ignoreList":[0]}}] } \ No newline at end of file diff --git a/.next/dev/server/next-font-manifest.js b/.next/dev/server/next-font-manifest.js index d45badd..84dff8e 100644 --- a/.next/dev/server/next-font-manifest.js +++ b/.next/dev/server/next-font-manifest.js @@ -1 +1 @@ -self.__NEXT_FONT_MANIFEST="{\n \"app\": {\n \"[project]/Documents/00 - projet/plumeia/src/app/dashboard/page\": [\n \"static/media/83afe278b6a6bb3c-s.p.3a6ba036.woff2\",\n \"static/media/248e1dc0efc99276-s.p.8a6b2436.woff2\"\n ],\n \"[project]/Documents/00 - projet/plumeia/src/app/login/page\": [\n \"static/media/83afe278b6a6bb3c-s.p.3a6ba036.woff2\",\n \"static/media/248e1dc0efc99276-s.p.8a6b2436.woff2\"\n ],\n \"[project]/Documents/00 - projet/plumeia/src/app/page\": [\n \"static/media/83afe278b6a6bb3c-s.p.3a6ba036.woff2\",\n \"static/media/248e1dc0efc99276-s.p.8a6b2436.woff2\"\n ],\n \"[project]/Documents/00 - projet/plumeia/src/app/project/[id]/page\": [\n \"static/media/83afe278b6a6bb3c-s.p.3a6ba036.woff2\",\n \"static/media/248e1dc0efc99276-s.p.8a6b2436.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]/Documents/00 - projet/plumeia/src/app/dashboard/page\": [\n \"static/media/83afe278b6a6bb3c-s.p.3a6ba036.woff2\",\n \"static/media/248e1dc0efc99276-s.p.8a6b2436.woff2\"\n ],\n \"[project]/Documents/00 - projet/plumeia/src/app/login/page\": [\n \"static/media/83afe278b6a6bb3c-s.p.3a6ba036.woff2\",\n \"static/media/248e1dc0efc99276-s.p.8a6b2436.woff2\"\n ],\n \"[project]/Documents/00 - projet/plumeia/src/app/page\": [\n \"static/media/83afe278b6a6bb3c-s.p.3a6ba036.woff2\",\n \"static/media/248e1dc0efc99276-s.p.8a6b2436.woff2\"\n ],\n \"[project]/Documents/00 - projet/plumeia/src/app/project/[id]/page\": [\n \"static/media/83afe278b6a6bb3c-s.p.3a6ba036.woff2\",\n \"static/media/248e1dc0efc99276-s.p.8a6b2436.woff2\"\n ],\n \"[project]/Documents/00 - projet/plumeia/src/app/project/[id]/world/page\": [\n \"static/media/83afe278b6a6bb3c-s.p.3a6ba036.woff2\",\n \"static/media/248e1dc0efc99276-s.p.8a6b2436.woff2\"\n ]\n },\n \"appUsingSizeAdjust\": true,\n \"pages\": {},\n \"pagesUsingSizeAdjust\": false\n}" \ No newline at end of file diff --git a/.next/dev/server/next-font-manifest.json b/.next/dev/server/next-font-manifest.json index 7cb7599..a382430 100644 --- a/.next/dev/server/next-font-manifest.json +++ b/.next/dev/server/next-font-manifest.json @@ -15,6 +15,10 @@ "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/page": [ "static/media/83afe278b6a6bb3c-s.p.3a6ba036.woff2", "static/media/248e1dc0efc99276-s.p.8a6b2436.woff2" + ], + "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/world/page": [ + "static/media/83afe278b6a6bb3c-s.p.3a6ba036.woff2", + "static/media/248e1dc0efc99276-s.p.8a6b2436.woff2" ] }, "appUsingSizeAdjust": true, diff --git a/.next/dev/static/chunks/Documents_00 - projet_plumeia_0ae2c1c3._.js b/.next/dev/static/chunks/Documents_00 - projet_plumeia_0ae2c1c3._.js index 76a8f89..c18c235 100644 --- a/.next/dev/static/chunks/Documents_00 - projet_plumeia_0ae2c1c3._.js +++ b/.next/dev/static/chunks/Documents_00 - projet_plumeia_0ae2c1c3._.js @@ -185,20 +185,6 @@ var _s = __turbopack_context__.k.signature(); ; ; ; -const PLAN_LIMITS = { - free: { - aiActions: 100, - projects: 3 - }, - pro: { - aiActions: 5000, - projects: 20 - }, - master: { - aiActions: 999999, - projects: 999 - } -}; const useAuth = ()=>{ _s(); const { data: session, status } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2d$auth$2f$react$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSession"])(); @@ -208,12 +194,19 @@ const useAuth = ()=>{ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ "useAuth.useEffect": ()=>{ if (session?.user?.id) { - fetch('/api/user/profile').then({ + fetch('/api/user/profile', { + cache: 'no-store' + }).then({ "useAuth.useEffect": (res)=>res.json() }["useAuth.useEffect"]).then({ "useAuth.useEffect": (dbUser)=>{ - const plan = dbUser.plan || 'free'; - const limits = PLAN_LIMITS[plan] || PLAN_LIMITS.free; + const planId = dbUser.plan || 'free'; + const planDetails = dbUser.planDetails || { + id: 'free', + displayName: 'Gratuit', + maxAiActions: 100, + maxProjects: 3 + }; setUser({ id: dbUser.id, email: dbUser.email, @@ -221,14 +214,15 @@ const useAuth = ()=>{ avatar: dbUser.avatar, bio: dbUser.bio, subscription: { - plan, + plan: planId, + planDetails: planDetails, startDate: new Date(dbUser.createdAt).getTime(), status: 'active' }, usage: { aiActionsCurrent: dbUser.aiActionsUsed || 0, - aiActionsLimit: limits.aiActions, - projectsLimit: limits.projects + aiActionsLimit: planDetails.maxAiActions, + projectsLimit: planDetails.maxProjects }, preferences: { theme: 'light', diff --git a/.next/dev/static/chunks/Documents_00 - projet_plumeia_0ae2c1c3._.js.map b/.next/dev/static/chunks/Documents_00 - projet_plumeia_0ae2c1c3._.js.map index c5939d8..6c08750 100644 --- a/.next/dev/static/chunks/Documents_00 - projet_plumeia_0ae2c1c3._.js.map +++ b/.next/dev/static/chunks/Documents_00 - projet_plumeia_0ae2c1c3._.js.map @@ -3,11 +3,11 @@ "sources": [], "sections": [ {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/api.ts"],"sourcesContent":["import { BookProject, UserProfile } from './types';\r\n\r\nconst API_BASE_URL = '/api';\r\n\r\n// --- API CLIENT ---\r\n\r\nconst api = {\r\n async request(endpoint: string, options: RequestInit = {}) {\r\n const url = `${API_BASE_URL}${endpoint}`;\r\n\r\n const headers: Record = {\r\n 'Content-Type': 'application/json',\r\n ...options.headers as Record,\r\n };\r\n\r\n const response = await fetch(url, {\r\n ...options,\r\n headers,\r\n });\r\n\r\n if (!response.ok) {\r\n let errorMsg = `Error ${response.status}: ${response.statusText}`;\r\n try {\r\n const errorJson = await response.json();\r\n if (errorJson.error) errorMsg = errorJson.error;\r\n if (errorJson.message) errorMsg = errorJson.message;\r\n } catch {\r\n // Ignore json parse error\r\n }\r\n throw new Error(errorMsg);\r\n }\r\n\r\n if (response.status === 204) return null;\r\n return response.json();\r\n },\r\n\r\n // --- AUTH ---\r\n auth: {\r\n async register(email: string, password: string, name: string) {\r\n return api.request('/auth/register', {\r\n method: 'POST',\r\n body: JSON.stringify({ email, password, name }),\r\n });\r\n },\r\n },\r\n\r\n // --- PROJECTS ---\r\n projects: {\r\n async list() {\r\n return api.request('/projects');\r\n },\r\n\r\n async get(id: string) {\r\n return api.request(`/projects/${id}`);\r\n },\r\n\r\n async create(data: { title: string; author: string; settings?: any }) {\r\n return api.request('/projects', {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n });\r\n },\r\n\r\n async update(id: string, data: any) {\r\n return api.request(`/projects/${id}`, {\r\n method: 'PUT',\r\n body: JSON.stringify(data),\r\n });\r\n },\r\n\r\n async delete(id: string) {\r\n return api.request(`/projects/${id}`, {\r\n method: 'DELETE',\r\n });\r\n },\r\n\r\n async syncWorkflow(id: string, data: { nodes: any[]; connections: any[] }) {\r\n return api.request(`/projects/${id}/workflow`, {\r\n method: 'PUT',\r\n body: JSON.stringify(data),\r\n });\r\n },\r\n },\r\n\r\n // --- CHAPTERS ---\r\n chapters: {\r\n async create(data: { projectId: string; title?: string; content?: string; summary?: string; orderIndex?: number }) {\r\n return api.request('/chapters', {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n });\r\n },\r\n\r\n async update(id: string, data: any) {\r\n return api.request(`/chapters/${id}`, {\r\n method: 'PUT',\r\n body: JSON.stringify(data),\r\n });\r\n },\r\n\r\n async delete(id: string) {\r\n return api.request(`/chapters/${id}`, {\r\n method: 'DELETE',\r\n });\r\n },\r\n },\r\n\r\n // --- ENTITIES ---\r\n entities: {\r\n async create(data: { projectId: string; type: string; name?: string; description?: string; details?: string; attributes?: any; customValues?: any }) {\r\n return api.request('/entities', {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n });\r\n },\r\n\r\n async update(id: string, data: any) {\r\n return api.request(`/entities/${id}`, {\r\n method: 'PUT',\r\n body: JSON.stringify(data),\r\n });\r\n },\r\n\r\n async delete(id: string) {\r\n return api.request(`/entities/${id}`, {\r\n method: 'DELETE',\r\n });\r\n },\r\n },\r\n\r\n // --- IDEAS ---\r\n ideas: {\r\n async create(data: { projectId: string; title?: string; description?: string; status?: string; category?: string }) {\r\n return api.request('/ideas', {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n });\r\n },\r\n\r\n async update(id: string, data: any) {\r\n return api.request(`/ideas/${id}`, {\r\n method: 'PUT',\r\n body: JSON.stringify(data),\r\n });\r\n },\r\n\r\n async delete(id: string) {\r\n return api.request(`/ideas/${id}`, {\r\n method: 'DELETE',\r\n });\r\n },\r\n },\r\n\r\n // --- AI (server-side via API routes) ---\r\n ai: {\r\n async generate(project: BookProject, chapterId: string, prompt: string, user: UserProfile) {\r\n return api.request<{ text: string; type: 'draft' | 'reflection' }>('/ai/generate', {\r\n method: 'POST',\r\n body: JSON.stringify({ project, chapterId, prompt, user }),\r\n });\r\n },\r\n\r\n async transform(text: string, mode: string, context: string, user: UserProfile) {\r\n const res = await api.request<{ text: string }>('/ai/transform', {\r\n method: 'POST',\r\n body: JSON.stringify({ text, mode, context, user }),\r\n });\r\n return res.text;\r\n },\r\n },\r\n};\r\n\r\nexport default api;\r\n"],"names":[],"mappings":";;;;AAEA,MAAM,eAAe;AAErB,qBAAqB;AAErB,MAAM,MAAM;IACR,MAAM,SAAiB,QAAgB,EAAE,UAAuB,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,eAAe,UAAU;QAExC,MAAM,UAAkC;YACpC,gBAAgB;YAChB,GAAG,QAAQ,OAAO;QACtB;QAEA,MAAM,WAAW,MAAM,MAAM,KAAK;YAC9B,GAAG,OAAO;YACV;QACJ;QAEA,IAAI,CAAC,SAAS,EAAE,EAAE;YACd,IAAI,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,CAAC,EAAE,EAAE,SAAS,UAAU,EAAE;YACjE,IAAI;gBACA,MAAM,YAAY,MAAM,SAAS,IAAI;gBACrC,IAAI,UAAU,KAAK,EAAE,WAAW,UAAU,KAAK;gBAC/C,IAAI,UAAU,OAAO,EAAE,WAAW,UAAU,OAAO;YACvD,EAAE,OAAM;YACJ,0BAA0B;YAC9B;YACA,MAAM,IAAI,MAAM;QACpB;QAEA,IAAI,SAAS,MAAM,KAAK,KAAK,OAAO;QACpC,OAAO,SAAS,IAAI;IACxB;IAEA,eAAe;IACf,MAAM;QACF,MAAM,UAAS,KAAa,EAAE,QAAgB,EAAE,IAAY;YACxD,OAAO,IAAI,OAAO,CAAC,kBAAkB;gBACjC,QAAQ;gBACR,MAAM,KAAK,SAAS,CAAC;oBAAE;oBAAO;oBAAU;gBAAK;YACjD;QACJ;IACJ;IAEA,mBAAmB;IACnB,UAAU;QACN,MAAM;YACF,OAAO,IAAI,OAAO,CAAQ;QAC9B;QAEA,MAAM,KAAI,EAAU;YAChB,OAAO,IAAI,OAAO,CAAM,CAAC,UAAU,EAAE,IAAI;QAC7C;QAEA,MAAM,QAAO,IAAuD;YAChE,OAAO,IAAI,OAAO,CAAM,aAAa;gBACjC,QAAQ;gBACR,MAAM,KAAK,SAAS,CAAC;YACzB;QACJ;QAEA,MAAM,QAAO,EAAU,EAAE,IAAS;YAC9B,OAAO,IAAI,OAAO,CAAM,CAAC,UAAU,EAAE,IAAI,EAAE;gBACvC,QAAQ;gBACR,MAAM,KAAK,SAAS,CAAC;YACzB;QACJ;QAEA,MAAM,QAAO,EAAU;YACnB,OAAO,IAAI,OAAO,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE;gBAClC,QAAQ;YACZ;QACJ;QAEA,MAAM,cAAa,EAAU,EAAE,IAA0C;YACrE,OAAO,IAAI,OAAO,CAAC,CAAC,UAAU,EAAE,GAAG,SAAS,CAAC,EAAE;gBAC3C,QAAQ;gBACR,MAAM,KAAK,SAAS,CAAC;YACzB;QACJ;IACJ;IAEA,mBAAmB;IACnB,UAAU;QACN,MAAM,QAAO,IAAoG;YAC7G,OAAO,IAAI,OAAO,CAAM,aAAa;gBACjC,QAAQ;gBACR,MAAM,KAAK,SAAS,CAAC;YACzB;QACJ;QAEA,MAAM,QAAO,EAAU,EAAE,IAAS;YAC9B,OAAO,IAAI,OAAO,CAAM,CAAC,UAAU,EAAE,IAAI,EAAE;gBACvC,QAAQ;gBACR,MAAM,KAAK,SAAS,CAAC;YACzB;QACJ;QAEA,MAAM,QAAO,EAAU;YACnB,OAAO,IAAI,OAAO,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE;gBAClC,QAAQ;YACZ;QACJ;IACJ;IAEA,mBAAmB;IACnB,UAAU;QACN,MAAM,QAAO,IAAsI;YAC/I,OAAO,IAAI,OAAO,CAAM,aAAa;gBACjC,QAAQ;gBACR,MAAM,KAAK,SAAS,CAAC;YACzB;QACJ;QAEA,MAAM,QAAO,EAAU,EAAE,IAAS;YAC9B,OAAO,IAAI,OAAO,CAAM,CAAC,UAAU,EAAE,IAAI,EAAE;gBACvC,QAAQ;gBACR,MAAM,KAAK,SAAS,CAAC;YACzB;QACJ;QAEA,MAAM,QAAO,EAAU;YACnB,OAAO,IAAI,OAAO,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE;gBAClC,QAAQ;YACZ;QACJ;IACJ;IAEA,gBAAgB;IAChB,OAAO;QACH,MAAM,QAAO,IAAqG;YAC9G,OAAO,IAAI,OAAO,CAAM,UAAU;gBAC9B,QAAQ;gBACR,MAAM,KAAK,SAAS,CAAC;YACzB;QACJ;QAEA,MAAM,QAAO,EAAU,EAAE,IAAS;YAC9B,OAAO,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,IAAI,EAAE;gBACpC,QAAQ;gBACR,MAAM,KAAK,SAAS,CAAC;YACzB;QACJ;QAEA,MAAM,QAAO,EAAU;YACnB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE;gBAC/B,QAAQ;YACZ;QACJ;IACJ;IAEA,0CAA0C;IAC1C,IAAI;QACA,MAAM,UAAS,OAAoB,EAAE,SAAiB,EAAE,MAAc,EAAE,IAAiB;YACrF,OAAO,IAAI,OAAO,CAAiD,gBAAgB;gBAC/E,QAAQ;gBACR,MAAM,KAAK,SAAS,CAAC;oBAAE;oBAAS;oBAAW;oBAAQ;gBAAK;YAC5D;QACJ;QAEA,MAAM,WAAU,IAAY,EAAE,IAAY,EAAE,OAAe,EAAE,IAAiB;YAC1E,MAAM,MAAM,MAAM,IAAI,OAAO,CAAmB,iBAAiB;gBAC7D,QAAQ;gBACR,MAAM,KAAK,SAAS,CAAC;oBAAE;oBAAM;oBAAM;oBAAS;gBAAK;YACrD;YACA,OAAO,IAAI,IAAI;QACnB;IACJ;AACJ;uCAEe"}}, - {"offset": {"line": 175, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/hooks/useAuth.ts"],"sourcesContent":["'use client';\r\n\r\nimport { useState, useEffect, useCallback } from 'react';\r\nimport { signIn, signOut, useSession } from 'next-auth/react';\r\nimport { UserProfile, PlanType } from '@/lib/types';\r\nimport api from '@/lib/api';\r\n\r\nconst PLAN_LIMITS: Record = {\r\n free: { aiActions: 100, projects: 3 },\r\n pro: { aiActions: 5000, projects: 20 },\r\n master: { aiActions: 999999, projects: 999 },\r\n};\r\n\r\nexport const useAuth = () => {\r\n const { data: session, status } = useSession();\r\n const [user, setUser] = useState(null);\r\n const loading = status === 'loading';\r\n\r\n // Fetch real profile from DB when session is available\r\n useEffect(() => {\r\n if (session?.user?.id) {\r\n fetch('/api/user/profile')\r\n .then(res => res.json())\r\n .then(dbUser => {\r\n const plan = (dbUser.plan || 'free') as PlanType;\r\n const limits = PLAN_LIMITS[plan] || PLAN_LIMITS.free;\r\n\r\n setUser({\r\n id: dbUser.id,\r\n email: dbUser.email,\r\n name: dbUser.name || 'User',\r\n avatar: dbUser.avatar,\r\n bio: dbUser.bio,\r\n subscription: { plan, startDate: new Date(dbUser.createdAt).getTime(), status: 'active' },\r\n usage: {\r\n aiActionsCurrent: dbUser.aiActionsUsed || 0,\r\n aiActionsLimit: limits.aiActions,\r\n projectsLimit: limits.projects,\r\n },\r\n preferences: { theme: 'light', dailyWordGoal: dbUser.dailyWordGoal || 500, language: 'fr' },\r\n stats: {\r\n totalWordsWritten: dbUser.totalWords || 0,\r\n writingStreak: dbUser.writingStreak || 0,\r\n lastWriteDate: dbUser.lastWriteDate ? new Date(dbUser.lastWriteDate).getTime() : 0,\r\n },\r\n });\r\n })\r\n .catch(err => {\r\n console.error('Failed to fetch user profile:', err);\r\n // Fallback to session data\r\n setUser({\r\n id: session.user.id || '',\r\n email: session.user.email || '',\r\n name: session.user.name || 'User',\r\n subscription: { plan: 'free', startDate: Date.now(), status: 'active' },\r\n usage: { aiActionsCurrent: 0, aiActionsLimit: 100, projectsLimit: 3 },\r\n preferences: { theme: 'light', dailyWordGoal: 500, language: 'fr' },\r\n stats: { totalWordsWritten: 0, writingStreak: 0, lastWriteDate: 0 },\r\n });\r\n });\r\n } else if (status === 'unauthenticated') {\r\n setUser(null);\r\n }\r\n }, [session, status]);\r\n\r\n const login = useCallback(async (email: string, password: string) => {\r\n const result = await signIn('credentials', {\r\n email,\r\n password,\r\n redirect: false,\r\n });\r\n\r\n if (result?.error) {\r\n throw new Error(result.error === 'CredentialsSignin'\r\n ? 'Email ou mot de passe incorrect'\r\n : result.error\r\n );\r\n }\r\n }, []);\r\n\r\n const signup = useCallback(async (email: string, password: string, name: string) => {\r\n await api.auth.register(email, password, name);\r\n const result = await signIn('credentials', {\r\n email,\r\n password,\r\n redirect: false,\r\n });\r\n if (result?.error) {\r\n throw new Error('Compte créé mais erreur de connexion automatique');\r\n }\r\n }, []);\r\n\r\n const logout = useCallback(async () => {\r\n await signOut({ redirect: false });\r\n setUser(null);\r\n }, []);\r\n\r\n const incrementUsage = useCallback((serverCount?: number) => {\r\n if (user) {\r\n setUser({\r\n ...user,\r\n usage: {\r\n ...user.usage,\r\n aiActionsCurrent: serverCount !== undefined ? serverCount : user.usage.aiActionsCurrent + 1,\r\n },\r\n });\r\n }\r\n }, [user]);\r\n\r\n return { user, login, signup, logout, incrementUsage, loading };\r\n};\r\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 352, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/providers/AuthProvider.tsx"],"sourcesContent":["'use client';\r\n\r\nimport React, { createContext, useContext } from 'react';\r\nimport { SessionProvider } from 'next-auth/react';\r\nimport { useAuth } from '@/hooks/useAuth';\r\n\r\nconst AuthContext = createContext(null);\r\n\r\nfunction AuthInner({ children }: { children: React.ReactNode }) {\r\n const auth = useAuth();\r\n return {children};\r\n}\r\n\r\nexport const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport function useAuthContext() {\r\n return useContext(AuthContext);\r\n}\r\n"],"names":[],"mappings":";;;;;;;AAEA;AACA;AACA;;;AAJA;;;;AAMA,MAAM,4BAAc,IAAA,0NAAa,EAAM;AAEvC,SAAS,UAAU,EAAE,QAAQ,EAAiC;;IAC1D,MAAM,OAAO,IAAA,iLAAO;IACpB,qBAAO,yOAAC,YAAY,QAAQ;QAAC,OAAO;kBAAO;;;;;;AAC/C;GAHS;;QACQ,iLAAO;;;KADf;AAKF,MAAM,eAAwD,CAAC,EAAE,QAAQ,EAAE;IAC9E,qBACI,yOAAC,uMAAe;kBACZ,cAAA,yOAAC;sBAAW;;;;;;;;;;;AAGxB;MANa;AAQN,SAAS;;IACZ,OAAO,IAAA,uNAAU,EAAC;AACtB;IAFgB"}}, - {"offset": {"line": 418, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js"],"sourcesContent":["/**\n * @license React\n * react-jsx-dev-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n case REACT_VIEW_TRANSITION_TYPE:\n return \"ViewTransition\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"next/dist/compiled/react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsxDEV = function (type, config, maybeKey, isStaticChildren) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n if (trackActualOwner) {\n var previousStackTraceLimit = Error.stackTraceLimit;\n Error.stackTraceLimit = 10;\n var debugStackDEV = Error(\"react-stack-top-frame\");\n Error.stackTraceLimit = previousStackTraceLimit;\n } else debugStackDEV = unknownOwnerDebugStack;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStackDEV,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n"],"names":[],"mappings":"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","ignoreList":[0]}}, - {"offset": {"line": 634, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/dist/compiled/react/jsx-dev-runtime.js"],"sourcesContent":["'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-dev-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-dev-runtime.development.js');\n}\n"],"names":[],"mappings":"AAEI;AAFJ;AAEA;;KAEO;IACL,OAAO,OAAO;AAChB","ignoreList":[0]}}, - {"offset": {"line": 645, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/%40auth/core/errors.js"],"sourcesContent":["/**\n * Base error class for all Auth.js errors.\n * It's optimized to be printed in the server logs in a nicely formatted way\n * via the [`logger.error`](https://authjs.dev/reference/core#logger) option.\n * @noInheritDoc\n */\nexport class AuthError extends Error {\n /** @internal */\n constructor(message, errorOptions) {\n if (message instanceof Error) {\n super(undefined, {\n cause: { err: message, ...message.cause, ...errorOptions },\n });\n }\n else if (typeof message === \"string\") {\n if (errorOptions instanceof Error) {\n errorOptions = { err: errorOptions, ...errorOptions.cause };\n }\n super(message, errorOptions);\n }\n else {\n super(undefined, message);\n }\n this.name = this.constructor.name;\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/3841\n this.type = this.constructor.type ?? \"AuthError\";\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/3841\n this.kind = this.constructor.kind ?? \"error\";\n Error.captureStackTrace?.(this, this.constructor);\n const url = `https://errors.authjs.dev#${this.type.toLowerCase()}`;\n this.message += `${this.message ? \". \" : \"\"}Read more at ${url}`;\n }\n}\n/**\n * Thrown when the user's sign-in attempt failed.\n * @noInheritDoc\n */\nexport class SignInError extends AuthError {\n}\n/** @internal */\nSignInError.kind = \"signIn\";\n/**\n * One of the database [`Adapter` methods](https://authjs.dev/reference/core/adapters#methods)\n * failed during execution.\n *\n * :::tip\n * If `debug: true` is set, you can check out `[auth][debug]` in the logs to learn more about the failed adapter method execution.\n * @example\n * ```sh\n * [auth][debug]: adapter_getUserByEmail\n * { \"args\": [undefined] }\n * ```\n * :::\n * @noInheritDoc\n */\nexport class AdapterError extends AuthError {\n}\nAdapterError.type = \"AdapterError\";\n/**\n * Thrown when the execution of the [`signIn` callback](https://authjs.dev/reference/core/types#signin) fails\n * or if it returns `false`.\n * @noInheritDoc\n */\nexport class AccessDenied extends AuthError {\n}\nAccessDenied.type = \"AccessDenied\";\n/**\n * This error occurs when the user cannot finish login.\n * Depending on the provider type, this could have happened for multiple reasons.\n *\n * :::tip\n * Check out `[auth][details]` in the logs to know which provider failed.\n * @example\n * ```sh\n * [auth][details]: { \"provider\": \"github\" }\n * ```\n * :::\n *\n * For an [OAuth provider](https://authjs.dev/getting-started/authentication/oauth), possible causes are:\n * - The user denied access to the application\n * - There was an error parsing the OAuth Profile:\n * Check out the provider's `profile` or `userinfo.request` method to make sure\n * it correctly fetches the user's profile.\n * - The `signIn` or `jwt` callback methods threw an uncaught error:\n * Check the callback method implementations.\n *\n * For an [Email provider](https://authjs.dev/getting-started/authentication/email), possible causes are:\n * - The provided email/token combination was invalid/missing:\n * Check if the provider's `sendVerificationRequest` method correctly sends the email.\n * - The provided email/token combination has expired:\n * Ask the user to log in again.\n * - There was an error with the database:\n * Check the database logs.\n *\n * For a [Credentials provider](https://authjs.dev/getting-started/authentication/credentials), possible causes are:\n * - The `authorize` method threw an uncaught error:\n * Check the provider's `authorize` method.\n * - The `signIn` or `jwt` callback methods threw an uncaught error:\n * Check the callback method implementations.\n *\n * :::tip\n * Check out `[auth][cause]` in the error message for more details.\n * It will show the original stack trace.\n * :::\n * @noInheritDoc\n */\nexport class CallbackRouteError extends AuthError {\n}\nCallbackRouteError.type = \"CallbackRouteError\";\n/**\n * Thrown when Auth.js is misconfigured and accidentally tried to require authentication on a custom error page.\n * To prevent an infinite loop, Auth.js will instead render its default error page.\n *\n * To fix this, make sure that the `error` page does not require authentication.\n *\n * Learn more at [Guide: Error pages](https://authjs.dev/guides/pages/error)\n * @noInheritDoc\n */\nexport class ErrorPageLoop extends AuthError {\n}\nErrorPageLoop.type = \"ErrorPageLoop\";\n/**\n * One of the [`events` methods](https://authjs.dev/reference/core/types#eventcallbacks)\n * failed during execution.\n *\n * Make sure that the `events` methods are implemented correctly and uncaught errors are handled.\n *\n * Learn more at [`events`](https://authjs.dev/reference/core/types#eventcallbacks)\n * @noInheritDoc\n */\nexport class EventError extends AuthError {\n}\nEventError.type = \"EventError\";\n/**\n * Thrown when Auth.js is unable to verify a `callbackUrl` value.\n * The browser either disabled cookies or the `callbackUrl` is not a valid URL.\n *\n * Somebody might have tried to manipulate the callback URL that Auth.js uses to redirect the user back to the configured `callbackUrl`/page.\n * This could be a malicious hacker trying to redirect the user to a phishing site.\n * To prevent this, Auth.js checks if the callback URL is valid and throws this error if it is not.\n *\n * There is no action required, but it might be an indicator that somebody is trying to attack your application.\n * @noInheritDoc\n */\nexport class InvalidCallbackUrl extends AuthError {\n}\nInvalidCallbackUrl.type = \"InvalidCallbackUrl\";\n/**\n * Can be thrown from the `authorize` callback of the Credentials provider.\n * When an error occurs during the `authorize` callback, two things can happen:\n * 1. The user is redirected to the signin page, with `error=CredentialsSignin&code=credentials` in the URL. `code` is configurable.\n * 2. If you throw this error in a framework that handles form actions server-side, this error is thrown, instead of redirecting the user, so you'll need to handle.\n * @noInheritDoc\n */\nexport class CredentialsSignin extends SignInError {\n constructor() {\n super(...arguments);\n /**\n * The error code that is set in the `code` query parameter of the redirect URL.\n *\n *\n * ⚠ NOTE: This property is going to be included in the URL, so make sure it does not hint at sensitive errors.\n *\n * The full error is always logged on the server, if you need to debug.\n *\n * Generally, we don't recommend hinting specifically if the user had either a wrong username or password specifically,\n * try rather something like \"Invalid credentials\".\n */\n this.code = \"credentials\";\n }\n}\nCredentialsSignin.type = \"CredentialsSignin\";\n/**\n * One of the configured OAuth or OIDC providers is missing the `authorization`, `token` or `userinfo`, or `issuer` configuration.\n * To perform OAuth or OIDC sign in, at least one of these endpoints is required.\n *\n * Learn more at [`OAuth2Config`](https://authjs.dev/reference/core/providers#oauth2configprofile) or [Guide: OAuth Provider](https://authjs.dev/guides/configuring-oauth-providers)\n * @noInheritDoc\n */\nexport class InvalidEndpoints extends AuthError {\n}\nInvalidEndpoints.type = \"InvalidEndpoints\";\n/**\n * Thrown when a PKCE, state or nonce OAuth check could not be performed.\n * This could happen if the OAuth provider is configured incorrectly or if the browser is blocking cookies.\n *\n * Learn more at [`checks`](https://authjs.dev/reference/core/providers#checks)\n * @noInheritDoc\n */\nexport class InvalidCheck extends AuthError {\n}\nInvalidCheck.type = \"InvalidCheck\";\n/**\n * Logged on the server when Auth.js could not decode or encode a JWT-based (`strategy: \"jwt\"`) session.\n *\n * Possible causes are either a misconfigured `secret` or a malformed JWT or `encode/decode` methods.\n *\n * :::note\n * When this error is logged, the session cookie is destroyed.\n * :::\n *\n * Learn more at [`secret`](https://authjs.dev/reference/core#secret), [`jwt.encode`](https://authjs.dev/reference/core/jwt#encode-1) or [`jwt.decode`](https://authjs.dev/reference/core/jwt#decode-2) for more information.\n * @noInheritDoc\n */\nexport class JWTSessionError extends AuthError {\n}\nJWTSessionError.type = \"JWTSessionError\";\n/**\n * Thrown if Auth.js is misconfigured. This could happen if you configured an Email provider but did not set up a database adapter,\n * or tried using a `strategy: \"database\"` session without a database adapter.\n * In both cases, make sure you either remove the configuration or add the missing adapter.\n *\n * Learn more at [Database Adapters](https://authjs.dev/getting-started/database), [Email provider](https://authjs.dev/getting-started/authentication/email) or [Concept: Database session strategy](https://authjs.dev/concepts/session-strategies#database-session)\n * @noInheritDoc\n */\nexport class MissingAdapter extends AuthError {\n}\nMissingAdapter.type = \"MissingAdapter\";\n/**\n * Thrown similarily to [`MissingAdapter`](https://authjs.dev/reference/core/errors#missingadapter), but only some required methods were missing.\n *\n * Make sure you either remove the configuration or add the missing methods to the adapter.\n *\n * Learn more at [Database Adapters](https://authjs.dev/getting-started/database)\n * @noInheritDoc\n */\nexport class MissingAdapterMethods extends AuthError {\n}\nMissingAdapterMethods.type = \"MissingAdapterMethods\";\n/**\n * Thrown when a Credentials provider is missing the `authorize` configuration.\n * To perform credentials sign in, the `authorize` method is required.\n *\n * Learn more at [Credentials provider](https://authjs.dev/getting-started/authentication/credentials)\n * @noInheritDoc\n */\nexport class MissingAuthorize extends AuthError {\n}\nMissingAuthorize.type = \"MissingAuthorize\";\n/**\n * Auth.js requires a secret or multiple secrets to be set, but none was not found. This is used to encrypt cookies, JWTs and other sensitive data.\n *\n * :::note\n * If you are using a framework like Next.js, we try to automatically infer the secret from the `AUTH_SECRET`, `AUTH_SECRET_1`, etc. environment variables.\n * Alternatively, you can also explicitly set the [`AuthConfig.secret`](https://authjs.dev/reference/core#secret) option.\n * :::\n *\n *\n * :::tip\n * To generate a random string, you can use the Auth.js CLI: `npx auth secret`\n * :::\n * @noInheritDoc\n */\nexport class MissingSecret extends AuthError {\n}\nMissingSecret.type = \"MissingSecret\";\n/**\n * Thrown when an Email address is already associated with an account\n * but the user is trying an OAuth account that is not linked to it.\n *\n * For security reasons, Auth.js does not automatically link OAuth accounts to existing accounts if the user is not signed in.\n *\n * :::tip\n * If you trust the OAuth provider to have verified the user's email address,\n * you can enable automatic account linking by setting [`allowDangerousEmailAccountLinking: true`](https://authjs.dev/reference/core/providers#allowdangerousemailaccountlinking)\n * in the provider configuration.\n * :::\n * @noInheritDoc\n */\nexport class OAuthAccountNotLinked extends SignInError {\n}\nOAuthAccountNotLinked.type = \"OAuthAccountNotLinked\";\n/**\n * Thrown when an OAuth provider returns an error during the sign in process.\n * This could happen for example if the user denied access to the application or there was a configuration error.\n *\n * For a full list of possible reasons, check out the specification [Authorization Code Grant: Error Response](https://www.rfc-editor.org/rfc/rfc6749#section-4.1.2.1)\n * @noInheritDoc\n */\nexport class OAuthCallbackError extends SignInError {\n}\nOAuthCallbackError.type = \"OAuthCallbackError\";\n/**\n * This error occurs during an OAuth sign in attempt when the provider's\n * response could not be parsed. This could for example happen if the provider's API\n * changed, or the [`OAuth2Config.profile`](https://authjs.dev/reference/core/providers#oauth2configprofile) method is not implemented correctly.\n * @noInheritDoc\n */\nexport class OAuthProfileParseError extends AuthError {\n}\nOAuthProfileParseError.type = \"OAuthProfileParseError\";\n/**\n * Logged on the server when Auth.js could not retrieve a session from the database (`strategy: \"database\"`).\n *\n * The database adapter might be misconfigured or the database is not reachable.\n *\n * Learn more at [Concept: Database session strategy](https://authjs.dev/concepts/session-strategies#database)\n * @noInheritDoc\n */\nexport class SessionTokenError extends AuthError {\n}\nSessionTokenError.type = \"SessionTokenError\";\n/**\n * Happens when login by [OAuth](https://authjs.dev/getting-started/authentication/oauth) could not be started.\n *\n * Possible causes are:\n * - The Authorization Server is not compliant with the [OAuth 2.0](https://www.ietf.org/rfc/rfc6749.html) or the [OIDC](https://openid.net/specs/openid-connect-core-1_0.html) specification.\n * Check the details in the error message.\n *\n * :::tip\n * Check out `[auth][details]` in the logs to know which provider failed.\n * @example\n * ```sh\n * [auth][details]: { \"provider\": \"github\" }\n * ```\n * :::\n * @noInheritDoc\n */\nexport class OAuthSignInError extends SignInError {\n}\nOAuthSignInError.type = \"OAuthSignInError\";\n/**\n * Happens when the login by an [Email provider](https://authjs.dev/getting-started/authentication/email) could not be started.\n *\n * Possible causes are:\n * - The email sent from the client is invalid, could not be normalized by [`EmailConfig.normalizeIdentifier`](https://authjs.dev/reference/core/providers/email#normalizeidentifier)\n * - The provided email/token combination has expired:\n * Ask the user to log in again.\n * - There was an error with the database:\n * Check the database logs.\n * @noInheritDoc\n */\nexport class EmailSignInError extends SignInError {\n}\nEmailSignInError.type = \"EmailSignInError\";\n/**\n * Represents an error that occurs during the sign-out process. This error\n * is logged when there are issues in terminating a user's session, either\n * by failing to delete the session from the database (in database session\n * strategies) or encountering issues during other parts of the sign-out\n * process, such as emitting sign-out events or clearing session cookies.\n *\n * The session cookie(s) are emptied even if this error is logged.\n * @noInheritDoc\n */\nexport class SignOutError extends AuthError {\n}\nSignOutError.type = \"SignOutError\";\n/**\n * Auth.js was requested to handle an operation that it does not support.\n *\n * See [`AuthAction`](https://authjs.dev/reference/core/types#authaction) for the supported actions.\n * @noInheritDoc\n */\nexport class UnknownAction extends AuthError {\n}\nUnknownAction.type = \"UnknownAction\";\n/**\n * Thrown when a Credentials provider is present but the JWT strategy (`strategy: \"jwt\"`) is not enabled.\n *\n * Learn more at [`strategy`](https://authjs.dev/reference/core#strategy) or [Credentials provider](https://authjs.dev/getting-started/authentication/credentials)\n * @noInheritDoc\n */\nexport class UnsupportedStrategy extends AuthError {\n}\nUnsupportedStrategy.type = \"UnsupportedStrategy\";\n/**\n * Thrown when an endpoint was incorrectly called without a provider, or with an unsupported provider.\n * @noInheritDoc\n */\nexport class InvalidProvider extends AuthError {\n}\nInvalidProvider.type = \"InvalidProvider\";\n/**\n * Thrown when the `trustHost` option was not set to `true`.\n *\n * Auth.js requires the `trustHost` option to be set to `true` since it's relying on the request headers' `host` value.\n *\n * :::note\n * Official Auth.js libraries might attempt to automatically set the `trustHost` option to `true` if the request is coming from a trusted host on a trusted platform.\n * :::\n *\n * Learn more at [`trustHost`](https://authjs.dev/reference/core#trusthost) or [Guide: Deployment](https://authjs.dev/getting-started/deployment)\n * @noInheritDoc\n */\nexport class UntrustedHost extends AuthError {\n}\nUntrustedHost.type = \"UntrustedHost\";\n/**\n * The user's email/token combination was invalid.\n * This could be because the email/token combination was not found in the database,\n * or because the token has expired. Ask the user to log in again.\n * @noInheritDoc\n */\nexport class Verification extends AuthError {\n}\nVerification.type = \"Verification\";\n/**\n * Error for missing CSRF tokens in client-side actions (`signIn`, `signOut`, `useSession#update`).\n * Thrown when actions lack the double submit cookie, essential for CSRF protection.\n *\n * CSRF ([Cross-Site Request Forgery](https://owasp.org/www-community/attacks/csrf))\n * is an attack leveraging authenticated user credentials for unauthorized actions.\n *\n * Double submit cookie pattern, a CSRF defense, requires matching values in a cookie\n * and request parameter. More on this at [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Glossary/CSRF).\n * @noInheritDoc\n */\nexport class MissingCSRF extends SignInError {\n}\nMissingCSRF.type = \"MissingCSRF\";\nconst clientErrors = new Set([\n \"CredentialsSignin\",\n \"OAuthAccountNotLinked\",\n \"OAuthCallbackError\",\n \"AccessDenied\",\n \"Verification\",\n \"MissingCSRF\",\n \"AccountNotLinked\",\n \"WebAuthnVerificationError\",\n]);\n/**\n * Used to only allow sending a certain subset of errors to the client.\n * Errors are always logged on the server, but to prevent leaking sensitive information,\n * only a subset of errors are sent to the client as-is.\n * @internal\n */\nexport function isClientError(error) {\n if (error instanceof AuthError)\n return clientErrors.has(error.type);\n return false;\n}\n/**\n * Thrown when multiple providers have `enableConditionalUI` set to `true`.\n * Only one provider can have this option enabled at a time.\n * @noInheritDoc\n */\nexport class DuplicateConditionalUI extends AuthError {\n}\nDuplicateConditionalUI.type = \"DuplicateConditionalUI\";\n/**\n * Thrown when a WebAuthn provider has `enableConditionalUI` set to `true` but no formField has `webauthn` in its autocomplete param.\n *\n * The `webauthn` autocomplete param is required for conditional UI to work.\n * @noInheritDoc\n */\nexport class MissingWebAuthnAutocomplete extends AuthError {\n}\nMissingWebAuthnAutocomplete.type = \"MissingWebAuthnAutocomplete\";\n/**\n * Thrown when a WebAuthn provider fails to verify a client response.\n * @noInheritDoc\n */\nexport class WebAuthnVerificationError extends AuthError {\n}\nWebAuthnVerificationError.type = \"WebAuthnVerificationError\";\n/**\n * Thrown when an Email address is already associated with an account\n * but the user is trying an account that is not linked to it.\n *\n * For security reasons, Auth.js does not automatically link accounts to existing accounts if the user is not signed in.\n * @noInheritDoc\n */\nexport class AccountNotLinked extends SignInError {\n}\nAccountNotLinked.type = \"AccountNotLinked\";\n/**\n * Thrown when an experimental feature is used but not enabled.\n * @noInheritDoc\n */\nexport class ExperimentalFeatureNotEnabled extends AuthError {\n}\nExperimentalFeatureNotEnabled.type = \"ExperimentalFeatureNotEnabled\";\n"],"names":[],"mappings":"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","ignoreList":[0]}}, - {"offset": {"line": 884, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next-auth/lib/client.js"],"sourcesContent":["\"use client\";\nimport * as React from \"react\";\nimport { AuthError } from \"@auth/core/errors\";\n/** @todo */\nclass ClientFetchError extends AuthError {\n}\n/** @todo */\nexport class ClientSessionError extends AuthError {\n}\n// ------------------------ Internal ------------------------\n/**\n * If passed 'appContext' via getInitialProps() in _app.js\n * then get the req object from ctx and use that for the\n * req value to allow `fetchData` to\n * work seemlessly in getInitialProps() on server side\n * pages *and* in _app.js.\n * @internal\n */\nexport async function fetchData(path, __NEXTAUTH, logger, req = {}) {\n const url = `${apiBaseUrl(__NEXTAUTH)}/${path}`;\n try {\n const options = {\n headers: {\n \"Content-Type\": \"application/json\",\n ...(req?.headers?.cookie ? { cookie: req.headers.cookie } : {}),\n },\n };\n if (req?.body) {\n options.body = JSON.stringify(req.body);\n options.method = \"POST\";\n }\n const res = await fetch(url, options);\n const data = await res.json();\n if (!res.ok)\n throw data;\n return data;\n }\n catch (error) {\n logger.error(new ClientFetchError(error.message, error));\n return null;\n }\n}\n/** @internal */\nexport function apiBaseUrl(__NEXTAUTH) {\n if (typeof window === \"undefined\") {\n // Return absolute path when called server side\n return `${__NEXTAUTH.baseUrlServer}${__NEXTAUTH.basePathServer}`;\n }\n // Return relative path when called client side\n return __NEXTAUTH.basePath;\n}\n/** @internal */\nexport function useOnline() {\n const [isOnline, setIsOnline] = React.useState(typeof navigator !== \"undefined\" ? navigator.onLine : false);\n const setOnline = () => setIsOnline(true);\n const setOffline = () => setIsOnline(false);\n React.useEffect(() => {\n window.addEventListener(\"online\", setOnline);\n window.addEventListener(\"offline\", setOffline);\n return () => {\n window.removeEventListener(\"online\", setOnline);\n window.removeEventListener(\"offline\", setOffline);\n };\n }, []);\n return isOnline;\n}\n/**\n * Returns the number of seconds elapsed since January 1, 1970 00:00:00 UTC.\n * @internal\n */\nexport function now() {\n return Math.floor(Date.now() / 1000);\n}\n/**\n * Returns an `URL` like object to make requests/redirects from server-side\n * @internal\n */\nexport function parseUrl(url) {\n const defaultUrl = new URL(\"http://localhost:3000/api/auth\");\n if (url && !url.startsWith(\"http\")) {\n url = `https://${url}`;\n }\n const _url = new URL(url || defaultUrl);\n const path = (_url.pathname === \"/\" ? defaultUrl.pathname : _url.pathname)\n // Remove trailing slash\n .replace(/\\/$/, \"\");\n const base = `${_url.origin}${path}`;\n return {\n origin: _url.origin,\n host: _url.host,\n path,\n base,\n toString: () => base,\n };\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;AACA;AACA;AAFA;;;AAGA,UAAU,GACV,MAAM,yBAAyB,oMAAS;AACxC;AAEO,MAAM,2BAA2B,oMAAS;AACjD;AAUO,eAAe,UAAU,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,WAAW,YAAY,CAAC,EAAE,MAAM;IAC/C,IAAI;QACA,MAAM,UAAU;YACZ,SAAS;gBACL,gBAAgB;gBAChB,GAAI,KAAK,SAAS,SAAS;oBAAE,QAAQ,IAAI,OAAO,CAAC,MAAM;gBAAC,IAAI,CAAC,CAAC;YAClE;QACJ;QACA,IAAI,KAAK,MAAM;YACX,QAAQ,IAAI,GAAG,KAAK,SAAS,CAAC,IAAI,IAAI;YACtC,QAAQ,MAAM,GAAG;QACrB;QACA,MAAM,MAAM,MAAM,MAAM,KAAK;QAC7B,MAAM,OAAO,MAAM,IAAI,IAAI;QAC3B,IAAI,CAAC,IAAI,EAAE,EACP,MAAM;QACV,OAAO;IACX,EACA,OAAO,OAAO;QACV,OAAO,KAAK,CAAC,IAAI,iBAAiB,MAAM,OAAO,EAAE;QACjD,OAAO;IACX;AACJ;AAEO,SAAS,WAAW,UAAU;IACjC,IAAI,OAAO,WAAW,aAAa;QAC/B,+CAA+C;QAC/C,OAAO,GAAG,WAAW,aAAa,GAAG,WAAW,cAAc,EAAE;IACpE;IACA,+CAA+C;IAC/C,OAAO,WAAW,QAAQ;AAC9B;AAEO,SAAS;IACZ,MAAM,CAAC,UAAU,YAAY,GAAG,qNAAc,CAAC,OAAO,cAAc,cAAc,UAAU,MAAM,GAAG;IACrG,MAAM,YAAY,IAAM,YAAY;IACpC,MAAM,aAAa,IAAM,YAAY;IACrC,sNAAe;+BAAC;YACZ,OAAO,gBAAgB,CAAC,UAAU;YAClC,OAAO,gBAAgB,CAAC,WAAW;YACnC;uCAAO;oBACH,OAAO,mBAAmB,CAAC,UAAU;oBACrC,OAAO,mBAAmB,CAAC,WAAW;gBAC1C;;QACJ;8BAAG,EAAE;IACL,OAAO;AACX;AAKO,SAAS;IACZ,OAAO,KAAK,KAAK,CAAC,KAAK,GAAG,KAAK;AACnC;AAKO,SAAS,SAAS,GAAG;IACxB,MAAM,aAAa,IAAI,IAAI;IAC3B,IAAI,OAAO,CAAC,IAAI,UAAU,CAAC,SAAS;QAChC,MAAM,CAAC,QAAQ,EAAE,KAAK;IAC1B;IACA,MAAM,OAAO,IAAI,IAAI,OAAO;IAC5B,MAAM,OAAO,CAAC,KAAK,QAAQ,KAAK,MAAM,WAAW,QAAQ,GAAG,KAAK,QAAQ,CACrE,wBAAwB;KACvB,OAAO,CAAC,OAAO;IACpB,MAAM,OAAO,GAAG,KAAK,MAAM,GAAG,MAAM;IACpC,OAAO;QACH,QAAQ,KAAK,MAAM;QACnB,MAAM,KAAK,IAAI;QACf;QACA;QACA,UAAU,IAAM;IACpB;AACJ","ignoreList":[0]}}, - {"offset": {"line": 981, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next-auth/react.js"],"sourcesContent":["/**\n *\n * NextAuth.js is the official integration of Auth.js for Next.js applications. It supports both\n * [Client Components](https://nextjs.org/docs/app/building-your-application/rendering/client-components) and the\n * [Pages Router](https://nextjs.org/docs/pages). It includes methods for signing in, signing out, hooks, and a React\n * Context provider to wrap your application and make session data available anywhere.\n *\n * For use in [Server Actions](https://nextjs.org/docs/app/api-reference/functions/server-actions), check out [these methods](https://authjs.dev/guides/upgrade-to-v5#methods)\n *\n * @module react\n */\n\"use client\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport { apiBaseUrl, ClientSessionError, fetchData, now, parseUrl, useOnline, } from \"./lib/client.js\";\n// This behaviour mirrors the default behaviour for getting the site name that\n// happens server side in server/index.js\n// 1. An empty value is legitimate when the code is being invoked client side as\n// relative URLs are valid in that context and so defaults to empty.\n// 2. When invoked server side the value is picked up from an environment\n// variable and defaults to 'http://localhost:3000'.\nexport const __NEXTAUTH = {\n baseUrl: parseUrl(process.env.NEXTAUTH_URL ?? process.env.VERCEL_URL).origin,\n basePath: parseUrl(process.env.NEXTAUTH_URL).path,\n baseUrlServer: parseUrl(process.env.NEXTAUTH_URL_INTERNAL ??\n process.env.NEXTAUTH_URL ??\n process.env.VERCEL_URL).origin,\n basePathServer: parseUrl(process.env.NEXTAUTH_URL_INTERNAL ?? process.env.NEXTAUTH_URL).path,\n _lastSync: 0,\n _session: undefined,\n _getSession: () => { },\n};\n// https://github.com/nextauthjs/next-auth/pull/10762\nlet broadcastChannel = null;\nfunction getNewBroadcastChannel() {\n if (typeof BroadcastChannel === \"undefined\") {\n return {\n postMessage: () => { },\n addEventListener: () => { },\n removeEventListener: () => { },\n name: \"next-auth\",\n onmessage: null,\n onmessageerror: null,\n close: () => { },\n dispatchEvent: () => false,\n };\n }\n return new BroadcastChannel(\"next-auth\");\n}\nfunction broadcast() {\n if (broadcastChannel === null) {\n broadcastChannel = getNewBroadcastChannel();\n }\n return broadcastChannel;\n}\n// TODO:\nconst logger = {\n debug: console.debug,\n error: console.error,\n warn: console.warn,\n};\nexport const SessionContext = React.createContext?.(undefined);\n/**\n * React Hook that gives you access to the logged in user's session data and lets you modify it.\n *\n * :::info\n * `useSession` is for client-side use only and when using [Next.js App Router (`app/`)](https://nextjs.org/blog/next-13-4#nextjs-app-router) you should prefer the `auth()` export.\n * :::\n */\nexport function useSession(options) {\n if (!SessionContext) {\n throw new Error(\"React Context is unavailable in Server Components\");\n }\n // @ts-expect-error Satisfy TS if branch on line below\n const value = React.useContext(SessionContext);\n if (!value && process.env.NODE_ENV !== \"production\") {\n throw new Error(\"[next-auth]: `useSession` must be wrapped in a \");\n }\n const { required, onUnauthenticated } = options ?? {};\n const requiredAndNotLoading = required && value.status === \"unauthenticated\";\n React.useEffect(() => {\n if (requiredAndNotLoading) {\n const url = `${__NEXTAUTH.basePath}/signin?${new URLSearchParams({\n error: \"SessionRequired\",\n callbackUrl: window.location.href,\n })}`;\n if (onUnauthenticated)\n onUnauthenticated();\n else\n window.location.href = url;\n }\n }, [requiredAndNotLoading, onUnauthenticated]);\n if (requiredAndNotLoading) {\n return {\n data: value.data,\n update: value.update,\n status: \"loading\",\n };\n }\n return value;\n}\nexport async function getSession(params) {\n const session = await fetchData(\"session\", __NEXTAUTH, logger, params);\n if (params?.broadcast ?? true) {\n // https://github.com/nextauthjs/next-auth/pull/11470\n getNewBroadcastChannel().postMessage({\n event: \"session\",\n data: { trigger: \"getSession\" },\n });\n }\n return session;\n}\n/**\n * Returns the current Cross-Site Request Forgery Token (CSRF Token)\n * required to make requests that changes state. (e.g. signing in or out, or updating the session).\n *\n * [CSRF Prevention: Double Submit Cookie](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#double-submit-cookie)\n */\nexport async function getCsrfToken() {\n const response = await fetchData(\"csrf\", __NEXTAUTH, logger);\n return response?.csrfToken ?? \"\";\n}\nexport async function getProviders() {\n return fetchData(\"providers\", __NEXTAUTH, logger);\n}\nexport async function signIn(provider, options, authorizationParams) {\n const { callbackUrl, ...rest } = options ?? {};\n const { redirect = true, redirectTo = callbackUrl ?? window.location.href, ...signInParams } = rest;\n const baseUrl = apiBaseUrl(__NEXTAUTH);\n const providers = await getProviders();\n if (!providers) {\n const url = `${baseUrl}/error`;\n window.location.href = url;\n return; // TODO: Return error if `redirect: false`\n }\n if (!provider || !providers[provider]) {\n const url = `${baseUrl}/signin?${new URLSearchParams({\n callbackUrl: redirectTo,\n })}`;\n window.location.href = url;\n return; // TODO: Return error if `redirect: false`\n }\n const providerType = providers[provider].type;\n if (providerType === \"webauthn\") {\n // TODO: Add docs link with explanation\n throw new TypeError([\n `Provider id \"${provider}\" refers to a WebAuthn provider.`,\n 'Please use `import { signIn } from \"next-auth/webauthn\"` instead.',\n ].join(\"\\n\"));\n }\n const signInUrl = `${baseUrl}/${providerType === \"credentials\" ? \"callback\" : \"signin\"}/${provider}`;\n const csrfToken = await getCsrfToken();\n const res = await fetch(`${signInUrl}?${new URLSearchParams(authorizationParams)}`, {\n method: \"post\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"X-Auth-Return-Redirect\": \"1\",\n },\n body: new URLSearchParams({\n ...signInParams,\n csrfToken,\n callbackUrl: redirectTo,\n }),\n });\n const data = await res.json();\n if (redirect) {\n const url = data.url ?? redirectTo;\n window.location.href = url;\n // If url contains a hash, the browser does not reload the page. We reload manually\n if (url.includes(\"#\"))\n window.location.reload();\n return;\n }\n const error = new URL(data.url).searchParams.get(\"error\") ?? undefined;\n const code = new URL(data.url).searchParams.get(\"code\") ?? undefined;\n if (res.ok) {\n await __NEXTAUTH._getSession({ event: \"storage\" });\n }\n return {\n error,\n code,\n status: res.status,\n ok: res.ok,\n url: error ? null : data.url,\n };\n}\nexport async function signOut(options) {\n const { redirect = true, redirectTo = options?.callbackUrl ?? window.location.href, } = options ?? {};\n const baseUrl = apiBaseUrl(__NEXTAUTH);\n const csrfToken = await getCsrfToken();\n const res = await fetch(`${baseUrl}/signout`, {\n method: \"post\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"X-Auth-Return-Redirect\": \"1\",\n },\n body: new URLSearchParams({ csrfToken, callbackUrl: redirectTo }),\n });\n const data = await res.json();\n broadcast().postMessage({ event: \"session\", data: { trigger: \"signout\" } });\n if (redirect) {\n const url = data.url ?? redirectTo;\n window.location.href = url;\n // If url contains a hash, the browser does not reload the page. We reload manually\n if (url.includes(\"#\"))\n window.location.reload();\n return;\n }\n await __NEXTAUTH._getSession({ event: \"storage\" });\n return data;\n}\n/**\n * [React Context](https://react.dev/learn/passing-data-deeply-with-context) provider to wrap the app (`pages/`) to make session data available anywhere.\n *\n * When used, the session state is automatically synchronized across all open tabs/windows and they are all updated whenever they gain or lose focus\n * or the state changes (e.g. a user signs in or out) when {@link SessionProviderProps.refetchOnWindowFocus} is `true`.\n *\n * :::info\n * `SessionProvider` is for client-side use only and when using [Next.js App Router (`app/`)](https://nextjs.org/blog/next-13-4#nextjs-app-router) you should prefer the `auth()` export.\n * :::\n */\nexport function SessionProvider(props) {\n if (!SessionContext) {\n throw new Error(\"React Context is unavailable in Server Components\");\n }\n const { children, basePath, refetchInterval, refetchWhenOffline } = props;\n if (basePath)\n __NEXTAUTH.basePath = basePath;\n /**\n * If session was `null`, there was an attempt to fetch it,\n * but it failed, but we still treat it as a valid initial value.\n */\n const hasInitialSession = props.session !== undefined;\n /** If session was passed, initialize as already synced */\n __NEXTAUTH._lastSync = hasInitialSession ? now() : 0;\n const [session, setSession] = React.useState(() => {\n if (hasInitialSession)\n __NEXTAUTH._session = props.session;\n return props.session;\n });\n /** If session was passed, initialize as not loading */\n const [loading, setLoading] = React.useState(!hasInitialSession);\n React.useEffect(() => {\n __NEXTAUTH._getSession = async ({ event } = {}) => {\n try {\n const storageEvent = event === \"storage\";\n // We should always update if we don't have a client session yet\n // or if there are events from other tabs/windows\n if (storageEvent || __NEXTAUTH._session === undefined) {\n __NEXTAUTH._lastSync = now();\n __NEXTAUTH._session = await getSession({\n broadcast: !storageEvent,\n });\n setSession(__NEXTAUTH._session);\n return;\n }\n if (\n // If there is no time defined for when a session should be considered\n // stale, then it's okay to use the value we have until an event is\n // triggered which updates it\n !event ||\n // If the client doesn't have a session then we don't need to call\n // the server to check if it does (if they have signed in via another\n // tab or window that will come through as a \"stroage\" event\n // event anyway)\n __NEXTAUTH._session === null ||\n // Bail out early if the client session is not stale yet\n now() < __NEXTAUTH._lastSync) {\n return;\n }\n // An event or session staleness occurred, update the client session.\n __NEXTAUTH._lastSync = now();\n __NEXTAUTH._session = await getSession();\n setSession(__NEXTAUTH._session);\n }\n catch (error) {\n logger.error(new ClientSessionError(error.message, error));\n }\n finally {\n setLoading(false);\n }\n };\n __NEXTAUTH._getSession();\n return () => {\n __NEXTAUTH._lastSync = 0;\n __NEXTAUTH._session = undefined;\n __NEXTAUTH._getSession = () => { };\n };\n }, []);\n React.useEffect(() => {\n const handle = () => __NEXTAUTH._getSession({ event: \"storage\" });\n // Listen for storage events and update session if event fired from\n // another window (but suppress firing another event to avoid a loop)\n // Fetch new session data but tell it to not to fire another event to\n // avoid an infinite loop.\n // Note: We could pass session data through and do something like\n // `setData(message.data)` but that can cause problems depending\n // on how the session object is being used in the client; it is\n // more robust to have each window/tab fetch it's own copy of the\n // session object rather than share it across instances.\n broadcast().addEventListener(\"message\", handle);\n return () => broadcast().removeEventListener(\"message\", handle);\n }, []);\n React.useEffect(() => {\n const { refetchOnWindowFocus = true } = props;\n // Listen for when the page is visible, if the user switches tabs\n // and makes our tab visible again, re-fetch the session, but only if\n // this feature is not disabled.\n const visibilityHandler = () => {\n if (refetchOnWindowFocus && document.visibilityState === \"visible\")\n __NEXTAUTH._getSession({ event: \"visibilitychange\" });\n };\n document.addEventListener(\"visibilitychange\", visibilityHandler, false);\n return () => document.removeEventListener(\"visibilitychange\", visibilityHandler, false);\n }, [props.refetchOnWindowFocus]);\n const isOnline = useOnline();\n // TODO: Flip this behavior in next major version\n const shouldRefetch = refetchWhenOffline !== false || isOnline;\n React.useEffect(() => {\n if (refetchInterval && shouldRefetch) {\n const refetchIntervalTimer = setInterval(() => {\n if (__NEXTAUTH._session) {\n __NEXTAUTH._getSession({ event: \"poll\" });\n }\n }, refetchInterval * 1000);\n return () => clearInterval(refetchIntervalTimer);\n }\n }, [refetchInterval, shouldRefetch]);\n const value = React.useMemo(() => ({\n data: session,\n status: loading\n ? \"loading\"\n : session\n ? \"authenticated\"\n : \"unauthenticated\",\n async update(data) {\n if (loading)\n return;\n setLoading(true);\n const newSession = await fetchData(\"session\", __NEXTAUTH, logger, typeof data === \"undefined\"\n ? undefined\n : { body: { csrfToken: await getCsrfToken(), data } });\n setLoading(false);\n if (newSession) {\n setSession(newSession);\n broadcast().postMessage({\n event: \"session\",\n data: { trigger: \"getSession\" },\n });\n }\n return newSession;\n },\n }), [session, loading]);\n return (\n // @ts-expect-error\n _jsx(SessionContext.Provider, { value: value, children: children }));\n}\n"],"names":[],"mappings":"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","ignoreList":[0]}}] + {"offset": {"line": 175, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/hooks/useAuth.ts"],"sourcesContent":["'use client';\r\n\r\nimport { useState, useEffect, useCallback } from 'react';\r\nimport { signIn, signOut, useSession } from 'next-auth/react';\r\nimport { UserProfile } from '@/lib/types';\r\nimport api from '@/lib/api';\r\n\r\nexport const useAuth = () => {\r\n const { data: session, status } = useSession();\r\n const [user, setUser] = useState(null);\r\n const loading = status === 'loading';\r\n\r\n // Fetch real profile from DB when session is available\r\n useEffect(() => {\r\n if (session?.user?.id) {\r\n fetch('/api/user/profile', { cache: 'no-store' })\r\n .then(res => res.json())\r\n .then(dbUser => {\r\n const planId = dbUser.plan || 'free';\r\n const planDetails = dbUser.planDetails || {\r\n id: 'free',\r\n displayName: 'Gratuit',\r\n maxAiActions: 100,\r\n maxProjects: 3\r\n };\r\n\r\n setUser({\r\n id: dbUser.id,\r\n email: dbUser.email,\r\n name: dbUser.name || 'User',\r\n avatar: dbUser.avatar,\r\n bio: dbUser.bio,\r\n subscription: {\r\n plan: planId,\r\n planDetails: planDetails,\r\n startDate: new Date(dbUser.createdAt).getTime(),\r\n status: 'active'\r\n },\r\n usage: {\r\n aiActionsCurrent: dbUser.aiActionsUsed || 0,\r\n aiActionsLimit: planDetails.maxAiActions,\r\n projectsLimit: planDetails.maxProjects,\r\n },\r\n preferences: { theme: 'light', dailyWordGoal: dbUser.dailyWordGoal || 500, language: 'fr' },\r\n stats: {\r\n totalWordsWritten: dbUser.totalWords || 0,\r\n writingStreak: dbUser.writingStreak || 0,\r\n lastWriteDate: dbUser.lastWriteDate ? new Date(dbUser.lastWriteDate).getTime() : 0,\r\n },\r\n });\r\n })\r\n .catch(err => {\r\n console.error('Failed to fetch user profile:', err);\r\n // Fallback to session data\r\n setUser({\r\n id: session.user.id || '',\r\n email: session.user.email || '',\r\n name: session.user.name || 'User',\r\n subscription: { plan: 'free', startDate: Date.now(), status: 'active' },\r\n usage: { aiActionsCurrent: 0, aiActionsLimit: 100, projectsLimit: 3 },\r\n preferences: { theme: 'light', dailyWordGoal: 500, language: 'fr' },\r\n stats: { totalWordsWritten: 0, writingStreak: 0, lastWriteDate: 0 },\r\n });\r\n });\r\n } else if (status === 'unauthenticated') {\r\n setUser(null);\r\n }\r\n }, [session, status]);\r\n\r\n const login = useCallback(async (email: string, password: string) => {\r\n const result = await signIn('credentials', {\r\n email,\r\n password,\r\n redirect: false,\r\n });\r\n\r\n if (result?.error) {\r\n throw new Error(result.error === 'CredentialsSignin'\r\n ? 'Email ou mot de passe incorrect'\r\n : result.error\r\n );\r\n }\r\n }, []);\r\n\r\n const signup = useCallback(async (email: string, password: string, name: string) => {\r\n await api.auth.register(email, password, name);\r\n const result = await signIn('credentials', {\r\n email,\r\n password,\r\n redirect: false,\r\n });\r\n if (result?.error) {\r\n throw new Error('Compte créé mais erreur de connexion automatique');\r\n }\r\n }, []);\r\n\r\n const logout = useCallback(async () => {\r\n await signOut({ redirect: false });\r\n setUser(null);\r\n }, []);\r\n\r\n const incrementUsage = useCallback((serverCount?: number) => {\r\n if (user) {\r\n setUser({\r\n ...user,\r\n usage: {\r\n ...user.usage,\r\n aiActionsCurrent: serverCount !== undefined ? serverCount : user.usage.aiActionsCurrent + 1,\r\n },\r\n });\r\n }\r\n }, [user]);\r\n\r\n return { user, login, signup, logout, incrementUsage, loading };\r\n};\r\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 346, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/providers/AuthProvider.tsx"],"sourcesContent":["'use client';\r\n\r\nimport React, { createContext, useContext } from 'react';\r\nimport { SessionProvider } from 'next-auth/react';\r\nimport { useAuth } from '@/hooks/useAuth';\r\n\r\nconst AuthContext = createContext(null);\r\n\r\nfunction AuthInner({ children }: { children: React.ReactNode }) {\r\n const auth = useAuth();\r\n return {children};\r\n}\r\n\r\nexport const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport function useAuthContext() {\r\n return useContext(AuthContext);\r\n}\r\n"],"names":[],"mappings":";;;;;;;AAEA;AACA;AACA;;;AAJA;;;;AAMA,MAAM,4BAAc,IAAA,0NAAa,EAAM;AAEvC,SAAS,UAAU,EAAE,QAAQ,EAAiC;;IAC1D,MAAM,OAAO,IAAA,iLAAO;IACpB,qBAAO,yOAAC,YAAY,QAAQ;QAAC,OAAO;kBAAO;;;;;;AAC/C;GAHS;;QACQ,iLAAO;;;KADf;AAKF,MAAM,eAAwD,CAAC,EAAE,QAAQ,EAAE;IAC9E,qBACI,yOAAC,uMAAe;kBACZ,cAAA,yOAAC;sBAAW;;;;;;;;;;;AAGxB;MANa;AAQN,SAAS;;IACZ,OAAO,IAAA,uNAAU,EAAC;AACtB;IAFgB"}}, + {"offset": {"line": 412, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js"],"sourcesContent":["/**\n * @license React\n * react-jsx-dev-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n case REACT_VIEW_TRANSITION_TYPE:\n return \"ViewTransition\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"next/dist/compiled/react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsxDEV = function (type, config, maybeKey, isStaticChildren) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n if (trackActualOwner) {\n var previousStackTraceLimit = Error.stackTraceLimit;\n Error.stackTraceLimit = 10;\n var debugStackDEV = Error(\"react-stack-top-frame\");\n Error.stackTraceLimit = previousStackTraceLimit;\n } else debugStackDEV = unknownOwnerDebugStack;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStackDEV,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n"],"names":[],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 628, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/dist/compiled/react/jsx-dev-runtime.js"],"sourcesContent":["'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-dev-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-dev-runtime.development.js');\n}\n"],"names":[],"mappings":"AAEI;AAFJ;AAEA;;KAEO;IACL,OAAO,OAAO;AAChB","ignoreList":[0]}}, + {"offset": {"line": 639, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/%40auth/core/errors.js"],"sourcesContent":["/**\n * Base error class for all Auth.js errors.\n * It's optimized to be printed in the server logs in a nicely formatted way\n * via the [`logger.error`](https://authjs.dev/reference/core#logger) option.\n * @noInheritDoc\n */\nexport class AuthError extends Error {\n /** @internal */\n constructor(message, errorOptions) {\n if (message instanceof Error) {\n super(undefined, {\n cause: { err: message, ...message.cause, ...errorOptions },\n });\n }\n else if (typeof message === \"string\") {\n if (errorOptions instanceof Error) {\n errorOptions = { err: errorOptions, ...errorOptions.cause };\n }\n super(message, errorOptions);\n }\n else {\n super(undefined, message);\n }\n this.name = this.constructor.name;\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/3841\n this.type = this.constructor.type ?? \"AuthError\";\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/3841\n this.kind = this.constructor.kind ?? \"error\";\n Error.captureStackTrace?.(this, this.constructor);\n const url = `https://errors.authjs.dev#${this.type.toLowerCase()}`;\n this.message += `${this.message ? \". \" : \"\"}Read more at ${url}`;\n }\n}\n/**\n * Thrown when the user's sign-in attempt failed.\n * @noInheritDoc\n */\nexport class SignInError extends AuthError {\n}\n/** @internal */\nSignInError.kind = \"signIn\";\n/**\n * One of the database [`Adapter` methods](https://authjs.dev/reference/core/adapters#methods)\n * failed during execution.\n *\n * :::tip\n * If `debug: true` is set, you can check out `[auth][debug]` in the logs to learn more about the failed adapter method execution.\n * @example\n * ```sh\n * [auth][debug]: adapter_getUserByEmail\n * { \"args\": [undefined] }\n * ```\n * :::\n * @noInheritDoc\n */\nexport class AdapterError extends AuthError {\n}\nAdapterError.type = \"AdapterError\";\n/**\n * Thrown when the execution of the [`signIn` callback](https://authjs.dev/reference/core/types#signin) fails\n * or if it returns `false`.\n * @noInheritDoc\n */\nexport class AccessDenied extends AuthError {\n}\nAccessDenied.type = \"AccessDenied\";\n/**\n * This error occurs when the user cannot finish login.\n * Depending on the provider type, this could have happened for multiple reasons.\n *\n * :::tip\n * Check out `[auth][details]` in the logs to know which provider failed.\n * @example\n * ```sh\n * [auth][details]: { \"provider\": \"github\" }\n * ```\n * :::\n *\n * For an [OAuth provider](https://authjs.dev/getting-started/authentication/oauth), possible causes are:\n * - The user denied access to the application\n * - There was an error parsing the OAuth Profile:\n * Check out the provider's `profile` or `userinfo.request` method to make sure\n * it correctly fetches the user's profile.\n * - The `signIn` or `jwt` callback methods threw an uncaught error:\n * Check the callback method implementations.\n *\n * For an [Email provider](https://authjs.dev/getting-started/authentication/email), possible causes are:\n * - The provided email/token combination was invalid/missing:\n * Check if the provider's `sendVerificationRequest` method correctly sends the email.\n * - The provided email/token combination has expired:\n * Ask the user to log in again.\n * - There was an error with the database:\n * Check the database logs.\n *\n * For a [Credentials provider](https://authjs.dev/getting-started/authentication/credentials), possible causes are:\n * - The `authorize` method threw an uncaught error:\n * Check the provider's `authorize` method.\n * - The `signIn` or `jwt` callback methods threw an uncaught error:\n * Check the callback method implementations.\n *\n * :::tip\n * Check out `[auth][cause]` in the error message for more details.\n * It will show the original stack trace.\n * :::\n * @noInheritDoc\n */\nexport class CallbackRouteError extends AuthError {\n}\nCallbackRouteError.type = \"CallbackRouteError\";\n/**\n * Thrown when Auth.js is misconfigured and accidentally tried to require authentication on a custom error page.\n * To prevent an infinite loop, Auth.js will instead render its default error page.\n *\n * To fix this, make sure that the `error` page does not require authentication.\n *\n * Learn more at [Guide: Error pages](https://authjs.dev/guides/pages/error)\n * @noInheritDoc\n */\nexport class ErrorPageLoop extends AuthError {\n}\nErrorPageLoop.type = \"ErrorPageLoop\";\n/**\n * One of the [`events` methods](https://authjs.dev/reference/core/types#eventcallbacks)\n * failed during execution.\n *\n * Make sure that the `events` methods are implemented correctly and uncaught errors are handled.\n *\n * Learn more at [`events`](https://authjs.dev/reference/core/types#eventcallbacks)\n * @noInheritDoc\n */\nexport class EventError extends AuthError {\n}\nEventError.type = \"EventError\";\n/**\n * Thrown when Auth.js is unable to verify a `callbackUrl` value.\n * The browser either disabled cookies or the `callbackUrl` is not a valid URL.\n *\n * Somebody might have tried to manipulate the callback URL that Auth.js uses to redirect the user back to the configured `callbackUrl`/page.\n * This could be a malicious hacker trying to redirect the user to a phishing site.\n * To prevent this, Auth.js checks if the callback URL is valid and throws this error if it is not.\n *\n * There is no action required, but it might be an indicator that somebody is trying to attack your application.\n * @noInheritDoc\n */\nexport class InvalidCallbackUrl extends AuthError {\n}\nInvalidCallbackUrl.type = \"InvalidCallbackUrl\";\n/**\n * Can be thrown from the `authorize` callback of the Credentials provider.\n * When an error occurs during the `authorize` callback, two things can happen:\n * 1. The user is redirected to the signin page, with `error=CredentialsSignin&code=credentials` in the URL. `code` is configurable.\n * 2. If you throw this error in a framework that handles form actions server-side, this error is thrown, instead of redirecting the user, so you'll need to handle.\n * @noInheritDoc\n */\nexport class CredentialsSignin extends SignInError {\n constructor() {\n super(...arguments);\n /**\n * The error code that is set in the `code` query parameter of the redirect URL.\n *\n *\n * ⚠ NOTE: This property is going to be included in the URL, so make sure it does not hint at sensitive errors.\n *\n * The full error is always logged on the server, if you need to debug.\n *\n * Generally, we don't recommend hinting specifically if the user had either a wrong username or password specifically,\n * try rather something like \"Invalid credentials\".\n */\n this.code = \"credentials\";\n }\n}\nCredentialsSignin.type = \"CredentialsSignin\";\n/**\n * One of the configured OAuth or OIDC providers is missing the `authorization`, `token` or `userinfo`, or `issuer` configuration.\n * To perform OAuth or OIDC sign in, at least one of these endpoints is required.\n *\n * Learn more at [`OAuth2Config`](https://authjs.dev/reference/core/providers#oauth2configprofile) or [Guide: OAuth Provider](https://authjs.dev/guides/configuring-oauth-providers)\n * @noInheritDoc\n */\nexport class InvalidEndpoints extends AuthError {\n}\nInvalidEndpoints.type = \"InvalidEndpoints\";\n/**\n * Thrown when a PKCE, state or nonce OAuth check could not be performed.\n * This could happen if the OAuth provider is configured incorrectly or if the browser is blocking cookies.\n *\n * Learn more at [`checks`](https://authjs.dev/reference/core/providers#checks)\n * @noInheritDoc\n */\nexport class InvalidCheck extends AuthError {\n}\nInvalidCheck.type = \"InvalidCheck\";\n/**\n * Logged on the server when Auth.js could not decode or encode a JWT-based (`strategy: \"jwt\"`) session.\n *\n * Possible causes are either a misconfigured `secret` or a malformed JWT or `encode/decode` methods.\n *\n * :::note\n * When this error is logged, the session cookie is destroyed.\n * :::\n *\n * Learn more at [`secret`](https://authjs.dev/reference/core#secret), [`jwt.encode`](https://authjs.dev/reference/core/jwt#encode-1) or [`jwt.decode`](https://authjs.dev/reference/core/jwt#decode-2) for more information.\n * @noInheritDoc\n */\nexport class JWTSessionError extends AuthError {\n}\nJWTSessionError.type = \"JWTSessionError\";\n/**\n * Thrown if Auth.js is misconfigured. This could happen if you configured an Email provider but did not set up a database adapter,\n * or tried using a `strategy: \"database\"` session without a database adapter.\n * In both cases, make sure you either remove the configuration or add the missing adapter.\n *\n * Learn more at [Database Adapters](https://authjs.dev/getting-started/database), [Email provider](https://authjs.dev/getting-started/authentication/email) or [Concept: Database session strategy](https://authjs.dev/concepts/session-strategies#database-session)\n * @noInheritDoc\n */\nexport class MissingAdapter extends AuthError {\n}\nMissingAdapter.type = \"MissingAdapter\";\n/**\n * Thrown similarily to [`MissingAdapter`](https://authjs.dev/reference/core/errors#missingadapter), but only some required methods were missing.\n *\n * Make sure you either remove the configuration or add the missing methods to the adapter.\n *\n * Learn more at [Database Adapters](https://authjs.dev/getting-started/database)\n * @noInheritDoc\n */\nexport class MissingAdapterMethods extends AuthError {\n}\nMissingAdapterMethods.type = \"MissingAdapterMethods\";\n/**\n * Thrown when a Credentials provider is missing the `authorize` configuration.\n * To perform credentials sign in, the `authorize` method is required.\n *\n * Learn more at [Credentials provider](https://authjs.dev/getting-started/authentication/credentials)\n * @noInheritDoc\n */\nexport class MissingAuthorize extends AuthError {\n}\nMissingAuthorize.type = \"MissingAuthorize\";\n/**\n * Auth.js requires a secret or multiple secrets to be set, but none was not found. This is used to encrypt cookies, JWTs and other sensitive data.\n *\n * :::note\n * If you are using a framework like Next.js, we try to automatically infer the secret from the `AUTH_SECRET`, `AUTH_SECRET_1`, etc. environment variables.\n * Alternatively, you can also explicitly set the [`AuthConfig.secret`](https://authjs.dev/reference/core#secret) option.\n * :::\n *\n *\n * :::tip\n * To generate a random string, you can use the Auth.js CLI: `npx auth secret`\n * :::\n * @noInheritDoc\n */\nexport class MissingSecret extends AuthError {\n}\nMissingSecret.type = \"MissingSecret\";\n/**\n * Thrown when an Email address is already associated with an account\n * but the user is trying an OAuth account that is not linked to it.\n *\n * For security reasons, Auth.js does not automatically link OAuth accounts to existing accounts if the user is not signed in.\n *\n * :::tip\n * If you trust the OAuth provider to have verified the user's email address,\n * you can enable automatic account linking by setting [`allowDangerousEmailAccountLinking: true`](https://authjs.dev/reference/core/providers#allowdangerousemailaccountlinking)\n * in the provider configuration.\n * :::\n * @noInheritDoc\n */\nexport class OAuthAccountNotLinked extends SignInError {\n}\nOAuthAccountNotLinked.type = \"OAuthAccountNotLinked\";\n/**\n * Thrown when an OAuth provider returns an error during the sign in process.\n * This could happen for example if the user denied access to the application or there was a configuration error.\n *\n * For a full list of possible reasons, check out the specification [Authorization Code Grant: Error Response](https://www.rfc-editor.org/rfc/rfc6749#section-4.1.2.1)\n * @noInheritDoc\n */\nexport class OAuthCallbackError extends SignInError {\n}\nOAuthCallbackError.type = \"OAuthCallbackError\";\n/**\n * This error occurs during an OAuth sign in attempt when the provider's\n * response could not be parsed. This could for example happen if the provider's API\n * changed, or the [`OAuth2Config.profile`](https://authjs.dev/reference/core/providers#oauth2configprofile) method is not implemented correctly.\n * @noInheritDoc\n */\nexport class OAuthProfileParseError extends AuthError {\n}\nOAuthProfileParseError.type = \"OAuthProfileParseError\";\n/**\n * Logged on the server when Auth.js could not retrieve a session from the database (`strategy: \"database\"`).\n *\n * The database adapter might be misconfigured or the database is not reachable.\n *\n * Learn more at [Concept: Database session strategy](https://authjs.dev/concepts/session-strategies#database)\n * @noInheritDoc\n */\nexport class SessionTokenError extends AuthError {\n}\nSessionTokenError.type = \"SessionTokenError\";\n/**\n * Happens when login by [OAuth](https://authjs.dev/getting-started/authentication/oauth) could not be started.\n *\n * Possible causes are:\n * - The Authorization Server is not compliant with the [OAuth 2.0](https://www.ietf.org/rfc/rfc6749.html) or the [OIDC](https://openid.net/specs/openid-connect-core-1_0.html) specification.\n * Check the details in the error message.\n *\n * :::tip\n * Check out `[auth][details]` in the logs to know which provider failed.\n * @example\n * ```sh\n * [auth][details]: { \"provider\": \"github\" }\n * ```\n * :::\n * @noInheritDoc\n */\nexport class OAuthSignInError extends SignInError {\n}\nOAuthSignInError.type = \"OAuthSignInError\";\n/**\n * Happens when the login by an [Email provider](https://authjs.dev/getting-started/authentication/email) could not be started.\n *\n * Possible causes are:\n * - The email sent from the client is invalid, could not be normalized by [`EmailConfig.normalizeIdentifier`](https://authjs.dev/reference/core/providers/email#normalizeidentifier)\n * - The provided email/token combination has expired:\n * Ask the user to log in again.\n * - There was an error with the database:\n * Check the database logs.\n * @noInheritDoc\n */\nexport class EmailSignInError extends SignInError {\n}\nEmailSignInError.type = \"EmailSignInError\";\n/**\n * Represents an error that occurs during the sign-out process. This error\n * is logged when there are issues in terminating a user's session, either\n * by failing to delete the session from the database (in database session\n * strategies) or encountering issues during other parts of the sign-out\n * process, such as emitting sign-out events or clearing session cookies.\n *\n * The session cookie(s) are emptied even if this error is logged.\n * @noInheritDoc\n */\nexport class SignOutError extends AuthError {\n}\nSignOutError.type = \"SignOutError\";\n/**\n * Auth.js was requested to handle an operation that it does not support.\n *\n * See [`AuthAction`](https://authjs.dev/reference/core/types#authaction) for the supported actions.\n * @noInheritDoc\n */\nexport class UnknownAction extends AuthError {\n}\nUnknownAction.type = \"UnknownAction\";\n/**\n * Thrown when a Credentials provider is present but the JWT strategy (`strategy: \"jwt\"`) is not enabled.\n *\n * Learn more at [`strategy`](https://authjs.dev/reference/core#strategy) or [Credentials provider](https://authjs.dev/getting-started/authentication/credentials)\n * @noInheritDoc\n */\nexport class UnsupportedStrategy extends AuthError {\n}\nUnsupportedStrategy.type = \"UnsupportedStrategy\";\n/**\n * Thrown when an endpoint was incorrectly called without a provider, or with an unsupported provider.\n * @noInheritDoc\n */\nexport class InvalidProvider extends AuthError {\n}\nInvalidProvider.type = \"InvalidProvider\";\n/**\n * Thrown when the `trustHost` option was not set to `true`.\n *\n * Auth.js requires the `trustHost` option to be set to `true` since it's relying on the request headers' `host` value.\n *\n * :::note\n * Official Auth.js libraries might attempt to automatically set the `trustHost` option to `true` if the request is coming from a trusted host on a trusted platform.\n * :::\n *\n * Learn more at [`trustHost`](https://authjs.dev/reference/core#trusthost) or [Guide: Deployment](https://authjs.dev/getting-started/deployment)\n * @noInheritDoc\n */\nexport class UntrustedHost extends AuthError {\n}\nUntrustedHost.type = \"UntrustedHost\";\n/**\n * The user's email/token combination was invalid.\n * This could be because the email/token combination was not found in the database,\n * or because the token has expired. Ask the user to log in again.\n * @noInheritDoc\n */\nexport class Verification extends AuthError {\n}\nVerification.type = \"Verification\";\n/**\n * Error for missing CSRF tokens in client-side actions (`signIn`, `signOut`, `useSession#update`).\n * Thrown when actions lack the double submit cookie, essential for CSRF protection.\n *\n * CSRF ([Cross-Site Request Forgery](https://owasp.org/www-community/attacks/csrf))\n * is an attack leveraging authenticated user credentials for unauthorized actions.\n *\n * Double submit cookie pattern, a CSRF defense, requires matching values in a cookie\n * and request parameter. More on this at [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Glossary/CSRF).\n * @noInheritDoc\n */\nexport class MissingCSRF extends SignInError {\n}\nMissingCSRF.type = \"MissingCSRF\";\nconst clientErrors = new Set([\n \"CredentialsSignin\",\n \"OAuthAccountNotLinked\",\n \"OAuthCallbackError\",\n \"AccessDenied\",\n \"Verification\",\n \"MissingCSRF\",\n \"AccountNotLinked\",\n \"WebAuthnVerificationError\",\n]);\n/**\n * Used to only allow sending a certain subset of errors to the client.\n * Errors are always logged on the server, but to prevent leaking sensitive information,\n * only a subset of errors are sent to the client as-is.\n * @internal\n */\nexport function isClientError(error) {\n if (error instanceof AuthError)\n return clientErrors.has(error.type);\n return false;\n}\n/**\n * Thrown when multiple providers have `enableConditionalUI` set to `true`.\n * Only one provider can have this option enabled at a time.\n * @noInheritDoc\n */\nexport class DuplicateConditionalUI extends AuthError {\n}\nDuplicateConditionalUI.type = \"DuplicateConditionalUI\";\n/**\n * Thrown when a WebAuthn provider has `enableConditionalUI` set to `true` but no formField has `webauthn` in its autocomplete param.\n *\n * The `webauthn` autocomplete param is required for conditional UI to work.\n * @noInheritDoc\n */\nexport class MissingWebAuthnAutocomplete extends AuthError {\n}\nMissingWebAuthnAutocomplete.type = \"MissingWebAuthnAutocomplete\";\n/**\n * Thrown when a WebAuthn provider fails to verify a client response.\n * @noInheritDoc\n */\nexport class WebAuthnVerificationError extends AuthError {\n}\nWebAuthnVerificationError.type = \"WebAuthnVerificationError\";\n/**\n * Thrown when an Email address is already associated with an account\n * but the user is trying an account that is not linked to it.\n *\n * For security reasons, Auth.js does not automatically link accounts to existing accounts if the user is not signed in.\n * @noInheritDoc\n */\nexport class AccountNotLinked extends SignInError {\n}\nAccountNotLinked.type = \"AccountNotLinked\";\n/**\n * Thrown when an experimental feature is used but not enabled.\n * @noInheritDoc\n */\nexport class ExperimentalFeatureNotEnabled extends AuthError {\n}\nExperimentalFeatureNotEnabled.type = \"ExperimentalFeatureNotEnabled\";\n"],"names":[],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 878, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next-auth/lib/client.js"],"sourcesContent":["\"use client\";\nimport * as React from \"react\";\nimport { AuthError } from \"@auth/core/errors\";\n/** @todo */\nclass ClientFetchError extends AuthError {\n}\n/** @todo */\nexport class ClientSessionError extends AuthError {\n}\n// ------------------------ Internal ------------------------\n/**\n * If passed 'appContext' via getInitialProps() in _app.js\n * then get the req object from ctx and use that for the\n * req value to allow `fetchData` to\n * work seemlessly in getInitialProps() on server side\n * pages *and* in _app.js.\n * @internal\n */\nexport async function fetchData(path, __NEXTAUTH, logger, req = {}) {\n const url = `${apiBaseUrl(__NEXTAUTH)}/${path}`;\n try {\n const options = {\n headers: {\n \"Content-Type\": \"application/json\",\n ...(req?.headers?.cookie ? { cookie: req.headers.cookie } : {}),\n },\n };\n if (req?.body) {\n options.body = JSON.stringify(req.body);\n options.method = \"POST\";\n }\n const res = await fetch(url, options);\n const data = await res.json();\n if (!res.ok)\n throw data;\n return data;\n }\n catch (error) {\n logger.error(new ClientFetchError(error.message, error));\n return null;\n }\n}\n/** @internal */\nexport function apiBaseUrl(__NEXTAUTH) {\n if (typeof window === \"undefined\") {\n // Return absolute path when called server side\n return `${__NEXTAUTH.baseUrlServer}${__NEXTAUTH.basePathServer}`;\n }\n // Return relative path when called client side\n return __NEXTAUTH.basePath;\n}\n/** @internal */\nexport function useOnline() {\n const [isOnline, setIsOnline] = React.useState(typeof navigator !== \"undefined\" ? navigator.onLine : false);\n const setOnline = () => setIsOnline(true);\n const setOffline = () => setIsOnline(false);\n React.useEffect(() => {\n window.addEventListener(\"online\", setOnline);\n window.addEventListener(\"offline\", setOffline);\n return () => {\n window.removeEventListener(\"online\", setOnline);\n window.removeEventListener(\"offline\", setOffline);\n };\n }, []);\n return isOnline;\n}\n/**\n * Returns the number of seconds elapsed since January 1, 1970 00:00:00 UTC.\n * @internal\n */\nexport function now() {\n return Math.floor(Date.now() / 1000);\n}\n/**\n * Returns an `URL` like object to make requests/redirects from server-side\n * @internal\n */\nexport function parseUrl(url) {\n const defaultUrl = new URL(\"http://localhost:3000/api/auth\");\n if (url && !url.startsWith(\"http\")) {\n url = `https://${url}`;\n }\n const _url = new URL(url || defaultUrl);\n const path = (_url.pathname === \"/\" ? defaultUrl.pathname : _url.pathname)\n // Remove trailing slash\n .replace(/\\/$/, \"\");\n const base = `${_url.origin}${path}`;\n return {\n origin: _url.origin,\n host: _url.host,\n path,\n base,\n toString: () => base,\n };\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;AACA;AACA;AAFA;;;AAGA,UAAU,GACV,MAAM,yBAAyB,oMAAS;AACxC;AAEO,MAAM,2BAA2B,oMAAS;AACjD;AAUO,eAAe,UAAU,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,WAAW,YAAY,CAAC,EAAE,MAAM;IAC/C,IAAI;QACA,MAAM,UAAU;YACZ,SAAS;gBACL,gBAAgB;gBAChB,GAAI,KAAK,SAAS,SAAS;oBAAE,QAAQ,IAAI,OAAO,CAAC,MAAM;gBAAC,IAAI,CAAC,CAAC;YAClE;QACJ;QACA,IAAI,KAAK,MAAM;YACX,QAAQ,IAAI,GAAG,KAAK,SAAS,CAAC,IAAI,IAAI;YACtC,QAAQ,MAAM,GAAG;QACrB;QACA,MAAM,MAAM,MAAM,MAAM,KAAK;QAC7B,MAAM,OAAO,MAAM,IAAI,IAAI;QAC3B,IAAI,CAAC,IAAI,EAAE,EACP,MAAM;QACV,OAAO;IACX,EACA,OAAO,OAAO;QACV,OAAO,KAAK,CAAC,IAAI,iBAAiB,MAAM,OAAO,EAAE;QACjD,OAAO;IACX;AACJ;AAEO,SAAS,WAAW,UAAU;IACjC,IAAI,OAAO,WAAW,aAAa;QAC/B,+CAA+C;QAC/C,OAAO,GAAG,WAAW,aAAa,GAAG,WAAW,cAAc,EAAE;IACpE;IACA,+CAA+C;IAC/C,OAAO,WAAW,QAAQ;AAC9B;AAEO,SAAS;IACZ,MAAM,CAAC,UAAU,YAAY,GAAG,qNAAc,CAAC,OAAO,cAAc,cAAc,UAAU,MAAM,GAAG;IACrG,MAAM,YAAY,IAAM,YAAY;IACpC,MAAM,aAAa,IAAM,YAAY;IACrC,sNAAe;+BAAC;YACZ,OAAO,gBAAgB,CAAC,UAAU;YAClC,OAAO,gBAAgB,CAAC,WAAW;YACnC;uCAAO;oBACH,OAAO,mBAAmB,CAAC,UAAU;oBACrC,OAAO,mBAAmB,CAAC,WAAW;gBAC1C;;QACJ;8BAAG,EAAE;IACL,OAAO;AACX;AAKO,SAAS;IACZ,OAAO,KAAK,KAAK,CAAC,KAAK,GAAG,KAAK;AACnC;AAKO,SAAS,SAAS,GAAG;IACxB,MAAM,aAAa,IAAI,IAAI;IAC3B,IAAI,OAAO,CAAC,IAAI,UAAU,CAAC,SAAS;QAChC,MAAM,CAAC,QAAQ,EAAE,KAAK;IAC1B;IACA,MAAM,OAAO,IAAI,IAAI,OAAO;IAC5B,MAAM,OAAO,CAAC,KAAK,QAAQ,KAAK,MAAM,WAAW,QAAQ,GAAG,KAAK,QAAQ,CACrE,wBAAwB;KACvB,OAAO,CAAC,OAAO;IACpB,MAAM,OAAO,GAAG,KAAK,MAAM,GAAG,MAAM;IACpC,OAAO;QACH,QAAQ,KAAK,MAAM;QACnB,MAAM,KAAK,IAAI;QACf;QACA;QACA,UAAU,IAAM;IACpB;AACJ","ignoreList":[0]}}, + {"offset": {"line": 975, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next-auth/react.js"],"sourcesContent":["/**\n *\n * NextAuth.js is the official integration of Auth.js for Next.js applications. It supports both\n * [Client Components](https://nextjs.org/docs/app/building-your-application/rendering/client-components) and the\n * [Pages Router](https://nextjs.org/docs/pages). It includes methods for signing in, signing out, hooks, and a React\n * Context provider to wrap your application and make session data available anywhere.\n *\n * For use in [Server Actions](https://nextjs.org/docs/app/api-reference/functions/server-actions), check out [these methods](https://authjs.dev/guides/upgrade-to-v5#methods)\n *\n * @module react\n */\n\"use client\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport { apiBaseUrl, ClientSessionError, fetchData, now, parseUrl, useOnline, } from \"./lib/client.js\";\n// This behaviour mirrors the default behaviour for getting the site name that\n// happens server side in server/index.js\n// 1. An empty value is legitimate when the code is being invoked client side as\n// relative URLs are valid in that context and so defaults to empty.\n// 2. When invoked server side the value is picked up from an environment\n// variable and defaults to 'http://localhost:3000'.\nexport const __NEXTAUTH = {\n baseUrl: parseUrl(process.env.NEXTAUTH_URL ?? process.env.VERCEL_URL).origin,\n basePath: parseUrl(process.env.NEXTAUTH_URL).path,\n baseUrlServer: parseUrl(process.env.NEXTAUTH_URL_INTERNAL ??\n process.env.NEXTAUTH_URL ??\n process.env.VERCEL_URL).origin,\n basePathServer: parseUrl(process.env.NEXTAUTH_URL_INTERNAL ?? process.env.NEXTAUTH_URL).path,\n _lastSync: 0,\n _session: undefined,\n _getSession: () => { },\n};\n// https://github.com/nextauthjs/next-auth/pull/10762\nlet broadcastChannel = null;\nfunction getNewBroadcastChannel() {\n if (typeof BroadcastChannel === \"undefined\") {\n return {\n postMessage: () => { },\n addEventListener: () => { },\n removeEventListener: () => { },\n name: \"next-auth\",\n onmessage: null,\n onmessageerror: null,\n close: () => { },\n dispatchEvent: () => false,\n };\n }\n return new BroadcastChannel(\"next-auth\");\n}\nfunction broadcast() {\n if (broadcastChannel === null) {\n broadcastChannel = getNewBroadcastChannel();\n }\n return broadcastChannel;\n}\n// TODO:\nconst logger = {\n debug: console.debug,\n error: console.error,\n warn: console.warn,\n};\nexport const SessionContext = React.createContext?.(undefined);\n/**\n * React Hook that gives you access to the logged in user's session data and lets you modify it.\n *\n * :::info\n * `useSession` is for client-side use only and when using [Next.js App Router (`app/`)](https://nextjs.org/blog/next-13-4#nextjs-app-router) you should prefer the `auth()` export.\n * :::\n */\nexport function useSession(options) {\n if (!SessionContext) {\n throw new Error(\"React Context is unavailable in Server Components\");\n }\n // @ts-expect-error Satisfy TS if branch on line below\n const value = React.useContext(SessionContext);\n if (!value && process.env.NODE_ENV !== \"production\") {\n throw new Error(\"[next-auth]: `useSession` must be wrapped in a \");\n }\n const { required, onUnauthenticated } = options ?? {};\n const requiredAndNotLoading = required && value.status === \"unauthenticated\";\n React.useEffect(() => {\n if (requiredAndNotLoading) {\n const url = `${__NEXTAUTH.basePath}/signin?${new URLSearchParams({\n error: \"SessionRequired\",\n callbackUrl: window.location.href,\n })}`;\n if (onUnauthenticated)\n onUnauthenticated();\n else\n window.location.href = url;\n }\n }, [requiredAndNotLoading, onUnauthenticated]);\n if (requiredAndNotLoading) {\n return {\n data: value.data,\n update: value.update,\n status: \"loading\",\n };\n }\n return value;\n}\nexport async function getSession(params) {\n const session = await fetchData(\"session\", __NEXTAUTH, logger, params);\n if (params?.broadcast ?? true) {\n // https://github.com/nextauthjs/next-auth/pull/11470\n getNewBroadcastChannel().postMessage({\n event: \"session\",\n data: { trigger: \"getSession\" },\n });\n }\n return session;\n}\n/**\n * Returns the current Cross-Site Request Forgery Token (CSRF Token)\n * required to make requests that changes state. (e.g. signing in or out, or updating the session).\n *\n * [CSRF Prevention: Double Submit Cookie](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#double-submit-cookie)\n */\nexport async function getCsrfToken() {\n const response = await fetchData(\"csrf\", __NEXTAUTH, logger);\n return response?.csrfToken ?? \"\";\n}\nexport async function getProviders() {\n return fetchData(\"providers\", __NEXTAUTH, logger);\n}\nexport async function signIn(provider, options, authorizationParams) {\n const { callbackUrl, ...rest } = options ?? {};\n const { redirect = true, redirectTo = callbackUrl ?? window.location.href, ...signInParams } = rest;\n const baseUrl = apiBaseUrl(__NEXTAUTH);\n const providers = await getProviders();\n if (!providers) {\n const url = `${baseUrl}/error`;\n window.location.href = url;\n return; // TODO: Return error if `redirect: false`\n }\n if (!provider || !providers[provider]) {\n const url = `${baseUrl}/signin?${new URLSearchParams({\n callbackUrl: redirectTo,\n })}`;\n window.location.href = url;\n return; // TODO: Return error if `redirect: false`\n }\n const providerType = providers[provider].type;\n if (providerType === \"webauthn\") {\n // TODO: Add docs link with explanation\n throw new TypeError([\n `Provider id \"${provider}\" refers to a WebAuthn provider.`,\n 'Please use `import { signIn } from \"next-auth/webauthn\"` instead.',\n ].join(\"\\n\"));\n }\n const signInUrl = `${baseUrl}/${providerType === \"credentials\" ? \"callback\" : \"signin\"}/${provider}`;\n const csrfToken = await getCsrfToken();\n const res = await fetch(`${signInUrl}?${new URLSearchParams(authorizationParams)}`, {\n method: \"post\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"X-Auth-Return-Redirect\": \"1\",\n },\n body: new URLSearchParams({\n ...signInParams,\n csrfToken,\n callbackUrl: redirectTo,\n }),\n });\n const data = await res.json();\n if (redirect) {\n const url = data.url ?? redirectTo;\n window.location.href = url;\n // If url contains a hash, the browser does not reload the page. We reload manually\n if (url.includes(\"#\"))\n window.location.reload();\n return;\n }\n const error = new URL(data.url).searchParams.get(\"error\") ?? undefined;\n const code = new URL(data.url).searchParams.get(\"code\") ?? undefined;\n if (res.ok) {\n await __NEXTAUTH._getSession({ event: \"storage\" });\n }\n return {\n error,\n code,\n status: res.status,\n ok: res.ok,\n url: error ? null : data.url,\n };\n}\nexport async function signOut(options) {\n const { redirect = true, redirectTo = options?.callbackUrl ?? window.location.href, } = options ?? {};\n const baseUrl = apiBaseUrl(__NEXTAUTH);\n const csrfToken = await getCsrfToken();\n const res = await fetch(`${baseUrl}/signout`, {\n method: \"post\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"X-Auth-Return-Redirect\": \"1\",\n },\n body: new URLSearchParams({ csrfToken, callbackUrl: redirectTo }),\n });\n const data = await res.json();\n broadcast().postMessage({ event: \"session\", data: { trigger: \"signout\" } });\n if (redirect) {\n const url = data.url ?? redirectTo;\n window.location.href = url;\n // If url contains a hash, the browser does not reload the page. We reload manually\n if (url.includes(\"#\"))\n window.location.reload();\n return;\n }\n await __NEXTAUTH._getSession({ event: \"storage\" });\n return data;\n}\n/**\n * [React Context](https://react.dev/learn/passing-data-deeply-with-context) provider to wrap the app (`pages/`) to make session data available anywhere.\n *\n * When used, the session state is automatically synchronized across all open tabs/windows and they are all updated whenever they gain or lose focus\n * or the state changes (e.g. a user signs in or out) when {@link SessionProviderProps.refetchOnWindowFocus} is `true`.\n *\n * :::info\n * `SessionProvider` is for client-side use only and when using [Next.js App Router (`app/`)](https://nextjs.org/blog/next-13-4#nextjs-app-router) you should prefer the `auth()` export.\n * :::\n */\nexport function SessionProvider(props) {\n if (!SessionContext) {\n throw new Error(\"React Context is unavailable in Server Components\");\n }\n const { children, basePath, refetchInterval, refetchWhenOffline } = props;\n if (basePath)\n __NEXTAUTH.basePath = basePath;\n /**\n * If session was `null`, there was an attempt to fetch it,\n * but it failed, but we still treat it as a valid initial value.\n */\n const hasInitialSession = props.session !== undefined;\n /** If session was passed, initialize as already synced */\n __NEXTAUTH._lastSync = hasInitialSession ? now() : 0;\n const [session, setSession] = React.useState(() => {\n if (hasInitialSession)\n __NEXTAUTH._session = props.session;\n return props.session;\n });\n /** If session was passed, initialize as not loading */\n const [loading, setLoading] = React.useState(!hasInitialSession);\n React.useEffect(() => {\n __NEXTAUTH._getSession = async ({ event } = {}) => {\n try {\n const storageEvent = event === \"storage\";\n // We should always update if we don't have a client session yet\n // or if there are events from other tabs/windows\n if (storageEvent || __NEXTAUTH._session === undefined) {\n __NEXTAUTH._lastSync = now();\n __NEXTAUTH._session = await getSession({\n broadcast: !storageEvent,\n });\n setSession(__NEXTAUTH._session);\n return;\n }\n if (\n // If there is no time defined for when a session should be considered\n // stale, then it's okay to use the value we have until an event is\n // triggered which updates it\n !event ||\n // If the client doesn't have a session then we don't need to call\n // the server to check if it does (if they have signed in via another\n // tab or window that will come through as a \"stroage\" event\n // event anyway)\n __NEXTAUTH._session === null ||\n // Bail out early if the client session is not stale yet\n now() < __NEXTAUTH._lastSync) {\n return;\n }\n // An event or session staleness occurred, update the client session.\n __NEXTAUTH._lastSync = now();\n __NEXTAUTH._session = await getSession();\n setSession(__NEXTAUTH._session);\n }\n catch (error) {\n logger.error(new ClientSessionError(error.message, error));\n }\n finally {\n setLoading(false);\n }\n };\n __NEXTAUTH._getSession();\n return () => {\n __NEXTAUTH._lastSync = 0;\n __NEXTAUTH._session = undefined;\n __NEXTAUTH._getSession = () => { };\n };\n }, []);\n React.useEffect(() => {\n const handle = () => __NEXTAUTH._getSession({ event: \"storage\" });\n // Listen for storage events and update session if event fired from\n // another window (but suppress firing another event to avoid a loop)\n // Fetch new session data but tell it to not to fire another event to\n // avoid an infinite loop.\n // Note: We could pass session data through and do something like\n // `setData(message.data)` but that can cause problems depending\n // on how the session object is being used in the client; it is\n // more robust to have each window/tab fetch it's own copy of the\n // session object rather than share it across instances.\n broadcast().addEventListener(\"message\", handle);\n return () => broadcast().removeEventListener(\"message\", handle);\n }, []);\n React.useEffect(() => {\n const { refetchOnWindowFocus = true } = props;\n // Listen for when the page is visible, if the user switches tabs\n // and makes our tab visible again, re-fetch the session, but only if\n // this feature is not disabled.\n const visibilityHandler = () => {\n if (refetchOnWindowFocus && document.visibilityState === \"visible\")\n __NEXTAUTH._getSession({ event: \"visibilitychange\" });\n };\n document.addEventListener(\"visibilitychange\", visibilityHandler, false);\n return () => document.removeEventListener(\"visibilitychange\", visibilityHandler, false);\n }, [props.refetchOnWindowFocus]);\n const isOnline = useOnline();\n // TODO: Flip this behavior in next major version\n const shouldRefetch = refetchWhenOffline !== false || isOnline;\n React.useEffect(() => {\n if (refetchInterval && shouldRefetch) {\n const refetchIntervalTimer = setInterval(() => {\n if (__NEXTAUTH._session) {\n __NEXTAUTH._getSession({ event: \"poll\" });\n }\n }, refetchInterval * 1000);\n return () => clearInterval(refetchIntervalTimer);\n }\n }, [refetchInterval, shouldRefetch]);\n const value = React.useMemo(() => ({\n data: session,\n status: loading\n ? \"loading\"\n : session\n ? \"authenticated\"\n : \"unauthenticated\",\n async update(data) {\n if (loading)\n return;\n setLoading(true);\n const newSession = await fetchData(\"session\", __NEXTAUTH, logger, typeof data === \"undefined\"\n ? undefined\n : { body: { csrfToken: await getCsrfToken(), data } });\n setLoading(false);\n if (newSession) {\n setSession(newSession);\n broadcast().postMessage({\n event: \"session\",\n data: { trigger: \"getSession\" },\n });\n }\n return newSession;\n },\n }), [session, loading]);\n return (\n // @ts-expect-error\n _jsx(SessionContext.Provider, { value: value, children: children }));\n}\n"],"names":[],"mappings":"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","ignoreList":[0]}}] } \ No newline at end of file diff --git a/.next/dev/static/chunks/Documents_00 - projet_plumeia_48e545ad._.js b/.next/dev/static/chunks/Documents_00 - projet_plumeia_48e545ad._.js index 65a9540..c2d462a 100644 --- a/.next/dev/static/chunks/Documents_00 - projet_plumeia_48e545ad._.js +++ b/.next/dev/static/chunks/Documents_00 - projet_plumeia_48e545ad._.js @@ -12,45 +12,7 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__proje 'use client'; ; ; -const Pricing = ({ currentPlan, onBack, onSelectPlan })=>{ - const plans = [ - { - id: 'free', - name: 'Gratuit', - price: '0€', - desc: 'Idéal pour découvrir PlumeIA.', - features: [ - '10 actions IA / mois', - '1 projet actif', - 'Bible du monde simple' - ] - }, - { - id: 'pro', - name: 'Auteur Pro', - price: '12€', - desc: 'Pour les écrivains sérieux.', - features: [ - '500 actions IA / mois', - 'Projets illimités', - 'Export Word & EPUB', - 'Support prioritaire' - ], - popular: true - }, - { - id: 'master', - name: 'Maître Plume', - price: '29€', - desc: 'Le summum de l\'écriture IA.', - features: [ - 'Actions IA illimitées', - 'Accès Gemini 3 Pro', - 'Bible du monde avancée', - 'Outils de révision avancés' - ] - } - ]; +const Pricing = ({ plans, currentPlan, onBack, onSelectPlan, isLoading })=>{ return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "min-h-screen bg-[#eef2ff] py-20 px-8", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -64,14 +26,14 @@ const Pricing = ({ currentPlan, onBack, onSelectPlan })=>{ size: 20 }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 25, - columnNumber: 13 + lineNumber: 30, + columnNumber: 11 }, ("TURBOPACK compile-time value", void 0)), " Retour" ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 24, + lineNumber: 29, columnNumber: 9 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -82,131 +44,142 @@ const Pricing = ({ currentPlan, onBack, onSelectPlan })=>{ children: "Choisissez votre destin d'écrivain." }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 28, - columnNumber: 13 + lineNumber: 33, + columnNumber: 11 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { className: "text-slate-500", children: "Passez au plan supérieur pour libérer toute la puissance de l'IA." }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 29, - columnNumber: 13 + lineNumber: 34, + columnNumber: 11 }, ("TURBOPACK compile-time value", void 0)) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 27, + lineNumber: 32, columnNumber: 9 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-8", - children: plans.map((p)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { - className: `bg-white rounded-3xl p-8 border transition-all ${p.popular ? 'border-blue-500 shadow-2xl scale-105 z-10' : 'border-indigo-100 shadow-xl'}`, - children: [ - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { - className: "mb-8", - children: [ - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h4", { - className: "text-xl font-bold text-slate-900 mb-2", - children: p.name - }, void 0, false, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 35, - columnNumber: 25 - }, ("TURBOPACK compile-time value", void 0)), - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { - className: "text-4xl font-black text-slate-900 mb-2", - children: [ - p.price, - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: "text-sm font-normal text-slate-400", - children: "/mois" - }, void 0, false, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 36, - columnNumber: 91 - }, ("TURBOPACK compile-time value", void 0)) - ] - }, void 0, true, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 36, - columnNumber: 25 - }, ("TURBOPACK compile-time value", void 0)), - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { - className: "text-sm text-slate-500", - children: p.desc - }, void 0, false, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 37, - columnNumber: 25 - }, ("TURBOPACK compile-time value", void 0)) - ] - }, void 0, true, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 34, - columnNumber: 21 - }, ("TURBOPACK compile-time value", void 0)), - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("ul", { - className: "space-y-4 mb-10", - children: p.features.map((f, i)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("li", { - className: "flex items-center gap-3 text-sm text-slate-700", - children: [ - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { - className: "text-blue-500 bg-blue-50 p-0.5 rounded-full", - children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Check$3e$__["Check"], { - size: 14 + children: [ + isLoading && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + className: "text-center col-span-3 py-10", + children: "Chargement des offres..." + }, void 0, false, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 37, + columnNumber: 25 + }, ("TURBOPACK compile-time value", void 0)), + !isLoading && plans.map((p)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: `bg-white rounded-3xl p-8 border transition-all ${p.isPopular ? 'border-blue-500 shadow-2xl scale-105 z-10' : 'border-indigo-100 shadow-xl'}`, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "mb-8", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h4", { + className: "text-xl font-bold text-slate-900 mb-2", + children: p.displayName + }, void 0, false, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 41, + columnNumber: 17 + }, ("TURBOPACK compile-time value", void 0)), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "text-4xl font-black text-slate-900 mb-2", + children: [ + p.price, + "€", + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "text-sm font-normal text-slate-400", + children: "/mois" }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", lineNumber: 42, - columnNumber: 94 + columnNumber: 84 }, ("TURBOPACK compile-time value", void 0)) - }, void 0, false, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 42, - columnNumber: 33 - }, ("TURBOPACK compile-time value", void 0)), - f - ] - }, i, true, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 41, - columnNumber: 29 - }, ("TURBOPACK compile-time value", void 0))) - }, void 0, false, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 39, - columnNumber: 21 - }, ("TURBOPACK compile-time value", void 0)), - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { - onClick: ()=>onSelectPlan(p.id), - className: `w-full py-4 rounded-2xl font-black transition-all ${p.id === currentPlan ? 'bg-slate-100 text-slate-400 cursor-default' : p.popular ? 'bg-blue-600 text-white hover:bg-blue-700' : 'bg-slate-900 text-white hover:bg-slate-800'}`, - children: p.id === currentPlan ? 'Plan Actuel' : 'Sélectionner' - }, void 0, false, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 47, - columnNumber: 21 - }, ("TURBOPACK compile-time value", void 0)) - ] - }, p.id, true, { - fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 33, - columnNumber: 17 - }, ("TURBOPACK compile-time value", void 0))) - }, void 0, false, { + ] + }, void 0, true, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 42, + columnNumber: 17 + }, ("TURBOPACK compile-time value", void 0)), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + className: "text-sm text-slate-500", + children: p.description + }, void 0, false, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 43, + columnNumber: 17 + }, ("TURBOPACK compile-time value", void 0)) + ] + }, void 0, true, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 40, + columnNumber: 15 + }, ("TURBOPACK compile-time value", void 0)), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("ul", { + className: "space-y-4 mb-10", + children: p.features.map((f, i)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("li", { + className: "flex items-center gap-3 text-sm text-slate-700", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "text-blue-500 bg-blue-50 p-0.5 rounded-full", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Check$3e$__["Check"], { + size: 14 + }, void 0, false, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 48, + columnNumber: 82 + }, ("TURBOPACK compile-time value", void 0)) + }, void 0, false, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 48, + columnNumber: 21 + }, ("TURBOPACK compile-time value", void 0)), + f + ] + }, i, true, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 47, + columnNumber: 19 + }, ("TURBOPACK compile-time value", void 0))) + }, void 0, false, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 45, + columnNumber: 15 + }, ("TURBOPACK compile-time value", void 0)), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + onClick: ()=>onSelectPlan(p.id), + className: `w-full py-4 rounded-2xl font-black transition-all ${p.id === currentPlan ? 'bg-slate-100 text-slate-400 cursor-default' : p.isPopular ? 'bg-blue-600 text-white hover:bg-blue-700' : 'bg-slate-900 text-white hover:bg-slate-800'}`, + children: p.id === currentPlan ? 'Plan Actuel' : 'Sélectionner' + }, void 0, false, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 53, + columnNumber: 15 + }, ("TURBOPACK compile-time value", void 0)) + ] + }, p.id, true, { + fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", + lineNumber: 39, + columnNumber: 13 + }, ("TURBOPACK compile-time value", void 0))) + ] + }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 31, + lineNumber: 36, columnNumber: 9 }, ("TURBOPACK compile-time value", void 0)) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 23, + lineNumber: 28, columnNumber: 7 }, ("TURBOPACK compile-time value", void 0)) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx", - lineNumber: 22, + lineNumber: 27, columnNumber: 5 }, ("TURBOPACK compile-time value", void 0)); }; @@ -226,6 +199,7 @@ __turbopack_context__.s([ ()=>PricingPage ]); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$components$2f$Pricing$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/navigation.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$providers$2f$AuthProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/providers/AuthProvider.tsx [app-client] (ecmascript)"); @@ -235,21 +209,45 @@ var _s = __turbopack_context__.k.signature(); ; ; ; +; function PricingPage() { _s(); const router = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRouter"])(); const { user } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$providers$2f$AuthProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useAuthContext"])(); + const [plans, setPlans] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]); + const [isLoading, setIsLoading] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(true); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "PricingPage.useEffect": ()=>{ + fetch('/api/plans', { + cache: 'no-store' + }).then({ + "PricingPage.useEffect": (res)=>res.json() + }["PricingPage.useEffect"]).then({ + "PricingPage.useEffect": (data)=>{ + setPlans(data); + setIsLoading(false); + } + }["PricingPage.useEffect"]).catch({ + "PricingPage.useEffect": (err)=>{ + console.error(err); + setIsLoading(false); + } + }["PricingPage.useEffect"]); + } + }["PricingPage.useEffect"], []); return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$components$2f$Pricing$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], { + plans: plans, + isLoading: isLoading, currentPlan: user?.subscription.plan || 'free', onBack: ()=>router.push(user ? '/dashboard' : '/'), onSelectPlan: ()=>router.push(user ? '/checkout' : '/login') }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/pricing/page.tsx", - lineNumber: 12, + lineNumber: 29, columnNumber: 9 }, this); } -_s(PricingPage, "KBvgJ4RPOjJzaPCxD49Q3HRlue0=", false, function() { +_s(PricingPage, "txX/3kMROnvAhLF5YpPezcY+vpE=", false, function() { return [ __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRouter"], __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$providers$2f$AuthProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useAuthContext"] diff --git a/.next/dev/static/chunks/Documents_00 - projet_plumeia_48e545ad._.js.map b/.next/dev/static/chunks/Documents_00 - projet_plumeia_48e545ad._.js.map index 948fd42..8a3f9b7 100644 --- a/.next/dev/static/chunks/Documents_00 - projet_plumeia_48e545ad._.js.map +++ b/.next/dev/static/chunks/Documents_00 - projet_plumeia_48e545ad._.js.map @@ -2,17 +2,17 @@ "version": 3, "sources": [], "sections": [ - {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/components/Pricing.tsx"],"sourcesContent":["'use client';\n\n\nimport React from 'react';\nimport { Check, ArrowLeft } from 'lucide-react';\nimport { PlanType } from '@/lib/types';\n\ninterface PricingProps {\n currentPlan: PlanType;\n onBack: () => void;\n onSelectPlan: (plan: PlanType) => void;\n}\n\nconst Pricing: React.FC = ({ currentPlan, onBack, onSelectPlan }) => {\n const plans = [\n { id: 'free', name: 'Gratuit', price: '0€', desc: 'Idéal pour découvrir PlumeIA.', features: ['10 actions IA / mois', '1 projet actif', 'Bible du monde simple'] },\n { id: 'pro', name: 'Auteur Pro', price: '12€', desc: 'Pour les écrivains sérieux.', features: ['500 actions IA / mois', 'Projets illimités', 'Export Word & EPUB', 'Support prioritaire'], popular: true },\n { id: 'master', name: 'Maître Plume', price: '29€', desc: 'Le summum de l\\'écriture IA.', features: ['Actions IA illimitées', 'Accès Gemini 3 Pro', 'Bible du monde avancée', 'Outils de révision avancés'] },\n ];\n\n return (\n
\n
\n \n
\n

Choisissez votre destin d'écrivain.

\n

Passez au plan supérieur pour libérer toute la puissance de l'IA.

\n
\n
\n {plans.map((p) => (\n
\n
\n

{p.name}

\n
{p.price}/mois
\n

{p.desc}

\n
\n
    \n {p.features.map((f, i) => (\n
  • \n
    \n {f}\n
  • \n ))}\n
\n \n
\n ))}\n
\n
\n
\n );\n};\n\nexport default Pricing;\n"],"names":[],"mappings":";;;;;AAIA;AAAA;AAJA;;;AAaA,MAAM,UAAkC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE;IAC5E,MAAM,QAAQ;QACZ;YAAE,IAAI;YAAQ,MAAM;YAAW,OAAO;YAAM,MAAM;YAAiC,UAAU;gBAAC;gBAAwB;gBAAkB;aAAwB;QAAC;QACjK;YAAE,IAAI;YAAO,MAAM;YAAc,OAAO;YAAO,MAAM;YAA+B,UAAU;gBAAC;gBAAyB;gBAAqB;gBAAsB;aAAsB;YAAE,SAAS;QAAK;QACzM;YAAE,IAAI;YAAU,MAAM;YAAgB,OAAO;YAAO,MAAM;YAAgC,UAAU;gBAAC;gBAAyB;gBAAsB;gBAA0B;aAA6B;QAAC;KAC7M;IAED,qBACE,yOAAC;QAAI,WAAU;kBACb,cAAA,yOAAC;YAAI,WAAU;;8BACb,yOAAC;oBAAO,SAAS;oBAAQ,WAAU;;sCAC/B,yOAAC,4QAAS;4BAAC,MAAM;;;;;;wBAAM;;;;;;;8BAE3B,yOAAC;oBAAI,WAAU;;sCACX,yOAAC;4BAAG,WAAU;sCAA0C;;;;;;sCACxD,yOAAC;4BAAE,WAAU;sCAAiB;;;;;;;;;;;;8BAElC,yOAAC;oBAAI,WAAU;8BACV,MAAM,GAAG,CAAC,CAAC,kBACR,yOAAC;4BAAe,WAAW,CAAC,+CAA+C,EAAE,EAAE,OAAO,GAAG,8CAA8C,+BAA+B;;8CAClK,yOAAC;oCAAI,WAAU;;sDACX,yOAAC;4CAAG,WAAU;sDAAyC,EAAE,IAAI;;;;;;sDAC7D,yOAAC;4CAAI,WAAU;;gDAA2C,EAAE,KAAK;8DAAC,yOAAC;oDAAK,WAAU;8DAAqC;;;;;;;;;;;;sDACvH,yOAAC;4CAAE,WAAU;sDAA0B,EAAE,IAAI;;;;;;;;;;;;8CAEjD,yOAAC;oCAAG,WAAU;8CACT,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,kBAChB,yOAAC;4CAAW,WAAU;;8DAClB,yOAAC;oDAAI,WAAU;8DAA8C,cAAA,yOAAC,4PAAK;wDAAC,MAAM;;;;;;;;;;;gDACzE;;2CAFI;;;;;;;;;;8CAMjB,yOAAC;oCACG,SAAS,IAAM,aAAa,EAAE,EAAE;oCAChC,WAAW,CAAC,kDAAkD,EAAE,EAAE,EAAE,KAAK,cAAc,+CAA+C,EAAE,OAAO,GAAG,6CAA6C,8CAA8C;8CAE5O,EAAE,EAAE,KAAK,cAAc,gBAAgB;;;;;;;2BAlBtC,EAAE,EAAE;;;;;;;;;;;;;;;;;;;;;AA0B9B;KA7CM;uCA+CS"}}, - {"offset": {"line": 223, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/pricing/page.tsx"],"sourcesContent":["'use client';\r\n\r\nimport Pricing from '@/components/Pricing';\r\nimport { useRouter } from 'next/navigation';\r\nimport { useAuthContext } from '@/providers/AuthProvider';\r\n\r\nexport default function PricingPage() {\r\n const router = useRouter();\r\n const { user } = useAuthContext();\r\n\r\n return (\r\n router.push(user ? '/dashboard' : '/')}\r\n onSelectPlan={() => router.push(user ? '/checkout' : '/login')}\r\n />\r\n );\r\n}\r\n"],"names":[],"mappings":";;;;;AAEA;AACA;AACA;;;AAJA;;;;AAMe,SAAS;;IACpB,MAAM,SAAS,IAAA,8LAAS;IACxB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,kMAAc;IAE/B,qBACI,yOAAC,uLAAO;QACJ,aAAa,MAAM,aAAa,QAAQ;QACxC,QAAQ,IAAM,OAAO,IAAI,CAAC,OAAO,eAAe;QAChD,cAAc,IAAM,OAAO,IAAI,CAAC,OAAO,cAAc;;;;;;AAGjE;GAXwB;;QACL,8LAAS;QACP,kMAAc;;;KAFX"}}, - {"offset": {"line": 267, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/mergeClasses.ts"],"sourcesContent":["/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = (...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n"],"names":[],"mappings":";;;;;;;;;IAMO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,YAAA,CAAA,CAAA,CAAe,CAAA,GAA2C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GACrE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA,GAAO,KAAA,CAAA,CAAA,CAAA,CAAA,CAAU;QACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,OAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqB,CAAA,CAAA,CAAA,CAAA,CAAA,MAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CACjC,KAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,KAAM,CAAA,CAAA,CAAA,CAAA,CAAA;IAEjC,CAAC,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAG,CAAA,CACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}}, - {"offset": {"line": 285, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/toKebabCase.ts"],"sourcesContent":["/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n"],"names":[],"mappings":";;;;;;;;;IAMO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAsB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}}, - {"offset": {"line": 301, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/toCamelCase.ts"],"sourcesContent":["/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = (string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n"],"names":[],"mappings":";;;;;;;;;IAMO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,WAAA,CAAA,CAAA,CAAc,CAAmB,MAAA,CAAA,CAAA,CAAA,AAC5C,CAD4C,AAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAyB,CAAC,CAAA,CAAA,CAAA,CAAA,GAAO,CAAA,CAAA,CAAA,CAAI,EAAA,CAAA,CAAA,CAAA,AAClD,CADkD,AAClD,IAAK,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAI,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}}, - {"offset": {"line": 317, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/toPascalCase.ts"],"sourcesContent":["import { CamelToPascal } from '../utility-types';\nimport { toCamelCase } from './toCamelCase';\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = (string: T): CamelToPascal => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal;\n};\n"],"names":[],"mappings":";;;;;;;;;;;AASO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgC;IAC7E,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,2OAAA,EAAY,MAAM,CAAA;IAEpC,OAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAY,GAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA;AAC/D,CAAA"}}, - {"offset": {"line": 338, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/defaultAttributes.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/defaultAttributes.ts"],"sourcesContent":["export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n"],"names":[],"mappings":";;;;;;;;;IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe;IACb,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACP,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,CAAA,CAAA;IACP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,CAAA,CAAA;IACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACT,CAAA,CAAA,CAAA,CAAA,EAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAa,CAAA;IACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACf,cAAA,CAAA,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAClB,CAAA"}}, - {"offset": {"line": 364, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/hasA11yProp.ts"],"sourcesContent":["/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n\n return false;\n};\n"],"names":[],"mappings":";;;;;;;;;IAMO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA+B;IACzD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,KAAQ,KAAA,CAAA,AAAO;QACxB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,EAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,KAAK,CAAA,CAAA,CAAA,CAAA,KAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,MAAS,OAAA,CAAA,CAAS;YACnE,OAAO,CAAA,CAAA,CAAA,CAAA;QACT;IACF;IAEA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AACT,CAAA"}}, - {"offset": {"line": 387, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/Icon.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/Icon.ts"],"sourcesContent":["import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) =>\n createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n ),\n);\n\nexport default Icon;\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 428, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/createLucideIcon.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/createLucideIcon.ts"],"sourcesContent":["import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAWA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,gBAAA,CAAA,CAAA,CAAmB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,QAAA,CAAA,CAAA,CAAA,CAAA,CAAuB;IACjE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,8MAAA,EAAuC,CAAC,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,GAAM,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GACjF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,8MAAA,EAAc,gNAAA,CAAA,CAAM;YAClB,CAAA,CAAA,CAAA;YACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,4OAAA,EACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,2OAAA,MAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,4OAAA,EAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAC7C,CAAA,OAAA,EAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,EAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAEF,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CACJ;IAGH,SAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,4OAAA,EAAa,QAAQ,CAAA;IAE7C,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACT,CAAA"}}, - {"offset": {"line": 463, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/check.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/icons/check.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]];\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgNiA5IDE3bC01LTUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('check', __iconNode);\n\nexport default Check;\n"],"names":[],"mappings":";;;;;;;;;;;;;AAGO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAuB;IAAC;QAAC,MAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,iBAAA,CAAA;YAAmB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAC;CAAA;AAatF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,KAAA,CAAA,CAAA,KAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,6MAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA"}}, - {"offset": {"line": 501, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/arrow-left.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/icons/arrow-left.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm12 19-7-7 7-7', key: '1l729n' }],\n ['path', { d: 'M19 12H5', key: 'x3x0zl' }],\n];\n\n/**\n * @component @name ArrowLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTIgMTktNy03IDctNyIgLz4KICA8cGF0aCBkPSJNMTkgMTJINSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/arrow-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowLeft = createLucideIcon('arrow-left', __iconNode);\n\nexport default ArrowLeft;\n"],"names":[],"mappings":";;;;;;;;;;;;;AAGO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,UAAA,CAAA,CAAA,CAAuB;IAClC;QAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAAkB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAA;IAC/C;QAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAAY,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAA;CAC3C;AAaA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,SAAA,CAAA,CAAA,KAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,6MAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA"}}, - {"offset": {"line": 545, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/navigation.js"],"sourcesContent":["module.exports = require('./dist/client/components/navigation')\n"],"names":[],"mappings":"AAAA,OAAO,OAAO","ignoreList":[0]}}] + {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/components/Pricing.tsx"],"sourcesContent":["'use client';\n\n\nimport React from 'react';\nimport { Check, ArrowLeft } from 'lucide-react';\n\ninterface PlanData {\n id: string;\n name: string;\n displayName: string;\n price: number;\n description: string;\n features: string[];\n isPopular: boolean;\n}\n\ninterface PricingProps {\n plans: PlanData[];\n currentPlan: string;\n onBack: () => void;\n onSelectPlan: (planId: string) => void;\n isLoading?: boolean;\n}\n\nconst Pricing: React.FC = ({ plans, currentPlan, onBack, onSelectPlan, isLoading }) => {\n return (\n
\n
\n \n
\n

Choisissez votre destin d'écrivain.

\n

Passez au plan supérieur pour libérer toute la puissance de l'IA.

\n
\n
\n {isLoading &&

Chargement des offres...

}\n {!isLoading && plans.map((p) => (\n
\n
\n

{p.displayName}

\n
{p.price}€/mois
\n

{p.description}

\n
\n
    \n {p.features.map((f, i) => (\n
  • \n
    \n {f}\n
  • \n ))}\n
\n onSelectPlan(p.id)}\n className={`w-full py-4 rounded-2xl font-black transition-all ${p.id === currentPlan ? 'bg-slate-100 text-slate-400 cursor-default' : p.isPopular ? 'bg-blue-600 text-white hover:bg-blue-700' : 'bg-slate-900 text-white hover:bg-slate-800'}`}\n >\n {p.id === currentPlan ? 'Plan Actuel' : 'Sélectionner'}\n \n
\n ))}\n
\n
\n
\n );\n};\n\nexport default Pricing;\n"],"names":[],"mappings":";;;;;AAIA;AAAA;AAJA;;;AAwBA,MAAM,UAAkC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE;IAC9F,qBACE,yOAAC;QAAI,WAAU;kBACb,cAAA,yOAAC;YAAI,WAAU;;8BACb,yOAAC;oBAAO,SAAS;oBAAQ,WAAU;;sCACjC,yOAAC,4QAAS;4BAAC,MAAM;;;;;;wBAAM;;;;;;;8BAEzB,yOAAC;oBAAI,WAAU;;sCACb,yOAAC;4BAAG,WAAU;sCAA0C;;;;;;sCACxD,yOAAC;4BAAE,WAAU;sCAAiB;;;;;;;;;;;;8BAEhC,yOAAC;oBAAI,WAAU;;wBACZ,2BAAa,yOAAC;4BAAE,WAAU;sCAA+B;;;;;;wBACzD,CAAC,aAAa,MAAM,GAAG,CAAC,CAAC,kBACxB,yOAAC;gCAAe,WAAW,CAAC,+CAA+C,EAAE,EAAE,SAAS,GAAG,8CAA8C,+BAA+B;;kDACtK,yOAAC;wCAAI,WAAU;;0DACb,yOAAC;gDAAG,WAAU;0DAAyC,EAAE,WAAW;;;;;;0DACpE,yOAAC;gDAAI,WAAU;;oDAA2C,EAAE,KAAK;oDAAC;kEAAC,yOAAC;wDAAK,WAAU;kEAAqC;;;;;;;;;;;;0DACxH,yOAAC;gDAAE,WAAU;0DAA0B,EAAE,WAAW;;;;;;;;;;;;kDAEtD,yOAAC;wCAAG,WAAU;kDACX,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,kBAClB,yOAAC;gDAAW,WAAU;;kEACpB,yOAAC;wDAAI,WAAU;kEAA8C,cAAA,yOAAC,4PAAK;4DAAC,MAAM;;;;;;;;;;;oDACzE;;+CAFM;;;;;;;;;;kDAMb,yOAAC;wCACC,SAAS,IAAM,aAAa,EAAE,EAAE;wCAChC,WAAW,CAAC,kDAAkD,EAAE,EAAE,EAAE,KAAK,cAAc,+CAA+C,EAAE,SAAS,GAAG,6CAA6C,8CAA8C;kDAE9O,EAAE,EAAE,KAAK,cAAc,gBAAgB;;;;;;;+BAlBlC,EAAE,EAAE;;;;;;;;;;;;;;;;;;;;;;AA0B1B;KAxCM;uCA0CS"}}, + {"offset": {"line": 196, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/pricing/page.tsx"],"sourcesContent":["'use client';\r\n\r\nimport React, { useState, useEffect } from 'react';\r\nimport Pricing from '@/components/Pricing';\r\nimport { useRouter } from 'next/navigation';\r\nimport { useAuthContext } from '@/providers/AuthProvider';\r\n\r\nexport default function PricingPage() {\r\n const router = useRouter();\r\n const { user } = useAuthContext();\r\n\r\n const [plans, setPlans] = useState([]);\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n fetch('/api/plans', { cache: 'no-store' })\r\n .then(res => res.json())\r\n .then(data => {\r\n setPlans(data);\r\n setIsLoading(false);\r\n })\r\n .catch(err => {\r\n console.error(err);\r\n setIsLoading(false);\r\n });\r\n }, []);\r\n\r\n return (\r\n router.push(user ? '/dashboard' : '/')}\r\n onSelectPlan={() => router.push(user ? '/checkout' : '/login')}\r\n />\r\n );\r\n}\r\n"],"names":[],"mappings":";;;;;AAEA;AACA;AACA;AACA;;;AALA;;;;;AAOe,SAAS;;IACpB,MAAM,SAAS,IAAA,8LAAS;IACxB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,kMAAc;IAE/B,MAAM,CAAC,OAAO,SAAS,GAAG,IAAA,qNAAQ,EAAC,EAAE;IACrC,MAAM,CAAC,WAAW,aAAa,GAAG,IAAA,qNAAQ,EAAC;IAE3C,IAAA,sNAAS;iCAAC;YACN,MAAM,cAAc;gBAAE,OAAO;YAAW,GACnC,IAAI;yCAAC,CAAA,MAAO,IAAI,IAAI;wCACpB,IAAI;yCAAC,CAAA;oBACF,SAAS;oBACT,aAAa;gBACjB;wCACC,KAAK;yCAAC,CAAA;oBACH,QAAQ,KAAK,CAAC;oBACd,aAAa;gBACjB;;QACR;gCAAG,EAAE;IAEL,qBACI,yOAAC,uLAAO;QACJ,OAAO;QACP,WAAW;QACX,aAAa,MAAM,aAAa,QAAQ;QACxC,QAAQ,IAAM,OAAO,IAAI,CAAC,OAAO,eAAe;QAChD,cAAc,IAAM,OAAO,IAAI,CAAC,OAAO,cAAc;;;;;;AAGjE;GA7BwB;;QACL,8LAAS;QACP,kMAAc;;;KAFX"}}, + {"offset": {"line": 265, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/mergeClasses.ts"],"sourcesContent":["/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = (...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n"],"names":[],"mappings":";;;;;;;;;IAMO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,YAAA,CAAA,CAAA,CAAe,CAAA,GAA2C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GACrE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA,GAAO,KAAA,CAAA,CAAA,CAAA,CAAA,CAAU;QACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,OAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqB,CAAA,CAAA,CAAA,CAAA,CAAA,MAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CACjC,KAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,KAAM,CAAA,CAAA,CAAA,CAAA,CAAA;IAEjC,CAAC,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAG,CAAA,CACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}}, + {"offset": {"line": 283, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/toKebabCase.ts"],"sourcesContent":["/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n"],"names":[],"mappings":";;;;;;;;;IAMO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAsB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}}, + {"offset": {"line": 299, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/toCamelCase.ts"],"sourcesContent":["/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = (string: T) =>\n string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n p2 ? p2.toUpperCase() : p1.toLowerCase(),\n );\n"],"names":[],"mappings":";;;;;;;;;IAMO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,WAAA,CAAA,CAAA,CAAc,CAAmB,MAAA,CAAA,CAAA,CAAA,AAC5C,CAD4C,AAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAyB,CAAC,CAAA,CAAA,CAAA,CAAA,GAAO,CAAA,CAAA,CAAA,CAAI,EAAA,CAAA,CAAA,CAAA,AAClD,CADkD,AAClD,IAAK,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAI,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}}, + {"offset": {"line": 315, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/toPascalCase.ts"],"sourcesContent":["import { CamelToPascal } from '../utility-types';\nimport { toCamelCase } from './toCamelCase';\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = (string: T): CamelToPascal => {\n const camelCase = toCamelCase(string);\n\n return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal;\n};\n"],"names":[],"mappings":";;;;;;;;;;;AASO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgC;IAC7E,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,2OAAA,EAAY,MAAM,CAAA;IAEpC,OAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAY,GAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA;AAC/D,CAAA"}}, + {"offset": {"line": 336, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/defaultAttributes.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/defaultAttributes.ts"],"sourcesContent":["export default {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n"],"names":[],"mappings":";;;;;;;;;IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe;IACb,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACP,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,CAAA,CAAA;IACP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,CAAA,CAAA;IACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACT,CAAA,CAAA,CAAA,CAAA,EAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAa,CAAA;IACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACf,cAAA,CAAA,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAClB,CAAA"}}, + {"offset": {"line": 362, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/hasA11yProp.ts"],"sourcesContent":["/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record) => {\n for (const prop in props) {\n if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n return true;\n }\n }\n\n return false;\n};\n"],"names":[],"mappings":";;;;;;;;;IAMO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA+B;IACzD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,KAAQ,KAAA,CAAA,AAAO;QACxB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,EAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,KAAK,CAAA,CAAA,CAAA,CAAA,KAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,MAAS,OAAA,CAAA,CAAS;YACnE,OAAO,CAAA,CAAA,CAAA,CAAA;QACT;IACF;IAEA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AACT,CAAA"}}, + {"offset": {"line": 385, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/Icon.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/Icon.ts"],"sourcesContent":["import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef(\n (\n {\n color = 'currentColor',\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = '',\n children,\n iconNode,\n ...rest\n },\n ref,\n ) =>\n createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n className: mergeClasses('lucide', className),\n ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n ...rest,\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n ),\n);\n\nexport default Icon;\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 426, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/createLucideIcon.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/createLucideIcon.ts"],"sourcesContent":["import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n const Component = forwardRef(({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className,\n ),\n ...props,\n }),\n );\n\n Component.displayName = toPascalCase(iconName);\n\n return Component;\n};\n\nexport default createLucideIcon;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAWA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,gBAAA,CAAA,CAAA,CAAmB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,QAAA,CAAA,CAAA,CAAA,CAAA,CAAuB;IACjE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,8MAAA,EAAuC,CAAC,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,GAAM,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GACjF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,8MAAA,EAAc,gNAAA,CAAA,CAAM;YAClB,CAAA,CAAA,CAAA;YACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,4OAAA,EACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,2OAAA,MAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,4OAAA,EAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAC7C,CAAA,OAAA,EAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,EAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAEF,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CACJ;IAGH,SAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,4OAAA,EAAa,QAAQ,CAAA;IAE7C,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACT,CAAA"}}, + {"offset": {"line": 461, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/check.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/icons/check.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M20 6 9 17l-5-5', key: '1gmf2c' }]];\n\n/**\n * @component @name Check\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgNiA5IDE3bC01LTUiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/check\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Check = createLucideIcon('check', __iconNode);\n\nexport default Check;\n"],"names":[],"mappings":";;;;;;;;;;;;;AAGO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAuB;IAAC;QAAC,MAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,iBAAA,CAAA;YAAmB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAC;CAAA;AAatF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,KAAA,CAAA,CAAA,KAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,6MAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA"}}, + {"offset": {"line": 499, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/arrow-left.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/lucide-react/src/icons/arrow-left.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm12 19-7-7 7-7', key: '1l729n' }],\n ['path', { d: 'M19 12H5', key: 'x3x0zl' }],\n];\n\n/**\n * @component @name ArrowLeft\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTIgMTktNy03IDctNyIgLz4KICA8cGF0aCBkPSJNMTkgMTJINSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/arrow-left\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowLeft = createLucideIcon('arrow-left', __iconNode);\n\nexport default ArrowLeft;\n"],"names":[],"mappings":";;;;;;;;;;;;;AAGO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,UAAA,CAAA,CAAA,CAAuB;IAClC;QAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAAkB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAA;IAC/C;QAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAQ,CAAA;YAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;YAAY,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAA,CAAU;KAAA;CAC3C;AAaA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,SAAA,CAAA,CAAA,KAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,6MAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA"}}, + {"offset": {"line": 543, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/navigation.js"],"sourcesContent":["module.exports = require('./dist/client/components/navigation')\n"],"names":[],"mappings":"AAAA,OAAO,OAAO","ignoreList":[0]}}] } \ No newline at end of file diff --git a/.next/dev/static/chunks/Documents_00 - projet_plumeia_c4c2fd93._.js b/.next/dev/static/chunks/Documents_00 - projet_plumeia_c4c2fd93._.js index c912545..1a1f1e8 100644 --- a/.next/dev/static/chunks/Documents_00 - projet_plumeia_c4c2fd93._.js +++ b/.next/dev/static/chunks/Documents_00 - projet_plumeia_c4c2fd93._.js @@ -574,7 +574,7 @@ const Dashboard = ({ user, projects, onSelect, onCreate, onLogout, onPricing, on children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "px-3 py-1 rounded-full bg-indigo-100 text-indigo-700 text-[10px] uppercase font-black tracking-widest", - children: user.subscription.plan + children: user.subscription.planDetails?.displayName || user.subscription.plan }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/Dashboard.tsx", lineNumber: 33, diff --git a/.next/dev/static/chunks/Documents_00 - projet_plumeia_c4c2fd93._.js.map b/.next/dev/static/chunks/Documents_00 - projet_plumeia_c4c2fd93._.js.map index 35f34fd..53d63e3 100644 --- a/.next/dev/static/chunks/Documents_00 - projet_plumeia_c4c2fd93._.js.map +++ b/.next/dev/static/chunks/Documents_00 - projet_plumeia_c4c2fd93._.js.map @@ -2,10 +2,10 @@ "version": 3, "sources": [], "sections": [ - {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/types.ts"],"sourcesContent":["\nexport enum EntityType {\n CHARACTER = 'Personnage',\n LOCATION = 'Lieu',\n OBJECT = 'Objet',\n NOTE = 'Note'\n}\n\nexport interface CharacterAttributes {\n age: number;\n height: number;\n hair: string;\n eyes: string;\n archetype: string;\n role: 'protagonist' | 'antagonist' | 'support' | 'extra';\n personality: {\n spectrumIntrovertExtravert: number;\n spectrumEmotionalRational: number;\n spectrumChaoticLawful: number;\n };\n physicalQuirk: string;\n behavioralQuirk: string;\n}\n\nexport type CustomFieldType = 'text' | 'textarea' | 'number' | 'boolean' | 'select';\n\nexport interface CustomFieldDefinition {\n id: string;\n label: string;\n type: CustomFieldType;\n options?: string[];\n placeholder?: string;\n}\n\nexport interface EntityTemplate {\n entityType: EntityType;\n fields: CustomFieldDefinition[];\n}\n\nexport interface Entity {\n id: string;\n type: EntityType;\n name: string;\n description: string;\n details: string;\n storyContext?: string;\n attributes?: CharacterAttributes;\n customValues?: Record;\n}\n\nexport interface Chapter {\n id: string;\n title: string;\n content: string;\n summary?: string;\n}\n\nexport type PlotNodeType = 'story' | 'dialogue' | 'action';\n\nexport interface PlotNode {\n id: string;\n x: number;\n y: number;\n title: string;\n description: string;\n color: string;\n type?: PlotNodeType;\n}\n\nexport interface PlotConnection {\n id: string;\n source: string;\n target: string;\n}\n\nexport interface WorkflowData {\n nodes: PlotNode[];\n connections: PlotConnection[];\n}\n\nexport type IdeaStatus = 'todo' | 'progress' | 'done';\nexport type IdeaCategory = 'plot' | 'character' | 'research' | 'todo';\n\nexport interface Idea {\n id: string;\n title: string;\n description: string;\n status: IdeaStatus;\n category: IdeaCategory;\n createdAt: number;\n}\n\nexport interface BookSettings {\n genre: string;\n subGenre?: string;\n targetAudience: string;\n tone: string;\n pov: string;\n tense: string;\n synopsis: string;\n themes: string;\n}\n\nexport interface BookProject {\n id: string;\n title: string;\n author: string;\n lastModified: number;\n settings?: BookSettings;\n // Direct fields sometimes used in creation/updates before settings normalization\n genre?: string;\n pov?: string;\n tense?: string;\n chapters: Chapter[];\n entities: Entity[];\n workflow?: WorkflowData;\n templates?: EntityTemplate[];\n styleGuide?: string;\n ideas?: Idea[];\n}\n\nexport interface ChatMessage {\n id: string;\n role: 'user' | 'model';\n text: string;\n responseType?: 'draft' | 'reflection';\n isLoading?: boolean;\n}\n\n// --- SAAS TYPES ---\n\nexport type PlanType = 'free' | 'pro' | 'master';\n\nexport interface Subscription {\n plan: PlanType;\n startDate: number;\n status: 'active' | 'canceled' | 'past_due';\n}\n\nexport interface UserUsage {\n aiActionsCurrent: number;\n aiActionsLimit: number;\n projectsLimit: number;\n}\n\nexport interface UserPreferences {\n theme: 'light' | 'dark' | 'sepia';\n dailyWordGoal: number;\n language: 'fr' | 'en';\n}\n\nexport interface UserStats {\n totalWordsWritten: number;\n writingStreak: number;\n lastWriteDate: number;\n}\n\nexport interface UserProfile {\n id: string;\n email: string;\n name: string;\n avatar?: string;\n bio?: string;\n subscription: Subscription;\n usage: UserUsage;\n preferences: UserPreferences;\n stats: UserStats;\n}\n\nexport type ViewMode = 'write' | 'world_building' | 'workflow' | 'settings' | 'preview' | 'ideas' | 'landing' | 'features' | 'pricing' | 'checkout' | 'dashboard' | 'auth' | 'signup' | 'profile';\n"],"names":[],"mappings":";;;;AACO,IAAA,AAAK,oCAAA;;;;;WAAA"}}, + {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/types.ts"],"sourcesContent":["\nexport enum EntityType {\n CHARACTER = 'Personnage',\n LOCATION = 'Lieu',\n OBJECT = 'Objet',\n NOTE = 'Note'\n}\n\nexport interface CharacterAttributes {\n age: number;\n height: number;\n hair: string;\n eyes: string;\n archetype: string;\n role: 'protagonist' | 'antagonist' | 'support' | 'extra';\n personality: {\n spectrumIntrovertExtravert: number;\n spectrumEmotionalRational: number;\n spectrumChaoticLawful: number;\n };\n physicalQuirk: string;\n behavioralQuirk: string;\n}\n\nexport type CustomFieldType = 'text' | 'textarea' | 'number' | 'boolean' | 'select';\n\nexport interface CustomFieldDefinition {\n id: string;\n label: string;\n type: CustomFieldType;\n options?: string[];\n placeholder?: string;\n}\n\nexport interface EntityTemplate {\n entityType: EntityType;\n fields: CustomFieldDefinition[];\n}\n\nexport interface Entity {\n id: string;\n type: EntityType;\n name: string;\n description: string;\n details: string;\n storyContext?: string;\n attributes?: CharacterAttributes;\n customValues?: Record;\n}\n\nexport interface Chapter {\n id: string;\n title: string;\n content: string;\n summary?: string;\n}\n\nexport type PlotNodeType = 'story' | 'dialogue' | 'action';\n\nexport interface PlotNode {\n id: string;\n x: number;\n y: number;\n title: string;\n description: string;\n color: string;\n type?: PlotNodeType;\n}\n\nexport interface PlotConnection {\n id: string;\n source: string;\n target: string;\n}\n\nexport interface WorkflowData {\n nodes: PlotNode[];\n connections: PlotConnection[];\n}\n\nexport type IdeaStatus = 'todo' | 'progress' | 'done';\nexport type IdeaCategory = 'plot' | 'character' | 'research' | 'todo';\n\nexport interface Idea {\n id: string;\n title: string;\n description: string;\n status: IdeaStatus;\n category: IdeaCategory;\n createdAt: number;\n}\n\nexport interface BookSettings {\n genre: string;\n subGenre?: string;\n targetAudience: string;\n tone: string;\n pov: string;\n tense: string;\n synopsis: string;\n themes: string;\n}\n\nexport interface BookProject {\n id: string;\n title: string;\n author: string;\n lastModified: number;\n settings?: BookSettings;\n // Direct fields sometimes used in creation/updates before settings normalization\n genre?: string;\n pov?: string;\n tense?: string;\n chapters: Chapter[];\n entities: Entity[];\n workflow?: WorkflowData;\n templates?: EntityTemplate[];\n styleGuide?: string;\n ideas?: Idea[];\n}\n\nexport interface ChatMessage {\n id: string;\n role: 'user' | 'model';\n text: string;\n responseType?: 'draft' | 'reflection';\n isLoading?: boolean;\n}\n\n// --- SAAS TYPES ---\n\nexport interface PlanData {\n id: string;\n name: string;\n displayName: string;\n price: number;\n description: string;\n features: string[];\n isPopular: boolean;\n maxProjects: number;\n maxAiActions: number;\n}\n\nexport interface Subscription {\n plan: string; // The ID of the plan\n planDetails?: PlanData; // The populated plan details from DB\n startDate: number;\n status: 'active' | 'canceled' | 'past_due';\n}\n\nexport interface UserUsage {\n aiActionsCurrent: number;\n aiActionsLimit: number;\n projectsLimit: number;\n}\n\nexport interface UserPreferences {\n theme: 'light' | 'dark' | 'sepia';\n dailyWordGoal: number;\n language: 'fr' | 'en';\n}\n\nexport interface UserStats {\n totalWordsWritten: number;\n writingStreak: number;\n lastWriteDate: number;\n}\n\nexport interface UserProfile {\n id: string;\n email: string;\n name: string;\n avatar?: string;\n bio?: string;\n subscription: Subscription;\n usage: UserUsage;\n preferences: UserPreferences;\n stats: UserStats;\n}\n\nexport type ViewMode = 'write' | 'world_building' | 'workflow' | 'settings' | 'preview' | 'ideas' | 'landing' | 'features' | 'pricing' | 'checkout' | 'dashboard' | 'auth' | 'signup' | 'profile';\n"],"names":[],"mappings":";;;;AACO,IAAA,AAAK,oCAAA;;;;;WAAA"}}, {"offset": {"line": 22, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/constants.ts"],"sourcesContent":["\nimport { EntityType } from \"./types\";\n\nexport const DEFAULT_BOOK_TITLE = \"Nouveau Roman\";\nexport const DEFAULT_AUTHOR = \"Auteur Inconnu\";\n\nexport const INITIAL_CHAPTER = {\n id: 'chap-1',\n title: 'Chapitre 1',\n content: '

Il était une fois...

',\n summary: 'Début de l\\'histoire.'\n};\n\nexport const ENTITY_ICONS: Record = {\n [EntityType.CHARACTER]: '👤',\n [EntityType.LOCATION]: '🏰',\n [EntityType.OBJECT]: '🗝️',\n [EntityType.NOTE]: '📝',\n};\n\n// Colors for tags\nexport const ENTITY_COLORS: Record = {\n [EntityType.CHARACTER]: 'bg-blue-100 text-blue-800 border-blue-200',\n [EntityType.LOCATION]: 'bg-green-100 text-green-800 border-green-200',\n [EntityType.OBJECT]: 'bg-amber-100 text-amber-800 border-amber-200',\n [EntityType.NOTE]: 'bg-gray-100 text-gray-800 border-gray-200',\n};\n\n// --- Character Creation Lists ---\n\nexport const HAIR_COLORS = [\n \"Brun\", \"Noir\", \"Blond\", \"Roux\", \"Auburn\", \"Gris\", \"Blanc\", \"Châtain\", \"Chauve\", \"Teinture (Bleu/Rose/Etc)\"\n];\n\nexport const EYE_COLORS = [\n \"Marron\", \"Bleu\", \"Vert\", \"Noisette\", \"Gris\", \"Noir\", \"Vairons\", \"Ambre\"\n];\n\nexport const ARCHETYPES = [\n \"Le Héros\", \"L'Ombre / Le Méchant\", \"Le Mentor\", \"Le Gardien du Seuil\",\n \"Le Shapeshifter (Changeforme)\", \"Le Trickster (Farceur)\", \"L'Allié\", \"L'Élu\",\n \"Le Rebelle\", \"Le Séducteur\", \"Le Sage\", \"Le Guerrier\", \"L'Innocent\"\n];\n\n// --- Book Settings Lists ---\n\nexport const GENRES = [\n \"Fantasy\", \"Science-Fiction\", \"Thriller / Polar\", \"Romance\", \"Historique\",\n \"Horreur\", \"Aventure\", \"Contemporain\", \"Jeunesse / Young Adult\", \"Dystopie\"\n];\n\nexport const TONES = [\n \"Sombre & Sérieux\", \"Léger & Humoristique\", \"Épique & Grandiose\",\n \"Mélancolique\", \"Mystérieux\", \"Optimiste\", \"Cynique\", \"Romantique\"\n];\n\nexport const POV_OPTIONS = [\n \"1ère personne (Je)\",\n \"3ème personne (Limitée au protagoniste)\",\n \"3ème personne (Omnisciente)\",\n \"Multi-points de vue (Alterné)\"\n];\n\nexport const TENSE_OPTIONS = [\n \"Passé (Passé simple / Imparfait)\",\n \"Présent de narration\"\n];"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AAEO,MAAM,qBAAqB;AAC3B,MAAM,iBAAiB;AAEvB,MAAM,kBAAkB;IAC7B,IAAI;IACJ,OAAO;IACP,SAAS;IACT,SAAS;AACX;AAEO,MAAM,eAA2C;IACtD,CAAC,gLAAU,CAAC,SAAS,CAAC,EAAE;IACxB,CAAC,gLAAU,CAAC,QAAQ,CAAC,EAAE;IACvB,CAAC,gLAAU,CAAC,MAAM,CAAC,EAAE;IACrB,CAAC,gLAAU,CAAC,IAAI,CAAC,EAAE;AACrB;AAGO,MAAM,gBAA4C;IACvD,CAAC,gLAAU,CAAC,SAAS,CAAC,EAAE;IACxB,CAAC,gLAAU,CAAC,QAAQ,CAAC,EAAE;IACvB,CAAC,gLAAU,CAAC,MAAM,CAAC,EAAE;IACrB,CAAC,gLAAU,CAAC,IAAI,CAAC,EAAE;AACrB;AAIO,MAAM,cAAc;IACzB;IAAQ;IAAQ;IAAS;IAAQ;IAAU;IAAQ;IAAS;IAAW;IAAU;CAClF;AAEM,MAAM,aAAa;IACxB;IAAU;IAAQ;IAAQ;IAAY;IAAQ;IAAQ;IAAW;CAClE;AAEM,MAAM,aAAa;IACxB;IAAY;IAAwB;IAAa;IACjD;IAAiC;IAA0B;IAAW;IACtE;IAAc;IAAgB;IAAW;IAAe;CACzD;AAIM,MAAM,SAAS;IACpB;IAAW;IAAmB;IAAoB;IAAW;IAC7D;IAAW;IAAY;IAAgB;IAA0B;CAClE;AAEM,MAAM,QAAQ;IACnB;IAAoB;IAAwB;IAC5C;IAAgB;IAAc;IAAa;IAAW;CACvD;AAEM,MAAM,cAAc;IACzB;IACA;IACA;IACA;CACD;AAEM,MAAM,gBAAgB;IAC3B;IACA;CACD"}}, {"offset": {"line": 146, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/hooks/useProjects.ts"],"sourcesContent":["'use client';\r\n\r\nimport { useState, useEffect } from 'react';\r\nimport {\r\n BookProject,\r\n Chapter,\r\n Entity,\r\n EntityType,\r\n UserProfile,\r\n} from '@/lib/types';\r\nimport api from '@/lib/api';\r\nimport {\r\n DEFAULT_BOOK_TITLE,\r\n DEFAULT_AUTHOR,\r\n INITIAL_CHAPTER\r\n} from '@/lib/constants';\r\n\r\nexport const useProjects = (user: UserProfile | null) => {\r\n const [projects, setProjects] = useState([]);\r\n const [currentProjectId, setCurrentProjectId] = useState(null);\r\n const [loading, setLoading] = useState(false);\r\n\r\n // Load Projects\r\n useEffect(() => {\r\n if (!user) {\r\n setProjects([]);\r\n return;\r\n }\r\n const loadProjects = async () => {\r\n setLoading(true);\r\n try {\r\n const data = await api.projects.list();\r\n const mapped: BookProject[] = (data || []).map((p: any) => ({\r\n id: p.id,\r\n title: p.title,\r\n author: p.author,\r\n lastModified: new Date(p.updatedAt).getTime(),\r\n // Use _count for display before full details are loaded\r\n chapters: Array.from({ length: p._count?.chapters || 0 }, (_, i) => ({ id: `placeholder-${i}`, title: '', content: '' })),\r\n entities: Array.from({ length: p._count?.entities || 0 }, (_, i) => ({ id: `placeholder-${i}`, type: 'character' as any, name: '', description: '' })),\r\n ideas: [],\r\n settings: p.settings || undefined\r\n }));\r\n setProjects(mapped);\r\n } catch (err) {\r\n console.error('Failed to load projects', err);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n loadProjects();\r\n }, [user]);\r\n\r\n // Load details when project is selected\r\n useEffect(() => {\r\n if (!currentProjectId) return;\r\n\r\n const loadProjectDetails = async () => {\r\n try {\r\n const fullProject = await api.projects.get(currentProjectId);\r\n const mapped: BookProject = {\r\n id: fullProject.id,\r\n title: fullProject.title,\r\n author: fullProject.author,\r\n lastModified: new Date(fullProject.updatedAt).getTime(),\r\n settings: fullProject.settings || undefined,\r\n styleGuide: fullProject.styleGuide || undefined,\r\n chapters: (fullProject.chapters || []).map((c: any) => ({\r\n id: c.id,\r\n title: c.title,\r\n content: c.content,\r\n summary: c.summary,\r\n })),\r\n entities: (fullProject.entities || []).map((e: any) => ({\r\n id: e.id,\r\n type: e.type,\r\n name: e.name,\r\n description: e.description,\r\n details: e.details,\r\n storyContext: e.storyContext,\r\n attributes: e.attributes,\r\n customValues: e.customValues,\r\n })),\r\n ideas: (fullProject.ideas || []).map((i: any) => ({\r\n id: i.id,\r\n title: i.title,\r\n description: i.description,\r\n status: i.status,\r\n category: i.category,\r\n createdAt: new Date(i.createdAt).getTime(),\r\n })),\r\n workflow: {\r\n nodes: (fullProject.plotNodes || []).map((n: any) => ({\r\n id: n.id,\r\n x: n.x,\r\n y: n.y,\r\n title: n.title,\r\n description: n.description,\r\n color: n.color,\r\n type: n.type,\r\n })),\r\n connections: (fullProject.plotConnections || []).map((c: any) => ({\r\n id: c.id,\r\n source: c.source,\r\n target: c.target,\r\n })),\r\n },\r\n };\r\n setProjects(prev => prev.map(p => p.id === currentProjectId ? mapped : p));\r\n } catch (err) {\r\n console.error(\"Failed to load project details\", err);\r\n }\r\n };\r\n loadProjectDetails();\r\n }, [currentProjectId]);\r\n\r\n const createProject = async () => {\r\n if (!user) return;\r\n\r\n try {\r\n const created = await api.projects.create({\r\n title: DEFAULT_BOOK_TITLE,\r\n author: user.name || DEFAULT_AUTHOR,\r\n settings: { genre: 'Fantasy', targetAudience: 'Adult', tone: 'Epic' },\r\n });\r\n\r\n const newProject: BookProject = {\r\n id: created.id,\r\n title: created.title,\r\n author: created.author,\r\n lastModified: Date.now(),\r\n chapters: [],\r\n entities: [],\r\n ideas: [],\r\n settings: created.settings,\r\n };\r\n\r\n setProjects(prev => [...prev, newProject]);\r\n await addChapter(created.id, INITIAL_CHAPTER);\r\n return created.id;\r\n } catch (err) {\r\n console.error('Failed to create project', err);\r\n throw err;\r\n }\r\n };\r\n\r\n const updateProject = async (id: string, data: Partial) => {\r\n setProjects(prev => prev.map(p => p.id === id ? { ...p, ...data } : p));\r\n\r\n try {\r\n // Persist project fields\r\n const payload: any = {};\r\n if (data.title !== undefined) payload.title = data.title;\r\n if (data.author !== undefined) payload.author = data.author;\r\n if (data.settings !== undefined) payload.settings = data.settings;\r\n if (data.styleGuide !== undefined) payload.styleGuide = data.styleGuide;\r\n if (Object.keys(payload).length > 0) {\r\n await api.projects.update(id, payload);\r\n }\r\n\r\n // Persist workflow (nodes + connections) separately\r\n if (data.workflow) {\r\n await api.projects.syncWorkflow(id, {\r\n nodes: data.workflow.nodes || [],\r\n connections: data.workflow.connections || [],\r\n });\r\n }\r\n } catch (err) {\r\n console.error(\"Failed to update project\", err);\r\n }\r\n };\r\n\r\n const addChapter = async (projectId: string, chapterData: Partial) => {\r\n try {\r\n const newChap = await api.chapters.create({\r\n projectId,\r\n title: chapterData.title || 'New Chapter',\r\n content: chapterData.content || '',\r\n summary: chapterData.summary || undefined,\r\n });\r\n\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n chapters: [...p.chapters, {\r\n id: newChap.id,\r\n title: newChap.title,\r\n content: newChap.content,\r\n summary: newChap.summary,\r\n }]\r\n };\r\n }));\r\n return newChap.id;\r\n } catch (err) {\r\n console.error(\"Failed to add chapter\", err);\r\n return null;\r\n }\r\n };\r\n\r\n const updateChapter = async (projectId: string, chapterId: string, data: Partial) => {\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n chapters: p.chapters.map(c => c.id === chapterId ? { ...c, ...data } : c)\r\n };\r\n }));\r\n\r\n try {\r\n await api.chapters.update(chapterId, data);\r\n } catch (err) {\r\n console.error(\"Failed to update chapter\", err);\r\n }\r\n };\r\n\r\n const createEntity = async (projectId: string, type: EntityType, initialData?: Partial) => {\r\n try {\r\n const newEntity = await api.entities.create({\r\n projectId,\r\n type,\r\n name: initialData?.name || `Nouveau ${type}`,\r\n description: initialData?.description || '',\r\n details: initialData?.details || '',\r\n attributes: initialData?.attributes || undefined,\r\n customValues: initialData?.customValues || undefined,\r\n });\r\n\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n entities: [...p.entities, {\r\n id: newEntity.id,\r\n type: newEntity.type,\r\n name: newEntity.name,\r\n description: newEntity.description,\r\n details: newEntity.details,\r\n attributes: newEntity.attributes,\r\n customValues: newEntity.customValues || {},\r\n }]\r\n };\r\n }));\r\n return newEntity.id;\r\n } catch (err) {\r\n console.error(\"Failed to create entity\", err);\r\n throw err;\r\n }\r\n };\r\n\r\n const updateEntity = async (projectId: string, entityId: string, data: Partial) => {\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n entities: p.entities.map(e => e.id === entityId ? { ...e, ...data } : e)\r\n };\r\n }));\r\n\r\n try {\r\n await api.entities.update(entityId, data);\r\n } catch (err) {\r\n console.error(\"Failed to update entity\", err);\r\n }\r\n };\r\n\r\n const deleteEntity = async (projectId: string, entityId: string) => {\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n entities: p.entities.filter(e => e.id !== entityId)\r\n };\r\n }));\r\n\r\n try {\r\n await api.entities.delete(entityId);\r\n } catch (err) {\r\n console.error(\"Failed to delete entity\", err);\r\n }\r\n };\r\n\r\n return {\r\n projects,\r\n currentProjectId,\r\n setCurrentProjectId,\r\n createProject,\r\n updateProject,\r\n addChapter,\r\n updateChapter,\r\n createEntity,\r\n updateEntity,\r\n deleteEntity,\r\n deleteProject: async (projectId: string) => {\r\n try {\r\n // Cascade delete is handled by Prisma, just delete the project\r\n await api.projects.delete(projectId);\r\n\r\n setProjects(prev => prev.filter(p => p.id !== projectId));\r\n if (currentProjectId === projectId) {\r\n setCurrentProjectId(null);\r\n }\r\n } catch (err) {\r\n console.error(\"Failed to delete project\", err);\r\n }\r\n }\r\n };\r\n};\r\n"],"names":[],"mappings":"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"}}, - {"offset": {"line": 503, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/components/Dashboard.tsx"],"sourcesContent":["'use client';\n\n\nimport React from 'react';\nimport { BookProject, UserProfile } from '@/lib/types';\nimport { Plus, Book, Clock, Star, ChevronRight, LogOut, LayoutDashboard, User, Target, Flame, Edit3 } from 'lucide-react';\n\ninterface DashboardProps {\n user: UserProfile;\n projects: BookProject[];\n onSelect: (id: string) => void;\n onCreate: () => void;\n onLogout: () => void;\n onPricing: () => void;\n onProfile: () => void;\n}\n\nconst Dashboard: React.FC = ({ user, projects, onSelect, onCreate, onLogout, onPricing, onProfile }) => {\n return (\n
\n
\n\n {/* User Card */}\n
\n
\n
\n \"Avatar\"\n
\n
\n
\n

Bonjour, {user.name} 👋

\n
\n {user.subscription.plan}\n Membre depuis le 24 janv.\n
\n
\n
\n
\n \n \n
\n
\n\n {/* Stats Section */}\n
\n
\n
\n
\n

Série actuelle

\n

{user.stats.writingStreak} Jours

\n
\n
\n
\n
\n
\n

Mots écrits

\n

{user.stats.totalWordsWritten.toLocaleString()}

\n
\n
\n
\n
\n
\n

Objectif du jour

\n

{user.preferences.dailyWordGoal} Mots

\n
\n
\n
\n\n
\n {/* Project List */}\n
\n
\n

Mes Romans

\n \n Écrire un nouveau livre\n \n
\n\n
\n {projects.map(p => (\n onSelect(p.id)}\n className=\"bg-white p-8 rounded-[2.5rem] border border-indigo-50 shadow-sm hover:shadow-2xl hover:scale-[1.02] transition-all cursor-pointer group flex flex-col justify-between h-64\"\n >\n
\n
\n \n
\n

{p.title}

\n

Dernière modification : {new Date(p.lastModified).toLocaleDateString()}

\n
\n
\n {p.chapters.length} Chapitres\n \n
\n
\n ))}\n {projects.length === 0 && (\n
\n \n

Prêt à commencer votre premier roman ?

\n \n
\n )}\n
\n
\n\n {/* Sidebar Stats & Plan */}\n
\n
\n
\n

Utilisation

\n
\n
\n
\n Actions IA\n {user.usage.aiActionsCurrent} / {user.usage.aiActionsLimit === 999999 ? '∞' : user.usage.aiActionsLimit}\n
\n
\n \n
\n
\n
\n
\n Emplacements Roman\n {projects.length} / {user.usage.projectsLimit}\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n
\n );\n};\n\nexport default Dashboard;\n"],"names":[],"mappings":"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"}}, + {"offset": {"line": 503, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/components/Dashboard.tsx"],"sourcesContent":["'use client';\n\n\nimport React from 'react';\nimport { BookProject, UserProfile } from '@/lib/types';\nimport { Plus, Book, Clock, Star, ChevronRight, LogOut, LayoutDashboard, User, Target, Flame, Edit3 } from 'lucide-react';\n\ninterface DashboardProps {\n user: UserProfile;\n projects: BookProject[];\n onSelect: (id: string) => void;\n onCreate: () => void;\n onLogout: () => void;\n onPricing: () => void;\n onProfile: () => void;\n}\n\nconst Dashboard: React.FC = ({ user, projects, onSelect, onCreate, onLogout, onPricing, onProfile }) => {\n return (\n
\n
\n\n {/* User Card */}\n
\n
\n
\n \"Avatar\"\n
\n
\n
\n

Bonjour, {user.name} 👋

\n
\n {user.subscription.planDetails?.displayName || user.subscription.plan}\n Membre depuis le 24 janv.\n
\n
\n
\n
\n \n \n
\n
\n\n {/* Stats Section */}\n
\n
\n
\n
\n

Série actuelle

\n

{user.stats.writingStreak} Jours

\n
\n
\n
\n
\n
\n

Mots écrits

\n

{user.stats.totalWordsWritten.toLocaleString()}

\n
\n
\n
\n
\n
\n

Objectif du jour

\n

{user.preferences.dailyWordGoal} Mots

\n
\n
\n
\n\n
\n {/* Project List */}\n
\n
\n

Mes Romans

\n \n Écrire un nouveau livre\n \n
\n\n
\n {projects.map(p => (\n onSelect(p.id)}\n className=\"bg-white p-8 rounded-[2.5rem] border border-indigo-50 shadow-sm hover:shadow-2xl hover:scale-[1.02] transition-all cursor-pointer group flex flex-col justify-between h-64\"\n >\n
\n
\n \n
\n

{p.title}

\n

Dernière modification : {new Date(p.lastModified).toLocaleDateString()}

\n
\n
\n {p.chapters.length} Chapitres\n \n
\n
\n ))}\n {projects.length === 0 && (\n
\n \n

Prêt à commencer votre premier roman ?

\n \n
\n )}\n
\n
\n\n {/* Sidebar Stats & Plan */}\n
\n
\n
\n

Utilisation

\n
\n
\n
\n Actions IA\n {user.usage.aiActionsCurrent} / {user.usage.aiActionsLimit === 999999 ? '∞' : user.usage.aiActionsLimit}\n
\n
\n \n
\n
\n
\n
\n Emplacements Roman\n {projects.length} / {user.usage.projectsLimit}\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n
\n );\n};\n\nexport default Dashboard;\n"],"names":[],"mappings":"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"}}, {"offset": {"line": 1172, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/dashboard/page.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { useRouter } from 'next/navigation';\r\nimport { useAuthContext } from '@/providers/AuthProvider';\r\nimport { useProjects } from '@/hooks/useProjects';\r\nimport Dashboard from '@/components/Dashboard';\r\nimport { Loader2, BookOpen } from 'lucide-react';\r\nimport { useEffect } from 'react';\r\n\r\nexport default function DashboardPage() {\r\n const router = useRouter();\r\n const { user, logout, loading } = useAuthContext();\r\n const { projects, setCurrentProjectId, createProject } = useProjects(user);\r\n\r\n useEffect(() => {\r\n if (!loading && !user) {\r\n router.replace('/login');\r\n }\r\n }, [user, loading, router]);\r\n\r\n if (loading || !user) {\r\n return (\r\n
\r\n \r\n
\r\n \r\n PlumeIA\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n {\r\n setCurrentProjectId(id);\r\n router.push(`/project/${id}`);\r\n }}\r\n onCreate={async () => {\r\n try {\r\n const id = await createProject();\r\n if (id) {\r\n setCurrentProjectId(id);\r\n router.push(`/project/${id}`);\r\n }\r\n } catch (err: any) {\r\n if (err?.message?.includes('Limite')) {\r\n alert(err.message);\r\n router.push('/pricing');\r\n } else {\r\n alert('Erreur lors de la création du projet');\r\n }\r\n }\r\n }}\r\n onLogout={() => {\r\n logout();\r\n router.push('/');\r\n }}\r\n onPricing={() => router.push('/pricing')}\r\n onProfile={() => router.push('/profile')}\r\n />\r\n );\r\n}\r\n"],"names":[],"mappings":";;;;;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;;;AAPA;;;;;;;AASe,SAAS;;IACpB,MAAM,SAAS,IAAA,8LAAS;IACxB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,kMAAc;IAChD,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,aAAa,EAAE,GAAG,IAAA,yLAAW,EAAC;IAErE,IAAA,sNAAS;mCAAC;YACN,IAAI,CAAC,WAAW,CAAC,MAAM;gBACnB,OAAO,OAAO,CAAC;YACnB;QACJ;kCAAG;QAAC;QAAM;QAAS;KAAO;IAE1B,IAAI,WAAW,CAAC,MAAM;QAClB,qBACI,yOAAC;YAAI,WAAU;;8BACX,yOAAC,2QAAO;oBAAC,WAAU;oBAAkC,MAAM;;;;;;8BAC3D,yOAAC;oBAAI,WAAU;;sCACX,yOAAC,yQAAQ;4BAAC,WAAU;4BAAgB,MAAM;;;;;;sCAC1C,yOAAC;4BAAK,WAAU;sCAAoB;;;;;;;;;;;;;;;;;;IAIpD;IAEA,qBACI,yOAAC,yLAAS;QACN,MAAM;QACN,UAAU;QACV,UAAU,CAAC;YACP,oBAAoB;YACpB,OAAO,IAAI,CAAC,CAAC,SAAS,EAAE,IAAI;QAChC;QACA,UAAU;YACN,IAAI;gBACA,MAAM,KAAK,MAAM;gBACjB,IAAI,IAAI;oBACJ,oBAAoB;oBACpB,OAAO,IAAI,CAAC,CAAC,SAAS,EAAE,IAAI;gBAChC;YACJ,EAAE,OAAO,KAAU;gBACf,IAAI,KAAK,SAAS,SAAS,WAAW;oBAClC,MAAM,IAAI,OAAO;oBACjB,OAAO,IAAI,CAAC;gBAChB,OAAO;oBACH,MAAM;gBACV;YACJ;QACJ;QACA,UAAU;YACN;YACA,OAAO,IAAI,CAAC;QAChB;QACA,WAAW,IAAM,OAAO,IAAI,CAAC;QAC7B,WAAW,IAAM,OAAO,IAAI,CAAC;;;;;;AAGzC;GAvDwB;;QACL,8LAAS;QACU,kMAAc;QACS,yLAAW;;;KAHhD"}}, {"offset": {"line": 1304, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/next/navigation.js"],"sourcesContent":["module.exports = require('./dist/client/components/navigation')\n"],"names":[],"mappings":"AAAA,OAAO,OAAO","ignoreList":[0]}}, {"offset": {"line": 1309, "column": 0}, "map": {"version":3,"file":"turbopack:///[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js","sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/node_modules/shared/src/utils/mergeClasses.ts"],"sourcesContent":["/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = (...classes: ClassType[]) =>\n classes\n .filter((className, index, array) => {\n return (\n Boolean(className) &&\n (className as string).trim() !== '' &&\n array.indexOf(className) === index\n );\n })\n .join(' ')\n .trim();\n"],"names":[],"mappings":";;;;;;;;;IAMO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,YAAA,CAAA,CAAA,CAAe,CAAA,GAA2C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GACrE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA,GAAO,KAAA,CAAA,CAAA,CAAA,CAAA,CAAU;QACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,OAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqB,CAAA,CAAA,CAAA,CAAA,CAAA,MAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CACjC,KAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,KAAM,CAAA,CAAA,CAAA,CAAA,CAAA;IAEjC,CAAC,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAG,CAAA,CACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}}, diff --git a/.next/dev/static/chunks/Documents_00 - projet_plumeia_src_74b79b3f._.js b/.next/dev/static/chunks/Documents_00 - projet_plumeia_src_74b79b3f._.js index 756550d..7619006 100644 --- a/.next/dev/static/chunks/Documents_00 - projet_plumeia_src_74b79b3f._.js +++ b/.next/dev/static/chunks/Documents_00 - projet_plumeia_src_74b79b3f._.js @@ -21,7 +21,7 @@ function ProjectProvider({ value, children }) { children: children }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/providers/ProjectProvider.tsx", - lineNumber: 26, + lineNumber: 30, columnNumber: 12 }, this); } @@ -3385,7 +3385,7 @@ function ProjectLayout({ children }) { const pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["usePathname"])(); const projectId = params.id; const { user, logout, incrementUsage, loading: authLoading } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$providers$2f$AuthProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useAuthContext"])(); - const { projects, setCurrentProjectId, updateProject, updateChapter, addChapter } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$hooks$2f$useProjects$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useProjects"])(user); + const { projects, setCurrentProjectId, updateProject, updateChapter, addChapter, createEntity, updateEntity, deleteEntity, deleteProject } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$hooks$2f$useProjects$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useProjects"])(user); const { chatHistory, isGenerating, sendMessage } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$hooks$2f$useChat$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useChat"])(); const [currentChapterId, setCurrentChapterId] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(''); const [isExportModalOpen, setIsExportModalOpen] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false); @@ -3430,7 +3430,7 @@ function ProjectLayout({ children }) { size: 48 }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 61, + lineNumber: 62, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { @@ -3441,7 +3441,7 @@ function ProjectLayout({ children }) { size: 20 }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 63, + lineNumber: 64, columnNumber: 21 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { @@ -3449,19 +3449,19 @@ function ProjectLayout({ children }) { children: "PlumeIA" }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 64, + lineNumber: 65, columnNumber: 21 }, this) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 62, + lineNumber: 63, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 60, + lineNumber: 61, columnNumber: 13 }, this); } @@ -3474,7 +3474,7 @@ function ProjectLayout({ children }) { size: 48 }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 73, + lineNumber: 74, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { @@ -3482,13 +3482,13 @@ function ProjectLayout({ children }) { children: "Chargement du projet..." }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 74, + lineNumber: 75, columnNumber: 17 }, this) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 72, + lineNumber: 73, columnNumber: 13 }, this); } @@ -3526,6 +3526,10 @@ function ProjectLayout({ children }) { setCurrentChapterId, updateProject: (updates)=>updateProject(projectId, updates), updateChapter: (chapterId, data)=>updateChapter(projectId, chapterId, data), + createEntity: (type, data)=>createEntity(projectId, type, data), + updateEntity: (entityId, data)=>updateEntity(projectId, entityId, data), + deleteEntity: (entityId)=>deleteEntity(projectId, entityId), + deleteProject: ()=>deleteProject(projectId), incrementUsage }, children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$components$2f$layout$2f$EditorShell$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], { @@ -3575,7 +3579,7 @@ function ProjectLayout({ children }) { onPrint: ()=>{} }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 135, + lineNumber: 140, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$components$2f$HelpModal$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], { @@ -3584,23 +3588,23 @@ function ProjectLayout({ children }) { viewMode: viewMode }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 136, + lineNumber: 141, columnNumber: 17 }, this), children ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 103, + lineNumber: 108, columnNumber: 13 }, this) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/layout.tsx", - lineNumber: 93, + lineNumber: 94, columnNumber: 9 }, this); } -_s(ProjectLayout, "J4koKxGuE6/IBzNIwEDR3WnvQ/k=", false, function() { +_s(ProjectLayout, "EXfzuv2MxPFLxxcZZVf0UsiuZug=", false, function() { return [ __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useParams"], __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRouter"], diff --git a/.next/dev/static/chunks/Documents_00 - projet_plumeia_src_74b79b3f._.js.map b/.next/dev/static/chunks/Documents_00 - projet_plumeia_src_74b79b3f._.js.map index 7e85fb8..cad428b 100644 --- a/.next/dev/static/chunks/Documents_00 - projet_plumeia_src_74b79b3f._.js.map +++ b/.next/dev/static/chunks/Documents_00 - projet_plumeia_src_74b79b3f._.js.map @@ -2,8 +2,8 @@ "version": 3, "sources": [], "sections": [ - {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/providers/ProjectProvider.tsx"],"sourcesContent":["'use client';\r\n\r\nimport React, { createContext, useContext } from 'react';\r\nimport { BookProject, UserProfile } from '@/lib/types';\r\n\r\ninterface ProjectContextType {\r\n project: BookProject;\r\n user: UserProfile;\r\n projectId: string;\r\n currentChapterId: string;\r\n setCurrentChapterId: (id: string) => void;\r\n updateProject: (updates: Partial) => void;\r\n updateChapter: (chapterId: string, data: any) => void;\r\n incrementUsage: () => void;\r\n}\r\n\r\nconst ProjectContext = createContext(null);\r\n\r\nexport function ProjectProvider({\r\n value,\r\n children,\r\n}: {\r\n value: ProjectContextType;\r\n children: React.ReactNode;\r\n}) {\r\n return {children};\r\n}\r\n\r\nexport function useProjectContext(): ProjectContextType {\r\n const ctx = useContext(ProjectContext);\r\n if (!ctx) throw new Error('useProjectContext must be used within ProjectProvider');\r\n return ctx;\r\n}\r\n"],"names":[],"mappings":";;;;;;;AAEA;;;AAFA;;AAgBA,MAAM,+BAAiB,IAAA,0NAAa,EAA4B;AAEzD,SAAS,gBAAgB,EAC5B,KAAK,EACL,QAAQ,EAIX;IACG,qBAAO,yOAAC,eAAe,QAAQ;QAAC,OAAO;kBAAQ;;;;;;AACnD;KARgB;AAUT,SAAS;;IACZ,MAAM,MAAM,IAAA,uNAAU,EAAC;IACvB,IAAI,CAAC,KAAK,MAAM,IAAI,MAAM;IAC1B,OAAO;AACX;GAJgB"}}, - {"offset": {"line": 44, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/types.ts"],"sourcesContent":["\nexport enum EntityType {\n CHARACTER = 'Personnage',\n LOCATION = 'Lieu',\n OBJECT = 'Objet',\n NOTE = 'Note'\n}\n\nexport interface CharacterAttributes {\n age: number;\n height: number;\n hair: string;\n eyes: string;\n archetype: string;\n role: 'protagonist' | 'antagonist' | 'support' | 'extra';\n personality: {\n spectrumIntrovertExtravert: number;\n spectrumEmotionalRational: number;\n spectrumChaoticLawful: number;\n };\n physicalQuirk: string;\n behavioralQuirk: string;\n}\n\nexport type CustomFieldType = 'text' | 'textarea' | 'number' | 'boolean' | 'select';\n\nexport interface CustomFieldDefinition {\n id: string;\n label: string;\n type: CustomFieldType;\n options?: string[];\n placeholder?: string;\n}\n\nexport interface EntityTemplate {\n entityType: EntityType;\n fields: CustomFieldDefinition[];\n}\n\nexport interface Entity {\n id: string;\n type: EntityType;\n name: string;\n description: string;\n details: string;\n storyContext?: string;\n attributes?: CharacterAttributes;\n customValues?: Record;\n}\n\nexport interface Chapter {\n id: string;\n title: string;\n content: string;\n summary?: string;\n}\n\nexport type PlotNodeType = 'story' | 'dialogue' | 'action';\n\nexport interface PlotNode {\n id: string;\n x: number;\n y: number;\n title: string;\n description: string;\n color: string;\n type?: PlotNodeType;\n}\n\nexport interface PlotConnection {\n id: string;\n source: string;\n target: string;\n}\n\nexport interface WorkflowData {\n nodes: PlotNode[];\n connections: PlotConnection[];\n}\n\nexport type IdeaStatus = 'todo' | 'progress' | 'done';\nexport type IdeaCategory = 'plot' | 'character' | 'research' | 'todo';\n\nexport interface Idea {\n id: string;\n title: string;\n description: string;\n status: IdeaStatus;\n category: IdeaCategory;\n createdAt: number;\n}\n\nexport interface BookSettings {\n genre: string;\n subGenre?: string;\n targetAudience: string;\n tone: string;\n pov: string;\n tense: string;\n synopsis: string;\n themes: string;\n}\n\nexport interface BookProject {\n id: string;\n title: string;\n author: string;\n lastModified: number;\n settings?: BookSettings;\n // Direct fields sometimes used in creation/updates before settings normalization\n genre?: string;\n pov?: string;\n tense?: string;\n chapters: Chapter[];\n entities: Entity[];\n workflow?: WorkflowData;\n templates?: EntityTemplate[];\n styleGuide?: string;\n ideas?: Idea[];\n}\n\nexport interface ChatMessage {\n id: string;\n role: 'user' | 'model';\n text: string;\n responseType?: 'draft' | 'reflection';\n isLoading?: boolean;\n}\n\n// --- SAAS TYPES ---\n\nexport type PlanType = 'free' | 'pro' | 'master';\n\nexport interface Subscription {\n plan: PlanType;\n startDate: number;\n status: 'active' | 'canceled' | 'past_due';\n}\n\nexport interface UserUsage {\n aiActionsCurrent: number;\n aiActionsLimit: number;\n projectsLimit: number;\n}\n\nexport interface UserPreferences {\n theme: 'light' | 'dark' | 'sepia';\n dailyWordGoal: number;\n language: 'fr' | 'en';\n}\n\nexport interface UserStats {\n totalWordsWritten: number;\n writingStreak: number;\n lastWriteDate: number;\n}\n\nexport interface UserProfile {\n id: string;\n email: string;\n name: string;\n avatar?: string;\n bio?: string;\n subscription: Subscription;\n usage: UserUsage;\n preferences: UserPreferences;\n stats: UserStats;\n}\n\nexport type ViewMode = 'write' | 'world_building' | 'workflow' | 'settings' | 'preview' | 'ideas' | 'landing' | 'features' | 'pricing' | 'checkout' | 'dashboard' | 'auth' | 'signup' | 'profile';\n"],"names":[],"mappings":";;;;AACO,IAAA,AAAK,oCAAA;;;;;WAAA"}}, + {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/providers/ProjectProvider.tsx"],"sourcesContent":["'use client';\r\n\r\nimport React, { createContext, useContext } from 'react';\r\nimport { BookProject, UserProfile, Entity, EntityType } from '@/lib/types';\r\n\r\ninterface ProjectContextType {\r\n project: BookProject;\r\n user: UserProfile;\r\n projectId: string;\r\n currentChapterId: string;\r\n setCurrentChapterId: (id: string) => void;\r\n updateProject: (updates: Partial) => void;\r\n updateChapter: (chapterId: string, data: any) => void;\r\n createEntity: (type: EntityType, initialData?: Partial) => Promise;\r\n updateEntity: (entityId: string, data: Partial) => Promise;\r\n deleteEntity: (entityId: string) => Promise;\r\n deleteProject: () => Promise;\r\n incrementUsage: () => void;\r\n}\r\n\r\nconst ProjectContext = createContext(null);\r\n\r\nexport function ProjectProvider({\r\n value,\r\n children,\r\n}: {\r\n value: ProjectContextType;\r\n children: React.ReactNode;\r\n}) {\r\n return {children};\r\n}\r\n\r\nexport function useProjectContext(): ProjectContextType {\r\n const ctx = useContext(ProjectContext);\r\n if (!ctx) throw new Error('useProjectContext must be used within ProjectProvider');\r\n return ctx;\r\n}\r\n"],"names":[],"mappings":";;;;;;;AAEA;;;AAFA;;AAoBA,MAAM,+BAAiB,IAAA,0NAAa,EAA4B;AAEzD,SAAS,gBAAgB,EAC5B,KAAK,EACL,QAAQ,EAIX;IACG,qBAAO,yOAAC,eAAe,QAAQ;QAAC,OAAO;kBAAQ;;;;;;AACnD;KARgB;AAUT,SAAS;;IACZ,MAAM,MAAM,IAAA,uNAAU,EAAC;IACvB,IAAI,CAAC,KAAK,MAAM,IAAI,MAAM;IAC1B,OAAO;AACX;GAJgB"}}, + {"offset": {"line": 44, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/types.ts"],"sourcesContent":["\nexport enum EntityType {\n CHARACTER = 'Personnage',\n LOCATION = 'Lieu',\n OBJECT = 'Objet',\n NOTE = 'Note'\n}\n\nexport interface CharacterAttributes {\n age: number;\n height: number;\n hair: string;\n eyes: string;\n archetype: string;\n role: 'protagonist' | 'antagonist' | 'support' | 'extra';\n personality: {\n spectrumIntrovertExtravert: number;\n spectrumEmotionalRational: number;\n spectrumChaoticLawful: number;\n };\n physicalQuirk: string;\n behavioralQuirk: string;\n}\n\nexport type CustomFieldType = 'text' | 'textarea' | 'number' | 'boolean' | 'select';\n\nexport interface CustomFieldDefinition {\n id: string;\n label: string;\n type: CustomFieldType;\n options?: string[];\n placeholder?: string;\n}\n\nexport interface EntityTemplate {\n entityType: EntityType;\n fields: CustomFieldDefinition[];\n}\n\nexport interface Entity {\n id: string;\n type: EntityType;\n name: string;\n description: string;\n details: string;\n storyContext?: string;\n attributes?: CharacterAttributes;\n customValues?: Record;\n}\n\nexport interface Chapter {\n id: string;\n title: string;\n content: string;\n summary?: string;\n}\n\nexport type PlotNodeType = 'story' | 'dialogue' | 'action';\n\nexport interface PlotNode {\n id: string;\n x: number;\n y: number;\n title: string;\n description: string;\n color: string;\n type?: PlotNodeType;\n}\n\nexport interface PlotConnection {\n id: string;\n source: string;\n target: string;\n}\n\nexport interface WorkflowData {\n nodes: PlotNode[];\n connections: PlotConnection[];\n}\n\nexport type IdeaStatus = 'todo' | 'progress' | 'done';\nexport type IdeaCategory = 'plot' | 'character' | 'research' | 'todo';\n\nexport interface Idea {\n id: string;\n title: string;\n description: string;\n status: IdeaStatus;\n category: IdeaCategory;\n createdAt: number;\n}\n\nexport interface BookSettings {\n genre: string;\n subGenre?: string;\n targetAudience: string;\n tone: string;\n pov: string;\n tense: string;\n synopsis: string;\n themes: string;\n}\n\nexport interface BookProject {\n id: string;\n title: string;\n author: string;\n lastModified: number;\n settings?: BookSettings;\n // Direct fields sometimes used in creation/updates before settings normalization\n genre?: string;\n pov?: string;\n tense?: string;\n chapters: Chapter[];\n entities: Entity[];\n workflow?: WorkflowData;\n templates?: EntityTemplate[];\n styleGuide?: string;\n ideas?: Idea[];\n}\n\nexport interface ChatMessage {\n id: string;\n role: 'user' | 'model';\n text: string;\n responseType?: 'draft' | 'reflection';\n isLoading?: boolean;\n}\n\n// --- SAAS TYPES ---\n\nexport interface PlanData {\n id: string;\n name: string;\n displayName: string;\n price: number;\n description: string;\n features: string[];\n isPopular: boolean;\n maxProjects: number;\n maxAiActions: number;\n}\n\nexport interface Subscription {\n plan: string; // The ID of the plan\n planDetails?: PlanData; // The populated plan details from DB\n startDate: number;\n status: 'active' | 'canceled' | 'past_due';\n}\n\nexport interface UserUsage {\n aiActionsCurrent: number;\n aiActionsLimit: number;\n projectsLimit: number;\n}\n\nexport interface UserPreferences {\n theme: 'light' | 'dark' | 'sepia';\n dailyWordGoal: number;\n language: 'fr' | 'en';\n}\n\nexport interface UserStats {\n totalWordsWritten: number;\n writingStreak: number;\n lastWriteDate: number;\n}\n\nexport interface UserProfile {\n id: string;\n email: string;\n name: string;\n avatar?: string;\n bio?: string;\n subscription: Subscription;\n usage: UserUsage;\n preferences: UserPreferences;\n stats: UserStats;\n}\n\nexport type ViewMode = 'write' | 'world_building' | 'workflow' | 'settings' | 'preview' | 'ideas' | 'landing' | 'features' | 'pricing' | 'checkout' | 'dashboard' | 'auth' | 'signup' | 'profile';\n"],"names":[],"mappings":";;;;AACO,IAAA,AAAK,oCAAA;;;;;WAAA"}}, {"offset": {"line": 62, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/lib/constants.ts"],"sourcesContent":["\nimport { EntityType } from \"./types\";\n\nexport const DEFAULT_BOOK_TITLE = \"Nouveau Roman\";\nexport const DEFAULT_AUTHOR = \"Auteur Inconnu\";\n\nexport const INITIAL_CHAPTER = {\n id: 'chap-1',\n title: 'Chapitre 1',\n content: '

Il était une fois...

',\n summary: 'Début de l\\'histoire.'\n};\n\nexport const ENTITY_ICONS: Record = {\n [EntityType.CHARACTER]: '👤',\n [EntityType.LOCATION]: '🏰',\n [EntityType.OBJECT]: '🗝️',\n [EntityType.NOTE]: '📝',\n};\n\n// Colors for tags\nexport const ENTITY_COLORS: Record = {\n [EntityType.CHARACTER]: 'bg-blue-100 text-blue-800 border-blue-200',\n [EntityType.LOCATION]: 'bg-green-100 text-green-800 border-green-200',\n [EntityType.OBJECT]: 'bg-amber-100 text-amber-800 border-amber-200',\n [EntityType.NOTE]: 'bg-gray-100 text-gray-800 border-gray-200',\n};\n\n// --- Character Creation Lists ---\n\nexport const HAIR_COLORS = [\n \"Brun\", \"Noir\", \"Blond\", \"Roux\", \"Auburn\", \"Gris\", \"Blanc\", \"Châtain\", \"Chauve\", \"Teinture (Bleu/Rose/Etc)\"\n];\n\nexport const EYE_COLORS = [\n \"Marron\", \"Bleu\", \"Vert\", \"Noisette\", \"Gris\", \"Noir\", \"Vairons\", \"Ambre\"\n];\n\nexport const ARCHETYPES = [\n \"Le Héros\", \"L'Ombre / Le Méchant\", \"Le Mentor\", \"Le Gardien du Seuil\",\n \"Le Shapeshifter (Changeforme)\", \"Le Trickster (Farceur)\", \"L'Allié\", \"L'Élu\",\n \"Le Rebelle\", \"Le Séducteur\", \"Le Sage\", \"Le Guerrier\", \"L'Innocent\"\n];\n\n// --- Book Settings Lists ---\n\nexport const GENRES = [\n \"Fantasy\", \"Science-Fiction\", \"Thriller / Polar\", \"Romance\", \"Historique\",\n \"Horreur\", \"Aventure\", \"Contemporain\", \"Jeunesse / Young Adult\", \"Dystopie\"\n];\n\nexport const TONES = [\n \"Sombre & Sérieux\", \"Léger & Humoristique\", \"Épique & Grandiose\",\n \"Mélancolique\", \"Mystérieux\", \"Optimiste\", \"Cynique\", \"Romantique\"\n];\n\nexport const POV_OPTIONS = [\n \"1ère personne (Je)\",\n \"3ème personne (Limitée au protagoniste)\",\n \"3ème personne (Omnisciente)\",\n \"Multi-points de vue (Alterné)\"\n];\n\nexport const TENSE_OPTIONS = [\n \"Passé (Passé simple / Imparfait)\",\n \"Présent de narration\"\n];"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AAEO,MAAM,qBAAqB;AAC3B,MAAM,iBAAiB;AAEvB,MAAM,kBAAkB;IAC7B,IAAI;IACJ,OAAO;IACP,SAAS;IACT,SAAS;AACX;AAEO,MAAM,eAA2C;IACtD,CAAC,gLAAU,CAAC,SAAS,CAAC,EAAE;IACxB,CAAC,gLAAU,CAAC,QAAQ,CAAC,EAAE;IACvB,CAAC,gLAAU,CAAC,MAAM,CAAC,EAAE;IACrB,CAAC,gLAAU,CAAC,IAAI,CAAC,EAAE;AACrB;AAGO,MAAM,gBAA4C;IACvD,CAAC,gLAAU,CAAC,SAAS,CAAC,EAAE;IACxB,CAAC,gLAAU,CAAC,QAAQ,CAAC,EAAE;IACvB,CAAC,gLAAU,CAAC,MAAM,CAAC,EAAE;IACrB,CAAC,gLAAU,CAAC,IAAI,CAAC,EAAE;AACrB;AAIO,MAAM,cAAc;IACzB;IAAQ;IAAQ;IAAS;IAAQ;IAAU;IAAQ;IAAS;IAAW;IAAU;CAClF;AAEM,MAAM,aAAa;IACxB;IAAU;IAAQ;IAAQ;IAAY;IAAQ;IAAQ;IAAW;CAClE;AAEM,MAAM,aAAa;IACxB;IAAY;IAAwB;IAAa;IACjD;IAAiC;IAA0B;IAAW;IACtE;IAAc;IAAgB;IAAW;IAAe;CACzD;AAIM,MAAM,SAAS;IACpB;IAAW;IAAmB;IAAoB;IAAW;IAC7D;IAAW;IAAY;IAAgB;IAA0B;CAClE;AAEM,MAAM,QAAQ;IACnB;IAAoB;IAAwB;IAC5C;IAAgB;IAAc;IAAa;IAAW;CACvD;AAEM,MAAM,cAAc;IACzB;IACA;IACA;IACA;CACD;AAEM,MAAM,gBAAgB;IAC3B;IACA;CACD"}}, {"offset": {"line": 186, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/hooks/useProjects.ts"],"sourcesContent":["'use client';\r\n\r\nimport { useState, useEffect } from 'react';\r\nimport {\r\n BookProject,\r\n Chapter,\r\n Entity,\r\n EntityType,\r\n UserProfile,\r\n} from '@/lib/types';\r\nimport api from '@/lib/api';\r\nimport {\r\n DEFAULT_BOOK_TITLE,\r\n DEFAULT_AUTHOR,\r\n INITIAL_CHAPTER\r\n} from '@/lib/constants';\r\n\r\nexport const useProjects = (user: UserProfile | null) => {\r\n const [projects, setProjects] = useState([]);\r\n const [currentProjectId, setCurrentProjectId] = useState(null);\r\n const [loading, setLoading] = useState(false);\r\n\r\n // Load Projects\r\n useEffect(() => {\r\n if (!user) {\r\n setProjects([]);\r\n return;\r\n }\r\n const loadProjects = async () => {\r\n setLoading(true);\r\n try {\r\n const data = await api.projects.list();\r\n const mapped: BookProject[] = (data || []).map((p: any) => ({\r\n id: p.id,\r\n title: p.title,\r\n author: p.author,\r\n lastModified: new Date(p.updatedAt).getTime(),\r\n // Use _count for display before full details are loaded\r\n chapters: Array.from({ length: p._count?.chapters || 0 }, (_, i) => ({ id: `placeholder-${i}`, title: '', content: '' })),\r\n entities: Array.from({ length: p._count?.entities || 0 }, (_, i) => ({ id: `placeholder-${i}`, type: 'character' as any, name: '', description: '' })),\r\n ideas: [],\r\n settings: p.settings || undefined\r\n }));\r\n setProjects(mapped);\r\n } catch (err) {\r\n console.error('Failed to load projects', err);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n loadProjects();\r\n }, [user]);\r\n\r\n // Load details when project is selected\r\n useEffect(() => {\r\n if (!currentProjectId) return;\r\n\r\n const loadProjectDetails = async () => {\r\n try {\r\n const fullProject = await api.projects.get(currentProjectId);\r\n const mapped: BookProject = {\r\n id: fullProject.id,\r\n title: fullProject.title,\r\n author: fullProject.author,\r\n lastModified: new Date(fullProject.updatedAt).getTime(),\r\n settings: fullProject.settings || undefined,\r\n styleGuide: fullProject.styleGuide || undefined,\r\n chapters: (fullProject.chapters || []).map((c: any) => ({\r\n id: c.id,\r\n title: c.title,\r\n content: c.content,\r\n summary: c.summary,\r\n })),\r\n entities: (fullProject.entities || []).map((e: any) => ({\r\n id: e.id,\r\n type: e.type,\r\n name: e.name,\r\n description: e.description,\r\n details: e.details,\r\n storyContext: e.storyContext,\r\n attributes: e.attributes,\r\n customValues: e.customValues,\r\n })),\r\n ideas: (fullProject.ideas || []).map((i: any) => ({\r\n id: i.id,\r\n title: i.title,\r\n description: i.description,\r\n status: i.status,\r\n category: i.category,\r\n createdAt: new Date(i.createdAt).getTime(),\r\n })),\r\n workflow: {\r\n nodes: (fullProject.plotNodes || []).map((n: any) => ({\r\n id: n.id,\r\n x: n.x,\r\n y: n.y,\r\n title: n.title,\r\n description: n.description,\r\n color: n.color,\r\n type: n.type,\r\n })),\r\n connections: (fullProject.plotConnections || []).map((c: any) => ({\r\n id: c.id,\r\n source: c.source,\r\n target: c.target,\r\n })),\r\n },\r\n };\r\n setProjects(prev => prev.map(p => p.id === currentProjectId ? mapped : p));\r\n } catch (err) {\r\n console.error(\"Failed to load project details\", err);\r\n }\r\n };\r\n loadProjectDetails();\r\n }, [currentProjectId]);\r\n\r\n const createProject = async () => {\r\n if (!user) return;\r\n\r\n try {\r\n const created = await api.projects.create({\r\n title: DEFAULT_BOOK_TITLE,\r\n author: user.name || DEFAULT_AUTHOR,\r\n settings: { genre: 'Fantasy', targetAudience: 'Adult', tone: 'Epic' },\r\n });\r\n\r\n const newProject: BookProject = {\r\n id: created.id,\r\n title: created.title,\r\n author: created.author,\r\n lastModified: Date.now(),\r\n chapters: [],\r\n entities: [],\r\n ideas: [],\r\n settings: created.settings,\r\n };\r\n\r\n setProjects(prev => [...prev, newProject]);\r\n await addChapter(created.id, INITIAL_CHAPTER);\r\n return created.id;\r\n } catch (err) {\r\n console.error('Failed to create project', err);\r\n throw err;\r\n }\r\n };\r\n\r\n const updateProject = async (id: string, data: Partial) => {\r\n setProjects(prev => prev.map(p => p.id === id ? { ...p, ...data } : p));\r\n\r\n try {\r\n // Persist project fields\r\n const payload: any = {};\r\n if (data.title !== undefined) payload.title = data.title;\r\n if (data.author !== undefined) payload.author = data.author;\r\n if (data.settings !== undefined) payload.settings = data.settings;\r\n if (data.styleGuide !== undefined) payload.styleGuide = data.styleGuide;\r\n if (Object.keys(payload).length > 0) {\r\n await api.projects.update(id, payload);\r\n }\r\n\r\n // Persist workflow (nodes + connections) separately\r\n if (data.workflow) {\r\n await api.projects.syncWorkflow(id, {\r\n nodes: data.workflow.nodes || [],\r\n connections: data.workflow.connections || [],\r\n });\r\n }\r\n } catch (err) {\r\n console.error(\"Failed to update project\", err);\r\n }\r\n };\r\n\r\n const addChapter = async (projectId: string, chapterData: Partial) => {\r\n try {\r\n const newChap = await api.chapters.create({\r\n projectId,\r\n title: chapterData.title || 'New Chapter',\r\n content: chapterData.content || '',\r\n summary: chapterData.summary || undefined,\r\n });\r\n\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n chapters: [...p.chapters, {\r\n id: newChap.id,\r\n title: newChap.title,\r\n content: newChap.content,\r\n summary: newChap.summary,\r\n }]\r\n };\r\n }));\r\n return newChap.id;\r\n } catch (err) {\r\n console.error(\"Failed to add chapter\", err);\r\n return null;\r\n }\r\n };\r\n\r\n const updateChapter = async (projectId: string, chapterId: string, data: Partial) => {\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n chapters: p.chapters.map(c => c.id === chapterId ? { ...c, ...data } : c)\r\n };\r\n }));\r\n\r\n try {\r\n await api.chapters.update(chapterId, data);\r\n } catch (err) {\r\n console.error(\"Failed to update chapter\", err);\r\n }\r\n };\r\n\r\n const createEntity = async (projectId: string, type: EntityType, initialData?: Partial) => {\r\n try {\r\n const newEntity = await api.entities.create({\r\n projectId,\r\n type,\r\n name: initialData?.name || `Nouveau ${type}`,\r\n description: initialData?.description || '',\r\n details: initialData?.details || '',\r\n attributes: initialData?.attributes || undefined,\r\n customValues: initialData?.customValues || undefined,\r\n });\r\n\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n entities: [...p.entities, {\r\n id: newEntity.id,\r\n type: newEntity.type,\r\n name: newEntity.name,\r\n description: newEntity.description,\r\n details: newEntity.details,\r\n attributes: newEntity.attributes,\r\n customValues: newEntity.customValues || {},\r\n }]\r\n };\r\n }));\r\n return newEntity.id;\r\n } catch (err) {\r\n console.error(\"Failed to create entity\", err);\r\n throw err;\r\n }\r\n };\r\n\r\n const updateEntity = async (projectId: string, entityId: string, data: Partial) => {\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n entities: p.entities.map(e => e.id === entityId ? { ...e, ...data } : e)\r\n };\r\n }));\r\n\r\n try {\r\n await api.entities.update(entityId, data);\r\n } catch (err) {\r\n console.error(\"Failed to update entity\", err);\r\n }\r\n };\r\n\r\n const deleteEntity = async (projectId: string, entityId: string) => {\r\n setProjects(prev => prev.map(p => {\r\n if (p.id !== projectId) return p;\r\n return {\r\n ...p,\r\n entities: p.entities.filter(e => e.id !== entityId)\r\n };\r\n }));\r\n\r\n try {\r\n await api.entities.delete(entityId);\r\n } catch (err) {\r\n console.error(\"Failed to delete entity\", err);\r\n }\r\n };\r\n\r\n return {\r\n projects,\r\n currentProjectId,\r\n setCurrentProjectId,\r\n createProject,\r\n updateProject,\r\n addChapter,\r\n updateChapter,\r\n createEntity,\r\n updateEntity,\r\n deleteEntity,\r\n deleteProject: async (projectId: string) => {\r\n try {\r\n // Cascade delete is handled by Prisma, just delete the project\r\n await api.projects.delete(projectId);\r\n\r\n setProjects(prev => prev.filter(p => p.id !== projectId));\r\n if (currentProjectId === projectId) {\r\n setCurrentProjectId(null);\r\n }\r\n } catch (err) {\r\n console.error(\"Failed to delete project\", err);\r\n }\r\n }\r\n };\r\n};\r\n"],"names":[],"mappings":"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"}}, {"offset": {"line": 543, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/hooks/useChat.ts"],"sourcesContent":["'use client';\r\n\r\nimport { useState } from 'react';\r\nimport {\r\n BookProject,\r\n ChatMessage,\r\n UserProfile,\r\n} from '@/lib/types';\r\nimport api from '@/lib/api';\r\n\r\nexport const useChat = () => {\r\n const [chatHistory, setChatHistory] = useState([]);\r\n const [isGenerating, setIsGenerating] = useState(false);\r\n\r\n const sendMessage = async (\r\n project: BookProject,\r\n context: string,\r\n text: string,\r\n user: UserProfile,\r\n incrementUsage: () => void\r\n ) => {\r\n const userMsg: ChatMessage = {\r\n id: Date.now().toString(),\r\n role: 'user',\r\n text: text\r\n };\r\n setChatHistory(prev => [...prev, userMsg]);\r\n setIsGenerating(true);\r\n\r\n try {\r\n const response = await api.ai.generate(\r\n project,\r\n context === 'global' ? '' : context,\r\n text,\r\n user\r\n );\r\n\r\n incrementUsage();\r\n\r\n const aiMsg: ChatMessage = {\r\n id: (Date.now() + 1).toString(),\r\n role: 'model',\r\n text: response.text,\r\n responseType: response.type\r\n };\r\n setChatHistory(prev => [...prev, aiMsg]);\r\n } catch {\r\n setChatHistory(prev => [...prev, {\r\n id: Date.now().toString(),\r\n role: 'model',\r\n text: \"Désolé, une erreur est survenue lors de la génération.\"\r\n }]);\r\n } finally {\r\n setIsGenerating(false);\r\n }\r\n };\r\n\r\n return { chatHistory, isGenerating, sendMessage };\r\n};\r\n"],"names":[],"mappings":";;;;AAEA;AAMA;;AARA;;;AAUO,MAAM,UAAU;;IACnB,MAAM,CAAC,aAAa,eAAe,GAAG,IAAA,qNAAQ,EAAgB,EAAE;IAChE,MAAM,CAAC,cAAc,gBAAgB,GAAG,IAAA,qNAAQ,EAAC;IAEjD,MAAM,cAAc,OAChB,SACA,SACA,MACA,MACA;QAEA,MAAM,UAAuB;YACzB,IAAI,KAAK,GAAG,GAAG,QAAQ;YACvB,MAAM;YACN,MAAM;QACV;QACA,eAAe,CAAA,OAAQ;mBAAI;gBAAM;aAAQ;QACzC,gBAAgB;QAEhB,IAAI;YACA,MAAM,WAAW,MAAM,2KAAG,CAAC,EAAE,CAAC,QAAQ,CAClC,SACA,YAAY,WAAW,KAAK,SAC5B,MACA;YAGJ;YAEA,MAAM,QAAqB;gBACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE,QAAQ;gBAC7B,MAAM;gBACN,MAAM,SAAS,IAAI;gBACnB,cAAc,SAAS,IAAI;YAC/B;YACA,eAAe,CAAA,OAAQ;uBAAI;oBAAM;iBAAM;QAC3C,EAAE,OAAM;YACJ,eAAe,CAAA,OAAQ;uBAAI;oBAAM;wBAC7B,IAAI,KAAK,GAAG,GAAG,QAAQ;wBACvB,MAAM;wBACN,MAAM;oBACV;iBAAE;QACN,SAAU;YACN,gBAAgB;QACpB;IACJ;IAEA,OAAO;QAAE;QAAa;QAAc;IAAY;AACpD;GAhDa"}}, @@ -11,5 +11,5 @@ {"offset": {"line": 922, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/components/layout/EditorShell.tsx"],"sourcesContent":["'use client';\n\n\nimport React, { useState } from 'react';\nimport { BookProject, UserProfile, ViewMode, ChatMessage } from '@/lib/types';\nimport AIPanel from '@/components/AIPanel';\nimport { Book, FileText, Globe, GitGraph, Lightbulb, Settings, Menu, ChevronRight, ChevronLeft, Share2, HelpCircle, LogOut, LayoutDashboard, User, Plus, Trash2 } from 'lucide-react';\n\ninterface EditorShellProps {\n project: BookProject;\n user: UserProfile;\n viewMode: ViewMode;\n currentChapterId: string;\n chatHistory: ChatMessage[];\n isGenerating: boolean;\n onViewModeChange: (mode: ViewMode) => void;\n onChapterSelect: (id: string) => void;\n onUpdateProject: (updates: Partial) => void;\n onAddChapter: () => Promise;\n onDeleteChapter: (id: string) => void;\n onLogout: () => void;\n onSendMessage: (msg: string) => void;\n onInsertText: (text: string) => void;\n onOpenExport: () => void;\n onOpenHelp: () => void;\n children: React.ReactNode;\n}\n\nconst EditorShell: React.FC = (props) => {\n const { project, user, viewMode, currentChapterId, children } = props;\n const [isSidebarOpen, setIsSidebarOpen] = useState(true);\n const [isAiPanelOpen, setIsAiPanelOpen] = useState(true);\n\n const currentChapter = project.chapters.find(c => c.id === currentChapterId);\n\n return (\n
\n\n {/* SIDEBAR */}\n \n\n {/* MAIN CONTENT */}\n
\n
\n
\n \n {viewMode === 'write' ? (\n props.onUpdateProject({ chapters: project.chapters.map(c => c.id === currentChapterId ? { ...c, title: e.target.value } : c) })}\n className=\"font-serif font-bold text-lg bg-transparent border-b border-transparent focus:border-blue-500 focus:outline-none\"\n />\n ) : (\n {viewMode}\n )}\n
\n
\n \n \n \n
\n
\n\n
\n {children}\n
\n
\n\n {/* AI PANEL */}\n
\n {isAiPanelOpen && }\n
\n
\n );\n};\n\nexport default EditorShell;\n"],"names":[],"mappings":"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"}}, {"offset": {"line": 1467, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/components/ExportModal.tsx"],"sourcesContent":["'use client';\n\nimport React, { useState } from 'react';\nimport { BookProject } from '@/lib/types';\nimport { FileText, FileType, Printer, X, Download, Book, FileJson } from 'lucide-react';\n\ninterface ExportModalProps {\n isOpen: boolean;\n onClose: () => void;\n project: BookProject;\n onPrint: (options: { includeCover: boolean, includeTOC: boolean }) => void;\n}\n\ntype ExportFormat = 'pdf' | 'word' | 'epub' | 'markdown';\ntype PageSize = 'A4' | 'A5' | 'Letter';\n\nconst ExportModal: React.FC = ({ isOpen, onClose, project, onPrint }) => {\n const [format, setFormat] = useState('pdf');\n const [pageSize, setPageSize] = useState('A4');\n const [includeCover, setIncludeCover] = useState(true);\n const [includeTOC, setIncludeTOC] = useState(true);\n\n if (!isOpen) return null;\n\n const generateContentHTML = () => {\n let html = `\n \n \n \n \n ${project.title}\n \n \n \n `;\n\n if (includeCover) {\n html += `\n
\n

${project.title}

\n

${project.author}

\n
\n `;\n }\n\n if (includeTOC) {\n html += `

Table des Matières

    `;\n project.chapters.forEach((chap, idx) => {\n html += `
  • ${chap.title}
  • `;\n });\n html += `
`;\n }\n\n project.chapters.forEach((chap, idx) => {\n html += `\n
\n

${chap.title}

\n ${chap.content}\n
\n `;\n });\n\n html += ``;\n return html;\n };\n\n const handleExport = () => {\n const filename = project.title.replace(/[^a-z0-9]/gi, '_').toLowerCase();\n\n if (format === 'pdf') {\n // Open print dialog with the formatted content\n const content = generateContentHTML();\n const printWindow = window.open('', '_blank');\n if (printWindow) {\n printWindow.document.write(content);\n printWindow.document.close();\n printWindow.focus();\n setTimeout(() => {\n printWindow.print();\n }, 300);\n }\n onClose();\n }\n else if (format === 'word') {\n // Export as HTML with specific Word namespaces -> interpreted as doc by Word\n const content = generateContentHTML();\n const blob = new Blob(['\\ufeff', content], {\n type: 'application/msword'\n });\n downloadBlob(blob, `${filename}.doc`);\n }\n else if (format === 'epub') {\n // Export as a single XHTML file (Ebook ready)\n const content = generateContentHTML();\n const blob = new Blob([content], {\n type: 'application/xhtml+xml'\n });\n downloadBlob(blob, `${filename}.xhtml`);\n }\n else if (format === 'markdown') {\n let md = `# ${project.title}\\nBy ${project.author}\\n\\n`;\n project.chapters.forEach(c => {\n // Very basic HTML to Text conversion\n const text = c.content.replace(/<[^>]+>/g, '\\n');\n md += `## ${c.title}\\n\\n${text}\\n\\n---\\n\\n`;\n });\n const blob = new Blob([md], { type: 'text/markdown' });\n downloadBlob(blob, `${filename}.md`);\n }\n };\n\n const downloadBlob = (blob: Blob, name: string) => {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = name;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n onClose();\n };\n\n return (\n
\n
\n\n {/* Header */}\n
\n
\n

\n Exporter le livre\n

\n

{project.title}

\n
\n \n
\n\n {/* Body */}\n
\n\n {/* Format Selection */}\n
\n setFormat('pdf')}\n className={`p-4 rounded-lg border-2 flex flex-col items-center gap-3 transition-all ${format === 'pdf' ? 'border-blue-600 bg-blue-50 text-blue-800' : 'border-slate-200 hover:border-slate-300 text-slate-600'}`}\n >\n \n
PDF (Impression)
\n \n\n setFormat('word')}\n className={`p-4 rounded-lg border-2 flex flex-col items-center gap-3 transition-all ${format === 'word' ? 'border-blue-600 bg-blue-50 text-blue-800' : 'border-slate-200 hover:border-slate-300 text-slate-600'}`}\n >\n \n
Microsoft Word
\n \n\n setFormat('epub')}\n className={`p-4 rounded-lg border-2 flex flex-col items-center gap-3 transition-all ${format === 'epub' ? 'border-blue-600 bg-blue-50 text-blue-800' : 'border-slate-200 hover:border-slate-300 text-slate-600'}`}\n >\n \n
EPUB / Ebook
\n \n\n setFormat('markdown')}\n className={`p-4 rounded-lg border-2 flex flex-col items-center gap-3 transition-all ${format === 'markdown' ? 'border-blue-600 bg-blue-50 text-blue-800' : 'border-slate-200 hover:border-slate-300 text-slate-600'}`}\n >\n \n
Markdown
\n \n
\n\n {/* Options Section */}\n
\n

\n Paramètres d'exportation ({format.toUpperCase()})\n

\n\n
\n {format === 'pdf' && (\n
\n
\n \n Géré par l'imprimante (A4, A5...)\n
\n
Auto
\n
\n )}\n\n
\n \n setIncludeCover(e.target.checked)}\n className=\"w-5 h-5 rounded border-slate-300 text-blue-600 focus:ring-blue-500\"\n />\n
\n\n
\n \n setIncludeTOC(e.target.checked)}\n className=\"w-5 h-5 rounded border-slate-300 text-blue-600 focus:ring-blue-500\"\n />\n
\n\n {format === 'epub' && (\n

\n Note: L'export EPUB génère un fichier XHTML optimisé prêt à être converti par Calibre ou Kindle Previewer.\n

\n )}\n
\n
\n
\n\n {/* Footer */}\n
\n \n Annuler\n \n \n {format === 'pdf' ? : }\n {format === 'pdf' ? 'Imprimer / Enregistrer PDF' : `Télécharger .${format === 'word' ? 'doc' : format === 'epub' ? 'xhtml' : 'md'}`}\n \n
\n
\n
\n );\n};\n\nexport default ExportModal;"],"names":[],"mappings":"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"}}, {"offset": {"line": 1982, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/components/HelpModal.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport { X, Keyboard, MousePointerClick, MessageCircle, Sparkles, GitGraph, BookOpen, Command, Globe, Layout, Settings, Lightbulb } from 'lucide-react';\nimport { ViewMode } from '@/lib/types';\n\ninterface HelpModalProps {\n isOpen: boolean;\n onClose: () => void;\n viewMode: ViewMode;\n}\n\nconst Kbd: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n \n {children}\n \n);\n\nconst HelpModal: React.FC = ({ isOpen, onClose, viewMode }) => {\n if (!isOpen) return null;\n\n const renderContent = () => {\n switch (viewMode) {\n case 'ideas':\n return (\n
\n

\n Boîte à Idées & Tâches\n

\n
\n

\n Un espace de type Kanban pour ne rien oublier. Utilisez-le pour noter des idées fugaces, planifier des recherches ou lister les scènes à écrire.\n

\n
    \n
  • \n \n \n Glisser-Déposer : Déplacez les cartes d'une colonne à l'autre (À faire → En cours → Validé) pour suivre votre progression.\n \n
  • \n
  • \n \n \n Catégories : Utilisez les catégories (Intrigue, Personnage, Recherche) pour filtrer visuellement vos tâches grâce aux codes couleurs.\n \n
  • \n
\n
\n
\n );\n\n case 'workflow':\n return (\n <>\n {/* Workflow Section */}\n
\n

\n Organisation Narrative\n

\n
\n
    \n
  • \n \n \n Sélection : Ctrl + Clic pour sélectionner plusieurs cartes. Glissez pour déplacer tout un groupe.\n \n
  • \n
  • \n \n \n Copier / Coller : Ctrl + C pour copier les nœuds sélectionnés, Ctrl + V pour coller.\n \n
  • \n
  • \n \n \n Connexions : Tirez depuis le cercle à droite d'une carte pour lier les événements.\n \n
  • \n
\n
\n
\n\n {/* Dialogue Intelligent */}\n
\n

\n Mode Dialogue (Workflow)\n

\n
\n
\n
Écriture Rapide
\n

\n Tapez un nom et Entrée : le formatage Nom: s'ajoute seul.\n

\n

\n Dans un dialogue, Entrée change de ligne et devine le prochain interlocuteur automatiquement.\n

\n
\n
\n
Rotation & Insertion
\n

\n Tab permute instantanément entre les personnages présents dans la scène.\n

\n

\n Utilisez @ pour insérer un personnage, # pour un lieu.\n

\n
\n
\n
\n \n );\n\n case 'world_building':\n return (\n
\n

\n Bible du Monde\n

\n
\n

\n La bible du monde permet de centraliser toutes les informations sur vos personnages et lieux.\n Ces informations sont lues par l'IA pour assurer la cohérence de l'histoire.\n

\n
\n
\n

Modèles Personnalisés

\n

\n Cliquez sur le bouton \"Modèles\" pour ajouter des champs spécifiques (ex: \"Type de Magie\", \"Allégeance\") à tous vos personnages ou lieux.\n

\n
\n
\n

Contexte Automatique

\n

\n Le champ \"Contexte Narratif\" se remplit automatiquement au fur et à mesure que vous écrivez votre histoire et que l'IA détecte l'évolution des personnages.\n

\n
\n
\n
\n
\n );\n\n case 'settings':\n return (\n
\n

\n Paramètres du Livre\n

\n

\n Ces réglages sont cruciaux pour l'Assistant IA. Ils définissent le \"ton\" de toutes les générations de texte.\n

\n
    \n
  • Style Guide : Soyez précis sur le style (ex: \"phrases courtes\", \"beaucoup de métaphores\", \"humour noir\").
  • \n
  • POV (Point de Vue) : Définit si l'IA doit écrire en \"Je\" ou \"Il/Elle\".
  • \n
\n
\n );\n\n case 'write':\n default:\n return (\n
\n

\n Éditeur & Assistant IA\n

\n
\n
\n

Menu Contextuel Intelligent

\n

Sélectionnez du texte et faites un clic droit pour :

\n
    \n
  • Corriger l'orthographe
  • \n
  • Reformuler / Améliorer
  • \n
  • Développer (Show, don't tell)
  • \n
  • Continuer l'écriture
  • \n
\n
\n

\n Historique des versions : Activez la marge de droite (icône horloge) pour voir toutes les interventions de l'IA et revenir en arrière si nécessaire.\n

\n

\n Chat Latéral : Posez des questions sur votre histoire, demandez des résumés ou des idées de rebondissements. L'IA connaît le contexte de vos chapitres précédents et de vos fiches personnages.\n

\n \n
\n

\n Raccourcis Clavier (Éditeur)\n

\n
\n
\n
\n Mettre en Gras\n Ctrl + B\n
\n
\n Mettre en Italique\n Ctrl + I\n
\n
\n Souligner\n Ctrl + U\n
\n
\n
\n
\n Tout sélectionner\n Ctrl + A\n
\n
\n Annuler\n Ctrl + Z\n
\n
\n Rétablir\n Ctrl + Shift + Z\n
\n
\n
\n
\n
\n
\n );\n }\n };\n\n return (\n
\n
\n \n {/* Header */}\n
\n
\n

\n Aide : {\n viewMode === 'workflow' ? 'Workflow & Dialogues' :\n viewMode === 'world_building' ? 'Bible du Monde' :\n viewMode === 'settings' ? 'Paramètres' :\n viewMode === 'ideas' ? 'Boîte à Idées' :\n 'Éditeur & IA'\n }\n

\n

Astuces pour l'écran actuel.

\n
\n \n
\n\n {/* Content */}\n
\n \n {/* Context Specific Content */}\n {renderContent()}\n\n {/* General Footer Section (Always visible) */}\n
\n

Raccourcis Généraux

\n
\n
\n Sauvegarde Automatique\n Permanente\n
\n
\n Menu Latéral\n Clic sur le burger\n
\n
\n
\n\n
\n\n {/* Footer */}\n
\n \n
\n\n
\n
\n );\n};\n\nexport default HelpModal;"],"names":[],"mappings":"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"}}, - {"offset": {"line": 3344, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/project/%5Bid%5D/layout.tsx"],"sourcesContent":["'use client';\r\n\r\nimport React, { useState, useEffect } from 'react';\r\nimport { useParams, useRouter, usePathname } from 'next/navigation';\r\nimport { useAuthContext } from '@/providers/AuthProvider';\r\nimport { ProjectProvider } from '@/providers/ProjectProvider';\r\nimport { useProjects } from '@/hooks/useProjects';\r\nimport { useChat } from '@/hooks/useChat';\r\nimport { ViewMode } from '@/lib/types';\r\nimport EditorShell from '@/components/layout/EditorShell';\r\nimport ExportModal from '@/components/ExportModal';\r\nimport HelpModal from '@/components/HelpModal';\r\nimport { Loader2, BookOpen } from 'lucide-react';\r\n\r\nfunction getViewModeFromPath(pathname: string): ViewMode {\r\n if (pathname.endsWith('/world')) return 'world_building';\r\n if (pathname.endsWith('/ideas')) return 'ideas';\r\n if (pathname.endsWith('/workflow')) return 'workflow';\r\n if (pathname.endsWith('/settings')) return 'settings';\r\n return 'write';\r\n}\r\n\r\nexport default function ProjectLayout({ children }: { children: React.ReactNode }) {\r\n const params = useParams();\r\n const router = useRouter();\r\n const pathname = usePathname();\r\n const projectId = params.id as string;\r\n\r\n const { user, logout, incrementUsage, loading: authLoading } = useAuthContext();\r\n const {\r\n projects, setCurrentProjectId,\r\n updateProject, updateChapter, addChapter,\r\n } = useProjects(user);\r\n const { chatHistory, isGenerating, sendMessage } = useChat();\r\n\r\n const [currentChapterId, setCurrentChapterId] = useState('');\r\n const [isExportModalOpen, setIsExportModalOpen] = useState(false);\r\n const [isHelpModalOpen, setIsHelpModalOpen] = useState(false);\r\n\r\n const viewMode = getViewModeFromPath(pathname);\r\n\r\n useEffect(() => {\r\n if (projectId) setCurrentProjectId(projectId);\r\n }, [projectId, setCurrentProjectId]);\r\n\r\n useEffect(() => {\r\n if (!authLoading && !user) router.replace('/login');\r\n }, [user, authLoading, router]);\r\n\r\n const project = projects.find(p => p.id === projectId);\r\n\r\n useEffect(() => {\r\n if (project && (!currentChapterId || !project.chapters.some(c => c.id === currentChapterId))) {\r\n setCurrentChapterId(project.chapters[0]?.id || '');\r\n }\r\n }, [project, currentChapterId]);\r\n\r\n if (authLoading || !user) {\r\n return (\r\n
\r\n \r\n
\r\n \r\n PlumeIA\r\n
\r\n
\r\n );\r\n }\r\n\r\n if (!project) {\r\n return (\r\n
\r\n \r\n

Chargement du projet...

\r\n
\r\n );\r\n }\r\n\r\n const handleViewModeChange = (mode: ViewMode) => {\r\n const base = `/project/${projectId}`;\r\n switch (mode) {\r\n case 'write': router.push(base); break;\r\n case 'world_building': router.push(`${base}/world`); break;\r\n case 'ideas': router.push(`${base}/ideas`); break;\r\n case 'workflow': router.push(`${base}/workflow`); break;\r\n case 'settings': router.push(`${base}/settings`); break;\r\n case 'dashboard': router.push('/dashboard'); break;\r\n default: router.push(base);\r\n }\r\n };\r\n\r\n return (\r\n updateProject(projectId, updates),\r\n updateChapter: (chapterId, data) => updateChapter(projectId, chapterId, data),\r\n incrementUsage,\r\n }}>\r\n { setCurrentChapterId(id); router.push(`/project/${projectId}`); }}\r\n onUpdateProject={(updates) => updateProject(projectId, updates)}\r\n onAddChapter={async () => {\r\n const id = await addChapter(projectId, {});\r\n if (id) {\r\n setCurrentChapterId(id);\r\n router.push(`/project/${projectId}`);\r\n }\r\n }}\r\n onDeleteChapter={(id) => {\r\n if (project.chapters.length > 1) {\r\n const newChapters = project.chapters.filter(c => c.id !== id);\r\n updateProject(projectId, { chapters: newChapters });\r\n if (currentChapterId === id) setCurrentChapterId(newChapters[0].id);\r\n }\r\n }}\r\n onLogout={() => { logout(); router.push('/'); }}\r\n onSendMessage={(msg) => {\r\n if (project && user) sendMessage(project, 'global', msg, user, incrementUsage);\r\n }}\r\n onInsertText={() => { }}\r\n onOpenExport={() => setIsExportModalOpen(true)}\r\n onOpenHelp={() => setIsHelpModalOpen(true)}\r\n >\r\n setIsExportModalOpen(false)} project={project} onPrint={() => { }} />\r\n setIsHelpModalOpen(false)} viewMode={viewMode} />\r\n {children}\r\n \r\n \r\n );\r\n}\r\n"],"names":[],"mappings":"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"}}] + {"offset": {"line": 3344, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/src/app/project/%5Bid%5D/layout.tsx"],"sourcesContent":["'use client';\r\n\r\nimport React, { useState, useEffect } from 'react';\r\nimport { useParams, useRouter, usePathname } from 'next/navigation';\r\nimport { useAuthContext } from '@/providers/AuthProvider';\r\nimport { ProjectProvider } from '@/providers/ProjectProvider';\r\nimport { useProjects } from '@/hooks/useProjects';\r\nimport { useChat } from '@/hooks/useChat';\r\nimport { ViewMode } from '@/lib/types';\r\nimport EditorShell from '@/components/layout/EditorShell';\r\nimport ExportModal from '@/components/ExportModal';\r\nimport HelpModal from '@/components/HelpModal';\r\nimport { Loader2, BookOpen } from 'lucide-react';\r\n\r\nfunction getViewModeFromPath(pathname: string): ViewMode {\r\n if (pathname.endsWith('/world')) return 'world_building';\r\n if (pathname.endsWith('/ideas')) return 'ideas';\r\n if (pathname.endsWith('/workflow')) return 'workflow';\r\n if (pathname.endsWith('/settings')) return 'settings';\r\n return 'write';\r\n}\r\n\r\nexport default function ProjectLayout({ children }: { children: React.ReactNode }) {\r\n const params = useParams();\r\n const router = useRouter();\r\n const pathname = usePathname();\r\n const projectId = params.id as string;\r\n\r\n const { user, logout, incrementUsage, loading: authLoading } = useAuthContext();\r\n const {\r\n projects, setCurrentProjectId,\r\n updateProject, updateChapter, addChapter,\r\n createEntity, updateEntity, deleteEntity, deleteProject\r\n } = useProjects(user);\r\n const { chatHistory, isGenerating, sendMessage } = useChat();\r\n\r\n const [currentChapterId, setCurrentChapterId] = useState('');\r\n const [isExportModalOpen, setIsExportModalOpen] = useState(false);\r\n const [isHelpModalOpen, setIsHelpModalOpen] = useState(false);\r\n\r\n const viewMode = getViewModeFromPath(pathname);\r\n\r\n useEffect(() => {\r\n if (projectId) setCurrentProjectId(projectId);\r\n }, [projectId, setCurrentProjectId]);\r\n\r\n useEffect(() => {\r\n if (!authLoading && !user) router.replace('/login');\r\n }, [user, authLoading, router]);\r\n\r\n const project = projects.find(p => p.id === projectId);\r\n\r\n useEffect(() => {\r\n if (project && (!currentChapterId || !project.chapters.some(c => c.id === currentChapterId))) {\r\n setCurrentChapterId(project.chapters[0]?.id || '');\r\n }\r\n }, [project, currentChapterId]);\r\n\r\n if (authLoading || !user) {\r\n return (\r\n
\r\n \r\n
\r\n \r\n PlumeIA\r\n
\r\n
\r\n );\r\n }\r\n\r\n if (!project) {\r\n return (\r\n
\r\n \r\n

Chargement du projet...

\r\n
\r\n );\r\n }\r\n\r\n const handleViewModeChange = (mode: ViewMode) => {\r\n const base = `/project/${projectId}`;\r\n switch (mode) {\r\n case 'write': router.push(base); break;\r\n case 'world_building': router.push(`${base}/world`); break;\r\n case 'ideas': router.push(`${base}/ideas`); break;\r\n case 'workflow': router.push(`${base}/workflow`); break;\r\n case 'settings': router.push(`${base}/settings`); break;\r\n case 'dashboard': router.push('/dashboard'); break;\r\n default: router.push(base);\r\n }\r\n };\r\n\r\n return (\r\n updateProject(projectId, updates),\r\n updateChapter: (chapterId, data) => updateChapter(projectId, chapterId, data),\r\n createEntity: (type, data) => createEntity(projectId, type, data),\r\n updateEntity: (entityId, data) => updateEntity(projectId, entityId, data),\r\n deleteEntity: (entityId) => deleteEntity(projectId, entityId),\r\n deleteProject: () => deleteProject(projectId),\r\n incrementUsage,\r\n }}>\r\n { setCurrentChapterId(id); router.push(`/project/${projectId}`); }}\r\n onUpdateProject={(updates) => updateProject(projectId, updates)}\r\n onAddChapter={async () => {\r\n const id = await addChapter(projectId, {});\r\n if (id) {\r\n setCurrentChapterId(id);\r\n router.push(`/project/${projectId}`);\r\n }\r\n }}\r\n onDeleteChapter={(id) => {\r\n if (project.chapters.length > 1) {\r\n const newChapters = project.chapters.filter(c => c.id !== id);\r\n updateProject(projectId, { chapters: newChapters });\r\n if (currentChapterId === id) setCurrentChapterId(newChapters[0].id);\r\n }\r\n }}\r\n onLogout={() => { logout(); router.push('/'); }}\r\n onSendMessage={(msg) => {\r\n if (project && user) sendMessage(project, 'global', msg, user, incrementUsage);\r\n }}\r\n onInsertText={() => { }}\r\n onOpenExport={() => setIsExportModalOpen(true)}\r\n onOpenHelp={() => setIsHelpModalOpen(true)}\r\n >\r\n setIsExportModalOpen(false)} project={project} onPrint={() => { }} />\r\n setIsHelpModalOpen(false)} viewMode={viewMode} />\r\n {children}\r\n \r\n \r\n );\r\n}\r\n"],"names":[],"mappings":"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"}}] } \ No newline at end of file diff --git a/.next/dev/static/chunks/Documents_00 - projet_plumeia_src_app_globals_css_bad6b30c._.single.css b/.next/dev/static/chunks/Documents_00 - projet_plumeia_src_app_globals_css_bad6b30c._.single.css index af00154..7bd45a6 100644 --- a/.next/dev/static/chunks/Documents_00 - projet_plumeia_src_app_globals_css_bad6b30c._.single.css +++ b/.next/dev/static/chunks/Documents_00 - projet_plumeia_src_app_globals_css_bad6b30c._.single.css @@ -548,6 +548,10 @@ position: relative; } + .static { + position: static; + } + .sticky { position: sticky; } @@ -712,6 +716,10 @@ grid-column: span 2 / span 2; } + .col-span-3 { + grid-column: span 3 / span 3; + } + .container { width: 100%; } @@ -2109,6 +2117,10 @@ padding-block: calc(var(--spacing) * 8); } + .py-10 { + padding-block: calc(var(--spacing) * 10); + } + .py-12 { padding-block: calc(var(--spacing) * 12); } diff --git a/.next/dev/static/chunks/Documents_00 - projet_plumeia_src_app_globals_css_bad6b30c._.single.css.map b/.next/dev/static/chunks/Documents_00 - projet_plumeia_src_app_globals_css_bad6b30c._.single.css.map index 76f0f29..afbe7a5 100644 --- a/.next/dev/static/chunks/Documents_00 - projet_plumeia_src_app_globals_css_bad6b30c._.single.css.map +++ b/.next/dev/static/chunks/Documents_00 - projet_plumeia_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]/Documents/00 - projet/plumeia/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 --font-sans: 'Inter', sans-serif;\n --font-serif: 'Merriweather', serif;\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\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-300: oklch(80.8% 0.114 19.571);\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-red-900: oklch(39.6% 0.141 25.723);\n --color-orange-100: oklch(95.4% 0.038 75.164);\n --color-orange-200: oklch(90.1% 0.076 70.697);\n --color-orange-500: oklch(70.5% 0.213 47.604);\n --color-orange-600: oklch(64.6% 0.222 41.116);\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-500: oklch(76.9% 0.188 70.08);\n --color-amber-600: oklch(66.6% 0.179 58.318);\n --color-amber-800: oklch(47.3% 0.137 46.201);\n --color-yellow-100: oklch(97.3% 0.071 103.193);\n --color-yellow-400: oklch(85.2% 0.199 91.936);\n --color-yellow-500: oklch(79.5% 0.184 86.047);\n --color-yellow-600: oklch(68.1% 0.162 75.834);\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-500: oklch(72.3% 0.219 149.579);\n --color-green-700: oklch(52.7% 0.154 150.069);\n --color-green-800: oklch(44.8% 0.119 151.328);\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-300: oklch(80.9% 0.105 251.813);\n --color-blue-400: oklch(70.7% 0.165 254.624);\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-blue-800: oklch(42.4% 0.199 265.638);\n --color-blue-900: oklch(37.9% 0.146 265.522);\n --color-indigo-50: oklch(96.2% 0.018 272.314);\n --color-indigo-100: oklch(93% 0.034 272.788);\n --color-indigo-200: oklch(87% 0.065 274.039);\n --color-indigo-300: oklch(78.5% 0.115 274.713);\n --color-indigo-400: oklch(67.3% 0.182 276.935);\n --color-indigo-500: oklch(58.5% 0.233 277.117);\n --color-indigo-600: oklch(51.1% 0.262 276.966);\n --color-indigo-700: oklch(45.7% 0.24 277.023);\n --color-indigo-800: oklch(39.8% 0.195 277.366);\n --color-indigo-900: oklch(35.9% 0.144 278.697);\n --color-purple-100: oklch(94.6% 0.033 307.174);\n --color-purple-200: oklch(90.2% 0.063 306.703);\n --color-purple-600: oklch(55.8% 0.288 302.321);\n --color-purple-700: oklch(49.6% 0.265 301.924);\n --color-rose-100: oklch(94.1% 0.03 12.58);\n --color-rose-200: oklch(89.2% 0.058 10.001);\n --color-rose-800: oklch(45.5% 0.188 13.697);\n --color-slate-50: oklch(98.4% 0.003 247.858);\n --color-slate-100: oklch(96.8% 0.007 247.896);\n --color-slate-200: oklch(92.9% 0.013 255.508);\n --color-slate-300: oklch(86.9% 0.022 252.894);\n --color-slate-400: oklch(70.4% 0.04 256.788);\n --color-slate-500: oklch(55.4% 0.046 257.417);\n --color-slate-600: oklch(44.6% 0.043 257.281);\n --color-slate-700: oklch(37.2% 0.044 257.287);\n --color-slate-800: oklch(27.9% 0.041 260.031);\n --color-slate-900: oklch(20.8% 0.042 265.755);\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-800: oklch(27.8% 0.033 256.848);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-md: 28rem;\n --container-lg: 32rem;\n --container-2xl: 42rem;\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-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 --text-7xl: 4.5rem;\n --text-7xl--line-height: 1;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --font-weight-black: 900;\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-relaxed: 1.625;\n --radius-md: 0.375rem;\n --radius-lg: 0.5rem;\n --radius-xl: 0.75rem;\n --radius-2xl: 1rem;\n --radius-3xl: 1.5rem;\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 --blur-md: 12px;\n --blur-3xl: 64px;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-sans);\n --default-mono-font-family: var(--font-mono);\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 .pointer-events-auto {\n pointer-events: auto;\n }\n .pointer-events-none {\n pointer-events: none;\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-4 {\n inset: calc(var(--spacing) * -4);\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .start {\n inset-inline-start: var(--spacing);\n }\n .-top-2 {\n top: calc(var(--spacing) * -2);\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-8 {\n top: calc(var(--spacing) * 8);\n }\n .top-10 {\n top: calc(var(--spacing) * 10);\n }\n .-right-1 {\n right: calc(var(--spacing) * -1);\n }\n .-right-3 {\n right: calc(var(--spacing) * -3);\n }\n .right-0 {\n right: calc(var(--spacing) * 0);\n }\n .right-1\\.5 {\n right: calc(var(--spacing) * 1.5);\n }\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n .right-4 {\n right: calc(var(--spacing) * 4);\n }\n .right-10 {\n right: calc(var(--spacing) * 10);\n }\n .right-\\[-10px\\] {\n right: -10px;\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-10 {\n bottom: calc(var(--spacing) * 10);\n }\n .bottom-full {\n bottom: 100%;\n }\n .-left-2 {\n left: calc(var(--spacing) * -2);\n }\n .left-0 {\n left: calc(var(--spacing) * 0);\n }\n .left-3 {\n left: calc(var(--spacing) * 3);\n }\n .left-4 {\n left: calc(var(--spacing) * 4);\n }\n .left-10 {\n left: calc(var(--spacing) * 10);\n }\n .left-\\[calc\\(50\\%\\+420px\\)\\] {\n left: calc(50% + 420px);\n }\n .-z-1 {\n z-index: calc(1 * -1);\n }\n .-z-10 {\n z-index: calc(10 * -1);\n }\n .z-0 {\n z-index: 0;\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-span-2 {\n grid-column: span 2 / span 2;\n }\n .container {\n width: 100%;\n @media (width >= 40rem) {\n max-width: 40rem;\n }\n @media (width >= 48rem) {\n max-width: 48rem;\n }\n @media (width >= 64rem) {\n max-width: 64rem;\n }\n @media (width >= 80rem) {\n max-width: 80rem;\n }\n @media (width >= 96rem) {\n max-width: 96rem;\n }\n }\n .m-1 {\n margin: calc(var(--spacing) * 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-auto {\n margin-inline: auto;\n }\n .my-1 {\n margin-block: calc(var(--spacing) * 1);\n }\n .my-4 {\n margin-block: calc(var(--spacing) * 4);\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-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-10 {\n margin-top: calc(var(--spacing) * 10);\n }\n .mt-12 {\n margin-top: calc(var(--spacing) * 12);\n }\n .mt-20 {\n margin-top: calc(var(--spacing) * 20);\n }\n .mr-4 {\n margin-right: calc(var(--spacing) * 4);\n }\n .mr-6 {\n margin-right: calc(var(--spacing) * 6);\n }\n .mr-auto {\n margin-right: auto;\n }\n .mb-1 {\n margin-bottom: calc(var(--spacing) * 1);\n }\n .mb-1\\.5 {\n margin-bottom: calc(var(--spacing) * 1.5);\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-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-2 {\n margin-left: calc(var(--spacing) * 2);\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 .block {\n display: block;\n }\n .contents {\n display: contents;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .hidden {\n display: none;\n }\n .inline-block {\n display: inline-block;\n }\n .inline-flex {\n display: inline-flex;\n }\n .table {\n display: table;\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-3 {\n height: calc(var(--spacing) * 3);\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-8 {\n height: calc(var(--spacing) * 8);\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-48 {\n height: calc(var(--spacing) * 48);\n }\n .h-64 {\n height: calc(var(--spacing) * 64);\n }\n .h-96 {\n height: calc(var(--spacing) * 96);\n }\n .h-\\[500px\\] {\n height: 500px;\n }\n .h-\\[4000px\\] {\n height: 4000px;\n }\n .h-full {\n height: 100%;\n }\n .h-px {\n height: 1px;\n }\n .h-screen {\n height: 100vh;\n }\n .max-h-48 {\n max-height: calc(var(--spacing) * 48);\n }\n .max-h-64 {\n max-height: calc(var(--spacing) * 64);\n }\n .max-h-\\[90\\%\\] {\n max-height: 90%;\n }\n .max-h-\\[90vh\\] {\n max-height: 90vh;\n }\n .min-h-0 {\n min-height: calc(var(--spacing) * 0);\n }\n .min-h-\\[120px\\] {\n min-height: 120px;\n }\n .min-h-\\[1000px\\] {\n min-height: 1000px;\n }\n .min-h-full {\n min-height: 100%;\n }\n .min-h-screen {\n min-height: 100vh;\n }\n .w-0 {\n width: calc(var(--spacing) * 0);\n }\n .w-1\\.5 {\n width: calc(var(--spacing) * 1.5);\n }\n .w-1\\/2 {\n width: calc(1 / 2 * 100%);\n }\n .w-1\\/3 {\n width: calc(1 / 3 * 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-8 {\n width: calc(var(--spacing) * 8);\n }\n .w-12 {\n width: calc(var(--spacing) * 12);\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-32 {\n width: calc(var(--spacing) * 32);\n }\n .w-48 {\n width: calc(var(--spacing) * 48);\n }\n .w-56 {\n width: calc(var(--spacing) * 56);\n }\n .w-64 {\n width: calc(var(--spacing) * 64);\n }\n .w-72 {\n width: calc(var(--spacing) * 72);\n }\n .w-80 {\n width: calc(var(--spacing) * 80);\n }\n .w-96 {\n width: calc(var(--spacing) * 96);\n }\n .w-\\[600px\\] {\n width: 600px;\n }\n .w-\\[800px\\] {\n width: 800px;\n }\n .w-\\[4000px\\] {\n width: 4000px;\n }\n .w-full {\n width: 100%;\n }\n .w-max {\n width: max-content;\n }\n .w-px {\n width: 1px;\n }\n .max-w-2xl {\n max-width: var(--container-2xl);\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-\\[85\\%\\] {\n max-width: 85%;\n }\n .max-w-lg {\n max-width: var(--container-lg);\n }\n .max-w-md {\n max-width: var(--container-md);\n }\n .flex-1 {\n flex: 1;\n }\n .flex-shrink-0 {\n flex-shrink: 0;\n }\n .shrink-0 {\n flex-shrink: 0;\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-1 {\n --tw-translate-x: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-y-1 {\n --tw-translate-y: calc(var(--spacing) * -1);\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-1 {\n --tw-translate-y: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .scale-105 {\n --tw-scale-x: 105%;\n --tw-scale-y: 105%;\n --tw-scale-z: 105%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .scale-\\[1\\.01\\] {\n scale: 1.01;\n }\n .transform {\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\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-grab {\n cursor: grab;\n }\n .cursor-not-allowed {\n cursor: not-allowed;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .cursor-text {\n cursor: text;\n }\n .resize-none {\n resize: none;\n }\n .list-disc {\n list-style-type: disc;\n }\n .appearance-none {\n appearance: none;\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-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-wrap {\n flex-wrap: wrap;\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 .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-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-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-6 {\n gap: calc(var(--spacing) * 6);\n }\n .gap-8 {\n gap: calc(var(--spacing) * 8);\n }\n .gap-12 {\n gap: calc(var(--spacing) * 12);\n }\n .space-y-1 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 1) * 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-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-6 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 6) * 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 .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-slate-50 {\n :where(& > :not(:last-child)) {\n border-color: var(--color-slate-50);\n }\n }\n .divide-slate-100 {\n :where(& > :not(:last-child)) {\n border-color: var(--color-slate-100);\n }\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-y-auto {\n overflow-y: auto;\n }\n .rounded {\n border-radius: 0.25rem;\n }\n .rounded-2xl {\n border-radius: var(--radius-2xl);\n }\n .rounded-3xl {\n border-radius: var(--radius-3xl);\n }\n .rounded-\\[2\\.5rem\\] {\n border-radius: 2.5rem;\n }\n .rounded-\\[2rem\\] {\n border-radius: 2rem;\n }\n .rounded-\\[3rem\\] {\n border-radius: 3rem;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius-lg);\n }\n .rounded-md {\n border-radius: var(--radius-md);\n }\n .rounded-xl {\n border-radius: var(--radius-xl);\n }\n .rounded-t-lg {\n border-top-left-radius: var(--radius-lg);\n border-top-right-radius: var(--radius-lg);\n }\n .rounded-t-xl {\n border-top-left-radius: var(--radius-xl);\n border-top-right-radius: var(--radius-xl);\n }\n .rounded-br-none {\n border-bottom-right-radius: 0;\n }\n .rounded-bl-none {\n border-bottom-left-radius: 0;\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-2 {\n border-style: var(--tw-border-style);\n border-width: 2px;\n }\n .border-4 {\n border-style: var(--tw-border-style);\n border-width: 4px;\n }\n .border-y {\n border-block-style: var(--tw-border-style);\n border-block-width: 1px;\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-r-2 {\n border-right-style: var(--tw-border-style);\n border-right-width: 2px;\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-l-2 {\n border-left-style: var(--tw-border-style);\n border-left-width: 2px;\n }\n .border-l-4 {\n border-left-style: var(--tw-border-style);\n border-left-width: 4px;\n }\n .border-dashed {\n --tw-border-style: dashed;\n border-style: dashed;\n }\n .border-amber-100 {\n border-color: var(--color-amber-100);\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-blue-200 {\n border-color: var(--color-blue-200);\n }\n .border-blue-400 {\n border-color: var(--color-blue-400);\n }\n .border-blue-500 {\n border-color: var(--color-blue-500);\n }\n .border-blue-600 {\n border-color: var(--color-blue-600);\n }\n .border-gray-200 {\n border-color: var(--color-gray-200);\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-indigo-50 {\n border-color: var(--color-indigo-50);\n }\n .border-indigo-100 {\n border-color: var(--color-indigo-100);\n }\n .border-indigo-200 {\n border-color: var(--color-indigo-200);\n }\n .border-indigo-300 {\n border-color: var(--color-indigo-300);\n }\n .border-indigo-400 {\n border-color: var(--color-indigo-400);\n }\n .border-indigo-600 {\n border-color: var(--color-indigo-600);\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-red-300 {\n border-color: var(--color-red-300);\n }\n .border-rose-200 {\n border-color: var(--color-rose-200);\n }\n .border-slate-50 {\n border-color: var(--color-slate-50);\n }\n .border-slate-100 {\n border-color: var(--color-slate-100);\n }\n .border-slate-200 {\n border-color: var(--color-slate-200);\n }\n .border-slate-300 {\n border-color: var(--color-slate-300);\n }\n .border-slate-700 {\n border-color: var(--color-slate-700);\n }\n .border-slate-800 {\n border-color: var(--color-slate-800);\n }\n .border-transparent {\n border-color: transparent;\n }\n .border-white {\n border-color: var(--color-white);\n }\n .border-yellow-100 {\n border-color: var(--color-yellow-100);\n }\n .bg-\\[\\#eef2ff\\] {\n background-color: #eef2ff;\n }\n .bg-\\[\\#f4ecd8\\] {\n background-color: #f4ecd8;\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-black\\/5 {\n background-color: color-mix(in srgb, #000 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 5%, 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-blue-600 {\n background-color: var(--color-blue-600);\n }\n .bg-blue-700 {\n background-color: var(--color-blue-700);\n }\n .bg-blue-900 {\n background-color: var(--color-blue-900);\n }\n .bg-gray-100 {\n background-color: var(--color-gray-100);\n }\n .bg-green-50 {\n background-color: var(--color-green-50);\n }\n .bg-green-100 {\n background-color: var(--color-green-100);\n }\n .bg-green-500 {\n background-color: var(--color-green-500);\n }\n .bg-indigo-50 {\n background-color: var(--color-indigo-50);\n }\n .bg-indigo-50\\/30 {\n background-color: color-mix(in srgb, oklch(96.2% 0.018 272.314) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-50) 30%, transparent);\n }\n }\n .bg-indigo-100 {\n background-color: var(--color-indigo-100);\n }\n .bg-indigo-500 {\n background-color: var(--color-indigo-500);\n }\n .bg-indigo-500\\/20 {\n background-color: color-mix(in srgb, oklch(58.5% 0.233 277.117) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-500) 20%, transparent);\n }\n }\n .bg-indigo-600 {\n background-color: var(--color-indigo-600);\n }\n .bg-indigo-900 {\n background-color: var(--color-indigo-900);\n }\n .bg-indigo-900\\/50 {\n background-color: color-mix(in srgb, oklch(35.9% 0.144 278.697) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-900) 50%, transparent);\n }\n }\n .bg-orange-100 {\n background-color: var(--color-orange-100);\n }\n .bg-purple-100 {\n background-color: var(--color-purple-100);\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-rose-100 {\n background-color: var(--color-rose-100);\n }\n .bg-slate-50 {\n background-color: var(--color-slate-50);\n }\n .bg-slate-100 {\n background-color: var(--color-slate-100);\n }\n .bg-slate-200 {\n background-color: var(--color-slate-200);\n }\n .bg-slate-300 {\n background-color: var(--color-slate-300);\n }\n .bg-slate-700 {\n background-color: var(--color-slate-700);\n }\n .bg-slate-800 {\n background-color: var(--color-slate-800);\n }\n .bg-slate-900 {\n background-color: var(--color-slate-900);\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\\/50 {\n background-color: color-mix(in srgb, #fff 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 50%, transparent);\n }\n }\n .bg-white\\/70 {\n background-color: color-mix(in srgb, #fff 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 70%, transparent);\n }\n }\n .bg-white\\/80 {\n background-color: color-mix(in srgb, #fff 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 80%, transparent);\n }\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 .from-blue-500\\/20 {\n --tw-gradient-from: color-mix(in srgb, oklch(62.3% 0.214 259.815) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-blue-500) 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 .from-blue-600 {\n --tw-gradient-from: var(--color-blue-600);\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-orange-200 {\n --tw-gradient-from: var(--color-orange-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-red-200 {\n --tw-gradient-from: var(--color-red-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-slate-300 {\n --tw-gradient-from: var(--color-slate-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 .via-indigo-200 {\n --tw-gradient-via: var(--color-indigo-200);\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-purple-200 {\n --tw-gradient-via: var(--color-purple-200);\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-yellow-100 {\n --tw-gradient-via: var(--color-yellow-100);\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-blue-200 {\n --tw-gradient-to: var(--color-blue-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-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-indigo-500 {\n --tw-gradient-to: var(--color-indigo-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 .to-indigo-500\\/20 {\n --tw-gradient-to: color-mix(in srgb, oklch(58.5% 0.233 277.117) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-indigo-500) 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-slate-300 {\n --tw-gradient-to: var(--color-slate-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 .bg-clip-text {\n background-clip: text;\n }\n .object-cover {\n object-fit: cover;\n }\n .p-0\\.5 {\n padding: calc(var(--spacing) * 0.5);\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-2\\.5 {\n padding: calc(var(--spacing) * 2.5);\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-12 {\n padding: calc(var(--spacing) * 12);\n }\n .px-0\\.5 {\n padding-inline: calc(var(--spacing) * 0.5);\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-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 .px-8 {\n padding-inline: calc(var(--spacing) * 8);\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-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-5 {\n padding-block: calc(var(--spacing) * 5);\n }\n .py-8 {\n padding-block: calc(var(--spacing) * 8);\n }\n .py-12 {\n padding-block: calc(var(--spacing) * 12);\n }\n .py-20 {\n padding-block: calc(var(--spacing) * 20);\n }\n .py-24 {\n padding-block: calc(var(--spacing) * 24);\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-4 {\n padding-top: calc(var(--spacing) * 4);\n }\n .pt-6 {\n padding-top: calc(var(--spacing) * 6);\n }\n .pt-8 {\n padding-top: calc(var(--spacing) * 8);\n }\n .pt-32 {\n padding-top: calc(var(--spacing) * 32);\n }\n .pr-2 {\n padding-right: calc(var(--spacing) * 2);\n }\n .pr-4 {\n padding-right: calc(var(--spacing) * 4);\n }\n .pr-12 {\n padding-right: calc(var(--spacing) * 12);\n }\n .pb-1 {\n padding-bottom: calc(var(--spacing) * 1);\n }\n .pb-2 {\n padding-bottom: calc(var(--spacing) * 2);\n }\n .pb-4 {\n padding-bottom: calc(var(--spacing) * 4);\n }\n .pb-8 {\n padding-bottom: calc(var(--spacing) * 8);\n }\n .pb-20 {\n padding-bottom: calc(var(--spacing) * 20);\n }\n .pl-2 {\n padding-left: calc(var(--spacing) * 2);\n }\n .pl-4 {\n padding-left: calc(var(--spacing) * 4);\n }\n .pl-5 {\n padding-left: calc(var(--spacing) * 5);\n }\n .pl-9 {\n padding-left: calc(var(--spacing) * 9);\n }\n .pl-12 {\n padding-left: calc(var(--spacing) * 12);\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 .font-mono {\n font-family: var(--font-mono);\n }\n .font-sans {\n font-family: var(--font-sans);\n }\n .font-serif {\n font-family: var(--font-serif);\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-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-\\[9px\\] {\n font-size: 9px;\n }\n .text-\\[10px\\] {\n font-size: 10px;\n }\n .leading-\\[1\\.1\\] {\n --tw-leading: 1.1;\n line-height: 1.1;\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .leading-tight {\n --tw-leading: var(--leading-tight);\n line-height: var(--leading-tight);\n }\n .font-black {\n --tw-font-weight: var(--font-weight-black);\n font-weight: var(--font-weight-black);\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 .whitespace-pre-wrap {\n white-space: pre-wrap;\n }\n .text-amber-500 {\n color: var(--color-amber-500);\n }\n .text-amber-600 {\n color: var(--color-amber-600);\n }\n .text-amber-800 {\n color: var(--color-amber-800);\n }\n .text-blue-400 {\n color: var(--color-blue-400);\n }\n .text-blue-500 {\n color: var(--color-blue-500);\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-blue-800 {\n color: var(--color-blue-800);\n }\n .text-blue-900 {\n color: var(--color-blue-900);\n }\n .text-gray-800 {\n color: var(--color-gray-800);\n }\n .text-green-500 {\n color: var(--color-green-500);\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-indigo-300 {\n color: var(--color-indigo-300);\n }\n .text-indigo-500 {\n color: var(--color-indigo-500);\n }\n .text-indigo-600 {\n color: var(--color-indigo-600);\n }\n .text-indigo-700 {\n color: var(--color-indigo-700);\n }\n .text-indigo-800 {\n color: var(--color-indigo-800);\n }\n .text-orange-500 {\n color: var(--color-orange-500);\n }\n .text-orange-600 {\n color: var(--color-orange-600);\n }\n .text-purple-600 {\n color: var(--color-purple-600);\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-red-900 {\n color: var(--color-red-900);\n }\n .text-rose-800 {\n color: var(--color-rose-800);\n }\n .text-slate-300 {\n color: var(--color-slate-300);\n }\n .text-slate-400 {\n color: var(--color-slate-400);\n }\n .text-slate-500 {\n color: var(--color-slate-500);\n }\n .text-slate-600 {\n color: var(--color-slate-600);\n }\n .text-slate-700 {\n color: var(--color-slate-700);\n }\n .text-slate-800 {\n color: var(--color-slate-800);\n }\n .text-slate-900 {\n color: var(--color-slate-900);\n }\n .text-transparent {\n color: transparent;\n }\n .text-white {\n color: var(--color-white);\n }\n .text-yellow-400 {\n color: var(--color-yellow-400);\n }\n .text-yellow-500 {\n color: var(--color-yellow-500);\n }\n .text-yellow-600 {\n color: var(--color-yellow-600);\n }\n .uppercase {\n text-transform: uppercase;\n }\n .italic {\n font-style: italic;\n }\n .underline {\n text-decoration-line: underline;\n }\n .decoration-blue-500 {\n text-decoration-color: var(--color-blue-500);\n }\n .decoration-indigo-300 {\n text-decoration-color: var(--color-indigo-300);\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 .accent-blue-600 {\n accent-color: var(--color-blue-600);\n }\n .accent-indigo-600 {\n accent-color: var(--color-indigo-600);\n }\n .opacity-0 {\n opacity: 0%;\n }\n .opacity-20 {\n opacity: 20%;\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-2xl {\n --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));\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_10px_rgba\\(59\\,130\\,246\\,0\\.5\\)\\] {\n --tw-shadow: 0 0 10px var(--tw-shadow-color, rgba(59,130,246,0.5));\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_10px_rgba\\(99\\,102\\,241\\,0\\.5\\)\\] {\n --tw-shadow: 0 0 10px var(--tw-shadow-color, rgba(99,102,241,0.5));\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-\\[0px_2px_0px_0px_rgba\\(203\\,213\\,225\\,1\\)\\] {\n --tw-shadow: 0px 2px 0px 0px var(--tw-shadow-color, rgba(203,213,225,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-inner {\n --tw-shadow: inset 0 2px 4px 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 .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-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 .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 .shadow-blue-200 {\n --tw-shadow-color: oklch(88.2% 0.059 254.128);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow-color: color-mix(in oklab, var(--color-blue-200) var(--tw-shadow-alpha), transparent);\n }\n }\n .shadow-indigo-100 {\n --tw-shadow-color: oklch(93% 0.034 272.788);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow-color: color-mix(in oklab, var(--color-indigo-100) var(--tw-shadow-alpha), transparent);\n }\n }\n .ring-amber-200 {\n --tw-ring-color: var(--color-amber-200);\n }\n .ring-blue-200 {\n --tw-ring-color: var(--color-blue-200);\n }\n .ring-indigo-200 {\n --tw-ring-color: var(--color-indigo-200);\n }\n .ring-indigo-400 {\n --tw-ring-color: var(--color-indigo-400);\n }\n .ring-indigo-500 {\n --tw-ring-color: var(--color-indigo-500);\n }\n .ring-offset-1 {\n --tw-ring-offset-width: 1px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n .blur-3xl {\n --tw-blur: blur(var(--blur-3xl));\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .blur-\\[1px\\] {\n --tw-blur: blur(1px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .blur-\\[60px\\] {\n --tw-blur: blur(60px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .blur-\\[120px\\] {\n --tw-blur: blur(120px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .blur-\\[150px\\] {\n --tw-blur: blur(150px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .grayscale {\n --tw-grayscale: grayscale(100%);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .sepia {\n --tw-sepia: sepia(100%);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .filter {\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .backdrop-blur-md {\n --tw-backdrop-blur: blur(var(--blur-md));\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 .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-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 .duration-100 {\n --tw-duration: 100ms;\n transition-duration: 100ms;\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 .duration-500 {\n --tw-duration: 500ms;\n transition-duration: 500ms;\n }\n .duration-1000 {\n --tw-duration: 1000ms;\n transition-duration: 1000ms;\n }\n .ease-in-out {\n --tw-ease: var(--ease-in-out);\n transition-timing-function: var(--ease-in-out);\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .group-hover\\:translate-x-1 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n --tw-translate-x: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n }\n .group-hover\\:bg-blue-600 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n background-color: var(--color-blue-600);\n }\n }\n }\n .group-hover\\:text-blue-600 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n color: var(--color-blue-600);\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 .selection\\:bg-blue-200 {\n & *::selection {\n background-color: var(--color-blue-200);\n }\n &::selection {\n background-color: var(--color-blue-200);\n }\n }\n .hover\\:scale-105 {\n &:hover {\n @media (hover: hover) {\n --tw-scale-x: 105%;\n --tw-scale-y: 105%;\n --tw-scale-z: 105%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .hover\\:scale-110 {\n &:hover {\n @media (hover: hover) {\n --tw-scale-x: 110%;\n --tw-scale-y: 110%;\n --tw-scale-z: 110%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .hover\\:scale-\\[1\\.02\\] {\n &:hover {\n @media (hover: hover) {\n scale: 1.02;\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-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-blue-300);\n }\n }\n }\n .hover\\:border-indigo-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-indigo-200);\n }\n }\n }\n .hover\\:border-indigo-400 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-indigo-400);\n }\n }\n }\n .hover\\:border-indigo-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-indigo-500);\n }\n }\n }\n .hover\\:border-slate-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-slate-200);\n }\n }\n }\n .hover\\:border-slate-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-slate-300);\n }\n }\n }\n .hover\\:bg-amber-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-amber-50);\n }\n }\n }\n .hover\\:bg-amber-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-amber-100);\n }\n }\n }\n .hover\\:bg-black\\/10 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #000 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 10%, transparent);\n }\n }\n }\n }\n .hover\\:bg-blue-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-blue-50);\n }\n }\n }\n .hover\\:bg-blue-600 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-blue-600);\n }\n }\n }\n .hover\\:bg-blue-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-blue-700);\n }\n }\n }\n .hover\\:bg-blue-800 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-blue-800);\n }\n }\n }\n .hover\\:bg-indigo-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-indigo-50);\n }\n }\n }\n .hover\\:bg-indigo-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-indigo-100);\n }\n }\n }\n .hover\\:bg-indigo-200 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-indigo-200);\n }\n }\n }\n .hover\\:bg-indigo-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-indigo-700);\n }\n }\n }\n .hover\\:bg-red-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-red-50);\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-red-900\\/20 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(39.6% 0.141 25.723) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-red-900) 20%, transparent);\n }\n }\n }\n }\n .hover\\:bg-slate-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-50);\n }\n }\n }\n .hover\\:bg-slate-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-100);\n }\n }\n }\n .hover\\:bg-slate-200 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-200);\n }\n }\n }\n .hover\\:bg-slate-300 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-300);\n }\n }\n }\n .hover\\:bg-slate-800 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-800);\n }\n }\n }\n .hover\\:bg-slate-900 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-900);\n }\n }\n }\n .hover\\:bg-white {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-white);\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\\:text-blue-400 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-400);\n }\n }\n }\n .hover\\:text-blue-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-500);\n }\n }\n }\n .hover\\:text-blue-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-600);\n }\n }\n }\n .hover\\:text-blue-800 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-800);\n }\n }\n }\n .hover\\:text-indigo-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-600);\n }\n }\n }\n .hover\\:text-indigo-700 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-700);\n }\n }\n }\n .hover\\:text-indigo-800 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-800);\n }\n }\n }\n .hover\\:text-red-400 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-red-400);\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-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-red-600);\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-slate-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-500);\n }\n }\n }\n .hover\\:text-slate-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-600);\n }\n }\n }\n .hover\\:text-slate-800 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-800);\n }\n }\n }\n .hover\\:text-slate-900 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-900);\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\\:decoration-indigo-600 {\n &:hover {\n @media (hover: hover) {\n text-decoration-color: var(--color-indigo-600);\n }\n }\n }\n .hover\\:shadow-2xl {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));\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-blue-200 {\n &:hover {\n @media (hover: hover) {\n --tw-shadow-color: oklch(88.2% 0.059 254.128);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow-color: color-mix(in oklab, var(--color-blue-200) var(--tw-shadow-alpha), transparent);\n }\n }\n }\n }\n .focus\\:border-b {\n &:focus {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n }\n .focus\\:border-blue-500 {\n &:focus {\n border-color: var(--color-blue-500);\n }\n }\n .focus\\:border-indigo-400 {\n &:focus {\n border-color: var(--color-indigo-400);\n }\n }\n .focus\\:border-indigo-500 {\n &:focus {\n border-color: var(--color-indigo-500);\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-4 {\n &:focus {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(4px + 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-blue-300 {\n &:focus {\n --tw-ring-color: var(--color-blue-300);\n }\n }\n .focus\\:ring-blue-500 {\n &:focus {\n --tw-ring-color: var(--color-blue-500);\n }\n }\n .focus\\:ring-indigo-500 {\n &:focus {\n --tw-ring-color: var(--color-indigo-500);\n }\n }\n .focus\\:outline-none {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n }\n .active\\:cursor-grabbing {\n &:active {\n cursor: grabbing;\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 .sm\\:w-auto {\n @media (width >= 40rem) {\n width: auto;\n }\n }\n .sm\\:flex-row {\n @media (width >= 40rem) {\n flex-direction: row;\n }\n }\n .md\\:flex {\n @media (width >= 48rem) {\n display: flex;\n }\n }\n .md\\:w-1\\/3 {\n @media (width >= 48rem) {\n width: calc(1 / 3 * 100%);\n }\n }\n .md\\:w-64 {\n @media (width >= 48rem) {\n width: calc(var(--spacing) * 64);\n }\n }\n .md\\:w-auto {\n @media (width >= 48rem) {\n width: auto;\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\\:flex-row {\n @media (width >= 48rem) {\n flex-direction: row;\n }\n }\n .md\\:items-center {\n @media (width >= 48rem) {\n align-items: center;\n }\n }\n .md\\:p-12 {\n @media (width >= 48rem) {\n padding: calc(var(--spacing) * 12);\n }\n }\n .md\\:text-7xl {\n @media (width >= 48rem) {\n font-size: var(--text-7xl);\n line-height: var(--tw-leading, var(--text-7xl--line-height));\n }\n }\n .lg\\:col-span-2 {\n @media (width >= 64rem) {\n grid-column: span 2 / span 2;\n }\n }\n .lg\\:flex {\n @media (width >= 64rem) {\n display: flex;\n }\n }\n .lg\\:w-1\\/2 {\n @media (width >= 64rem) {\n width: calc(1 / 2 * 100%);\n }\n }\n .lg\\:w-96 {\n @media (width >= 64rem) {\n width: calc(var(--spacing) * 96);\n }\n }\n .lg\\:grid-cols-3 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n}\n.editor-content:empty:before {\n content: attr(placeholder);\n color: #9ca3af;\n pointer-events: none;\n}\n::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n::-webkit-scrollbar-track {\n background: transparent;\n}\n::-webkit-scrollbar-thumb {\n background: #cbd5e1;\n border-radius: 3px;\n}\n::-webkit-scrollbar-thumb:hover {\n background: #94a3b8;\n}\n@media print {\n @page {\n margin: 2cm;\n size: auto;\n }\n html, body {\n height: auto !important;\n overflow: visible !important;\n margin: 0 !important;\n padding: 0 !important;\n background: white !important;\n color: black !important;\n }\n #__next {\n height: auto !important;\n overflow: visible !important;\n display: block !important;\n position: relative !important;\n }\n .no-print {\n display: none !important;\n }\n .print-only {\n display: block !important;\n }\n .break-before-page {\n page-break-before: always;\n break-before: page;\n }\n .break-after-page {\n page-break-after: always;\n break-after: page;\n }\n p {\n text-align: justify;\n widows: 3;\n orphans: 3;\n color: black !important;\n }\n h1, h2, h3, h4 {\n color: black !important;\n page-break-after: avoid;\n }\n a {\n text-decoration: none;\n color: black !important;\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-scale-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-rotate-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-z {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-space-y-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-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-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-alpha {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-drop-shadow-size {\n syntax: \"*\";\n inherits: false;\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@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\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-scale-x: 1;\n --tw-scale-y: 1;\n --tw-scale-z: 1;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-space-y-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-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-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\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 }\n }\n}\r\n"],"names":[],"mappings":"AACA;EAg4FE;IACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAh4FJ;EAEE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAFF;EAwIE;;;;;;;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;;;;;AAvRF;;AAAA;EA4RE;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAyB;;;;;EAGzB;IAAyB;;;;;EAGzB;IAAyB;;;;;EAGzB;IAAyB;;;;;EAGzB;IAAyB;;;;;EAI3B;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;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;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;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;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;;;EAMA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;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;;;;;;;;EASA;;;;EAKA;;;;EAIF;;;;;;EAKA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;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;;;;EAGA;;;;EAGA;;;;EAGA;;;;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;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;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;;;;;EAIA;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;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;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;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;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;E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"}}] + {"offset": {"line": 1, "column": 0}, "map": {"version":3,"sources":["turbopack:///[project]/Documents/00 - projet/plumeia/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 --font-sans: 'Inter', sans-serif;\n --font-serif: 'Merriweather', serif;\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\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-300: oklch(80.8% 0.114 19.571);\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-red-900: oklch(39.6% 0.141 25.723);\n --color-orange-100: oklch(95.4% 0.038 75.164);\n --color-orange-200: oklch(90.1% 0.076 70.697);\n --color-orange-500: oklch(70.5% 0.213 47.604);\n --color-orange-600: oklch(64.6% 0.222 41.116);\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-500: oklch(76.9% 0.188 70.08);\n --color-amber-600: oklch(66.6% 0.179 58.318);\n --color-amber-800: oklch(47.3% 0.137 46.201);\n --color-yellow-100: oklch(97.3% 0.071 103.193);\n --color-yellow-400: oklch(85.2% 0.199 91.936);\n --color-yellow-500: oklch(79.5% 0.184 86.047);\n --color-yellow-600: oklch(68.1% 0.162 75.834);\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-500: oklch(72.3% 0.219 149.579);\n --color-green-700: oklch(52.7% 0.154 150.069);\n --color-green-800: oklch(44.8% 0.119 151.328);\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-300: oklch(80.9% 0.105 251.813);\n --color-blue-400: oklch(70.7% 0.165 254.624);\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-blue-800: oklch(42.4% 0.199 265.638);\n --color-blue-900: oklch(37.9% 0.146 265.522);\n --color-indigo-50: oklch(96.2% 0.018 272.314);\n --color-indigo-100: oklch(93% 0.034 272.788);\n --color-indigo-200: oklch(87% 0.065 274.039);\n --color-indigo-300: oklch(78.5% 0.115 274.713);\n --color-indigo-400: oklch(67.3% 0.182 276.935);\n --color-indigo-500: oklch(58.5% 0.233 277.117);\n --color-indigo-600: oklch(51.1% 0.262 276.966);\n --color-indigo-700: oklch(45.7% 0.24 277.023);\n --color-indigo-800: oklch(39.8% 0.195 277.366);\n --color-indigo-900: oklch(35.9% 0.144 278.697);\n --color-purple-100: oklch(94.6% 0.033 307.174);\n --color-purple-200: oklch(90.2% 0.063 306.703);\n --color-purple-600: oklch(55.8% 0.288 302.321);\n --color-purple-700: oklch(49.6% 0.265 301.924);\n --color-rose-100: oklch(94.1% 0.03 12.58);\n --color-rose-200: oklch(89.2% 0.058 10.001);\n --color-rose-800: oklch(45.5% 0.188 13.697);\n --color-slate-50: oklch(98.4% 0.003 247.858);\n --color-slate-100: oklch(96.8% 0.007 247.896);\n --color-slate-200: oklch(92.9% 0.013 255.508);\n --color-slate-300: oklch(86.9% 0.022 252.894);\n --color-slate-400: oklch(70.4% 0.04 256.788);\n --color-slate-500: oklch(55.4% 0.046 257.417);\n --color-slate-600: oklch(44.6% 0.043 257.281);\n --color-slate-700: oklch(37.2% 0.044 257.287);\n --color-slate-800: oklch(27.9% 0.041 260.031);\n --color-slate-900: oklch(20.8% 0.042 265.755);\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-800: oklch(27.8% 0.033 256.848);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-md: 28rem;\n --container-lg: 32rem;\n --container-2xl: 42rem;\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-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 --text-7xl: 4.5rem;\n --text-7xl--line-height: 1;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --font-weight-black: 900;\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-relaxed: 1.625;\n --radius-md: 0.375rem;\n --radius-lg: 0.5rem;\n --radius-xl: 0.75rem;\n --radius-2xl: 1rem;\n --radius-3xl: 1.5rem;\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 --blur-md: 12px;\n --blur-3xl: 64px;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-sans);\n --default-mono-font-family: var(--font-mono);\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 .pointer-events-auto {\n pointer-events: auto;\n }\n .pointer-events-none {\n pointer-events: none;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .static {\n position: static;\n }\n .sticky {\n position: sticky;\n }\n .-inset-4 {\n inset: calc(var(--spacing) * -4);\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .start {\n inset-inline-start: var(--spacing);\n }\n .-top-2 {\n top: calc(var(--spacing) * -2);\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-8 {\n top: calc(var(--spacing) * 8);\n }\n .top-10 {\n top: calc(var(--spacing) * 10);\n }\n .-right-1 {\n right: calc(var(--spacing) * -1);\n }\n .-right-3 {\n right: calc(var(--spacing) * -3);\n }\n .right-0 {\n right: calc(var(--spacing) * 0);\n }\n .right-1\\.5 {\n right: calc(var(--spacing) * 1.5);\n }\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n .right-4 {\n right: calc(var(--spacing) * 4);\n }\n .right-10 {\n right: calc(var(--spacing) * 10);\n }\n .right-\\[-10px\\] {\n right: -10px;\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-10 {\n bottom: calc(var(--spacing) * 10);\n }\n .bottom-full {\n bottom: 100%;\n }\n .-left-2 {\n left: calc(var(--spacing) * -2);\n }\n .left-0 {\n left: calc(var(--spacing) * 0);\n }\n .left-3 {\n left: calc(var(--spacing) * 3);\n }\n .left-4 {\n left: calc(var(--spacing) * 4);\n }\n .left-10 {\n left: calc(var(--spacing) * 10);\n }\n .left-\\[calc\\(50\\%\\+420px\\)\\] {\n left: calc(50% + 420px);\n }\n .-z-1 {\n z-index: calc(1 * -1);\n }\n .-z-10 {\n z-index: calc(10 * -1);\n }\n .z-0 {\n z-index: 0;\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-span-2 {\n grid-column: span 2 / span 2;\n }\n .col-span-3 {\n grid-column: span 3 / span 3;\n }\n .container {\n width: 100%;\n @media (width >= 40rem) {\n max-width: 40rem;\n }\n @media (width >= 48rem) {\n max-width: 48rem;\n }\n @media (width >= 64rem) {\n max-width: 64rem;\n }\n @media (width >= 80rem) {\n max-width: 80rem;\n }\n @media (width >= 96rem) {\n max-width: 96rem;\n }\n }\n .m-1 {\n margin: calc(var(--spacing) * 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-auto {\n margin-inline: auto;\n }\n .my-1 {\n margin-block: calc(var(--spacing) * 1);\n }\n .my-4 {\n margin-block: calc(var(--spacing) * 4);\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-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-10 {\n margin-top: calc(var(--spacing) * 10);\n }\n .mt-12 {\n margin-top: calc(var(--spacing) * 12);\n }\n .mt-20 {\n margin-top: calc(var(--spacing) * 20);\n }\n .mr-4 {\n margin-right: calc(var(--spacing) * 4);\n }\n .mr-6 {\n margin-right: calc(var(--spacing) * 6);\n }\n .mr-auto {\n margin-right: auto;\n }\n .mb-1 {\n margin-bottom: calc(var(--spacing) * 1);\n }\n .mb-1\\.5 {\n margin-bottom: calc(var(--spacing) * 1.5);\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-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-2 {\n margin-left: calc(var(--spacing) * 2);\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 .block {\n display: block;\n }\n .contents {\n display: contents;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .hidden {\n display: none;\n }\n .inline-block {\n display: inline-block;\n }\n .inline-flex {\n display: inline-flex;\n }\n .table {\n display: table;\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-3 {\n height: calc(var(--spacing) * 3);\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-8 {\n height: calc(var(--spacing) * 8);\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-48 {\n height: calc(var(--spacing) * 48);\n }\n .h-64 {\n height: calc(var(--spacing) * 64);\n }\n .h-96 {\n height: calc(var(--spacing) * 96);\n }\n .h-\\[500px\\] {\n height: 500px;\n }\n .h-\\[4000px\\] {\n height: 4000px;\n }\n .h-full {\n height: 100%;\n }\n .h-px {\n height: 1px;\n }\n .h-screen {\n height: 100vh;\n }\n .max-h-48 {\n max-height: calc(var(--spacing) * 48);\n }\n .max-h-64 {\n max-height: calc(var(--spacing) * 64);\n }\n .max-h-\\[90\\%\\] {\n max-height: 90%;\n }\n .max-h-\\[90vh\\] {\n max-height: 90vh;\n }\n .min-h-0 {\n min-height: calc(var(--spacing) * 0);\n }\n .min-h-\\[120px\\] {\n min-height: 120px;\n }\n .min-h-\\[1000px\\] {\n min-height: 1000px;\n }\n .min-h-full {\n min-height: 100%;\n }\n .min-h-screen {\n min-height: 100vh;\n }\n .w-0 {\n width: calc(var(--spacing) * 0);\n }\n .w-1\\.5 {\n width: calc(var(--spacing) * 1.5);\n }\n .w-1\\/2 {\n width: calc(1 / 2 * 100%);\n }\n .w-1\\/3 {\n width: calc(1 / 3 * 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-8 {\n width: calc(var(--spacing) * 8);\n }\n .w-12 {\n width: calc(var(--spacing) * 12);\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-32 {\n width: calc(var(--spacing) * 32);\n }\n .w-48 {\n width: calc(var(--spacing) * 48);\n }\n .w-56 {\n width: calc(var(--spacing) * 56);\n }\n .w-64 {\n width: calc(var(--spacing) * 64);\n }\n .w-72 {\n width: calc(var(--spacing) * 72);\n }\n .w-80 {\n width: calc(var(--spacing) * 80);\n }\n .w-96 {\n width: calc(var(--spacing) * 96);\n }\n .w-\\[600px\\] {\n width: 600px;\n }\n .w-\\[800px\\] {\n width: 800px;\n }\n .w-\\[4000px\\] {\n width: 4000px;\n }\n .w-full {\n width: 100%;\n }\n .w-max {\n width: max-content;\n }\n .w-px {\n width: 1px;\n }\n .max-w-2xl {\n max-width: var(--container-2xl);\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-\\[85\\%\\] {\n max-width: 85%;\n }\n .max-w-lg {\n max-width: var(--container-lg);\n }\n .max-w-md {\n max-width: var(--container-md);\n }\n .flex-1 {\n flex: 1;\n }\n .flex-shrink-0 {\n flex-shrink: 0;\n }\n .shrink-0 {\n flex-shrink: 0;\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-1 {\n --tw-translate-x: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-y-1 {\n --tw-translate-y: calc(var(--spacing) * -1);\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-1 {\n --tw-translate-y: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .scale-105 {\n --tw-scale-x: 105%;\n --tw-scale-y: 105%;\n --tw-scale-z: 105%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .scale-\\[1\\.01\\] {\n scale: 1.01;\n }\n .transform {\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\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-grab {\n cursor: grab;\n }\n .cursor-not-allowed {\n cursor: not-allowed;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .cursor-text {\n cursor: text;\n }\n .resize-none {\n resize: none;\n }\n .list-disc {\n list-style-type: disc;\n }\n .appearance-none {\n appearance: none;\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-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-wrap {\n flex-wrap: wrap;\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 .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-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-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-6 {\n gap: calc(var(--spacing) * 6);\n }\n .gap-8 {\n gap: calc(var(--spacing) * 8);\n }\n .gap-12 {\n gap: calc(var(--spacing) * 12);\n }\n .space-y-1 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 1) * 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-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-6 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 6) * 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 .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-slate-50 {\n :where(& > :not(:last-child)) {\n border-color: var(--color-slate-50);\n }\n }\n .divide-slate-100 {\n :where(& > :not(:last-child)) {\n border-color: var(--color-slate-100);\n }\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-y-auto {\n overflow-y: auto;\n }\n .rounded {\n border-radius: 0.25rem;\n }\n .rounded-2xl {\n border-radius: var(--radius-2xl);\n }\n .rounded-3xl {\n border-radius: var(--radius-3xl);\n }\n .rounded-\\[2\\.5rem\\] {\n border-radius: 2.5rem;\n }\n .rounded-\\[2rem\\] {\n border-radius: 2rem;\n }\n .rounded-\\[3rem\\] {\n border-radius: 3rem;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius-lg);\n }\n .rounded-md {\n border-radius: var(--radius-md);\n }\n .rounded-xl {\n border-radius: var(--radius-xl);\n }\n .rounded-t-lg {\n border-top-left-radius: var(--radius-lg);\n border-top-right-radius: var(--radius-lg);\n }\n .rounded-t-xl {\n border-top-left-radius: var(--radius-xl);\n border-top-right-radius: var(--radius-xl);\n }\n .rounded-br-none {\n border-bottom-right-radius: 0;\n }\n .rounded-bl-none {\n border-bottom-left-radius: 0;\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-2 {\n border-style: var(--tw-border-style);\n border-width: 2px;\n }\n .border-4 {\n border-style: var(--tw-border-style);\n border-width: 4px;\n }\n .border-y {\n border-block-style: var(--tw-border-style);\n border-block-width: 1px;\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-r-2 {\n border-right-style: var(--tw-border-style);\n border-right-width: 2px;\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-l-2 {\n border-left-style: var(--tw-border-style);\n border-left-width: 2px;\n }\n .border-l-4 {\n border-left-style: var(--tw-border-style);\n border-left-width: 4px;\n }\n .border-dashed {\n --tw-border-style: dashed;\n border-style: dashed;\n }\n .border-amber-100 {\n border-color: var(--color-amber-100);\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-blue-200 {\n border-color: var(--color-blue-200);\n }\n .border-blue-400 {\n border-color: var(--color-blue-400);\n }\n .border-blue-500 {\n border-color: var(--color-blue-500);\n }\n .border-blue-600 {\n border-color: var(--color-blue-600);\n }\n .border-gray-200 {\n border-color: var(--color-gray-200);\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-indigo-50 {\n border-color: var(--color-indigo-50);\n }\n .border-indigo-100 {\n border-color: var(--color-indigo-100);\n }\n .border-indigo-200 {\n border-color: var(--color-indigo-200);\n }\n .border-indigo-300 {\n border-color: var(--color-indigo-300);\n }\n .border-indigo-400 {\n border-color: var(--color-indigo-400);\n }\n .border-indigo-600 {\n border-color: var(--color-indigo-600);\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-red-300 {\n border-color: var(--color-red-300);\n }\n .border-rose-200 {\n border-color: var(--color-rose-200);\n }\n .border-slate-50 {\n border-color: var(--color-slate-50);\n }\n .border-slate-100 {\n border-color: var(--color-slate-100);\n }\n .border-slate-200 {\n border-color: var(--color-slate-200);\n }\n .border-slate-300 {\n border-color: var(--color-slate-300);\n }\n .border-slate-700 {\n border-color: var(--color-slate-700);\n }\n .border-slate-800 {\n border-color: var(--color-slate-800);\n }\n .border-transparent {\n border-color: transparent;\n }\n .border-white {\n border-color: var(--color-white);\n }\n .border-yellow-100 {\n border-color: var(--color-yellow-100);\n }\n .bg-\\[\\#eef2ff\\] {\n background-color: #eef2ff;\n }\n .bg-\\[\\#f4ecd8\\] {\n background-color: #f4ecd8;\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-black\\/5 {\n background-color: color-mix(in srgb, #000 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 5%, 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-blue-600 {\n background-color: var(--color-blue-600);\n }\n .bg-blue-700 {\n background-color: var(--color-blue-700);\n }\n .bg-blue-900 {\n background-color: var(--color-blue-900);\n }\n .bg-gray-100 {\n background-color: var(--color-gray-100);\n }\n .bg-green-50 {\n background-color: var(--color-green-50);\n }\n .bg-green-100 {\n background-color: var(--color-green-100);\n }\n .bg-green-500 {\n background-color: var(--color-green-500);\n }\n .bg-indigo-50 {\n background-color: var(--color-indigo-50);\n }\n .bg-indigo-50\\/30 {\n background-color: color-mix(in srgb, oklch(96.2% 0.018 272.314) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-50) 30%, transparent);\n }\n }\n .bg-indigo-100 {\n background-color: var(--color-indigo-100);\n }\n .bg-indigo-500 {\n background-color: var(--color-indigo-500);\n }\n .bg-indigo-500\\/20 {\n background-color: color-mix(in srgb, oklch(58.5% 0.233 277.117) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-500) 20%, transparent);\n }\n }\n .bg-indigo-600 {\n background-color: var(--color-indigo-600);\n }\n .bg-indigo-900 {\n background-color: var(--color-indigo-900);\n }\n .bg-indigo-900\\/50 {\n background-color: color-mix(in srgb, oklch(35.9% 0.144 278.697) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-900) 50%, transparent);\n }\n }\n .bg-orange-100 {\n background-color: var(--color-orange-100);\n }\n .bg-purple-100 {\n background-color: var(--color-purple-100);\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-rose-100 {\n background-color: var(--color-rose-100);\n }\n .bg-slate-50 {\n background-color: var(--color-slate-50);\n }\n .bg-slate-100 {\n background-color: var(--color-slate-100);\n }\n .bg-slate-200 {\n background-color: var(--color-slate-200);\n }\n .bg-slate-300 {\n background-color: var(--color-slate-300);\n }\n .bg-slate-700 {\n background-color: var(--color-slate-700);\n }\n .bg-slate-800 {\n background-color: var(--color-slate-800);\n }\n .bg-slate-900 {\n background-color: var(--color-slate-900);\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\\/50 {\n background-color: color-mix(in srgb, #fff 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 50%, transparent);\n }\n }\n .bg-white\\/70 {\n background-color: color-mix(in srgb, #fff 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 70%, transparent);\n }\n }\n .bg-white\\/80 {\n background-color: color-mix(in srgb, #fff 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 80%, transparent);\n }\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 .from-blue-500\\/20 {\n --tw-gradient-from: color-mix(in srgb, oklch(62.3% 0.214 259.815) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-blue-500) 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 .from-blue-600 {\n --tw-gradient-from: var(--color-blue-600);\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-orange-200 {\n --tw-gradient-from: var(--color-orange-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-red-200 {\n --tw-gradient-from: var(--color-red-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-slate-300 {\n --tw-gradient-from: var(--color-slate-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 .via-indigo-200 {\n --tw-gradient-via: var(--color-indigo-200);\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-purple-200 {\n --tw-gradient-via: var(--color-purple-200);\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-yellow-100 {\n --tw-gradient-via: var(--color-yellow-100);\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-blue-200 {\n --tw-gradient-to: var(--color-blue-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-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-indigo-500 {\n --tw-gradient-to: var(--color-indigo-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 .to-indigo-500\\/20 {\n --tw-gradient-to: color-mix(in srgb, oklch(58.5% 0.233 277.117) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-indigo-500) 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-slate-300 {\n --tw-gradient-to: var(--color-slate-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 .bg-clip-text {\n background-clip: text;\n }\n .object-cover {\n object-fit: cover;\n }\n .p-0\\.5 {\n padding: calc(var(--spacing) * 0.5);\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-2\\.5 {\n padding: calc(var(--spacing) * 2.5);\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-12 {\n padding: calc(var(--spacing) * 12);\n }\n .px-0\\.5 {\n padding-inline: calc(var(--spacing) * 0.5);\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-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 .px-8 {\n padding-inline: calc(var(--spacing) * 8);\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-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-5 {\n padding-block: calc(var(--spacing) * 5);\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-20 {\n padding-block: calc(var(--spacing) * 20);\n }\n .py-24 {\n padding-block: calc(var(--spacing) * 24);\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-4 {\n padding-top: calc(var(--spacing) * 4);\n }\n .pt-6 {\n padding-top: calc(var(--spacing) * 6);\n }\n .pt-8 {\n padding-top: calc(var(--spacing) * 8);\n }\n .pt-32 {\n padding-top: calc(var(--spacing) * 32);\n }\n .pr-2 {\n padding-right: calc(var(--spacing) * 2);\n }\n .pr-4 {\n padding-right: calc(var(--spacing) * 4);\n }\n .pr-12 {\n padding-right: calc(var(--spacing) * 12);\n }\n .pb-1 {\n padding-bottom: calc(var(--spacing) * 1);\n }\n .pb-2 {\n padding-bottom: calc(var(--spacing) * 2);\n }\n .pb-4 {\n padding-bottom: calc(var(--spacing) * 4);\n }\n .pb-8 {\n padding-bottom: calc(var(--spacing) * 8);\n }\n .pb-20 {\n padding-bottom: calc(var(--spacing) * 20);\n }\n .pl-2 {\n padding-left: calc(var(--spacing) * 2);\n }\n .pl-4 {\n padding-left: calc(var(--spacing) * 4);\n }\n .pl-5 {\n padding-left: calc(var(--spacing) * 5);\n }\n .pl-9 {\n padding-left: calc(var(--spacing) * 9);\n }\n .pl-12 {\n padding-left: calc(var(--spacing) * 12);\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 .font-mono {\n font-family: var(--font-mono);\n }\n .font-sans {\n font-family: var(--font-sans);\n }\n .font-serif {\n font-family: var(--font-serif);\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-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-\\[9px\\] {\n font-size: 9px;\n }\n .text-\\[10px\\] {\n font-size: 10px;\n }\n .leading-\\[1\\.1\\] {\n --tw-leading: 1.1;\n line-height: 1.1;\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .leading-tight {\n --tw-leading: var(--leading-tight);\n line-height: var(--leading-tight);\n }\n .font-black {\n --tw-font-weight: var(--font-weight-black);\n font-weight: var(--font-weight-black);\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 .whitespace-pre-wrap {\n white-space: pre-wrap;\n }\n .text-amber-500 {\n color: var(--color-amber-500);\n }\n .text-amber-600 {\n color: var(--color-amber-600);\n }\n .text-amber-800 {\n color: var(--color-amber-800);\n }\n .text-blue-400 {\n color: var(--color-blue-400);\n }\n .text-blue-500 {\n color: var(--color-blue-500);\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-blue-800 {\n color: var(--color-blue-800);\n }\n .text-blue-900 {\n color: var(--color-blue-900);\n }\n .text-gray-800 {\n color: var(--color-gray-800);\n }\n .text-green-500 {\n color: var(--color-green-500);\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-indigo-300 {\n color: var(--color-indigo-300);\n }\n .text-indigo-500 {\n color: var(--color-indigo-500);\n }\n .text-indigo-600 {\n color: var(--color-indigo-600);\n }\n .text-indigo-700 {\n color: var(--color-indigo-700);\n }\n .text-indigo-800 {\n color: var(--color-indigo-800);\n }\n .text-orange-500 {\n color: var(--color-orange-500);\n }\n .text-orange-600 {\n color: var(--color-orange-600);\n }\n .text-purple-600 {\n color: var(--color-purple-600);\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-red-900 {\n color: var(--color-red-900);\n }\n .text-rose-800 {\n color: var(--color-rose-800);\n }\n .text-slate-300 {\n color: var(--color-slate-300);\n }\n .text-slate-400 {\n color: var(--color-slate-400);\n }\n .text-slate-500 {\n color: var(--color-slate-500);\n }\n .text-slate-600 {\n color: var(--color-slate-600);\n }\n .text-slate-700 {\n color: var(--color-slate-700);\n }\n .text-slate-800 {\n color: var(--color-slate-800);\n }\n .text-slate-900 {\n color: var(--color-slate-900);\n }\n .text-transparent {\n color: transparent;\n }\n .text-white {\n color: var(--color-white);\n }\n .text-yellow-400 {\n color: var(--color-yellow-400);\n }\n .text-yellow-500 {\n color: var(--color-yellow-500);\n }\n .text-yellow-600 {\n color: var(--color-yellow-600);\n }\n .uppercase {\n text-transform: uppercase;\n }\n .italic {\n font-style: italic;\n }\n .underline {\n text-decoration-line: underline;\n }\n .decoration-blue-500 {\n text-decoration-color: var(--color-blue-500);\n }\n .decoration-indigo-300 {\n text-decoration-color: var(--color-indigo-300);\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 .accent-blue-600 {\n accent-color: var(--color-blue-600);\n }\n .accent-indigo-600 {\n accent-color: var(--color-indigo-600);\n }\n .opacity-0 {\n opacity: 0%;\n }\n .opacity-20 {\n opacity: 20%;\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-2xl {\n --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));\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_10px_rgba\\(59\\,130\\,246\\,0\\.5\\)\\] {\n --tw-shadow: 0 0 10px var(--tw-shadow-color, rgba(59,130,246,0.5));\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_10px_rgba\\(99\\,102\\,241\\,0\\.5\\)\\] {\n --tw-shadow: 0 0 10px var(--tw-shadow-color, rgba(99,102,241,0.5));\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-\\[0px_2px_0px_0px_rgba\\(203\\,213\\,225\\,1\\)\\] {\n --tw-shadow: 0px 2px 0px 0px var(--tw-shadow-color, rgba(203,213,225,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-inner {\n --tw-shadow: inset 0 2px 4px 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 .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-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 .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 .shadow-blue-200 {\n --tw-shadow-color: oklch(88.2% 0.059 254.128);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow-color: color-mix(in oklab, var(--color-blue-200) var(--tw-shadow-alpha), transparent);\n }\n }\n .shadow-indigo-100 {\n --tw-shadow-color: oklch(93% 0.034 272.788);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow-color: color-mix(in oklab, var(--color-indigo-100) var(--tw-shadow-alpha), transparent);\n }\n }\n .ring-amber-200 {\n --tw-ring-color: var(--color-amber-200);\n }\n .ring-blue-200 {\n --tw-ring-color: var(--color-blue-200);\n }\n .ring-indigo-200 {\n --tw-ring-color: var(--color-indigo-200);\n }\n .ring-indigo-400 {\n --tw-ring-color: var(--color-indigo-400);\n }\n .ring-indigo-500 {\n --tw-ring-color: var(--color-indigo-500);\n }\n .ring-offset-1 {\n --tw-ring-offset-width: 1px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n .blur-3xl {\n --tw-blur: blur(var(--blur-3xl));\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .blur-\\[1px\\] {\n --tw-blur: blur(1px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .blur-\\[60px\\] {\n --tw-blur: blur(60px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .blur-\\[120px\\] {\n --tw-blur: blur(120px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .blur-\\[150px\\] {\n --tw-blur: blur(150px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .grayscale {\n --tw-grayscale: grayscale(100%);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .sepia {\n --tw-sepia: sepia(100%);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .filter {\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .backdrop-blur-md {\n --tw-backdrop-blur: blur(var(--blur-md));\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 .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-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 .duration-100 {\n --tw-duration: 100ms;\n transition-duration: 100ms;\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 .duration-500 {\n --tw-duration: 500ms;\n transition-duration: 500ms;\n }\n .duration-1000 {\n --tw-duration: 1000ms;\n transition-duration: 1000ms;\n }\n .ease-in-out {\n --tw-ease: var(--ease-in-out);\n transition-timing-function: var(--ease-in-out);\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .group-hover\\:translate-x-1 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n --tw-translate-x: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n }\n .group-hover\\:bg-blue-600 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n background-color: var(--color-blue-600);\n }\n }\n }\n .group-hover\\:text-blue-600 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n color: var(--color-blue-600);\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 .selection\\:bg-blue-200 {\n & *::selection {\n background-color: var(--color-blue-200);\n }\n &::selection {\n background-color: var(--color-blue-200);\n }\n }\n .hover\\:scale-105 {\n &:hover {\n @media (hover: hover) {\n --tw-scale-x: 105%;\n --tw-scale-y: 105%;\n --tw-scale-z: 105%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .hover\\:scale-110 {\n &:hover {\n @media (hover: hover) {\n --tw-scale-x: 110%;\n --tw-scale-y: 110%;\n --tw-scale-z: 110%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .hover\\:scale-\\[1\\.02\\] {\n &:hover {\n @media (hover: hover) {\n scale: 1.02;\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-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-blue-300);\n }\n }\n }\n .hover\\:border-indigo-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-indigo-200);\n }\n }\n }\n .hover\\:border-indigo-400 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-indigo-400);\n }\n }\n }\n .hover\\:border-indigo-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-indigo-500);\n }\n }\n }\n .hover\\:border-slate-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-slate-200);\n }\n }\n }\n .hover\\:border-slate-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-slate-300);\n }\n }\n }\n .hover\\:bg-amber-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-amber-50);\n }\n }\n }\n .hover\\:bg-amber-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-amber-100);\n }\n }\n }\n .hover\\:bg-black\\/10 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #000 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 10%, transparent);\n }\n }\n }\n }\n .hover\\:bg-blue-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-blue-50);\n }\n }\n }\n .hover\\:bg-blue-600 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-blue-600);\n }\n }\n }\n .hover\\:bg-blue-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-blue-700);\n }\n }\n }\n .hover\\:bg-blue-800 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-blue-800);\n }\n }\n }\n .hover\\:bg-indigo-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-indigo-50);\n }\n }\n }\n .hover\\:bg-indigo-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-indigo-100);\n }\n }\n }\n .hover\\:bg-indigo-200 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-indigo-200);\n }\n }\n }\n .hover\\:bg-indigo-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-indigo-700);\n }\n }\n }\n .hover\\:bg-red-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-red-50);\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-red-900\\/20 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(39.6% 0.141 25.723) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-red-900) 20%, transparent);\n }\n }\n }\n }\n .hover\\:bg-slate-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-50);\n }\n }\n }\n .hover\\:bg-slate-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-100);\n }\n }\n }\n .hover\\:bg-slate-200 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-200);\n }\n }\n }\n .hover\\:bg-slate-300 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-300);\n }\n }\n }\n .hover\\:bg-slate-800 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-800);\n }\n }\n }\n .hover\\:bg-slate-900 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-900);\n }\n }\n }\n .hover\\:bg-white {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-white);\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\\:text-blue-400 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-400);\n }\n }\n }\n .hover\\:text-blue-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-500);\n }\n }\n }\n .hover\\:text-blue-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-600);\n }\n }\n }\n .hover\\:text-blue-800 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-800);\n }\n }\n }\n .hover\\:text-indigo-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-600);\n }\n }\n }\n .hover\\:text-indigo-700 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-700);\n }\n }\n }\n .hover\\:text-indigo-800 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-800);\n }\n }\n }\n .hover\\:text-red-400 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-red-400);\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-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-red-600);\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-slate-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-500);\n }\n }\n }\n .hover\\:text-slate-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-600);\n }\n }\n }\n .hover\\:text-slate-800 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-800);\n }\n }\n }\n .hover\\:text-slate-900 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-900);\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\\:decoration-indigo-600 {\n &:hover {\n @media (hover: hover) {\n text-decoration-color: var(--color-indigo-600);\n }\n }\n }\n .hover\\:shadow-2xl {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));\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-blue-200 {\n &:hover {\n @media (hover: hover) {\n --tw-shadow-color: oklch(88.2% 0.059 254.128);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow-color: color-mix(in oklab, var(--color-blue-200) var(--tw-shadow-alpha), transparent);\n }\n }\n }\n }\n .focus\\:border-b {\n &:focus {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n }\n .focus\\:border-blue-500 {\n &:focus {\n border-color: var(--color-blue-500);\n }\n }\n .focus\\:border-indigo-400 {\n &:focus {\n border-color: var(--color-indigo-400);\n }\n }\n .focus\\:border-indigo-500 {\n &:focus {\n border-color: var(--color-indigo-500);\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-4 {\n &:focus {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(4px + 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-blue-300 {\n &:focus {\n --tw-ring-color: var(--color-blue-300);\n }\n }\n .focus\\:ring-blue-500 {\n &:focus {\n --tw-ring-color: var(--color-blue-500);\n }\n }\n .focus\\:ring-indigo-500 {\n &:focus {\n --tw-ring-color: var(--color-indigo-500);\n }\n }\n .focus\\:outline-none {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n }\n .active\\:cursor-grabbing {\n &:active {\n cursor: grabbing;\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 .sm\\:w-auto {\n @media (width >= 40rem) {\n width: auto;\n }\n }\n .sm\\:flex-row {\n @media (width >= 40rem) {\n flex-direction: row;\n }\n }\n .md\\:flex {\n @media (width >= 48rem) {\n display: flex;\n }\n }\n .md\\:w-1\\/3 {\n @media (width >= 48rem) {\n width: calc(1 / 3 * 100%);\n }\n }\n .md\\:w-64 {\n @media (width >= 48rem) {\n width: calc(var(--spacing) * 64);\n }\n }\n .md\\:w-auto {\n @media (width >= 48rem) {\n width: auto;\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\\:flex-row {\n @media (width >= 48rem) {\n flex-direction: row;\n }\n }\n .md\\:items-center {\n @media (width >= 48rem) {\n align-items: center;\n }\n }\n .md\\:p-12 {\n @media (width >= 48rem) {\n padding: calc(var(--spacing) * 12);\n }\n }\n .md\\:text-7xl {\n @media (width >= 48rem) {\n font-size: var(--text-7xl);\n line-height: var(--tw-leading, var(--text-7xl--line-height));\n }\n }\n .lg\\:col-span-2 {\n @media (width >= 64rem) {\n grid-column: span 2 / span 2;\n }\n }\n .lg\\:flex {\n @media (width >= 64rem) {\n display: flex;\n }\n }\n .lg\\:w-1\\/2 {\n @media (width >= 64rem) {\n width: calc(1 / 2 * 100%);\n }\n }\n .lg\\:w-96 {\n @media (width >= 64rem) {\n width: calc(var(--spacing) * 96);\n }\n }\n .lg\\:grid-cols-3 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n}\n.editor-content:empty:before {\n content: attr(placeholder);\n color: #9ca3af;\n pointer-events: none;\n}\n::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n::-webkit-scrollbar-track {\n background: transparent;\n}\n::-webkit-scrollbar-thumb {\n background: #cbd5e1;\n border-radius: 3px;\n}\n::-webkit-scrollbar-thumb:hover {\n background: #94a3b8;\n}\n@media print {\n @page {\n margin: 2cm;\n size: auto;\n }\n html, body {\n height: auto !important;\n overflow: visible !important;\n margin: 0 !important;\n padding: 0 !important;\n background: white !important;\n color: black !important;\n }\n #__next {\n height: auto !important;\n overflow: visible !important;\n display: block !important;\n position: relative !important;\n }\n .no-print {\n display: none !important;\n }\n .print-only {\n display: block !important;\n }\n .break-before-page {\n page-break-before: always;\n break-before: page;\n }\n .break-after-page {\n page-break-after: always;\n break-after: page;\n }\n p {\n text-align: justify;\n widows: 3;\n orphans: 3;\n color: black !important;\n }\n h1, h2, h3, h4 {\n color: black !important;\n page-break-after: avoid;\n }\n a {\n text-decoration: none;\n color: black !important;\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-scale-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-rotate-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-z {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-space-y-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-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-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-alpha {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-drop-shadow-size {\n syntax: \"*\";\n inherits: false;\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@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\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-scale-x: 1;\n --tw-scale-y: 1;\n --tw-scale-z: 1;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-space-y-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-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-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\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 }\n }\n}\r\n"],"names":[],"mappings":"AACA;EAy4FE;IACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAz4FJ;EAEE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAFF;EAwIE;;;;;;;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;;;;;AAvRF;;AAAA;EA4RE;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAyB;;;;;EAGzB;IAAyB;;;;;EAGzB;IAAyB;;;;;EAGzB;IAAyB;;;;;EAGzB;IAAyB;;;;;EAI3B;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;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;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;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;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;;;EAMA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;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;;;;;;;;EASA;;;;EAKA;;;;EAIF;;;;;;EAKA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;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;;;;EAGA;;;;EAGA;;;;EAGA;;;;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;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;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;;;;;EAIA;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;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;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;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;;;;;EAIA;;;;E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"}}] } \ No newline at end of file diff --git a/.next/dev/static/chunks/[root-of-the-server]__c391f813._.css b/.next/dev/static/chunks/[root-of-the-server]__c391f813._.css index 030d7a2..e8e5385 100644 --- a/.next/dev/static/chunks/[root-of-the-server]__c391f813._.css +++ b/.next/dev/static/chunks/[root-of-the-server]__c391f813._.css @@ -849,6 +849,10 @@ position: relative; } + .static { + position: static; + } + .sticky { position: sticky; } @@ -1013,6 +1017,10 @@ grid-column: span 2 / span 2; } + .col-span-3 { + grid-column: span 3 / span 3; + } + .container { width: 100%; } @@ -2410,6 +2418,10 @@ padding-block: calc(var(--spacing) * 8); } + .py-10 { + padding-block: calc(var(--spacing) * 10); + } + .py-12 { padding-block: calc(var(--spacing) * 12); } diff --git a/.next/dev/static/chunks/[root-of-the-server]__c391f813._.css.map b/.next/dev/static/chunks/[root-of-the-server]__c391f813._.css.map index 1d0f808..52dea87 100644 --- a/.next/dev/static/chunks/[root-of-the-server]__c391f813._.css.map +++ b/.next/dev/static/chunks/[root-of-the-server]__c391f813._.css.map @@ -4,5 +4,5 @@ "sections": [ {"offset": {"line": 1, "column": 0}, "map": {"version":3,"sources":["turbopack:///[next]/internal/font/google/inter_b2991b2.module.css"],"sourcesContent":["/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\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/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7W0Q5n-wU.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\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/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7W0Q5n-wU.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/* greek-ext */\n@font-face {\n font-family: 'Inter';\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/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7W0Q5n-wU.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\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/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7W0Q5n-wU.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\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/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7W0Q5n-wU.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\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/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7W0Q5n-wU.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: 'Inter';\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/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7W0Q5nw.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: 'Inter Fallback';\n src: local(\"Arial\");\n ascent-override: 90.44%;\ndescent-override: 22.52%;\nline-gap-override: 0.00%;\nsize-adjust: 107.12%;\n\n}\n.className {\n font-family: 'Inter', 'Inter Fallback';\n font-style: normal;\n\n}\n.variable {\n --font-sans: 'Inter', 'Inter Fallback';\n}\n"],"names":[],"mappings":"AACA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AAQA;;;;;;;;;AASA;;;;;AAKA","ignoreList":[0]}}, {"offset": {"line": 83, "column": 0}, "map": {"version":3,"sources":["turbopack:///[next]/internal/font/google/merriweather_6ee6941f.module.css"],"sourcesContent":["/* cyrillic-ext */\n@font-face {\n font-family: 'Merriweather';\n font-style: normal;\n font-weight: 300;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqnJ-mXq1Gi3iE.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Merriweather';\n font-style: normal;\n font-weight: 300;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSequJ-mXq1Gi3iE.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/* vietnamese */\n@font-face {\n font-family: 'Merriweather';\n font-style: normal;\n font-weight: 300;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqlJ-mXq1Gi3iE.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Merriweather';\n font-style: normal;\n font-weight: 300;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqkJ-mXq1Gi3iE.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: 'Merriweather';\n font-style: normal;\n font-weight: 300;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqqJ-mXq1Gi.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/* cyrillic-ext */\n@font-face {\n font-family: 'Merriweather';\n font-style: normal;\n font-weight: 400;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqnJ-mXq1Gi3iE.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Merriweather';\n font-style: normal;\n font-weight: 400;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSequJ-mXq1Gi3iE.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/* vietnamese */\n@font-face {\n font-family: 'Merriweather';\n font-style: normal;\n font-weight: 400;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqlJ-mXq1Gi3iE.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Merriweather';\n font-style: normal;\n font-weight: 400;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqkJ-mXq1Gi3iE.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: 'Merriweather';\n font-style: normal;\n font-weight: 400;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqqJ-mXq1Gi.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/* cyrillic-ext */\n@font-face {\n font-family: 'Merriweather';\n font-style: normal;\n font-weight: 700;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqnJ-mXq1Gi3iE.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Merriweather';\n font-style: normal;\n font-weight: 700;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSequJ-mXq1Gi3iE.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/* vietnamese */\n@font-face {\n font-family: 'Merriweather';\n font-style: normal;\n font-weight: 700;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqlJ-mXq1Gi3iE.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Merriweather';\n font-style: normal;\n font-weight: 700;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqkJ-mXq1Gi3iE.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: 'Merriweather';\n font-style: normal;\n font-weight: 700;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqqJ-mXq1Gi.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/* cyrillic-ext */\n@font-face {\n font-family: 'Merriweather';\n font-style: normal;\n font-weight: 900;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqnJ-mXq1Gi3iE.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Merriweather';\n font-style: normal;\n font-weight: 900;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSequJ-mXq1Gi3iE.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/* vietnamese */\n@font-face {\n font-family: 'Merriweather';\n font-style: normal;\n font-weight: 900;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqlJ-mXq1Gi3iE.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Merriweather';\n font-style: normal;\n font-weight: 900;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqkJ-mXq1Gi3iE.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: 'Merriweather';\n font-style: normal;\n font-weight: 900;\n font-stretch: 100%;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/merriweather/v33/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqqJ-mXq1Gi.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: 'Merriweather Fallback';\n src: local(\"Times New Roman\");\n ascent-override: 80.59%;\ndescent-override: 22.36%;\nline-gap-override: 0.00%;\nsize-adjust: 122.09%;\n\n}\n.className {\n font-family: 'Merriweather', 'Merriweather Fallback';\n font-style: normal;\n\n}\n.variable {\n --font-serif: 'Merriweather', 'Merriweather Fallback';\n}\n"],"names":[],"mappings":"AACA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AASA;;;;;;;;;AASA;;;;;AAKA","ignoreList":[0]}}, - {"offset": {"line": 302, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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 --font-sans: 'Inter', sans-serif;\n --font-serif: 'Merriweather', serif;\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\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-300: oklch(80.8% 0.114 19.571);\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-red-900: oklch(39.6% 0.141 25.723);\n --color-orange-100: oklch(95.4% 0.038 75.164);\n --color-orange-200: oklch(90.1% 0.076 70.697);\n --color-orange-500: oklch(70.5% 0.213 47.604);\n --color-orange-600: oklch(64.6% 0.222 41.116);\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-500: oklch(76.9% 0.188 70.08);\n --color-amber-600: oklch(66.6% 0.179 58.318);\n --color-amber-800: oklch(47.3% 0.137 46.201);\n --color-yellow-100: oklch(97.3% 0.071 103.193);\n --color-yellow-400: oklch(85.2% 0.199 91.936);\n --color-yellow-500: oklch(79.5% 0.184 86.047);\n --color-yellow-600: oklch(68.1% 0.162 75.834);\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-500: oklch(72.3% 0.219 149.579);\n --color-green-700: oklch(52.7% 0.154 150.069);\n --color-green-800: oklch(44.8% 0.119 151.328);\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-300: oklch(80.9% 0.105 251.813);\n --color-blue-400: oklch(70.7% 0.165 254.624);\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-blue-800: oklch(42.4% 0.199 265.638);\n --color-blue-900: oklch(37.9% 0.146 265.522);\n --color-indigo-50: oklch(96.2% 0.018 272.314);\n --color-indigo-100: oklch(93% 0.034 272.788);\n --color-indigo-200: oklch(87% 0.065 274.039);\n --color-indigo-300: oklch(78.5% 0.115 274.713);\n --color-indigo-400: oklch(67.3% 0.182 276.935);\n --color-indigo-500: oklch(58.5% 0.233 277.117);\n --color-indigo-600: oklch(51.1% 0.262 276.966);\n --color-indigo-700: oklch(45.7% 0.24 277.023);\n --color-indigo-800: oklch(39.8% 0.195 277.366);\n --color-indigo-900: oklch(35.9% 0.144 278.697);\n --color-purple-100: oklch(94.6% 0.033 307.174);\n --color-purple-200: oklch(90.2% 0.063 306.703);\n --color-purple-600: oklch(55.8% 0.288 302.321);\n --color-purple-700: oklch(49.6% 0.265 301.924);\n --color-rose-100: oklch(94.1% 0.03 12.58);\n --color-rose-200: oklch(89.2% 0.058 10.001);\n --color-rose-800: oklch(45.5% 0.188 13.697);\n --color-slate-50: oklch(98.4% 0.003 247.858);\n --color-slate-100: oklch(96.8% 0.007 247.896);\n --color-slate-200: oklch(92.9% 0.013 255.508);\n --color-slate-300: oklch(86.9% 0.022 252.894);\n --color-slate-400: oklch(70.4% 0.04 256.788);\n --color-slate-500: oklch(55.4% 0.046 257.417);\n --color-slate-600: oklch(44.6% 0.043 257.281);\n --color-slate-700: oklch(37.2% 0.044 257.287);\n --color-slate-800: oklch(27.9% 0.041 260.031);\n --color-slate-900: oklch(20.8% 0.042 265.755);\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-800: oklch(27.8% 0.033 256.848);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-md: 28rem;\n --container-lg: 32rem;\n --container-2xl: 42rem;\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-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 --text-7xl: 4.5rem;\n --text-7xl--line-height: 1;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --font-weight-black: 900;\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-relaxed: 1.625;\n --radius-md: 0.375rem;\n --radius-lg: 0.5rem;\n --radius-xl: 0.75rem;\n --radius-2xl: 1rem;\n --radius-3xl: 1.5rem;\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 --blur-md: 12px;\n --blur-3xl: 64px;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-sans);\n --default-mono-font-family: var(--font-mono);\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 .pointer-events-auto {\n pointer-events: auto;\n }\n .pointer-events-none {\n pointer-events: none;\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-4 {\n inset: calc(var(--spacing) * -4);\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .start {\n inset-inline-start: var(--spacing);\n }\n .-top-2 {\n top: calc(var(--spacing) * -2);\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-8 {\n top: calc(var(--spacing) * 8);\n }\n .top-10 {\n top: calc(var(--spacing) * 10);\n }\n .-right-1 {\n right: calc(var(--spacing) * -1);\n }\n .-right-3 {\n right: calc(var(--spacing) * -3);\n }\n .right-0 {\n right: calc(var(--spacing) * 0);\n }\n .right-1\\.5 {\n right: calc(var(--spacing) * 1.5);\n }\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n .right-4 {\n right: calc(var(--spacing) * 4);\n }\n .right-10 {\n right: calc(var(--spacing) * 10);\n }\n .right-\\[-10px\\] {\n right: -10px;\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-10 {\n bottom: calc(var(--spacing) * 10);\n }\n .bottom-full {\n bottom: 100%;\n }\n .-left-2 {\n left: calc(var(--spacing) * -2);\n }\n .left-0 {\n left: calc(var(--spacing) * 0);\n }\n .left-3 {\n left: calc(var(--spacing) * 3);\n }\n .left-4 {\n left: calc(var(--spacing) * 4);\n }\n .left-10 {\n left: calc(var(--spacing) * 10);\n }\n .left-\\[calc\\(50\\%\\+420px\\)\\] {\n left: calc(50% + 420px);\n }\n .-z-1 {\n z-index: calc(1 * -1);\n }\n .-z-10 {\n z-index: calc(10 * -1);\n }\n .z-0 {\n z-index: 0;\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-span-2 {\n grid-column: span 2 / span 2;\n }\n .container {\n width: 100%;\n @media (width >= 40rem) {\n max-width: 40rem;\n }\n @media (width >= 48rem) {\n max-width: 48rem;\n }\n @media (width >= 64rem) {\n max-width: 64rem;\n }\n @media (width >= 80rem) {\n max-width: 80rem;\n }\n @media (width >= 96rem) {\n max-width: 96rem;\n }\n }\n .m-1 {\n margin: calc(var(--spacing) * 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-auto {\n margin-inline: auto;\n }\n .my-1 {\n margin-block: calc(var(--spacing) * 1);\n }\n .my-4 {\n margin-block: calc(var(--spacing) * 4);\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-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-10 {\n margin-top: calc(var(--spacing) * 10);\n }\n .mt-12 {\n margin-top: calc(var(--spacing) * 12);\n }\n .mt-20 {\n margin-top: calc(var(--spacing) * 20);\n }\n .mr-4 {\n margin-right: calc(var(--spacing) * 4);\n }\n .mr-6 {\n margin-right: calc(var(--spacing) * 6);\n }\n .mr-auto {\n margin-right: auto;\n }\n .mb-1 {\n margin-bottom: calc(var(--spacing) * 1);\n }\n .mb-1\\.5 {\n margin-bottom: calc(var(--spacing) * 1.5);\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-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-2 {\n margin-left: calc(var(--spacing) * 2);\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 .block {\n display: block;\n }\n .contents {\n display: contents;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .hidden {\n display: none;\n }\n .inline-block {\n display: inline-block;\n }\n .inline-flex {\n display: inline-flex;\n }\n .table {\n display: table;\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-3 {\n height: calc(var(--spacing) * 3);\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-8 {\n height: calc(var(--spacing) * 8);\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-48 {\n height: calc(var(--spacing) * 48);\n }\n .h-64 {\n height: calc(var(--spacing) * 64);\n }\n .h-96 {\n height: calc(var(--spacing) * 96);\n }\n .h-\\[500px\\] {\n height: 500px;\n }\n .h-\\[4000px\\] {\n height: 4000px;\n }\n .h-full {\n height: 100%;\n }\n .h-px {\n height: 1px;\n }\n .h-screen {\n height: 100vh;\n }\n .max-h-48 {\n max-height: calc(var(--spacing) * 48);\n }\n .max-h-64 {\n max-height: calc(var(--spacing) * 64);\n }\n .max-h-\\[90\\%\\] {\n max-height: 90%;\n }\n .max-h-\\[90vh\\] {\n max-height: 90vh;\n }\n .min-h-0 {\n min-height: calc(var(--spacing) * 0);\n }\n .min-h-\\[120px\\] {\n min-height: 120px;\n }\n .min-h-\\[1000px\\] {\n min-height: 1000px;\n }\n .min-h-full {\n min-height: 100%;\n }\n .min-h-screen {\n min-height: 100vh;\n }\n .w-0 {\n width: calc(var(--spacing) * 0);\n }\n .w-1\\.5 {\n width: calc(var(--spacing) * 1.5);\n }\n .w-1\\/2 {\n width: calc(1 / 2 * 100%);\n }\n .w-1\\/3 {\n width: calc(1 / 3 * 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-8 {\n width: calc(var(--spacing) * 8);\n }\n .w-12 {\n width: calc(var(--spacing) * 12);\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-32 {\n width: calc(var(--spacing) * 32);\n }\n .w-48 {\n width: calc(var(--spacing) * 48);\n }\n .w-56 {\n width: calc(var(--spacing) * 56);\n }\n .w-64 {\n width: calc(var(--spacing) * 64);\n }\n .w-72 {\n width: calc(var(--spacing) * 72);\n }\n .w-80 {\n width: calc(var(--spacing) * 80);\n }\n .w-96 {\n width: calc(var(--spacing) * 96);\n }\n .w-\\[600px\\] {\n width: 600px;\n }\n .w-\\[800px\\] {\n width: 800px;\n }\n .w-\\[4000px\\] {\n width: 4000px;\n }\n .w-full {\n width: 100%;\n }\n .w-max {\n width: max-content;\n }\n .w-px {\n width: 1px;\n }\n .max-w-2xl {\n max-width: var(--container-2xl);\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-\\[85\\%\\] {\n max-width: 85%;\n }\n .max-w-lg {\n max-width: var(--container-lg);\n }\n .max-w-md {\n max-width: var(--container-md);\n }\n .flex-1 {\n flex: 1;\n }\n .flex-shrink-0 {\n flex-shrink: 0;\n }\n .shrink-0 {\n flex-shrink: 0;\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-1 {\n --tw-translate-x: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-y-1 {\n --tw-translate-y: calc(var(--spacing) * -1);\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-1 {\n --tw-translate-y: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .scale-105 {\n --tw-scale-x: 105%;\n --tw-scale-y: 105%;\n --tw-scale-z: 105%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .scale-\\[1\\.01\\] {\n scale: 1.01;\n }\n .transform {\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\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-grab {\n cursor: grab;\n }\n .cursor-not-allowed {\n cursor: not-allowed;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .cursor-text {\n cursor: text;\n }\n .resize-none {\n resize: none;\n }\n .list-disc {\n list-style-type: disc;\n }\n .appearance-none {\n appearance: none;\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-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-wrap {\n flex-wrap: wrap;\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 .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-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-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-6 {\n gap: calc(var(--spacing) * 6);\n }\n .gap-8 {\n gap: calc(var(--spacing) * 8);\n }\n .gap-12 {\n gap: calc(var(--spacing) * 12);\n }\n .space-y-1 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 1) * 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-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-6 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 6) * 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 .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-slate-50 {\n :where(& > :not(:last-child)) {\n border-color: var(--color-slate-50);\n }\n }\n .divide-slate-100 {\n :where(& > :not(:last-child)) {\n border-color: var(--color-slate-100);\n }\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-y-auto {\n overflow-y: auto;\n }\n .rounded {\n border-radius: 0.25rem;\n }\n .rounded-2xl {\n border-radius: var(--radius-2xl);\n }\n .rounded-3xl {\n border-radius: var(--radius-3xl);\n }\n .rounded-\\[2\\.5rem\\] {\n border-radius: 2.5rem;\n }\n .rounded-\\[2rem\\] {\n border-radius: 2rem;\n }\n .rounded-\\[3rem\\] {\n border-radius: 3rem;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius-lg);\n }\n .rounded-md {\n border-radius: var(--radius-md);\n }\n .rounded-xl {\n border-radius: var(--radius-xl);\n }\n .rounded-t-lg {\n border-top-left-radius: var(--radius-lg);\n border-top-right-radius: var(--radius-lg);\n }\n .rounded-t-xl {\n border-top-left-radius: var(--radius-xl);\n border-top-right-radius: var(--radius-xl);\n }\n .rounded-br-none {\n border-bottom-right-radius: 0;\n }\n .rounded-bl-none {\n border-bottom-left-radius: 0;\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-2 {\n border-style: var(--tw-border-style);\n border-width: 2px;\n }\n .border-4 {\n border-style: var(--tw-border-style);\n border-width: 4px;\n }\n .border-y {\n border-block-style: var(--tw-border-style);\n border-block-width: 1px;\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-r-2 {\n border-right-style: var(--tw-border-style);\n border-right-width: 2px;\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-l-2 {\n border-left-style: var(--tw-border-style);\n border-left-width: 2px;\n }\n .border-l-4 {\n border-left-style: var(--tw-border-style);\n border-left-width: 4px;\n }\n .border-dashed {\n --tw-border-style: dashed;\n border-style: dashed;\n }\n .border-amber-100 {\n border-color: var(--color-amber-100);\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-blue-200 {\n border-color: var(--color-blue-200);\n }\n .border-blue-400 {\n border-color: var(--color-blue-400);\n }\n .border-blue-500 {\n border-color: var(--color-blue-500);\n }\n .border-blue-600 {\n border-color: var(--color-blue-600);\n }\n .border-gray-200 {\n border-color: var(--color-gray-200);\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-indigo-50 {\n border-color: var(--color-indigo-50);\n }\n .border-indigo-100 {\n border-color: var(--color-indigo-100);\n }\n .border-indigo-200 {\n border-color: var(--color-indigo-200);\n }\n .border-indigo-300 {\n border-color: var(--color-indigo-300);\n }\n .border-indigo-400 {\n border-color: var(--color-indigo-400);\n }\n .border-indigo-600 {\n border-color: var(--color-indigo-600);\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-red-300 {\n border-color: var(--color-red-300);\n }\n .border-rose-200 {\n border-color: var(--color-rose-200);\n }\n .border-slate-50 {\n border-color: var(--color-slate-50);\n }\n .border-slate-100 {\n border-color: var(--color-slate-100);\n }\n .border-slate-200 {\n border-color: var(--color-slate-200);\n }\n .border-slate-300 {\n border-color: var(--color-slate-300);\n }\n .border-slate-700 {\n border-color: var(--color-slate-700);\n }\n .border-slate-800 {\n border-color: var(--color-slate-800);\n }\n .border-transparent {\n border-color: transparent;\n }\n .border-white {\n border-color: var(--color-white);\n }\n .border-yellow-100 {\n border-color: var(--color-yellow-100);\n }\n .bg-\\[\\#eef2ff\\] {\n background-color: #eef2ff;\n }\n .bg-\\[\\#f4ecd8\\] {\n background-color: #f4ecd8;\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-black\\/5 {\n background-color: color-mix(in srgb, #000 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 5%, 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-blue-600 {\n background-color: var(--color-blue-600);\n }\n .bg-blue-700 {\n background-color: var(--color-blue-700);\n }\n .bg-blue-900 {\n background-color: var(--color-blue-900);\n }\n .bg-gray-100 {\n background-color: var(--color-gray-100);\n }\n .bg-green-50 {\n background-color: var(--color-green-50);\n }\n .bg-green-100 {\n background-color: var(--color-green-100);\n }\n .bg-green-500 {\n background-color: var(--color-green-500);\n }\n .bg-indigo-50 {\n background-color: var(--color-indigo-50);\n }\n .bg-indigo-50\\/30 {\n background-color: color-mix(in srgb, oklch(96.2% 0.018 272.314) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-50) 30%, transparent);\n }\n }\n .bg-indigo-100 {\n background-color: var(--color-indigo-100);\n }\n .bg-indigo-500 {\n background-color: var(--color-indigo-500);\n }\n .bg-indigo-500\\/20 {\n background-color: color-mix(in srgb, oklch(58.5% 0.233 277.117) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-500) 20%, transparent);\n }\n }\n .bg-indigo-600 {\n background-color: var(--color-indigo-600);\n }\n .bg-indigo-900 {\n background-color: var(--color-indigo-900);\n }\n .bg-indigo-900\\/50 {\n background-color: color-mix(in srgb, oklch(35.9% 0.144 278.697) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-900) 50%, transparent);\n }\n }\n .bg-orange-100 {\n background-color: var(--color-orange-100);\n }\n .bg-purple-100 {\n background-color: var(--color-purple-100);\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-rose-100 {\n background-color: var(--color-rose-100);\n }\n .bg-slate-50 {\n background-color: var(--color-slate-50);\n }\n .bg-slate-100 {\n background-color: var(--color-slate-100);\n }\n .bg-slate-200 {\n background-color: var(--color-slate-200);\n }\n .bg-slate-300 {\n background-color: var(--color-slate-300);\n }\n .bg-slate-700 {\n background-color: var(--color-slate-700);\n }\n .bg-slate-800 {\n background-color: var(--color-slate-800);\n }\n .bg-slate-900 {\n background-color: var(--color-slate-900);\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\\/50 {\n background-color: color-mix(in srgb, #fff 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 50%, transparent);\n }\n }\n .bg-white\\/70 {\n background-color: color-mix(in srgb, #fff 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 70%, transparent);\n }\n }\n .bg-white\\/80 {\n background-color: color-mix(in srgb, #fff 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 80%, transparent);\n }\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 .from-blue-500\\/20 {\n --tw-gradient-from: color-mix(in srgb, oklch(62.3% 0.214 259.815) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-blue-500) 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 .from-blue-600 {\n --tw-gradient-from: var(--color-blue-600);\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-orange-200 {\n --tw-gradient-from: var(--color-orange-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-red-200 {\n --tw-gradient-from: var(--color-red-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-slate-300 {\n --tw-gradient-from: var(--color-slate-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 .via-indigo-200 {\n --tw-gradient-via: var(--color-indigo-200);\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-purple-200 {\n --tw-gradient-via: var(--color-purple-200);\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-yellow-100 {\n --tw-gradient-via: var(--color-yellow-100);\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-blue-200 {\n --tw-gradient-to: var(--color-blue-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-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-indigo-500 {\n --tw-gradient-to: var(--color-indigo-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 .to-indigo-500\\/20 {\n --tw-gradient-to: color-mix(in srgb, oklch(58.5% 0.233 277.117) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-indigo-500) 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-slate-300 {\n --tw-gradient-to: var(--color-slate-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 .bg-clip-text {\n background-clip: text;\n }\n .object-cover {\n object-fit: cover;\n }\n .p-0\\.5 {\n padding: calc(var(--spacing) * 0.5);\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-2\\.5 {\n padding: calc(var(--spacing) * 2.5);\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-12 {\n padding: calc(var(--spacing) * 12);\n }\n .px-0\\.5 {\n padding-inline: calc(var(--spacing) * 0.5);\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-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 .px-8 {\n padding-inline: calc(var(--spacing) * 8);\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-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-5 {\n padding-block: calc(var(--spacing) * 5);\n }\n .py-8 {\n padding-block: calc(var(--spacing) * 8);\n }\n .py-12 {\n padding-block: calc(var(--spacing) * 12);\n }\n .py-20 {\n padding-block: calc(var(--spacing) * 20);\n }\n .py-24 {\n padding-block: calc(var(--spacing) * 24);\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-4 {\n padding-top: calc(var(--spacing) * 4);\n }\n .pt-6 {\n padding-top: calc(var(--spacing) * 6);\n }\n .pt-8 {\n padding-top: calc(var(--spacing) * 8);\n }\n .pt-32 {\n padding-top: calc(var(--spacing) * 32);\n }\n .pr-2 {\n padding-right: calc(var(--spacing) * 2);\n }\n .pr-4 {\n padding-right: calc(var(--spacing) * 4);\n }\n .pr-12 {\n padding-right: calc(var(--spacing) * 12);\n }\n .pb-1 {\n padding-bottom: calc(var(--spacing) * 1);\n }\n .pb-2 {\n padding-bottom: calc(var(--spacing) * 2);\n }\n .pb-4 {\n padding-bottom: calc(var(--spacing) * 4);\n }\n .pb-8 {\n padding-bottom: calc(var(--spacing) * 8);\n }\n .pb-20 {\n padding-bottom: calc(var(--spacing) * 20);\n }\n .pl-2 {\n padding-left: calc(var(--spacing) * 2);\n }\n .pl-4 {\n padding-left: calc(var(--spacing) * 4);\n }\n .pl-5 {\n padding-left: calc(var(--spacing) * 5);\n }\n .pl-9 {\n padding-left: calc(var(--spacing) * 9);\n }\n .pl-12 {\n padding-left: calc(var(--spacing) * 12);\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 .font-mono {\n font-family: var(--font-mono);\n }\n .font-sans {\n font-family: var(--font-sans);\n }\n .font-serif {\n font-family: var(--font-serif);\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-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-\\[9px\\] {\n font-size: 9px;\n }\n .text-\\[10px\\] {\n font-size: 10px;\n }\n .leading-\\[1\\.1\\] {\n --tw-leading: 1.1;\n line-height: 1.1;\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .leading-tight {\n --tw-leading: var(--leading-tight);\n line-height: var(--leading-tight);\n }\n .font-black {\n --tw-font-weight: var(--font-weight-black);\n font-weight: var(--font-weight-black);\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 .whitespace-pre-wrap {\n white-space: pre-wrap;\n }\n .text-amber-500 {\n color: var(--color-amber-500);\n }\n .text-amber-600 {\n color: var(--color-amber-600);\n }\n .text-amber-800 {\n color: var(--color-amber-800);\n }\n .text-blue-400 {\n color: var(--color-blue-400);\n }\n .text-blue-500 {\n color: var(--color-blue-500);\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-blue-800 {\n color: var(--color-blue-800);\n }\n .text-blue-900 {\n color: var(--color-blue-900);\n }\n .text-gray-800 {\n color: var(--color-gray-800);\n }\n .text-green-500 {\n color: var(--color-green-500);\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-indigo-300 {\n color: var(--color-indigo-300);\n }\n .text-indigo-500 {\n color: var(--color-indigo-500);\n }\n .text-indigo-600 {\n color: var(--color-indigo-600);\n }\n .text-indigo-700 {\n color: var(--color-indigo-700);\n }\n .text-indigo-800 {\n color: var(--color-indigo-800);\n }\n .text-orange-500 {\n color: var(--color-orange-500);\n }\n .text-orange-600 {\n color: var(--color-orange-600);\n }\n .text-purple-600 {\n color: var(--color-purple-600);\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-red-900 {\n color: var(--color-red-900);\n }\n .text-rose-800 {\n color: var(--color-rose-800);\n }\n .text-slate-300 {\n color: var(--color-slate-300);\n }\n .text-slate-400 {\n color: var(--color-slate-400);\n }\n .text-slate-500 {\n color: var(--color-slate-500);\n }\n .text-slate-600 {\n color: var(--color-slate-600);\n }\n .text-slate-700 {\n color: var(--color-slate-700);\n }\n .text-slate-800 {\n color: var(--color-slate-800);\n }\n .text-slate-900 {\n color: var(--color-slate-900);\n }\n .text-transparent {\n color: transparent;\n }\n .text-white {\n color: var(--color-white);\n }\n .text-yellow-400 {\n color: var(--color-yellow-400);\n }\n .text-yellow-500 {\n color: var(--color-yellow-500);\n }\n .text-yellow-600 {\n color: var(--color-yellow-600);\n }\n .uppercase {\n text-transform: uppercase;\n }\n .italic {\n font-style: italic;\n }\n .underline {\n text-decoration-line: underline;\n }\n .decoration-blue-500 {\n text-decoration-color: var(--color-blue-500);\n }\n .decoration-indigo-300 {\n text-decoration-color: var(--color-indigo-300);\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 .accent-blue-600 {\n accent-color: var(--color-blue-600);\n }\n .accent-indigo-600 {\n accent-color: var(--color-indigo-600);\n }\n .opacity-0 {\n opacity: 0%;\n }\n .opacity-20 {\n opacity: 20%;\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-2xl {\n --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));\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_10px_rgba\\(59\\,130\\,246\\,0\\.5\\)\\] {\n --tw-shadow: 0 0 10px var(--tw-shadow-color, rgba(59,130,246,0.5));\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_10px_rgba\\(99\\,102\\,241\\,0\\.5\\)\\] {\n --tw-shadow: 0 0 10px var(--tw-shadow-color, rgba(99,102,241,0.5));\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-\\[0px_2px_0px_0px_rgba\\(203\\,213\\,225\\,1\\)\\] {\n --tw-shadow: 0px 2px 0px 0px var(--tw-shadow-color, rgba(203,213,225,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-inner {\n --tw-shadow: inset 0 2px 4px 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 .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-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 .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 .shadow-blue-200 {\n --tw-shadow-color: oklch(88.2% 0.059 254.128);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow-color: color-mix(in oklab, var(--color-blue-200) var(--tw-shadow-alpha), transparent);\n }\n }\n .shadow-indigo-100 {\n --tw-shadow-color: oklch(93% 0.034 272.788);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow-color: color-mix(in oklab, var(--color-indigo-100) var(--tw-shadow-alpha), transparent);\n }\n }\n .ring-amber-200 {\n --tw-ring-color: var(--color-amber-200);\n }\n .ring-blue-200 {\n --tw-ring-color: var(--color-blue-200);\n }\n .ring-indigo-200 {\n --tw-ring-color: var(--color-indigo-200);\n }\n .ring-indigo-400 {\n --tw-ring-color: var(--color-indigo-400);\n }\n .ring-indigo-500 {\n --tw-ring-color: var(--color-indigo-500);\n }\n .ring-offset-1 {\n --tw-ring-offset-width: 1px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n .blur-3xl {\n --tw-blur: blur(var(--blur-3xl));\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .blur-\\[1px\\] {\n --tw-blur: blur(1px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .blur-\\[60px\\] {\n --tw-blur: blur(60px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .blur-\\[120px\\] {\n --tw-blur: blur(120px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .blur-\\[150px\\] {\n --tw-blur: blur(150px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .grayscale {\n --tw-grayscale: grayscale(100%);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .sepia {\n --tw-sepia: sepia(100%);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .filter {\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .backdrop-blur-md {\n --tw-backdrop-blur: blur(var(--blur-md));\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 .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-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 .duration-100 {\n --tw-duration: 100ms;\n transition-duration: 100ms;\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 .duration-500 {\n --tw-duration: 500ms;\n transition-duration: 500ms;\n }\n .duration-1000 {\n --tw-duration: 1000ms;\n transition-duration: 1000ms;\n }\n .ease-in-out {\n --tw-ease: var(--ease-in-out);\n transition-timing-function: var(--ease-in-out);\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .group-hover\\:translate-x-1 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n --tw-translate-x: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n }\n .group-hover\\:bg-blue-600 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n background-color: var(--color-blue-600);\n }\n }\n }\n .group-hover\\:text-blue-600 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n color: var(--color-blue-600);\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 .selection\\:bg-blue-200 {\n & *::selection {\n background-color: var(--color-blue-200);\n }\n &::selection {\n background-color: var(--color-blue-200);\n }\n }\n .hover\\:scale-105 {\n &:hover {\n @media (hover: hover) {\n --tw-scale-x: 105%;\n --tw-scale-y: 105%;\n --tw-scale-z: 105%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .hover\\:scale-110 {\n &:hover {\n @media (hover: hover) {\n --tw-scale-x: 110%;\n --tw-scale-y: 110%;\n --tw-scale-z: 110%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .hover\\:scale-\\[1\\.02\\] {\n &:hover {\n @media (hover: hover) {\n scale: 1.02;\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-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-blue-300);\n }\n }\n }\n .hover\\:border-indigo-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-indigo-200);\n }\n }\n }\n .hover\\:border-indigo-400 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-indigo-400);\n }\n }\n }\n .hover\\:border-indigo-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-indigo-500);\n }\n }\n }\n .hover\\:border-slate-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-slate-200);\n }\n }\n }\n .hover\\:border-slate-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-slate-300);\n }\n }\n }\n .hover\\:bg-amber-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-amber-50);\n }\n }\n }\n .hover\\:bg-amber-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-amber-100);\n }\n }\n }\n .hover\\:bg-black\\/10 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #000 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 10%, transparent);\n }\n }\n }\n }\n .hover\\:bg-blue-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-blue-50);\n }\n }\n }\n .hover\\:bg-blue-600 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-blue-600);\n }\n }\n }\n .hover\\:bg-blue-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-blue-700);\n }\n }\n }\n .hover\\:bg-blue-800 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-blue-800);\n }\n }\n }\n .hover\\:bg-indigo-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-indigo-50);\n }\n }\n }\n .hover\\:bg-indigo-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-indigo-100);\n }\n }\n }\n .hover\\:bg-indigo-200 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-indigo-200);\n }\n }\n }\n .hover\\:bg-indigo-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-indigo-700);\n }\n }\n }\n .hover\\:bg-red-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-red-50);\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-red-900\\/20 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(39.6% 0.141 25.723) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-red-900) 20%, transparent);\n }\n }\n }\n }\n .hover\\:bg-slate-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-50);\n }\n }\n }\n .hover\\:bg-slate-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-100);\n }\n }\n }\n .hover\\:bg-slate-200 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-200);\n }\n }\n }\n .hover\\:bg-slate-300 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-300);\n }\n }\n }\n .hover\\:bg-slate-800 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-800);\n }\n }\n }\n .hover\\:bg-slate-900 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-900);\n }\n }\n }\n .hover\\:bg-white {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-white);\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\\:text-blue-400 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-400);\n }\n }\n }\n .hover\\:text-blue-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-500);\n }\n }\n }\n .hover\\:text-blue-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-600);\n }\n }\n }\n .hover\\:text-blue-800 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-800);\n }\n }\n }\n .hover\\:text-indigo-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-600);\n }\n }\n }\n .hover\\:text-indigo-700 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-700);\n }\n }\n }\n .hover\\:text-indigo-800 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-800);\n }\n }\n }\n .hover\\:text-red-400 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-red-400);\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-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-red-600);\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-slate-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-500);\n }\n }\n }\n .hover\\:text-slate-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-600);\n }\n }\n }\n .hover\\:text-slate-800 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-800);\n }\n }\n }\n .hover\\:text-slate-900 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-900);\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\\:decoration-indigo-600 {\n &:hover {\n @media (hover: hover) {\n text-decoration-color: var(--color-indigo-600);\n }\n }\n }\n .hover\\:shadow-2xl {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));\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-blue-200 {\n &:hover {\n @media (hover: hover) {\n --tw-shadow-color: oklch(88.2% 0.059 254.128);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow-color: color-mix(in oklab, var(--color-blue-200) var(--tw-shadow-alpha), transparent);\n }\n }\n }\n }\n .focus\\:border-b {\n &:focus {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n }\n .focus\\:border-blue-500 {\n &:focus {\n border-color: var(--color-blue-500);\n }\n }\n .focus\\:border-indigo-400 {\n &:focus {\n border-color: var(--color-indigo-400);\n }\n }\n .focus\\:border-indigo-500 {\n &:focus {\n border-color: var(--color-indigo-500);\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-4 {\n &:focus {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(4px + 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-blue-300 {\n &:focus {\n --tw-ring-color: var(--color-blue-300);\n }\n }\n .focus\\:ring-blue-500 {\n &:focus {\n --tw-ring-color: var(--color-blue-500);\n }\n }\n .focus\\:ring-indigo-500 {\n &:focus {\n --tw-ring-color: var(--color-indigo-500);\n }\n }\n .focus\\:outline-none {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n }\n .active\\:cursor-grabbing {\n &:active {\n cursor: grabbing;\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 .sm\\:w-auto {\n @media (width >= 40rem) {\n width: auto;\n }\n }\n .sm\\:flex-row {\n @media (width >= 40rem) {\n flex-direction: row;\n }\n }\n .md\\:flex {\n @media (width >= 48rem) {\n display: flex;\n }\n }\n .md\\:w-1\\/3 {\n @media (width >= 48rem) {\n width: calc(1 / 3 * 100%);\n }\n }\n .md\\:w-64 {\n @media (width >= 48rem) {\n width: calc(var(--spacing) * 64);\n }\n }\n .md\\:w-auto {\n @media (width >= 48rem) {\n width: auto;\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\\:flex-row {\n @media (width >= 48rem) {\n flex-direction: row;\n }\n }\n .md\\:items-center {\n @media (width >= 48rem) {\n align-items: center;\n }\n }\n .md\\:p-12 {\n @media (width >= 48rem) {\n padding: calc(var(--spacing) * 12);\n }\n }\n .md\\:text-7xl {\n @media (width >= 48rem) {\n font-size: var(--text-7xl);\n line-height: var(--tw-leading, var(--text-7xl--line-height));\n }\n }\n .lg\\:col-span-2 {\n @media (width >= 64rem) {\n grid-column: span 2 / span 2;\n }\n }\n .lg\\:flex {\n @media (width >= 64rem) {\n display: flex;\n }\n }\n .lg\\:w-1\\/2 {\n @media (width >= 64rem) {\n width: calc(1 / 2 * 100%);\n }\n }\n .lg\\:w-96 {\n @media (width >= 64rem) {\n width: calc(var(--spacing) * 96);\n }\n }\n .lg\\:grid-cols-3 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n}\n.editor-content:empty:before {\n content: attr(placeholder);\n color: #9ca3af;\n pointer-events: none;\n}\n::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n::-webkit-scrollbar-track {\n background: transparent;\n}\n::-webkit-scrollbar-thumb {\n background: #cbd5e1;\n border-radius: 3px;\n}\n::-webkit-scrollbar-thumb:hover {\n background: #94a3b8;\n}\n@media print {\n @page {\n margin: 2cm;\n size: auto;\n }\n html, body {\n height: auto !important;\n overflow: visible !important;\n margin: 0 !important;\n padding: 0 !important;\n background: white !important;\n color: black !important;\n }\n #__next {\n height: auto !important;\n overflow: visible !important;\n display: block !important;\n position: relative !important;\n }\n .no-print {\n display: none !important;\n }\n .print-only {\n display: block !important;\n }\n .break-before-page {\n page-break-before: always;\n break-before: page;\n }\n .break-after-page {\n page-break-after: always;\n break-after: page;\n }\n p {\n text-align: justify;\n widows: 3;\n orphans: 3;\n color: black !important;\n }\n h1, h2, h3, h4 {\n color: black !important;\n page-break-after: avoid;\n }\n a {\n text-decoration: none;\n color: black !important;\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-scale-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-rotate-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-z {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-space-y-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-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-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-alpha {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-drop-shadow-size {\n syntax: \"*\";\n inherits: false;\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@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\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-scale-x: 1;\n --tw-scale-y: 1;\n --tw-scale-z: 1;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-space-y-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-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-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\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 }\n }\n}\r\n"],"names":[],"mappings":"AACA;EAg4FE;IACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAh4FJ;EAEE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAFF;EAwIE;;;;;;;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;;;;;AAvRF;;AAAA;EA4RE;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAyB;;;;;EAGzB;IAAyB;;;;;EAGzB;IAAyB;;;;;EAGzB;IAAyB;;;;;EAGzB;IAAyB;;;;;EAI3B;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;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;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;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;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;;;EAMA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;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;;;;;;;;EASA;;;;EAKA;;;;EAIF;;;;;;EAKA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;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;;;;EAGA;;;;EAGA;;;;EAGA;;;;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;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;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;;;;;EAIA;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;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;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;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;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;E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"}}] + {"offset": {"line": 302, "column": 0}, "map": {"version":3,"sources":["file:///C:/Users/streaper2/Documents/00%20-%20projet/plumeia/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 --font-sans: 'Inter', sans-serif;\n --font-serif: 'Merriweather', serif;\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\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-300: oklch(80.8% 0.114 19.571);\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-red-900: oklch(39.6% 0.141 25.723);\n --color-orange-100: oklch(95.4% 0.038 75.164);\n --color-orange-200: oklch(90.1% 0.076 70.697);\n --color-orange-500: oklch(70.5% 0.213 47.604);\n --color-orange-600: oklch(64.6% 0.222 41.116);\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-500: oklch(76.9% 0.188 70.08);\n --color-amber-600: oklch(66.6% 0.179 58.318);\n --color-amber-800: oklch(47.3% 0.137 46.201);\n --color-yellow-100: oklch(97.3% 0.071 103.193);\n --color-yellow-400: oklch(85.2% 0.199 91.936);\n --color-yellow-500: oklch(79.5% 0.184 86.047);\n --color-yellow-600: oklch(68.1% 0.162 75.834);\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-500: oklch(72.3% 0.219 149.579);\n --color-green-700: oklch(52.7% 0.154 150.069);\n --color-green-800: oklch(44.8% 0.119 151.328);\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-300: oklch(80.9% 0.105 251.813);\n --color-blue-400: oklch(70.7% 0.165 254.624);\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-blue-800: oklch(42.4% 0.199 265.638);\n --color-blue-900: oklch(37.9% 0.146 265.522);\n --color-indigo-50: oklch(96.2% 0.018 272.314);\n --color-indigo-100: oklch(93% 0.034 272.788);\n --color-indigo-200: oklch(87% 0.065 274.039);\n --color-indigo-300: oklch(78.5% 0.115 274.713);\n --color-indigo-400: oklch(67.3% 0.182 276.935);\n --color-indigo-500: oklch(58.5% 0.233 277.117);\n --color-indigo-600: oklch(51.1% 0.262 276.966);\n --color-indigo-700: oklch(45.7% 0.24 277.023);\n --color-indigo-800: oklch(39.8% 0.195 277.366);\n --color-indigo-900: oklch(35.9% 0.144 278.697);\n --color-purple-100: oklch(94.6% 0.033 307.174);\n --color-purple-200: oklch(90.2% 0.063 306.703);\n --color-purple-600: oklch(55.8% 0.288 302.321);\n --color-purple-700: oklch(49.6% 0.265 301.924);\n --color-rose-100: oklch(94.1% 0.03 12.58);\n --color-rose-200: oklch(89.2% 0.058 10.001);\n --color-rose-800: oklch(45.5% 0.188 13.697);\n --color-slate-50: oklch(98.4% 0.003 247.858);\n --color-slate-100: oklch(96.8% 0.007 247.896);\n --color-slate-200: oklch(92.9% 0.013 255.508);\n --color-slate-300: oklch(86.9% 0.022 252.894);\n --color-slate-400: oklch(70.4% 0.04 256.788);\n --color-slate-500: oklch(55.4% 0.046 257.417);\n --color-slate-600: oklch(44.6% 0.043 257.281);\n --color-slate-700: oklch(37.2% 0.044 257.287);\n --color-slate-800: oklch(27.9% 0.041 260.031);\n --color-slate-900: oklch(20.8% 0.042 265.755);\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-800: oklch(27.8% 0.033 256.848);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-md: 28rem;\n --container-lg: 32rem;\n --container-2xl: 42rem;\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-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 --text-7xl: 4.5rem;\n --text-7xl--line-height: 1;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --font-weight-black: 900;\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-relaxed: 1.625;\n --radius-md: 0.375rem;\n --radius-lg: 0.5rem;\n --radius-xl: 0.75rem;\n --radius-2xl: 1rem;\n --radius-3xl: 1.5rem;\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 --blur-md: 12px;\n --blur-3xl: 64px;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-sans);\n --default-mono-font-family: var(--font-mono);\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 .pointer-events-auto {\n pointer-events: auto;\n }\n .pointer-events-none {\n pointer-events: none;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .static {\n position: static;\n }\n .sticky {\n position: sticky;\n }\n .-inset-4 {\n inset: calc(var(--spacing) * -4);\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .start {\n inset-inline-start: var(--spacing);\n }\n .-top-2 {\n top: calc(var(--spacing) * -2);\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-8 {\n top: calc(var(--spacing) * 8);\n }\n .top-10 {\n top: calc(var(--spacing) * 10);\n }\n .-right-1 {\n right: calc(var(--spacing) * -1);\n }\n .-right-3 {\n right: calc(var(--spacing) * -3);\n }\n .right-0 {\n right: calc(var(--spacing) * 0);\n }\n .right-1\\.5 {\n right: calc(var(--spacing) * 1.5);\n }\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n .right-4 {\n right: calc(var(--spacing) * 4);\n }\n .right-10 {\n right: calc(var(--spacing) * 10);\n }\n .right-\\[-10px\\] {\n right: -10px;\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-10 {\n bottom: calc(var(--spacing) * 10);\n }\n .bottom-full {\n bottom: 100%;\n }\n .-left-2 {\n left: calc(var(--spacing) * -2);\n }\n .left-0 {\n left: calc(var(--spacing) * 0);\n }\n .left-3 {\n left: calc(var(--spacing) * 3);\n }\n .left-4 {\n left: calc(var(--spacing) * 4);\n }\n .left-10 {\n left: calc(var(--spacing) * 10);\n }\n .left-\\[calc\\(50\\%\\+420px\\)\\] {\n left: calc(50% + 420px);\n }\n .-z-1 {\n z-index: calc(1 * -1);\n }\n .-z-10 {\n z-index: calc(10 * -1);\n }\n .z-0 {\n z-index: 0;\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-span-2 {\n grid-column: span 2 / span 2;\n }\n .col-span-3 {\n grid-column: span 3 / span 3;\n }\n .container {\n width: 100%;\n @media (width >= 40rem) {\n max-width: 40rem;\n }\n @media (width >= 48rem) {\n max-width: 48rem;\n }\n @media (width >= 64rem) {\n max-width: 64rem;\n }\n @media (width >= 80rem) {\n max-width: 80rem;\n }\n @media (width >= 96rem) {\n max-width: 96rem;\n }\n }\n .m-1 {\n margin: calc(var(--spacing) * 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-auto {\n margin-inline: auto;\n }\n .my-1 {\n margin-block: calc(var(--spacing) * 1);\n }\n .my-4 {\n margin-block: calc(var(--spacing) * 4);\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-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-10 {\n margin-top: calc(var(--spacing) * 10);\n }\n .mt-12 {\n margin-top: calc(var(--spacing) * 12);\n }\n .mt-20 {\n margin-top: calc(var(--spacing) * 20);\n }\n .mr-4 {\n margin-right: calc(var(--spacing) * 4);\n }\n .mr-6 {\n margin-right: calc(var(--spacing) * 6);\n }\n .mr-auto {\n margin-right: auto;\n }\n .mb-1 {\n margin-bottom: calc(var(--spacing) * 1);\n }\n .mb-1\\.5 {\n margin-bottom: calc(var(--spacing) * 1.5);\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-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-2 {\n margin-left: calc(var(--spacing) * 2);\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 .block {\n display: block;\n }\n .contents {\n display: contents;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .hidden {\n display: none;\n }\n .inline-block {\n display: inline-block;\n }\n .inline-flex {\n display: inline-flex;\n }\n .table {\n display: table;\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-3 {\n height: calc(var(--spacing) * 3);\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-8 {\n height: calc(var(--spacing) * 8);\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-48 {\n height: calc(var(--spacing) * 48);\n }\n .h-64 {\n height: calc(var(--spacing) * 64);\n }\n .h-96 {\n height: calc(var(--spacing) * 96);\n }\n .h-\\[500px\\] {\n height: 500px;\n }\n .h-\\[4000px\\] {\n height: 4000px;\n }\n .h-full {\n height: 100%;\n }\n .h-px {\n height: 1px;\n }\n .h-screen {\n height: 100vh;\n }\n .max-h-48 {\n max-height: calc(var(--spacing) * 48);\n }\n .max-h-64 {\n max-height: calc(var(--spacing) * 64);\n }\n .max-h-\\[90\\%\\] {\n max-height: 90%;\n }\n .max-h-\\[90vh\\] {\n max-height: 90vh;\n }\n .min-h-0 {\n min-height: calc(var(--spacing) * 0);\n }\n .min-h-\\[120px\\] {\n min-height: 120px;\n }\n .min-h-\\[1000px\\] {\n min-height: 1000px;\n }\n .min-h-full {\n min-height: 100%;\n }\n .min-h-screen {\n min-height: 100vh;\n }\n .w-0 {\n width: calc(var(--spacing) * 0);\n }\n .w-1\\.5 {\n width: calc(var(--spacing) * 1.5);\n }\n .w-1\\/2 {\n width: calc(1 / 2 * 100%);\n }\n .w-1\\/3 {\n width: calc(1 / 3 * 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-8 {\n width: calc(var(--spacing) * 8);\n }\n .w-12 {\n width: calc(var(--spacing) * 12);\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-32 {\n width: calc(var(--spacing) * 32);\n }\n .w-48 {\n width: calc(var(--spacing) * 48);\n }\n .w-56 {\n width: calc(var(--spacing) * 56);\n }\n .w-64 {\n width: calc(var(--spacing) * 64);\n }\n .w-72 {\n width: calc(var(--spacing) * 72);\n }\n .w-80 {\n width: calc(var(--spacing) * 80);\n }\n .w-96 {\n width: calc(var(--spacing) * 96);\n }\n .w-\\[600px\\] {\n width: 600px;\n }\n .w-\\[800px\\] {\n width: 800px;\n }\n .w-\\[4000px\\] {\n width: 4000px;\n }\n .w-full {\n width: 100%;\n }\n .w-max {\n width: max-content;\n }\n .w-px {\n width: 1px;\n }\n .max-w-2xl {\n max-width: var(--container-2xl);\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-\\[85\\%\\] {\n max-width: 85%;\n }\n .max-w-lg {\n max-width: var(--container-lg);\n }\n .max-w-md {\n max-width: var(--container-md);\n }\n .flex-1 {\n flex: 1;\n }\n .flex-shrink-0 {\n flex-shrink: 0;\n }\n .shrink-0 {\n flex-shrink: 0;\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-1 {\n --tw-translate-x: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-y-1 {\n --tw-translate-y: calc(var(--spacing) * -1);\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-1 {\n --tw-translate-y: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .scale-105 {\n --tw-scale-x: 105%;\n --tw-scale-y: 105%;\n --tw-scale-z: 105%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n .scale-\\[1\\.01\\] {\n scale: 1.01;\n }\n .transform {\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\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-grab {\n cursor: grab;\n }\n .cursor-not-allowed {\n cursor: not-allowed;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .cursor-text {\n cursor: text;\n }\n .resize-none {\n resize: none;\n }\n .list-disc {\n list-style-type: disc;\n }\n .appearance-none {\n appearance: none;\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-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-wrap {\n flex-wrap: wrap;\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 .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-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-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-6 {\n gap: calc(var(--spacing) * 6);\n }\n .gap-8 {\n gap: calc(var(--spacing) * 8);\n }\n .gap-12 {\n gap: calc(var(--spacing) * 12);\n }\n .space-y-1 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 1) * 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-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-6 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 6) * 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 .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-slate-50 {\n :where(& > :not(:last-child)) {\n border-color: var(--color-slate-50);\n }\n }\n .divide-slate-100 {\n :where(& > :not(:last-child)) {\n border-color: var(--color-slate-100);\n }\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-y-auto {\n overflow-y: auto;\n }\n .rounded {\n border-radius: 0.25rem;\n }\n .rounded-2xl {\n border-radius: var(--radius-2xl);\n }\n .rounded-3xl {\n border-radius: var(--radius-3xl);\n }\n .rounded-\\[2\\.5rem\\] {\n border-radius: 2.5rem;\n }\n .rounded-\\[2rem\\] {\n border-radius: 2rem;\n }\n .rounded-\\[3rem\\] {\n border-radius: 3rem;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius-lg);\n }\n .rounded-md {\n border-radius: var(--radius-md);\n }\n .rounded-xl {\n border-radius: var(--radius-xl);\n }\n .rounded-t-lg {\n border-top-left-radius: var(--radius-lg);\n border-top-right-radius: var(--radius-lg);\n }\n .rounded-t-xl {\n border-top-left-radius: var(--radius-xl);\n border-top-right-radius: var(--radius-xl);\n }\n .rounded-br-none {\n border-bottom-right-radius: 0;\n }\n .rounded-bl-none {\n border-bottom-left-radius: 0;\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-2 {\n border-style: var(--tw-border-style);\n border-width: 2px;\n }\n .border-4 {\n border-style: var(--tw-border-style);\n border-width: 4px;\n }\n .border-y {\n border-block-style: var(--tw-border-style);\n border-block-width: 1px;\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-r-2 {\n border-right-style: var(--tw-border-style);\n border-right-width: 2px;\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-l-2 {\n border-left-style: var(--tw-border-style);\n border-left-width: 2px;\n }\n .border-l-4 {\n border-left-style: var(--tw-border-style);\n border-left-width: 4px;\n }\n .border-dashed {\n --tw-border-style: dashed;\n border-style: dashed;\n }\n .border-amber-100 {\n border-color: var(--color-amber-100);\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-blue-200 {\n border-color: var(--color-blue-200);\n }\n .border-blue-400 {\n border-color: var(--color-blue-400);\n }\n .border-blue-500 {\n border-color: var(--color-blue-500);\n }\n .border-blue-600 {\n border-color: var(--color-blue-600);\n }\n .border-gray-200 {\n border-color: var(--color-gray-200);\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-indigo-50 {\n border-color: var(--color-indigo-50);\n }\n .border-indigo-100 {\n border-color: var(--color-indigo-100);\n }\n .border-indigo-200 {\n border-color: var(--color-indigo-200);\n }\n .border-indigo-300 {\n border-color: var(--color-indigo-300);\n }\n .border-indigo-400 {\n border-color: var(--color-indigo-400);\n }\n .border-indigo-600 {\n border-color: var(--color-indigo-600);\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-red-300 {\n border-color: var(--color-red-300);\n }\n .border-rose-200 {\n border-color: var(--color-rose-200);\n }\n .border-slate-50 {\n border-color: var(--color-slate-50);\n }\n .border-slate-100 {\n border-color: var(--color-slate-100);\n }\n .border-slate-200 {\n border-color: var(--color-slate-200);\n }\n .border-slate-300 {\n border-color: var(--color-slate-300);\n }\n .border-slate-700 {\n border-color: var(--color-slate-700);\n }\n .border-slate-800 {\n border-color: var(--color-slate-800);\n }\n .border-transparent {\n border-color: transparent;\n }\n .border-white {\n border-color: var(--color-white);\n }\n .border-yellow-100 {\n border-color: var(--color-yellow-100);\n }\n .bg-\\[\\#eef2ff\\] {\n background-color: #eef2ff;\n }\n .bg-\\[\\#f4ecd8\\] {\n background-color: #f4ecd8;\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-black\\/5 {\n background-color: color-mix(in srgb, #000 5%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 5%, 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-blue-600 {\n background-color: var(--color-blue-600);\n }\n .bg-blue-700 {\n background-color: var(--color-blue-700);\n }\n .bg-blue-900 {\n background-color: var(--color-blue-900);\n }\n .bg-gray-100 {\n background-color: var(--color-gray-100);\n }\n .bg-green-50 {\n background-color: var(--color-green-50);\n }\n .bg-green-100 {\n background-color: var(--color-green-100);\n }\n .bg-green-500 {\n background-color: var(--color-green-500);\n }\n .bg-indigo-50 {\n background-color: var(--color-indigo-50);\n }\n .bg-indigo-50\\/30 {\n background-color: color-mix(in srgb, oklch(96.2% 0.018 272.314) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-50) 30%, transparent);\n }\n }\n .bg-indigo-100 {\n background-color: var(--color-indigo-100);\n }\n .bg-indigo-500 {\n background-color: var(--color-indigo-500);\n }\n .bg-indigo-500\\/20 {\n background-color: color-mix(in srgb, oklch(58.5% 0.233 277.117) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-500) 20%, transparent);\n }\n }\n .bg-indigo-600 {\n background-color: var(--color-indigo-600);\n }\n .bg-indigo-900 {\n background-color: var(--color-indigo-900);\n }\n .bg-indigo-900\\/50 {\n background-color: color-mix(in srgb, oklch(35.9% 0.144 278.697) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-indigo-900) 50%, transparent);\n }\n }\n .bg-orange-100 {\n background-color: var(--color-orange-100);\n }\n .bg-purple-100 {\n background-color: var(--color-purple-100);\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-rose-100 {\n background-color: var(--color-rose-100);\n }\n .bg-slate-50 {\n background-color: var(--color-slate-50);\n }\n .bg-slate-100 {\n background-color: var(--color-slate-100);\n }\n .bg-slate-200 {\n background-color: var(--color-slate-200);\n }\n .bg-slate-300 {\n background-color: var(--color-slate-300);\n }\n .bg-slate-700 {\n background-color: var(--color-slate-700);\n }\n .bg-slate-800 {\n background-color: var(--color-slate-800);\n }\n .bg-slate-900 {\n background-color: var(--color-slate-900);\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\\/50 {\n background-color: color-mix(in srgb, #fff 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 50%, transparent);\n }\n }\n .bg-white\\/70 {\n background-color: color-mix(in srgb, #fff 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 70%, transparent);\n }\n }\n .bg-white\\/80 {\n background-color: color-mix(in srgb, #fff 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-white) 80%, transparent);\n }\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 .from-blue-500\\/20 {\n --tw-gradient-from: color-mix(in srgb, oklch(62.3% 0.214 259.815) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-blue-500) 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 .from-blue-600 {\n --tw-gradient-from: var(--color-blue-600);\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-orange-200 {\n --tw-gradient-from: var(--color-orange-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-red-200 {\n --tw-gradient-from: var(--color-red-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-slate-300 {\n --tw-gradient-from: var(--color-slate-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 .via-indigo-200 {\n --tw-gradient-via: var(--color-indigo-200);\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-purple-200 {\n --tw-gradient-via: var(--color-purple-200);\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-yellow-100 {\n --tw-gradient-via: var(--color-yellow-100);\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-blue-200 {\n --tw-gradient-to: var(--color-blue-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-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-indigo-500 {\n --tw-gradient-to: var(--color-indigo-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 .to-indigo-500\\/20 {\n --tw-gradient-to: color-mix(in srgb, oklch(58.5% 0.233 277.117) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-indigo-500) 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-slate-300 {\n --tw-gradient-to: var(--color-slate-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 .bg-clip-text {\n background-clip: text;\n }\n .object-cover {\n object-fit: cover;\n }\n .p-0\\.5 {\n padding: calc(var(--spacing) * 0.5);\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-2\\.5 {\n padding: calc(var(--spacing) * 2.5);\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-12 {\n padding: calc(var(--spacing) * 12);\n }\n .px-0\\.5 {\n padding-inline: calc(var(--spacing) * 0.5);\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-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 .px-8 {\n padding-inline: calc(var(--spacing) * 8);\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-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-5 {\n padding-block: calc(var(--spacing) * 5);\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-20 {\n padding-block: calc(var(--spacing) * 20);\n }\n .py-24 {\n padding-block: calc(var(--spacing) * 24);\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-4 {\n padding-top: calc(var(--spacing) * 4);\n }\n .pt-6 {\n padding-top: calc(var(--spacing) * 6);\n }\n .pt-8 {\n padding-top: calc(var(--spacing) * 8);\n }\n .pt-32 {\n padding-top: calc(var(--spacing) * 32);\n }\n .pr-2 {\n padding-right: calc(var(--spacing) * 2);\n }\n .pr-4 {\n padding-right: calc(var(--spacing) * 4);\n }\n .pr-12 {\n padding-right: calc(var(--spacing) * 12);\n }\n .pb-1 {\n padding-bottom: calc(var(--spacing) * 1);\n }\n .pb-2 {\n padding-bottom: calc(var(--spacing) * 2);\n }\n .pb-4 {\n padding-bottom: calc(var(--spacing) * 4);\n }\n .pb-8 {\n padding-bottom: calc(var(--spacing) * 8);\n }\n .pb-20 {\n padding-bottom: calc(var(--spacing) * 20);\n }\n .pl-2 {\n padding-left: calc(var(--spacing) * 2);\n }\n .pl-4 {\n padding-left: calc(var(--spacing) * 4);\n }\n .pl-5 {\n padding-left: calc(var(--spacing) * 5);\n }\n .pl-9 {\n padding-left: calc(var(--spacing) * 9);\n }\n .pl-12 {\n padding-left: calc(var(--spacing) * 12);\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 .font-mono {\n font-family: var(--font-mono);\n }\n .font-sans {\n font-family: var(--font-sans);\n }\n .font-serif {\n font-family: var(--font-serif);\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-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-\\[9px\\] {\n font-size: 9px;\n }\n .text-\\[10px\\] {\n font-size: 10px;\n }\n .leading-\\[1\\.1\\] {\n --tw-leading: 1.1;\n line-height: 1.1;\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .leading-tight {\n --tw-leading: var(--leading-tight);\n line-height: var(--leading-tight);\n }\n .font-black {\n --tw-font-weight: var(--font-weight-black);\n font-weight: var(--font-weight-black);\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 .whitespace-pre-wrap {\n white-space: pre-wrap;\n }\n .text-amber-500 {\n color: var(--color-amber-500);\n }\n .text-amber-600 {\n color: var(--color-amber-600);\n }\n .text-amber-800 {\n color: var(--color-amber-800);\n }\n .text-blue-400 {\n color: var(--color-blue-400);\n }\n .text-blue-500 {\n color: var(--color-blue-500);\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-blue-800 {\n color: var(--color-blue-800);\n }\n .text-blue-900 {\n color: var(--color-blue-900);\n }\n .text-gray-800 {\n color: var(--color-gray-800);\n }\n .text-green-500 {\n color: var(--color-green-500);\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-indigo-300 {\n color: var(--color-indigo-300);\n }\n .text-indigo-500 {\n color: var(--color-indigo-500);\n }\n .text-indigo-600 {\n color: var(--color-indigo-600);\n }\n .text-indigo-700 {\n color: var(--color-indigo-700);\n }\n .text-indigo-800 {\n color: var(--color-indigo-800);\n }\n .text-orange-500 {\n color: var(--color-orange-500);\n }\n .text-orange-600 {\n color: var(--color-orange-600);\n }\n .text-purple-600 {\n color: var(--color-purple-600);\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-red-900 {\n color: var(--color-red-900);\n }\n .text-rose-800 {\n color: var(--color-rose-800);\n }\n .text-slate-300 {\n color: var(--color-slate-300);\n }\n .text-slate-400 {\n color: var(--color-slate-400);\n }\n .text-slate-500 {\n color: var(--color-slate-500);\n }\n .text-slate-600 {\n color: var(--color-slate-600);\n }\n .text-slate-700 {\n color: var(--color-slate-700);\n }\n .text-slate-800 {\n color: var(--color-slate-800);\n }\n .text-slate-900 {\n color: var(--color-slate-900);\n }\n .text-transparent {\n color: transparent;\n }\n .text-white {\n color: var(--color-white);\n }\n .text-yellow-400 {\n color: var(--color-yellow-400);\n }\n .text-yellow-500 {\n color: var(--color-yellow-500);\n }\n .text-yellow-600 {\n color: var(--color-yellow-600);\n }\n .uppercase {\n text-transform: uppercase;\n }\n .italic {\n font-style: italic;\n }\n .underline {\n text-decoration-line: underline;\n }\n .decoration-blue-500 {\n text-decoration-color: var(--color-blue-500);\n }\n .decoration-indigo-300 {\n text-decoration-color: var(--color-indigo-300);\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 .accent-blue-600 {\n accent-color: var(--color-blue-600);\n }\n .accent-indigo-600 {\n accent-color: var(--color-indigo-600);\n }\n .opacity-0 {\n opacity: 0%;\n }\n .opacity-20 {\n opacity: 20%;\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-2xl {\n --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));\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_10px_rgba\\(59\\,130\\,246\\,0\\.5\\)\\] {\n --tw-shadow: 0 0 10px var(--tw-shadow-color, rgba(59,130,246,0.5));\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_10px_rgba\\(99\\,102\\,241\\,0\\.5\\)\\] {\n --tw-shadow: 0 0 10px var(--tw-shadow-color, rgba(99,102,241,0.5));\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-\\[0px_2px_0px_0px_rgba\\(203\\,213\\,225\\,1\\)\\] {\n --tw-shadow: 0px 2px 0px 0px var(--tw-shadow-color, rgba(203,213,225,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-inner {\n --tw-shadow: inset 0 2px 4px 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 .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-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 .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 .shadow-blue-200 {\n --tw-shadow-color: oklch(88.2% 0.059 254.128);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow-color: color-mix(in oklab, var(--color-blue-200) var(--tw-shadow-alpha), transparent);\n }\n }\n .shadow-indigo-100 {\n --tw-shadow-color: oklch(93% 0.034 272.788);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow-color: color-mix(in oklab, var(--color-indigo-100) var(--tw-shadow-alpha), transparent);\n }\n }\n .ring-amber-200 {\n --tw-ring-color: var(--color-amber-200);\n }\n .ring-blue-200 {\n --tw-ring-color: var(--color-blue-200);\n }\n .ring-indigo-200 {\n --tw-ring-color: var(--color-indigo-200);\n }\n .ring-indigo-400 {\n --tw-ring-color: var(--color-indigo-400);\n }\n .ring-indigo-500 {\n --tw-ring-color: var(--color-indigo-500);\n }\n .ring-offset-1 {\n --tw-ring-offset-width: 1px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n .blur-3xl {\n --tw-blur: blur(var(--blur-3xl));\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .blur-\\[1px\\] {\n --tw-blur: blur(1px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .blur-\\[60px\\] {\n --tw-blur: blur(60px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .blur-\\[120px\\] {\n --tw-blur: blur(120px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .blur-\\[150px\\] {\n --tw-blur: blur(150px);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .grayscale {\n --tw-grayscale: grayscale(100%);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .sepia {\n --tw-sepia: sepia(100%);\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .filter {\n filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);\n }\n .backdrop-blur-md {\n --tw-backdrop-blur: blur(var(--blur-md));\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 .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-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 .duration-100 {\n --tw-duration: 100ms;\n transition-duration: 100ms;\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 .duration-500 {\n --tw-duration: 500ms;\n transition-duration: 500ms;\n }\n .duration-1000 {\n --tw-duration: 1000ms;\n transition-duration: 1000ms;\n }\n .ease-in-out {\n --tw-ease: var(--ease-in-out);\n transition-timing-function: var(--ease-in-out);\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .group-hover\\:translate-x-1 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n --tw-translate-x: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n }\n .group-hover\\:bg-blue-600 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n background-color: var(--color-blue-600);\n }\n }\n }\n .group-hover\\:text-blue-600 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n color: var(--color-blue-600);\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 .selection\\:bg-blue-200 {\n & *::selection {\n background-color: var(--color-blue-200);\n }\n &::selection {\n background-color: var(--color-blue-200);\n }\n }\n .hover\\:scale-105 {\n &:hover {\n @media (hover: hover) {\n --tw-scale-x: 105%;\n --tw-scale-y: 105%;\n --tw-scale-z: 105%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .hover\\:scale-110 {\n &:hover {\n @media (hover: hover) {\n --tw-scale-x: 110%;\n --tw-scale-y: 110%;\n --tw-scale-z: 110%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .hover\\:scale-\\[1\\.02\\] {\n &:hover {\n @media (hover: hover) {\n scale: 1.02;\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-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-blue-300);\n }\n }\n }\n .hover\\:border-indigo-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-indigo-200);\n }\n }\n }\n .hover\\:border-indigo-400 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-indigo-400);\n }\n }\n }\n .hover\\:border-indigo-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-indigo-500);\n }\n }\n }\n .hover\\:border-slate-200 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-slate-200);\n }\n }\n }\n .hover\\:border-slate-300 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-slate-300);\n }\n }\n }\n .hover\\:bg-amber-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-amber-50);\n }\n }\n }\n .hover\\:bg-amber-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-amber-100);\n }\n }\n }\n .hover\\:bg-black\\/10 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #000 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 10%, transparent);\n }\n }\n }\n }\n .hover\\:bg-blue-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-blue-50);\n }\n }\n }\n .hover\\:bg-blue-600 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-blue-600);\n }\n }\n }\n .hover\\:bg-blue-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-blue-700);\n }\n }\n }\n .hover\\:bg-blue-800 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-blue-800);\n }\n }\n }\n .hover\\:bg-indigo-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-indigo-50);\n }\n }\n }\n .hover\\:bg-indigo-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-indigo-100);\n }\n }\n }\n .hover\\:bg-indigo-200 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-indigo-200);\n }\n }\n }\n .hover\\:bg-indigo-700 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-indigo-700);\n }\n }\n }\n .hover\\:bg-red-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-red-50);\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-red-900\\/20 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, oklch(39.6% 0.141 25.723) 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-red-900) 20%, transparent);\n }\n }\n }\n }\n .hover\\:bg-slate-50 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-50);\n }\n }\n }\n .hover\\:bg-slate-100 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-100);\n }\n }\n }\n .hover\\:bg-slate-200 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-200);\n }\n }\n }\n .hover\\:bg-slate-300 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-300);\n }\n }\n }\n .hover\\:bg-slate-800 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-800);\n }\n }\n }\n .hover\\:bg-slate-900 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-slate-900);\n }\n }\n }\n .hover\\:bg-white {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-white);\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\\:text-blue-400 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-400);\n }\n }\n }\n .hover\\:text-blue-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-500);\n }\n }\n }\n .hover\\:text-blue-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-600);\n }\n }\n }\n .hover\\:text-blue-800 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-blue-800);\n }\n }\n }\n .hover\\:text-indigo-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-600);\n }\n }\n }\n .hover\\:text-indigo-700 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-700);\n }\n }\n }\n .hover\\:text-indigo-800 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-indigo-800);\n }\n }\n }\n .hover\\:text-red-400 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-red-400);\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-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-red-600);\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-slate-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-500);\n }\n }\n }\n .hover\\:text-slate-600 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-600);\n }\n }\n }\n .hover\\:text-slate-800 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-800);\n }\n }\n }\n .hover\\:text-slate-900 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-slate-900);\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\\:decoration-indigo-600 {\n &:hover {\n @media (hover: hover) {\n text-decoration-color: var(--color-indigo-600);\n }\n }\n }\n .hover\\:shadow-2xl {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));\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-blue-200 {\n &:hover {\n @media (hover: hover) {\n --tw-shadow-color: oklch(88.2% 0.059 254.128);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-shadow-color: color-mix(in oklab, var(--color-blue-200) var(--tw-shadow-alpha), transparent);\n }\n }\n }\n }\n .focus\\:border-b {\n &:focus {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n }\n .focus\\:border-blue-500 {\n &:focus {\n border-color: var(--color-blue-500);\n }\n }\n .focus\\:border-indigo-400 {\n &:focus {\n border-color: var(--color-indigo-400);\n }\n }\n .focus\\:border-indigo-500 {\n &:focus {\n border-color: var(--color-indigo-500);\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-4 {\n &:focus {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(4px + 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-blue-300 {\n &:focus {\n --tw-ring-color: var(--color-blue-300);\n }\n }\n .focus\\:ring-blue-500 {\n &:focus {\n --tw-ring-color: var(--color-blue-500);\n }\n }\n .focus\\:ring-indigo-500 {\n &:focus {\n --tw-ring-color: var(--color-indigo-500);\n }\n }\n .focus\\:outline-none {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n }\n .active\\:cursor-grabbing {\n &:active {\n cursor: grabbing;\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 .sm\\:w-auto {\n @media (width >= 40rem) {\n width: auto;\n }\n }\n .sm\\:flex-row {\n @media (width >= 40rem) {\n flex-direction: row;\n }\n }\n .md\\:flex {\n @media (width >= 48rem) {\n display: flex;\n }\n }\n .md\\:w-1\\/3 {\n @media (width >= 48rem) {\n width: calc(1 / 3 * 100%);\n }\n }\n .md\\:w-64 {\n @media (width >= 48rem) {\n width: calc(var(--spacing) * 64);\n }\n }\n .md\\:w-auto {\n @media (width >= 48rem) {\n width: auto;\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\\:flex-row {\n @media (width >= 48rem) {\n flex-direction: row;\n }\n }\n .md\\:items-center {\n @media (width >= 48rem) {\n align-items: center;\n }\n }\n .md\\:p-12 {\n @media (width >= 48rem) {\n padding: calc(var(--spacing) * 12);\n }\n }\n .md\\:text-7xl {\n @media (width >= 48rem) {\n font-size: var(--text-7xl);\n line-height: var(--tw-leading, var(--text-7xl--line-height));\n }\n }\n .lg\\:col-span-2 {\n @media (width >= 64rem) {\n grid-column: span 2 / span 2;\n }\n }\n .lg\\:flex {\n @media (width >= 64rem) {\n display: flex;\n }\n }\n .lg\\:w-1\\/2 {\n @media (width >= 64rem) {\n width: calc(1 / 2 * 100%);\n }\n }\n .lg\\:w-96 {\n @media (width >= 64rem) {\n width: calc(var(--spacing) * 96);\n }\n }\n .lg\\:grid-cols-3 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n}\n.editor-content:empty:before {\n content: attr(placeholder);\n color: #9ca3af;\n pointer-events: none;\n}\n::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n::-webkit-scrollbar-track {\n background: transparent;\n}\n::-webkit-scrollbar-thumb {\n background: #cbd5e1;\n border-radius: 3px;\n}\n::-webkit-scrollbar-thumb:hover {\n background: #94a3b8;\n}\n@media print {\n @page {\n margin: 2cm;\n size: auto;\n }\n html, body {\n height: auto !important;\n overflow: visible !important;\n margin: 0 !important;\n padding: 0 !important;\n background: white !important;\n color: black !important;\n }\n #__next {\n height: auto !important;\n overflow: visible !important;\n display: block !important;\n position: relative !important;\n }\n .no-print {\n display: none !important;\n }\n .print-only {\n display: block !important;\n }\n .break-before-page {\n page-break-before: always;\n break-before: page;\n }\n .break-after-page {\n page-break-after: always;\n break-after: page;\n }\n p {\n text-align: justify;\n widows: 3;\n orphans: 3;\n color: black !important;\n }\n h1, h2, h3, h4 {\n color: black !important;\n page-break-after: avoid;\n }\n a {\n text-decoration: none;\n color: black !important;\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-scale-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-rotate-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-z {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-space-y-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-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-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-alpha {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-drop-shadow-size {\n syntax: \"*\";\n inherits: false;\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@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\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-scale-x: 1;\n --tw-scale-y: 1;\n --tw-scale-z: 1;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-space-y-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-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-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\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 }\n }\n}\r\n"],"names":[],"mappings":"AACA;EAy4FE;IACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAz4FJ;EAEE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAFF;EAwIE;;;;;;;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;;;;;AAvRF;;AAAA;EA4RE;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAyB;;;;;EAGzB;IAAyB;;;;;EAGzB;IAAyB;;;;;EAGzB;IAAyB;;;;;EAGzB;IAAyB;;;;;EAI3B;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;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;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;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;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;;;EAMA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;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;;;;;;;;EASA;;;;EAKA;;;;EAIF;;;;;;EAKA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;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;;;;EAGA;;;;EAGA;;;;EAGA;;;;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;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;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;;;;;EAIA;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;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;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;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;;;;;EAIA;;;;E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"}}] } \ No newline at end of file diff --git a/.next/dev/trace b/.next/dev/trace index d0fc80e..156c65a 100644 --- a/.next/dev/trace +++ b/.next/dev/trace @@ -21,3 +21,54 @@ [{"name":"ensure-page","duration":854,"timestamp":442132272317,"id":42,"parentId":3,"tags":{"inputPage":"/dashboard/page"},"startTime":1772188677272,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":42012,"timestamp":442132242132,"id":38,"tags":{"url":"/dashboard?_rsc=6k3yh"},"startTime":1772188677241,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":5,"timestamp":442132284175,"id":43,"parentId":38,"tags":{"url":"/dashboard?_rsc=6k3yh","memory.rss":"814137344","memory.heapUsed":"134592936","memory.heapTotal":"167358464"},"startTime":1772188677283,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":13989,"timestamp":442132272007,"id":41,"tags":{"url":"/dashboard?_rsc=6k3yh"},"startTime":1772188677271,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":11,"timestamp":442132286084,"id":44,"parentId":41,"tags":{"url":"/dashboard?_rsc=6k3yh","memory.rss":"814329856","memory.heapUsed":"134805896","memory.heapTotal":"167358464"},"startTime":1772188677285,"traceId":"9e112160a2e09428"},{"name":"compile-path","duration":5534,"timestamp":442132326557,"id":47,"tags":{"trigger":"/api/projects"},"startTime":1772188677326,"traceId":"9e112160a2e09428"}] [{"name":"handle-request","duration":48683,"timestamp":442132326252,"id":45,"tags":{"url":"/api/projects"},"startTime":1772188677325,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":5,"timestamp":442132374966,"id":48,"parentId":45,"tags":{"url":"/api/projects","memory.rss":"826421248","memory.heapUsed":"143013432","memory.heapTotal":"172122112"},"startTime":1772188677374,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":522,"timestamp":442132376013,"id":50,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772188677375,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":25363,"timestamp":442132375787,"id":49,"tags":{"url":"/api/projects"},"startTime":1772188677375,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":4,"timestamp":442132401176,"id":51,"parentId":49,"tags":{"url":"/api/projects","memory.rss":"826724352","memory.heapUsed":"144470912","memory.heapTotal":"172384256"},"startTime":1772188677400,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":469,"timestamp":442135250522,"id":52,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772188680250,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":236,"timestamp":442135251035,"id":53,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772188680250,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":136,"timestamp":442135252031,"id":56,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772188680251,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":95,"timestamp":442135252182,"id":57,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772188680251,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":1220,"timestamp":442135251724,"id":55,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1772188680251,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":718,"timestamp":442135260040,"id":59,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772188680259,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":8282,"timestamp":442135259854,"id":58,"tags":{"url":"/api/auth/csrf"},"startTime":1772188680259,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":6,"timestamp":442135268164,"id":60,"parentId":58,"tags":{"url":"/api/auth/csrf","memory.rss":"827650048","memory.heapUsed":"148364056","memory.heapTotal":"172883968"},"startTime":1772188680267,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":20257,"timestamp":442135251480,"id":54,"tags":{"url":"/?_rsc=1h1b5"},"startTime":1772188680251,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":4,"timestamp":442135271754,"id":61,"parentId":54,"tags":{"url":"/?_rsc=1h1b5","memory.rss":"821669888","memory.heapUsed":"136071808","memory.heapTotal":"170393600"},"startTime":1772188680271,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":341,"timestamp":442135273063,"id":62,"parentId":3,"tags":{"inputPage":"/api/auth/signout"},"startTime":1772188680272,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":249,"timestamp":442135273433,"id":63,"parentId":3,"tags":{"inputPage":"/api/auth/signout"},"startTime":1772188680273,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":345,"timestamp":442135274059,"id":64,"parentId":3,"tags":{"inputPage":"/api/auth/signout"},"startTime":1772188680273,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":380,"timestamp":442135274432,"id":65,"parentId":3,"tags":{"inputPage":"/api/auth/signout"},"startTime":1772188680274,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":656,"timestamp":442135275897,"id":67,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772188680275,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":10976,"timestamp":442135275308,"id":66,"tags":{"url":"/api/auth/signout"},"startTime":1772188680275,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":17,"timestamp":442135286308,"id":68,"parentId":66,"tags":{"url":"/api/auth/signout","memory.rss":"822210560","memory.heapUsed":"137553192","memory.heapTotal":"170655744"},"startTime":1772188680286,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":343,"timestamp":442135307500,"id":69,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772188680307,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":322,"timestamp":442135307876,"id":70,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772188680307,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":253,"timestamp":442135308640,"id":71,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772188680308,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":231,"timestamp":442135308917,"id":72,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772188680308,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":545,"timestamp":442135310179,"id":74,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772188680309,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":6401,"timestamp":442135309802,"id":73,"tags":{"url":"/api/auth/session"},"startTime":1772188680309,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":8,"timestamp":442135316241,"id":75,"parentId":73,"tags":{"url":"/api/auth/session","memory.rss":"822702080","memory.heapUsed":"138962208","memory.heapTotal":"171180032"},"startTime":1772188680315,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":1433,"timestamp":442136549742,"id":77,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772188681549,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":11608,"timestamp":442136549387,"id":76,"tags":{"url":"/login?_rsc=vusbg"},"startTime":1772188681549,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":3,"timestamp":442136561015,"id":78,"parentId":76,"tags":{"url":"/login?_rsc=vusbg","memory.rss":"823328768","memory.heapUsed":"141361944","memory.heapTotal":"171442176"},"startTime":1772188681560,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":766,"timestamp":442137420115,"id":80,"parentId":3,"tags":{"inputPage":"/signup/page"},"startTime":1772188682419,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":9774,"timestamp":442137419881,"id":79,"tags":{"url":"/signup?_rsc=5c339"},"startTime":1772188682419,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":6,"timestamp":442137429685,"id":81,"parentId":79,"tags":{"url":"/signup?_rsc=5c339","memory.rss":"823750656","memory.heapUsed":"143746856","memory.heapTotal":"171966464"},"startTime":1772188682429,"traceId":"9e112160a2e09428"},{"name":"compile-path","duration":86555,"timestamp":442148667237,"id":84,"tags":{"trigger":"/api/auth/register"},"startTime":1772188693666,"traceId":"9e112160a2e09428"}] [{"name":"handle-request","duration":333356,"timestamp":442148666617,"id":82,"tags":{"url":"/api/auth/register"},"startTime":1772188693666,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":1,"timestamp":442148999993,"id":85,"parentId":82,"tags":{"url":"/api/auth/register","memory.rss":"863469568","memory.heapUsed":"136377384","memory.heapTotal":"146788352"},"startTime":1772188693999,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":236,"timestamp":442149015380,"id":86,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772188694015,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":163,"timestamp":442149015642,"id":87,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772188694015,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":152,"timestamp":442149016078,"id":88,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772188694015,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":134,"timestamp":442149016244,"id":89,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772188694015,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":529,"timestamp":442149016981,"id":91,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772188694016,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":9335,"timestamp":442149016761,"id":90,"tags":{"url":"/api/auth/providers"},"startTime":1772188694016,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":2,"timestamp":442149026113,"id":92,"parentId":90,"tags":{"url":"/api/auth/providers","memory.rss":"865673216","memory.heapUsed":"138012168","memory.heapTotal":"147312640"},"startTime":1772188694025,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":180,"timestamp":442149030853,"id":93,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772188694030,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":109,"timestamp":442149031069,"id":94,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772188694030,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":152,"timestamp":442149031556,"id":95,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772188694031,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":106,"timestamp":442149031725,"id":96,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772188694031,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":490,"timestamp":442149032410,"id":98,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772188694032,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":3883,"timestamp":442149032165,"id":97,"tags":{"url":"/api/auth/csrf"},"startTime":1772188694031,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":1,"timestamp":442149036069,"id":99,"parentId":97,"tags":{"url":"/api/auth/csrf","memory.rss":"864645120","memory.heapUsed":"137909128","memory.heapTotal":"147574784"},"startTime":1772188694035,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":189,"timestamp":442149039758,"id":100,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772188694039,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":158,"timestamp":442149039969,"id":101,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772188694039,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":174,"timestamp":442149040433,"id":102,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772188694040,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":108,"timestamp":442149040626,"id":103,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772188694040,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":453,"timestamp":442149041321,"id":105,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772188694041,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":206326,"timestamp":442149041110,"id":104,"tags":{"url":"/api/auth/callback/credentials?"},"startTime":1772188694040,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":2,"timestamp":442149247457,"id":106,"parentId":104,"tags":{"url":"/api/auth/callback/credentials?","memory.rss":"866349056","memory.heapUsed":"138585096","memory.heapTotal":"148361216"},"startTime":1772188694247,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":359,"timestamp":442149251781,"id":107,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772188694251,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":248,"timestamp":442149252170,"id":108,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772188694251,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":252,"timestamp":442149252924,"id":109,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772188694252,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":279,"timestamp":442149253201,"id":110,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772188694252,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":558,"timestamp":442149254387,"id":112,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772188694254,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":6665,"timestamp":442149254008,"id":111,"tags":{"url":"/api/auth/session"},"startTime":1772188694253,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":1,"timestamp":442149260690,"id":113,"parentId":111,"tags":{"url":"/api/auth/session","memory.rss":"867016704","memory.heapUsed":"139061016","memory.heapTotal":"153079808"},"startTime":1772188694260,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":438,"timestamp":442149268465,"id":115,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772188694268,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":24777,"timestamp":442149268182,"id":114,"tags":{"url":"/api/user/profile"},"startTime":1772188694267,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":2,"timestamp":442149292983,"id":116,"parentId":114,"tags":{"url":"/api/user/profile","memory.rss":"867401728","memory.heapUsed":"140674824","memory.heapTotal":"153341952"},"startTime":1772188694292,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":925,"timestamp":442149298771,"id":118,"parentId":3,"tags":{"inputPage":"/dashboard/page"},"startTime":1772188694298,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":15498,"timestamp":442149298393,"id":117,"tags":{"url":"/dashboard?_rsc=6k3yh"},"startTime":1772188694298,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":2,"timestamp":442149313911,"id":119,"parentId":117,"tags":{"url":"/dashboard?_rsc=6k3yh","memory.rss":"870731776","memory.heapUsed":"140860136","memory.heapTotal":"154103808"},"startTime":1772188694313,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":614,"timestamp":442149348985,"id":121,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772188694348,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":17676,"timestamp":442149348612,"id":120,"tags":{"url":"/api/projects"},"startTime":1772188694348,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":14,"timestamp":442149366352,"id":122,"parentId":120,"tags":{"url":"/api/projects","memory.rss":"868048896","memory.heapUsed":"134598768","memory.heapTotal":"151109632"},"startTime":1772188694366,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":699,"timestamp":442149368469,"id":124,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772188694368,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":29144,"timestamp":442149368104,"id":123,"tags":{"url":"/api/projects"},"startTime":1772188694367,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":3,"timestamp":442149397285,"id":125,"parentId":123,"tags":{"url":"/api/projects","memory.rss":"868077568","memory.heapUsed":"135995056","memory.heapTotal":"151109632"},"startTime":1772188694396,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":222,"timestamp":442154106459,"id":126,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772188699106,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":115,"timestamp":442154106704,"id":127,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772188699106,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":203,"timestamp":442154107137,"id":128,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772188699106,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":113,"timestamp":442154107361,"id":129,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772188699107,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":170,"timestamp":442157443761,"id":130,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772188702443,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":97,"timestamp":442157443951,"id":131,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772188702443,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":792,"timestamp":442157444439,"id":133,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1772188702444,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":189,"timestamp":442157453417,"id":134,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772188702453,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":99,"timestamp":442157453626,"id":135,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772188702453,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":556,"timestamp":442157454347,"id":137,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772188702454,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":8453,"timestamp":442157454157,"id":136,"tags":{"url":"/api/auth/csrf"},"startTime":1772188702453,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":3,"timestamp":442157462643,"id":138,"parentId":136,"tags":{"url":"/api/auth/csrf","memory.rss":"835362816","memory.heapUsed":"137962552","memory.heapTotal":"150560768"},"startTime":1772188702462,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":19441,"timestamp":442157444210,"id":132,"tags":{"url":"/?_rsc=1h1b5"},"startTime":1772188702443,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":1,"timestamp":442157463666,"id":139,"parentId":132,"tags":{"url":"/?_rsc=1h1b5","memory.rss":"835362816","memory.heapUsed":"138020112","memory.heapTotal":"150560768"},"startTime":1772188702463,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":390,"timestamp":442157507140,"id":140,"parentId":3,"tags":{"inputPage":"/api/auth/signout"},"startTime":1772188702506,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":167,"timestamp":442157507578,"id":141,"parentId":3,"tags":{"inputPage":"/api/auth/signout"},"startTime":1772188702507,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":299,"timestamp":442157508162,"id":142,"parentId":3,"tags":{"inputPage":"/api/auth/signout"},"startTime":1772188702507,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":275,"timestamp":442157508489,"id":143,"parentId":3,"tags":{"inputPage":"/api/auth/signout"},"startTime":1772188702508,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":1042,"timestamp":442157509759,"id":145,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772188702509,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":10329,"timestamp":442157509364,"id":144,"tags":{"url":"/api/auth/signout"},"startTime":1772188702509,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":2,"timestamp":442157519720,"id":146,"parentId":144,"tags":{"url":"/api/auth/signout","memory.rss":"835534848","memory.heapUsed":"137479256","memory.heapTotal":"150822912"},"startTime":1772188702519,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":357,"timestamp":442157525470,"id":147,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772188702525,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":251,"timestamp":442157525862,"id":148,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772188702525,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":324,"timestamp":442157526602,"id":149,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772188702526,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":445,"timestamp":442157526952,"id":150,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772188702526,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":1020,"timestamp":442157528541,"id":152,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772188702528,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":7969,"timestamp":442157528101,"id":151,"tags":{"url":"/api/auth/session"},"startTime":1772188702527,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":4,"timestamp":442157536108,"id":153,"parentId":151,"tags":{"url":"/api/auth/session","memory.rss":"836468736","memory.heapUsed":"138681672","memory.heapTotal":"151085056"},"startTime":1772188702535,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":837,"timestamp":442160099532,"id":155,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772188705099,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":12971,"timestamp":442160099206,"id":154,"tags":{"url":"/login?_rsc=vusbg"},"startTime":1772188705098,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":1,"timestamp":442160112196,"id":156,"parentId":154,"tags":{"url":"/login?_rsc=vusbg","memory.rss":"835964928","memory.heapUsed":"138620552","memory.heapTotal":"151871488"},"startTime":1772188705111,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":857,"timestamp":442161128736,"id":158,"parentId":3,"tags":{"inputPage":"/signup/page"},"startTime":1772188706128,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":13380,"timestamp":442161128366,"id":157,"tags":{"url":"/signup?_rsc=5c339"},"startTime":1772188706128,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":3,"timestamp":442161141771,"id":159,"parentId":157,"tags":{"url":"/signup?_rsc=5c339","memory.rss":"836354048","memory.heapUsed":"140987016","memory.heapTotal":"151871488"},"startTime":1772188706141,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":647,"timestamp":442176513579,"id":161,"parentId":3,"tags":{"inputPage":"/api/auth/register/route"},"startTime":1772188721513,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":214246,"timestamp":442176513244,"id":160,"tags":{"url":"/api/auth/register"},"startTime":1772188721512,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":1,"timestamp":442176727512,"id":162,"parentId":160,"tags":{"url":"/api/auth/register","memory.rss":"823287808","memory.heapUsed":"141194272","memory.heapTotal":"159735808"},"startTime":1772188721727,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":187,"timestamp":442176732085,"id":163,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772188721731,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":108,"timestamp":442176732295,"id":164,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772188721732,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":152,"timestamp":442176732746,"id":165,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772188721732,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":101,"timestamp":442176732913,"id":166,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772188721732,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":563,"timestamp":442176733632,"id":168,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772188721733,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":8499,"timestamp":442176733331,"id":167,"tags":{"url":"/api/auth/providers"},"startTime":1772188721733,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":2,"timestamp":442176741856,"id":169,"parentId":167,"tags":{"url":"/api/auth/providers","memory.rss":"823566336","memory.heapUsed":"142587376","memory.heapTotal":"159997952"},"startTime":1772188721741,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":184,"timestamp":442176746841,"id":170,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772188721746,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":123,"timestamp":442176747052,"id":171,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772188721746,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":143,"timestamp":442176747422,"id":172,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772188721747,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":105,"timestamp":442176747580,"id":173,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772188721747,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":408,"timestamp":442176748253,"id":175,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772188721747,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":4009,"timestamp":442176748048,"id":174,"tags":{"url":"/api/auth/csrf"},"startTime":1772188721747,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":2,"timestamp":442176752080,"id":176,"parentId":174,"tags":{"url":"/api/auth/csrf","memory.rss":"825004032","memory.heapUsed":"144197128","memory.heapTotal":"160727040"},"startTime":1772188721751,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":202,"timestamp":442176756450,"id":177,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772188721756,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":116,"timestamp":442176756673,"id":178,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772188721756,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":155,"timestamp":442176757011,"id":179,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772188721756,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":128,"timestamp":442176757185,"id":180,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772188721756,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":963,"timestamp":442176757804,"id":182,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772188721757,"traceId":"9e112160a2e09428"},{"name":"handle-request","duration":191422,"timestamp":442176757606,"id":181,"tags":{"url":"/api/auth/callback/credentials?"},"startTime":1772188721757,"traceId":"9e112160a2e09428"},{"name":"memory-usage","duration":1,"timestamp":442176949050,"id":183,"parentId":181,"tags":{"url":"/api/auth/callback/credentials?","memory.rss":"826855424","memory.heapUsed":"141748984","memory.heapTotal":"148668416"},"startTime":1772188721948,"traceId":"9e112160a2e09428"},{"name":"ensure-page","duration":166,"timestamp":442176953821,"id":184,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772188721953,"traceId":"9e112160a2e09428"}] +[{"name":"hot-reloader","duration":37,"timestamp":445161892739,"id":3,"tags":{"version":"16.1.6"},"startTime":1772191706892,"traceId":"0ba7bcf04db23df0"},{"name":"setup-dev-bundler","duration":204811,"timestamp":445161811468,"id":2,"parentId":1,"tags":{},"startTime":1772191706811,"traceId":"0ba7bcf04db23df0"},{"name":"start-dev-server","duration":577808,"timestamp":445161514367,"id":1,"tags":{"cpus":"32","platform":"win32","memory.freeMem":"7660601344","memory.totalMem":"34186964992","memory.heapSizeLimit":"17143169024","memory.rss":"281157632","memory.heapTotal":"90951680","memory.heapUsed":"66766304"},"startTime":1772191706514,"traceId":"0ba7bcf04db23df0"},{"name":"compile-path","duration":314866,"timestamp":445163445504,"id":6,"tags":{"trigger":"/"},"startTime":1772191708445,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":315229,"timestamp":445163445304,"id":5,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1772191708445,"traceId":"0ba7bcf04db23df0"}] +[{"name":"handle-request","duration":515098,"timestamp":445163441890,"id":4,"tags":{"url":"/"},"startTime":1772191708441,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":5,"timestamp":445163957043,"id":7,"parentId":4,"tags":{"url":"/","memory.rss":"457830400","memory.heapUsed":"88866952","memory.heapTotal":"128491520"},"startTime":1772191708956,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":564,"timestamp":445164206204,"id":8,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772191709206,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":250,"timestamp":445164206832,"id":9,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772191709206,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":269,"timestamp":445164207629,"id":10,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772191709207,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":149,"timestamp":445164207935,"id":11,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772191709207,"traceId":"0ba7bcf04db23df0"},{"name":"compile-path","duration":11301,"timestamp":445164209632,"id":14,"tags":{"trigger":"/api/auth/[...nextauth]"},"startTime":1772191709209,"traceId":"0ba7bcf04db23df0"}] +[{"name":"handle-request","duration":634783,"timestamp":445164209079,"id":12,"tags":{"url":"/api/auth/session"},"startTime":1772191709208,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":9,"timestamp":445164843953,"id":15,"parentId":12,"tags":{"url":"/api/auth/session","memory.rss":"522387456","memory.heapUsed":"114276712","memory.heapTotal":"139870208"},"startTime":1772191709843,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":213,"timestamp":445164853045,"id":16,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772191709852,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":117,"timestamp":445164853285,"id":17,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772191709853,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":274,"timestamp":445164854706,"id":21,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772191709854,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":138,"timestamp":445164855005,"id":22,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772191709854,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":627,"timestamp":445164856757,"id":24,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772191709856,"traceId":"0ba7bcf04db23df0"},{"name":"compile-path","duration":12110,"timestamp":445164854072,"id":20,"tags":{"trigger":"/api/user/profile"},"startTime":1772191709853,"traceId":"0ba7bcf04db23df0"}] +[{"name":"handle-request","duration":93289,"timestamp":445164856087,"id":23,"tags":{"url":"/api/auth/session"},"startTime":1772191709855,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":445164949404,"id":25,"parentId":23,"tags":{"url":"/api/auth/session","memory.rss":"531390464","memory.heapUsed":"114905000","memory.heapTotal":"139862016"},"startTime":1772191709949,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":227949,"timestamp":445164853590,"id":18,"tags":{"url":"/api/user/profile"},"startTime":1772191709853,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":4,"timestamp":445165081570,"id":26,"parentId":18,"tags":{"url":"/api/user/profile","memory.rss":"557592576","memory.heapUsed":"123613992","memory.heapTotal":"158040064"},"startTime":1772191710081,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":624,"timestamp":445165082579,"id":28,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772191710082,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":20031,"timestamp":445165082206,"id":27,"tags":{"url":"/api/user/profile"},"startTime":1772191710082,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":4,"timestamp":445165102268,"id":29,"parentId":27,"tags":{"url":"/api/user/profile","memory.rss":"557981696","memory.heapUsed":"125263888","memory.heapTotal":"158040064"},"startTime":1772191710102,"traceId":"0ba7bcf04db23df0"},{"name":"compile-path","duration":15829,"timestamp":445165376576,"id":32,"tags":{"trigger":"/login"},"startTime":1772191710376,"traceId":"0ba7bcf04db23df0"}] +[{"name":"handle-request","duration":41440,"timestamp":445165376049,"id":30,"tags":{"url":"/login?_rsc=vusbg"},"startTime":1772191710375,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":5,"timestamp":445165417521,"id":33,"parentId":30,"tags":{"url":"/login?_rsc=vusbg","memory.rss":"569032704","memory.heapUsed":"132073592","memory.heapTotal":"159604736"},"startTime":1772191710417,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":480,"timestamp":445174492079,"id":34,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772191719491,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":387,"timestamp":445174492600,"id":35,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772191719492,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":287,"timestamp":445174493513,"id":36,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772191719493,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":316,"timestamp":445174493825,"id":37,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772191719493,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":652,"timestamp":445174495282,"id":39,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772191719495,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":12383,"timestamp":445174494789,"id":38,"tags":{"url":"/api/auth/providers"},"startTime":1772191719494,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":5,"timestamp":445174507207,"id":40,"parentId":38,"tags":{"url":"/api/auth/providers","memory.rss":"572751872","memory.heapUsed":"134440792","memory.heapTotal":"159866880"},"startTime":1772191719507,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":343,"timestamp":445174511757,"id":41,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772191719511,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":251,"timestamp":445174512137,"id":42,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772191719512,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":451,"timestamp":445174512881,"id":43,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772191719512,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":395,"timestamp":445174513362,"id":44,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772191719513,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":864,"timestamp":445174514929,"id":46,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772191719514,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":8376,"timestamp":445174514382,"id":45,"tags":{"url":"/api/auth/csrf"},"startTime":1772191719514,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":6,"timestamp":445174522805,"id":47,"parentId":45,"tags":{"url":"/api/auth/csrf","memory.rss":"573067264","memory.heapUsed":"135692904","memory.heapTotal":"160391168"},"startTime":1772191719522,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":388,"timestamp":445174526125,"id":48,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772191719526,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":273,"timestamp":445174526550,"id":49,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772191719526,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":286,"timestamp":445174527237,"id":50,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772191719527,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":267,"timestamp":445174527548,"id":51,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772191719527,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":940,"timestamp":445174528752,"id":53,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772191719528,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":247312,"timestamp":445174528376,"id":52,"tags":{"url":"/api/auth/callback/credentials?"},"startTime":1772191719528,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":445174775717,"id":54,"parentId":52,"tags":{"url":"/api/auth/callback/credentials?","memory.rss":"577150976","memory.heapUsed":"132529760","memory.heapTotal":"163729408"},"startTime":1772191719775,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":184,"timestamp":445174779894,"id":55,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772191719779,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":112,"timestamp":445174780103,"id":56,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772191719779,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":176,"timestamp":445174780623,"id":57,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772191719780,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":100,"timestamp":445174780815,"id":58,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772191719780,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":582,"timestamp":445174782067,"id":60,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772191719781,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":6828,"timestamp":445174781423,"id":59,"tags":{"url":"/api/auth/session"},"startTime":1772191719781,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":445174788279,"id":61,"parentId":59,"tags":{"url":"/api/auth/session","memory.rss":"577536000","memory.heapUsed":"134151168","memory.heapTotal":"163991552"},"startTime":1772191719788,"traceId":"0ba7bcf04db23df0"},{"name":"compile-path","duration":7812,"timestamp":445174793367,"id":64,"tags":{"trigger":"/dashboard"},"startTime":1772191719793,"traceId":"0ba7bcf04db23df0"}] +[{"name":"ensure-page","duration":582,"timestamp":445174822855,"id":66,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772191719822,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":37312,"timestamp":445174792779,"id":62,"tags":{"url":"/dashboard?_rsc=5c339"},"startTime":1772191719792,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":445174830110,"id":67,"parentId":62,"tags":{"url":"/dashboard?_rsc=5c339","memory.rss":"581361664","memory.heapUsed":"141852000","memory.heapTotal":"166342656"},"startTime":1772191719829,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":20684,"timestamp":445174822611,"id":65,"tags":{"url":"/api/user/profile"},"startTime":1772191719822,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":445174843328,"id":68,"parentId":65,"tags":{"url":"/api/user/profile","memory.rss":"584060928","memory.heapUsed":"142606232","memory.heapTotal":"166866944"},"startTime":1772191719843,"traceId":"0ba7bcf04db23df0"},{"name":"compile-path","duration":5892,"timestamp":445174877108,"id":71,"tags":{"trigger":"/api/projects"},"startTime":1772191719876,"traceId":"0ba7bcf04db23df0"}] +[{"name":"handle-request","duration":55118,"timestamp":445174876841,"id":69,"tags":{"url":"/api/projects"},"startTime":1772191719876,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":445174931991,"id":72,"parentId":69,"tags":{"url":"/api/projects","memory.rss":"594538496","memory.heapUsed":"139522960","memory.heapTotal":"172548096"},"startTime":1772191719931,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":931,"timestamp":445174933383,"id":74,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772191719933,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":27821,"timestamp":445174932994,"id":73,"tags":{"url":"/api/projects"},"startTime":1772191719932,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":445174960841,"id":75,"parentId":73,"tags":{"url":"/api/projects","memory.rss":"594903040","memory.heapUsed":"141096096","memory.heapTotal":"172810240"},"startTime":1772191719960,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":749,"timestamp":445174961907,"id":77,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772191719961,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":18207,"timestamp":445174961715,"id":76,"tags":{"url":"/api/projects"},"startTime":1772191719961,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":445174979950,"id":78,"parentId":76,"tags":{"url":"/api/projects","memory.rss":"595660800","memory.heapUsed":"142579056","memory.heapTotal":"173072384"},"startTime":1772191719979,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":348,"timestamp":445176001791,"id":79,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772191721001,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":306,"timestamp":445176002172,"id":80,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772191721002,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":381,"timestamp":445176003725,"id":81,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772191721003,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":375,"timestamp":445176004170,"id":82,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772191721004,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":262,"timestamp":445176005295,"id":83,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772191721005,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":229,"timestamp":445176005579,"id":84,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772191721005,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":546,"timestamp":445176007514,"id":88,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772191721007,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":385,"timestamp":445176008096,"id":89,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772191721007,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":4689,"timestamp":445176009390,"id":91,"parentId":3,"tags":{"inputPage":"/api/projects/[id]/route"},"startTime":1772191721009,"traceId":"0ba7bcf04db23df0"},{"name":"compile-path","duration":35354,"timestamp":445176006656,"id":87,"tags":{"trigger":"/project/[id]"},"startTime":1772191721006,"traceId":"0ba7bcf04db23df0"}] +[{"name":"handle-request","duration":353552,"timestamp":445176006058,"id":85,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1h1b5"},"startTime":1772191721005,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":445176359643,"id":92,"parentId":85,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1h1b5","memory.rss":"651354112","memory.heapUsed":"146804944","memory.heapTotal":"179191808"},"startTime":1772191721359,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":625,"timestamp":445176410659,"id":94,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772191721410,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":16314,"timestamp":445176410482,"id":93,"tags":{"url":"/api/projects"},"startTime":1772191721410,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":445176426829,"id":95,"parentId":93,"tags":{"url":"/api/projects","memory.rss":"659697664","memory.heapUsed":"149700072","memory.heapTotal":"179191808"},"startTime":1772191721426,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":783,"timestamp":445176428164,"id":97,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772191721428,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":26176,"timestamp":445176427762,"id":96,"tags":{"url":"/api/projects"},"startTime":1772191721427,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":4,"timestamp":445176453979,"id":98,"parentId":96,"tags":{"url":"/api/projects","memory.rss":"659963904","memory.heapUsed":"151788424","memory.heapTotal":"179429376"},"startTime":1772191721453,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":642775,"timestamp":445176009204,"id":90,"tags":{"url":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772191721009,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":445176652001,"id":99,"parentId":90,"tags":{"url":"/api/projects/cmm4125nw0002s0i93fuqcown","memory.rss":"660766720","memory.heapUsed":"154201600","memory.heapTotal":"179834880"},"startTime":1772191721651,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":185,"timestamp":445176652754,"id":100,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772191721652,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":113,"timestamp":445176652958,"id":101,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772191721652,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":243,"timestamp":445176653520,"id":102,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772191721653,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":121,"timestamp":445176653782,"id":103,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772191721653,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":603,"timestamp":445176654546,"id":105,"parentId":3,"tags":{"inputPage":"/api/projects/[id]/route"},"startTime":1772191721654,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":23394,"timestamp":445176654317,"id":104,"tags":{"url":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772191721654,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":445176677731,"id":106,"parentId":104,"tags":{"url":"/api/projects/cmm4125nw0002s0i93fuqcown","memory.rss":"655204352","memory.heapUsed":"143924496","memory.heapTotal":"177868800"},"startTime":1772191721677,"traceId":"0ba7bcf04db23df0"},{"name":"compile-path","duration":20639,"timestamp":445178652971,"id":109,"tags":{"trigger":"/api/ai/generate"},"startTime":1772191723652,"traceId":"0ba7bcf04db23df0"}] +[{"name":"ensure-page","duration":399,"timestamp":445181402635,"id":110,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772191726402,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":259,"timestamp":445181403071,"id":111,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772191726402,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":166,"timestamp":445181403779,"id":112,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772191726403,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":103,"timestamp":445181403962,"id":113,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772191726403,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":4350187,"timestamp":445178652708,"id":107,"tags":{"url":"/api/ai/generate"},"startTime":1772191723652,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":445183002934,"id":114,"parentId":107,"tags":{"url":"/api/ai/generate","memory.rss":"740433920","memory.heapUsed":"155304528","memory.heapTotal":"193245184"},"startTime":1772191728002,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":627,"timestamp":445183031113,"id":116,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772191728030,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":19934,"timestamp":445183030789,"id":115,"tags":{"url":"/api/projects"},"startTime":1772191728030,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":445183050747,"id":117,"parentId":115,"tags":{"url":"/api/projects","memory.rss":"740450304","memory.heapUsed":"156752560","memory.heapTotal":"193245184"},"startTime":1772191728050,"traceId":"0ba7bcf04db23df0"},{"name":"client-hmr-latency","duration":83000,"timestamp":446486692055,"id":118,"parentId":3,"tags":{"updatedModules":[],"page":"/project/cmm4125nw0002s0i93fuqcown","isPageHidden":true},"startTime":1772193031795,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":396,"timestamp":446486797072,"id":119,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772193031796,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":282,"timestamp":446486797505,"id":120,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772193031797,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":410,"timestamp":446486798659,"id":121,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772193031798,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":292,"timestamp":446486799104,"id":122,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772193031798,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1837,"timestamp":446486802166,"id":124,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772193031802,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":60669,"timestamp":446486801475,"id":123,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772193031801,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":446486862185,"id":125,"parentId":123,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"698916864","memory.heapUsed":"167476816","memory.heapTotal":"185737216"},"startTime":1772193031862,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1216,"timestamp":447607879478,"id":127,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194152879,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":76978,"timestamp":447607879108,"id":126,"tags":{"url":"/login"},"startTime":1772194152879,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":447607956111,"id":128,"parentId":126,"tags":{"url":"/login","memory.rss":"687595520","memory.heapUsed":"164093336","memory.heapTotal":"173056000"},"startTime":1772194152956,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":396,"timestamp":447607983423,"id":129,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772194152983,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":274,"timestamp":447607983861,"id":130,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772194152983,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":282,"timestamp":447607984535,"id":131,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772194152984,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":273,"timestamp":447607984849,"id":132,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772194152984,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":337,"timestamp":447608335057,"id":133,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772194153335,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":282,"timestamp":447608335428,"id":134,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772194153335,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":305,"timestamp":447608336253,"id":135,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772194153336,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":247,"timestamp":447608336585,"id":136,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772194153336,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1089,"timestamp":447608338012,"id":138,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772194153338,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":54456,"timestamp":447608337541,"id":137,"tags":{"url":"/api/auth/session"},"startTime":1772194153337,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":23,"timestamp":447608392048,"id":139,"parentId":137,"tags":{"url":"/api/auth/session","memory.rss":"694366208","memory.heapUsed":"170599968","memory.heapTotal":"182042624"},"startTime":1772194153392,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":219,"timestamp":447608523727,"id":140,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772194153523,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":119,"timestamp":447608523972,"id":141,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772194153523,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":326,"timestamp":447608524534,"id":142,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772194153524,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":253,"timestamp":447608524890,"id":143,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772194153524,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":594,"timestamp":447608526228,"id":145,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772194153526,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":10889,"timestamp":447608525828,"id":144,"tags":{"url":"/api/auth/session"},"startTime":1772194153525,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":447608536779,"id":146,"parentId":144,"tags":{"url":"/api/auth/session","memory.rss":"694448128","memory.heapUsed":"170658440","memory.heapTotal":"176537600"},"startTime":1772194153536,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":338,"timestamp":447608541209,"id":147,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772194153541,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":554,"timestamp":447608541580,"id":148,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772194153541,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":328,"timestamp":447608543511,"id":151,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772194153543,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":277,"timestamp":447608543867,"id":152,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772194153543,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1791,"timestamp":447608543042,"id":150,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772194153543,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1207,"timestamp":447608569421,"id":154,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772194153569,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":14203,"timestamp":447608569102,"id":153,"tags":{"url":"/api/auth/session"},"startTime":1772194153569,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":447608583332,"id":155,"parentId":153,"tags":{"url":"/api/auth/session","memory.rss":"701079552","memory.heapUsed":"179130472","memory.heapTotal":"186380288"},"startTime":1772194153583,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":79459,"timestamp":447608542499,"id":149,"tags":{"url":"/api/user/profile"},"startTime":1772194153542,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":447608621984,"id":156,"parentId":149,"tags":{"url":"/api/user/profile","memory.rss":"701091840","memory.heapUsed":"178197024","memory.heapTotal":"186904576"},"startTime":1772194153622,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":815,"timestamp":447608623136,"id":158,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772194153623,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":17271,"timestamp":447608622796,"id":157,"tags":{"url":"/api/user/profile"},"startTime":1772194153622,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":447608640090,"id":159,"parentId":157,"tags":{"url":"/api/user/profile","memory.rss":"701116416","memory.heapUsed":"178625208","memory.heapTotal":"187691008"},"startTime":1772194153640,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":500,"timestamp":447608641142,"id":161,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772194153641,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":14141,"timestamp":447608640946,"id":160,"tags":{"url":"/api/user/profile"},"startTime":1772194153640,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":447608655113,"id":162,"parentId":160,"tags":{"url":"/api/user/profile","memory.rss":"701157376","memory.heapUsed":"180073016","memory.heapTotal":"187691008"},"startTime":1772194153655,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1235,"timestamp":447608689513,"id":164,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772194153689,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":35145,"timestamp":447608689311,"id":163,"tags":{"url":"/api/projects"},"startTime":1772194153689,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":4,"timestamp":447608724501,"id":165,"parentId":163,"tags":{"url":"/api/projects","memory.rss":"706785280","memory.heapUsed":"185681672","memory.heapTotal":"197029888"},"startTime":1772194153724,"traceId":"0ba7bcf04db23df0"},{"name":"client-hmr-latency","duration":80000,"timestamp":448373529674,"id":166,"parentId":3,"tags":{"updatedModules":[],"page":"/project/cmm4125nw0002s0i93fuqcown","isPageHidden":true},"startTime":1772194918620,"traceId":"0ba7bcf04db23df0"},{"name":"client-hmr-latency","duration":80000,"timestamp":448373529719,"id":167,"parentId":3,"tags":{"updatedModules":[],"page":"/login","isPageHidden":false},"startTime":1772194918626,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":170,"timestamp":448373629093,"id":170,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918628,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":97,"timestamp":448373629284,"id":171,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918629,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1406,"timestamp":448373628943,"id":169,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194918628,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":412,"timestamp":448373683611,"id":172,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918683,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":275,"timestamp":448373684062,"id":173,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918683,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":2165,"timestamp":448373687797,"id":175,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194918687,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":35955,"timestamp":448373688330,"id":177,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194918688,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":248,"timestamp":448373737013,"id":178,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918736,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":124,"timestamp":448373737286,"id":179,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918737,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":152,"timestamp":448373738587,"id":182,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918738,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":331,"timestamp":448373738757,"id":183,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918738,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":2368,"timestamp":448373738322,"id":181,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194918738,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":903,"timestamp":448373751031,"id":185,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194918750,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":139406,"timestamp":448373628567,"id":168,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194918628,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448373767997,"id":188,"parentId":168,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"558895104","memory.heapUsed":"185041160","memory.heapTotal":"199585792"},"startTime":1772194918767,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":2272,"timestamp":448373767333,"id":187,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194918767,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":183,"timestamp":448373778647,"id":189,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918778,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":110,"timestamp":448373778855,"id":190,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918778,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":92366,"timestamp":448373687432,"id":174,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194918687,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448373779817,"id":191,"parentId":174,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"559562752","memory.heapUsed":"181482752","memory.heapTotal":"199585792"},"startTime":1772194918779,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":162,"timestamp":448373779957,"id":192,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918779,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":241,"timestamp":448373780135,"id":193,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918779,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":93190,"timestamp":448373688117,"id":176,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194918687,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448373781328,"id":194,"parentId":176,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"559812608","memory.heapUsed":"181902552","memory.heapTotal":"199823360"},"startTime":1772194918781,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1216,"timestamp":448373782359,"id":196,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194918782,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":12643,"timestamp":448373782900,"id":198,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194918782,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":71637,"timestamp":448373738029,"id":180,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194918737,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":448373809703,"id":199,"parentId":180,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"568401920","memory.heapUsed":"182033704","memory.heapTotal":"218959872"},"startTime":1772194918809,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":178,"timestamp":448373811653,"id":200,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918811,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":111,"timestamp":448373811855,"id":201,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918811,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":62045,"timestamp":448373750784,"id":184,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194918750,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448373812849,"id":202,"parentId":184,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"566960128","memory.heapUsed":"182351392","memory.heapTotal":"218959872"},"startTime":1772194918812,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":155,"timestamp":448373813575,"id":205,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918813,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":95,"timestamp":448373813747,"id":206,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918813,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":2290,"timestamp":448373813447,"id":204,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194918813,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":59298,"timestamp":448373766992,"id":186,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194918766,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448373826312,"id":209,"parentId":186,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"565723136","memory.heapUsed":"185418400","memory.heapTotal":"218959872"},"startTime":1772194918826,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1646,"timestamp":448373825759,"id":208,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194918825,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":911,"timestamp":448373840348,"id":211,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194918840,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":290,"timestamp":448373851661,"id":212,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918851,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":117,"timestamp":448373851979,"id":213,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918851,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":157,"timestamp":448373852753,"id":214,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918852,"traceId":"0ba7bcf04db23df0"}] +[{"name":"ensure-page","duration":173,"timestamp":448373853349,"id":215,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918853,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":72173,"timestamp":448373782101,"id":195,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194918781,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448373854295,"id":216,"parentId":195,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"570728448","memory.heapUsed":"191569512","memory.heapTotal":"219484160"},"startTime":1772194918854,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":72309,"timestamp":448373782697,"id":197,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194918782,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448373855022,"id":217,"parentId":197,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"570802176","memory.heapUsed":"191643192","memory.heapTotal":"219484160"},"startTime":1772194918854,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1086,"timestamp":448373855718,"id":219,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194918855,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1211,"timestamp":448373867482,"id":221,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194918867,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":67125,"timestamp":448373813009,"id":203,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194918812,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448373880156,"id":222,"parentId":203,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"578174976","memory.heapUsed":"186093304","memory.heapTotal":"222310400"},"startTime":1772194918880,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":178,"timestamp":448373880230,"id":223,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918880,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":98,"timestamp":448373880428,"id":224,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918880,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":164,"timestamp":448373881787,"id":225,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918881,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":99,"timestamp":448373881971,"id":226,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918881,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":57198,"timestamp":448373825528,"id":207,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194918825,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448373882751,"id":227,"parentId":207,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"578174976","memory.heapUsed":"186494360","memory.heapTotal":"222310400"},"startTime":1772194918882,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1195,"timestamp":448373883244,"id":229,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194918883,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":53188,"timestamp":448373840138,"id":210,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194918839,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448373893349,"id":232,"parentId":210,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"578539520","memory.heapUsed":"189284056","memory.heapTotal":"222572544"},"startTime":1772194918893,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":10606,"timestamp":448373883832,"id":231,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194918883,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":824,"timestamp":448373905658,"id":234,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194918905,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":187,"timestamp":448373915131,"id":235,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918914,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":104,"timestamp":448373915351,"id":236,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918915,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":170,"timestamp":448373916172,"id":237,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918916,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":99,"timestamp":448373916361,"id":238,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918916,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":61781,"timestamp":448373855471,"id":218,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194918855,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448373917273,"id":239,"parentId":218,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"581758976","memory.heapUsed":"195337880","memory.heapTotal":"223358976"},"startTime":1772194918917,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":51476,"timestamp":448373867254,"id":220,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194918867,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448373918749,"id":242,"parentId":220,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"581906432","memory.heapUsed":"195563088","memory.heapTotal":"223358976"},"startTime":1772194918918,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1671,"timestamp":448373917790,"id":241,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194918917,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1669,"timestamp":448373931761,"id":244,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194918931,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":239,"timestamp":448373944483,"id":245,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918944,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":128,"timestamp":448373944755,"id":246,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918944,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":64799,"timestamp":448373883004,"id":228,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194918882,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448373947828,"id":247,"parentId":228,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"590344192","memory.heapUsed":"190203568","memory.heapTotal":"226766848"},"startTime":1772194918947,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":199,"timestamp":448373948667,"id":248,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918948,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":115,"timestamp":448373948889,"id":249,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918948,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":66032,"timestamp":448373883605,"id":230,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194918883,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448373949658,"id":250,"parentId":230,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"590344192","memory.heapUsed":"190469472","memory.heapTotal":"226766848"},"startTime":1772194918949,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":45432,"timestamp":448373905451,"id":233,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194918905,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448373950899,"id":253,"parentId":233,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"590344192","memory.heapUsed":"190646528","memory.heapTotal":"226766848"},"startTime":1772194918950,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1627,"timestamp":448373950316,"id":252,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194918950,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":10933,"timestamp":448373951221,"id":255,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194918951,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1587,"timestamp":448373977168,"id":257,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194918977,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":172,"timestamp":448373987740,"id":258,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918987,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":100,"timestamp":448373987937,"id":259,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918987,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":71445,"timestamp":448373917509,"id":240,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194918917,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448373988978,"id":260,"parentId":240,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"591413248","memory.heapUsed":"199081336","memory.heapTotal":"227291136"},"startTime":1772194918988,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":271,"timestamp":448373989387,"id":261,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918989,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":115,"timestamp":448373989678,"id":262,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194918989,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":61527,"timestamp":448373931520,"id":243,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194918931,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448373993070,"id":267,"parentId":243,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"591421440","memory.heapUsed":"199563752","memory.heapTotal":"227291136"},"startTime":1772194918992,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":2106,"timestamp":448373991816,"id":264,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194918991,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":12239,"timestamp":448373992536,"id":266,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194918992,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":184,"timestamp":448374016871,"id":268,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919016,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":527,"timestamp":448374017080,"id":269,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919016,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":68135,"timestamp":448373950095,"id":251,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194918949,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374018251,"id":270,"parentId":251,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"595755008","memory.heapUsed":"195231624","memory.heapTotal":"231624704"},"startTime":1772194919018,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":68139,"timestamp":448373950987,"id":254,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194918950,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374019145,"id":271,"parentId":254,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"595755008","memory.heapUsed":"195370432","memory.heapTotal":"231624704"},"startTime":1772194919019,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":179,"timestamp":448374019273,"id":272,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919019,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":99,"timestamp":448374019468,"id":273,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919019,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":44487,"timestamp":448373976716,"id":256,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194918976,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374021223,"id":278,"parentId":256,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"595763200","memory.heapUsed":"195764240","memory.heapTotal":"231624704"},"startTime":1772194919021,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1914,"timestamp":448374020269,"id":275,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919020,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":12766,"timestamp":448374020663,"id":277,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919020,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":172,"timestamp":448374049088,"id":281,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919048,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":110,"timestamp":448374049287,"id":282,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919049,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1431,"timestamp":448374048792,"id":280,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919048,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":189,"timestamp":448374059764,"id":283,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919059,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":112,"timestamp":448374059979,"id":284,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919059,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":68708,"timestamp":448373992276,"id":265,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194918992,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374061023,"id":285,"parentId":265,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"597352448","memory.heapUsed":"204555208","memory.heapTotal":"232411136"},"startTime":1772194919060,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":70268,"timestamp":448373991395,"id":263,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194918991,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374061682,"id":286,"parentId":263,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"597389312","memory.heapUsed":"204629784","memory.heapTotal":"232411136"},"startTime":1772194919061,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":970,"timestamp":448374063104,"id":288,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919062,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1316,"timestamp":448374075364,"id":290,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919075,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":188,"timestamp":448374089548,"id":291,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919089,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":107,"timestamp":448374089764,"id":292,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919089,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":70899,"timestamp":448374020048,"id":274,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919019,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374090979,"id":293,"parentId":274,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"600961024","memory.heapUsed":"199352184","memory.heapTotal":"235556864"},"startTime":1772194919090,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":71170,"timestamp":448374020463,"id":276,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919020,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374091656,"id":294,"parentId":276,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"599093248","memory.heapUsed":"199394032","memory.heapTotal":"235556864"},"startTime":1772194919091,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":226,"timestamp":448374091748,"id":295,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919091,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":113,"timestamp":448374091990,"id":296,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919091,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1368,"timestamp":448374093376,"id":298,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919093,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":15357,"timestamp":448374093846,"id":300,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919093,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":70301,"timestamp":448374048532,"id":279,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919048,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":448374118880,"id":301,"parentId":279,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"600264704","memory.heapUsed":"205295056","memory.heapTotal":"235819008"},"startTime":1772194919118,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":383,"timestamp":448374120489,"id":302,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919120,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":270,"timestamp":448374120916,"id":303,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919120,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":247,"timestamp":448374122674,"id":306,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919122,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":308,"timestamp":448374122959,"id":307,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919122,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":61526,"timestamp":448374062750,"id":287,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919062,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374124307,"id":308,"parentId":287,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"600911872","memory.heapUsed":"205831576","memory.heapTotal":"235819008"},"startTime":1772194919124,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":3110,"timestamp":448374122372,"id":305,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919122,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":66032,"timestamp":448374075124,"id":289,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919074,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":448374141207,"id":311,"parentId":289,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"601673728","memory.heapUsed":"208591264","memory.heapTotal":"236343296"},"startTime":1772194919141,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1829,"timestamp":448374140399,"id":310,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919140,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1647,"timestamp":448374152270,"id":313,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919152,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":185,"timestamp":448374167878,"id":314,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919167,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":103,"timestamp":448374168088,"id":315,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919167,"traceId":"0ba7bcf04db23df0"}] +[{"name":"ensure-page","duration":164,"timestamp":448374168985,"id":316,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919168,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":104,"timestamp":448374169168,"id":317,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919169,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":77323,"timestamp":448374093082,"id":297,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919092,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":448374170447,"id":318,"parentId":297,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"604880896","memory.heapUsed":"203533976","memory.heapTotal":"239751168"},"startTime":1772194919170,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":77855,"timestamp":448374093645,"id":299,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919093,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374171523,"id":319,"parentId":299,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"604884992","memory.heapUsed":"203599520","memory.heapTotal":"239751168"},"startTime":1772194919171,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1548,"timestamp":448374172040,"id":321,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919171,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1373,"timestamp":448374186213,"id":323,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919186,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":75585,"timestamp":448374121992,"id":304,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919121,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":448374197624,"id":324,"parentId":304,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"605577216","memory.heapUsed":"209406088","memory.heapTotal":"240013312"},"startTime":1772194919197,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":362,"timestamp":448374198061,"id":325,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919197,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":250,"timestamp":448374198459,"id":326,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919198,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":361,"timestamp":448374200491,"id":327,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919200,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":240,"timestamp":448374200880,"id":328,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919200,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":62722,"timestamp":448374139979,"id":309,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919139,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374202737,"id":331,"parentId":309,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"605642752","memory.heapUsed":"209909304","memory.heapTotal":"240013312"},"startTime":1772194919202,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":2285,"timestamp":448374201898,"id":330,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919201,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":62137,"timestamp":448374151877,"id":312,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919151,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374214041,"id":334,"parentId":312,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"606216192","memory.heapUsed":"212527608","memory.heapTotal":"240275456"},"startTime":1772194919213,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":2088,"timestamp":448374213423,"id":333,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919213,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":862,"timestamp":448374227149,"id":336,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919227,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":207,"timestamp":448374236233,"id":337,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919236,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":119,"timestamp":448374236468,"id":338,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919236,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":202,"timestamp":448374239825,"id":339,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919239,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":112,"timestamp":448374240051,"id":340,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919239,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":69524,"timestamp":448374171641,"id":320,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919171,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":448374241214,"id":341,"parentId":320,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"609947648","memory.heapUsed":"207373320","memory.heapTotal":"243945472"},"startTime":1772194919241,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1180,"timestamp":448374242217,"id":343,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919242,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":67772,"timestamp":448374185975,"id":322,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919185,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374253781,"id":344,"parentId":322,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"610361344","memory.heapUsed":"210521896","memory.heapTotal":"243945472"},"startTime":1772194919253,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1693,"timestamp":448374254688,"id":346,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919254,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":201,"timestamp":448374264568,"id":347,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919264,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":114,"timestamp":448374264797,"id":348,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919264,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":64403,"timestamp":448374201564,"id":329,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919201,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":448374266007,"id":349,"parentId":329,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"610856960","memory.heapUsed":"213359216","memory.heapTotal":"243945472"},"startTime":1772194919265,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":210,"timestamp":448374266508,"id":350,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919266,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":107,"timestamp":448374266739,"id":351,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919266,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":54995,"timestamp":448374213120,"id":332,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919212,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374268149,"id":352,"parentId":332,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"610856960","memory.heapUsed":"213618792","memory.heapTotal":"243945472"},"startTime":1772194919268,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":43977,"timestamp":448374226937,"id":335,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919226,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374270963,"id":357,"parentId":335,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"610885632","memory.heapUsed":"213929032","memory.heapTotal":"244207616"},"startTime":1772194919270,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":2814,"timestamp":448374269120,"id":354,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919268,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":13587,"timestamp":448374269815,"id":356,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919269,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":178,"timestamp":448374293294,"id":358,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919293,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":110,"timestamp":448374293499,"id":359,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919293,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":53194,"timestamp":448374241950,"id":342,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919241,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374295188,"id":362,"parentId":342,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"611717120","memory.heapUsed":"219715240","memory.heapTotal":"244731904"},"startTime":1772194919295,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1708,"timestamp":448374294150,"id":361,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919294,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":218,"timestamp":448374304966,"id":363,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919304,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":104,"timestamp":448374305210,"id":364,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919305,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":54652,"timestamp":448374254271,"id":345,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919254,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374308955,"id":365,"parentId":345,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"614555648","memory.heapUsed":"211263816","memory.heapTotal":"247615488"},"startTime":1772194919308,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1098,"timestamp":448374309390,"id":367,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919309,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":11157,"timestamp":448374309724,"id":369,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919309,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":176,"timestamp":448374331745,"id":370,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919331,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":101,"timestamp":448374331946,"id":371,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919331,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":178,"timestamp":448374332627,"id":372,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919332,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":105,"timestamp":448374332825,"id":373,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919332,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":65245,"timestamp":448374268610,"id":353,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919268,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374333889,"id":374,"parentId":353,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"615456768","memory.heapUsed":"217250856","memory.heapTotal":"248139776"},"startTime":1772194919333,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":64944,"timestamp":448374269476,"id":355,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919269,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374334443,"id":375,"parentId":355,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"615460864","memory.heapUsed":"217295736","memory.heapTotal":"248139776"},"startTime":1772194919334,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":952,"timestamp":448374337181,"id":377,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919337,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1581,"timestamp":448374349760,"id":379,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919349,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":68617,"timestamp":448374293787,"id":360,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919293,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":448374362461,"id":380,"parentId":360,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"619745280","memory.heapUsed":"224912808","memory.heapTotal":"250769408"},"startTime":1772194919362,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":178,"timestamp":448374363341,"id":381,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919363,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":97,"timestamp":448374363542,"id":382,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919363,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":141,"timestamp":448374364493,"id":385,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919364,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":111,"timestamp":448374364651,"id":386,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919364,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":55868,"timestamp":448374309564,"id":368,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919309,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374365465,"id":387,"parentId":368,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"619794432","memory.heapUsed":"225431768","memory.heapTotal":"250769408"},"startTime":1772194919365,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":56672,"timestamp":448374309130,"id":366,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919308,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374365818,"id":388,"parentId":366,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"619794432","memory.heapUsed":"225473280","memory.heapTotal":"250769408"},"startTime":1772194919365,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":2064,"timestamp":448374364340,"id":384,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919364,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1016,"timestamp":448374378048,"id":390,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919377,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1700,"timestamp":448374395218,"id":392,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919395,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":184,"timestamp":448374405576,"id":393,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919405,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":114,"timestamp":448374405786,"id":394,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919405,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":70023,"timestamp":448374336871,"id":376,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919336,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374406972,"id":395,"parentId":376,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"623009792","memory.heapUsed":"223118128","memory.heapTotal":"253915136"},"startTime":1772194919406,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":194,"timestamp":448374407040,"id":396,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919406,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":106,"timestamp":448374407252,"id":397,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919407,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":60241,"timestamp":448374349422,"id":378,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919349,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374409693,"id":400,"parentId":378,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"623075328","memory.heapUsed":"223479408","memory.heapTotal":"253915136"},"startTime":1772194919409,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1373,"timestamp":448374409099,"id":399,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919408,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1270,"timestamp":448374419952,"id":402,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919419,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":67340,"timestamp":448374364119,"id":383,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919363,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374431497,"id":403,"parentId":383,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"623792128","memory.heapUsed":"229011960","memory.heapTotal":"254701568"},"startTime":1772194919431,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":194,"timestamp":448374432576,"id":404,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919432,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":121,"timestamp":448374432797,"id":405,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919432,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":175,"timestamp":448374434092,"id":408,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919433,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":102,"timestamp":448374434287,"id":409,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919434,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":57192,"timestamp":448374377808,"id":389,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919377,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374435031,"id":410,"parentId":389,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"623869952","memory.heapUsed":"229522784","memory.heapTotal":"254701568"},"startTime":1772194919434,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":2369,"timestamp":448374433929,"id":407,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919433,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":53628,"timestamp":448374394875,"id":391,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919394,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":448374448536,"id":413,"parentId":391,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"626266112","memory.heapUsed":"221061832","memory.heapTotal":"257847296"},"startTime":1772194919448,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":3868,"timestamp":448374445700,"id":412,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919445,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1029,"timestamp":448374462018,"id":415,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919461,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":215,"timestamp":448374477469,"id":416,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919477,"traceId":"0ba7bcf04db23df0"}] +[{"name":"ensure-page","duration":162,"timestamp":448374477967,"id":417,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919477,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":176,"timestamp":448374492003,"id":418,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919491,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":97,"timestamp":448374492203,"id":419,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919492,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":84137,"timestamp":448374408876,"id":398,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919408,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374493032,"id":420,"parentId":398,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"627351552","memory.heapUsed":"184446424","memory.heapTotal":"256774144"},"startTime":1772194919492,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":74922,"timestamp":448374419728,"id":401,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919419,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374494671,"id":423,"parentId":401,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"625139712","memory.heapUsed":"184682200","memory.heapTotal":"256774144"},"startTime":1772194919494,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":2050,"timestamp":448374493575,"id":422,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919493,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1034,"timestamp":448374507189,"id":425,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919507,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":195,"timestamp":448374517839,"id":426,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919517,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":102,"timestamp":448374518059,"id":427,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919517,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":85365,"timestamp":448374433596,"id":406,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919433,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374518984,"id":428,"parentId":406,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"626335744","memory.heapUsed":"190438896","memory.heapTotal":"257036288"},"startTime":1772194919518,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":74925,"timestamp":448374445413,"id":411,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919445,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":4,"timestamp":448374520378,"id":429,"parentId":411,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"624955392","memory.heapUsed":"190505088","memory.heapTotal":"257036288"},"startTime":1772194919520,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":381,"timestamp":448374521204,"id":430,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919521,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":231,"timestamp":448374521615,"id":431,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919521,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":61798,"timestamp":448374461768,"id":414,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919461,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374523589,"id":436,"parentId":414,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"624963584","memory.heapUsed":"190978416","memory.heapTotal":"257036288"},"startTime":1772194919523,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1436,"timestamp":448374522668,"id":433,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919522,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":11036,"timestamp":448374523011,"id":435,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919522,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":200,"timestamp":448374544914,"id":439,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919544,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":109,"timestamp":448374545144,"id":440,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919545,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1515,"timestamp":448374544671,"id":438,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919544,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":62348,"timestamp":448374493348,"id":421,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919493,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374555722,"id":441,"parentId":421,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"626597888","memory.heapUsed":"199442320","memory.heapTotal":"257273856"},"startTime":1772194919555,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":171,"timestamp":448374555797,"id":442,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919555,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":100,"timestamp":448374555987,"id":443,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919555,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":51893,"timestamp":448374506966,"id":424,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919506,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374558882,"id":446,"parentId":424,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"626597888","memory.heapUsed":"199826984","memory.heapTotal":"257273856"},"startTime":1772194919558,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":2032,"timestamp":448374557927,"id":445,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919557,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":11140,"timestamp":448374559192,"id":448,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919559,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":184,"timestamp":448374581249,"id":449,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919581,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":113,"timestamp":448374581458,"id":450,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919581,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":60295,"timestamp":448374522452,"id":432,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919522,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":4,"timestamp":448374582793,"id":451,"parentId":432,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"627625984","memory.heapUsed":"191858544","memory.heapTotal":"257273856"},"startTime":1772194919582,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":60755,"timestamp":448374522841,"id":434,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919522,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374583616,"id":452,"parentId":434,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"627625984","memory.heapUsed":"191920704","memory.heapTotal":"257273856"},"startTime":1772194919583,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":248,"timestamp":448374584050,"id":453,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919583,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":113,"timestamp":448374584318,"id":454,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919584,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1209,"timestamp":448374585167,"id":456,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919585,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":10596,"timestamp":448374585582,"id":458,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919585,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":63548,"timestamp":448374544395,"id":437,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919544,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374607969,"id":459,"parentId":437,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"628158464","memory.heapUsed":"198212104","memory.heapTotal":"257740800"},"startTime":1772194919607,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1173,"timestamp":448374609495,"id":461,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919609,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":214,"timestamp":448374620381,"id":462,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919620,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":121,"timestamp":448374620624,"id":463,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919620,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":63998,"timestamp":448374557514,"id":444,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919557,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374621534,"id":464,"parentId":444,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"628178944","memory.heapUsed":"201025104","memory.heapTotal":"257740800"},"startTime":1772194919621,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":196,"timestamp":448374622204,"id":465,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919622,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":109,"timestamp":448374622420,"id":466,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919622,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":64137,"timestamp":448374558974,"id":447,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919558,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374623130,"id":467,"parentId":447,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"628178944","memory.heapUsed":"201286728","memory.heapTotal":"257740800"},"startTime":1772194919622,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1754,"timestamp":448374624426,"id":469,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919624,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":10492,"timestamp":448374624969,"id":471,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919624,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":66944,"timestamp":448374584953,"id":455,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919584,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374651921,"id":474,"parentId":455,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"629698560","memory.heapUsed":"195480472","memory.heapTotal":"257740800"},"startTime":1772194919651,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":67034,"timestamp":448374585407,"id":457,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919585,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374652460,"id":475,"parentId":457,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"629706752","memory.heapUsed":"195528856","memory.heapTotal":"257740800"},"startTime":1772194919652,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":2020,"timestamp":448374651271,"id":473,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919651,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":166,"timestamp":448374664213,"id":476,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919664,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":107,"timestamp":448374664404,"id":477,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919664,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":56350,"timestamp":448374609141,"id":460,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919609,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374665513,"id":480,"parentId":460,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"630304768","memory.heapUsed":"198445320","memory.heapTotal":"257740800"},"startTime":1772194919665,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1308,"timestamp":448374664940,"id":479,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919664,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":192,"timestamp":448374675107,"id":481,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919674,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":108,"timestamp":448374675325,"id":482,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919675,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1556,"timestamp":448374676804,"id":484,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919676,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":14048,"timestamp":448374677251,"id":486,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919677,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":78165,"timestamp":448374624070,"id":468,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919623,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374702261,"id":487,"parentId":468,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"630734848","memory.heapUsed":"206682784","memory.heapTotal":"257740800"},"startTime":1772194919702,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":78825,"timestamp":448374624687,"id":470,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919624,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":448374703550,"id":488,"parentId":470,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"628797440","memory.heapUsed":"206771736","memory.heapTotal":"257740800"},"startTime":1772194919703,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":164,"timestamp":448374705393,"id":489,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919705,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":98,"timestamp":448374705579,"id":490,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919705,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":831,"timestamp":448374706035,"id":492,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919705,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":201,"timestamp":448374715248,"id":493,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919715,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":99,"timestamp":448374715476,"id":494,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919715,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":65204,"timestamp":448374650947,"id":472,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919650,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374716173,"id":495,"parentId":472,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"628985856","memory.heapUsed":"209796176","memory.heapTotal":"257740800"},"startTime":1772194919716,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1034,"timestamp":448374719849,"id":497,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919719,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":71157,"timestamp":448374664749,"id":478,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919664,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374735931,"id":500,"parentId":478,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"629174272","memory.heapUsed":"201956600","memory.heapTotal":"257740800"},"startTime":1772194919735,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1474,"timestamp":448374735200,"id":499,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919735,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":70905,"timestamp":448374676570,"id":483,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919676,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374747498,"id":501,"parentId":483,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"628948992","memory.heapUsed":"204556240","memory.heapTotal":"257740800"},"startTime":1772194919747,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":166,"timestamp":448374747577,"id":502,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919747,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":97,"timestamp":448374747764,"id":503,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919747,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":71391,"timestamp":448374677080,"id":485,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919676,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":448374748506,"id":504,"parentId":485,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"628948992","memory.heapUsed":"204717512","memory.heapTotal":"257740800"},"startTime":1772194919748,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":180,"timestamp":448374749296,"id":505,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919749,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":107,"timestamp":448374749496,"id":506,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919749,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":914,"timestamp":448374750078,"id":508,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919749,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1360,"timestamp":448374759981,"id":510,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919759,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":69756,"timestamp":448374705835,"id":491,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919705,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374775623,"id":511,"parentId":491,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"630210560","memory.heapUsed":"211489872","memory.heapTotal":"258666496"},"startTime":1772194919775,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1135,"timestamp":448374776100,"id":513,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919775,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":69470,"timestamp":448374719600,"id":496,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919719,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374789097,"id":514,"parentId":496,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"630374400","memory.heapUsed":"203392632","memory.heapTotal":"258666496"},"startTime":1772194919788,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":218,"timestamp":448374789177,"id":515,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919789,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":201,"timestamp":448374789416,"id":516,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919789,"traceId":"0ba7bcf04db23df0"}] +[{"name":"ensure-page","duration":173,"timestamp":448374791395,"id":517,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919791,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":99,"timestamp":448374791589,"id":518,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919791,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":57339,"timestamp":448374734970,"id":498,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919734,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374792332,"id":519,"parentId":498,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"630390784","memory.heapUsed":"203845872","memory.heapTotal":"258666496"},"startTime":1772194919792,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":769,"timestamp":448374792705,"id":521,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919792,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1534,"timestamp":448374802204,"id":523,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919802,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":64822,"timestamp":448374749837,"id":507,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919749,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374814687,"id":526,"parentId":507,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"630489088","memory.heapUsed":"209592416","memory.heapTotal":"258666496"},"startTime":1772194919814,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1242,"timestamp":448374814066,"id":525,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919813,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":65318,"timestamp":448374759751,"id":509,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919759,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":5,"timestamp":448374825128,"id":527,"parentId":509,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"630517760","memory.heapUsed":"212145976","memory.heapTotal":"258666496"},"startTime":1772194919824,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":227,"timestamp":448374826693,"id":528,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919826,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":155,"timestamp":448374826951,"id":529,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919826,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":53044,"timestamp":448374775868,"id":512,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919775,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374828955,"id":532,"parentId":512,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"630517760","memory.heapUsed":"212541896","memory.heapTotal":"258666496"},"startTime":1772194919828,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":254,"timestamp":448374829065,"id":533,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919828,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":129,"timestamp":448374829341,"id":534,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919829,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":2364,"timestamp":448374828162,"id":531,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919828,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1177,"timestamp":448374839022,"id":536,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919838,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":57635,"timestamp":448374792500,"id":520,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919792,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374850173,"id":537,"parentId":520,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"630517760","memory.heapUsed":"218201904","memory.heapTotal":"258666496"},"startTime":1772194919850,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1318,"timestamp":448374852967,"id":539,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919852,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":61111,"timestamp":448374801960,"id":522,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919801,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374863100,"id":540,"parentId":522,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"630517760","memory.heapUsed":"209889464","memory.heapTotal":"258666496"},"startTime":1772194919862,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":176,"timestamp":448374863303,"id":541,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919863,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":165,"timestamp":448374863501,"id":542,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919863,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":50954,"timestamp":448374813842,"id":524,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919813,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374864819,"id":543,"parentId":524,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"630517760","memory.heapUsed":"210174624","memory.heapTotal":"258666496"},"startTime":1772194919864,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":169,"timestamp":448374864873,"id":544,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919864,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":95,"timestamp":448374865056,"id":545,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919864,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1300,"timestamp":448374865727,"id":547,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919865,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":9729,"timestamp":448374866422,"id":549,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919866,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":59832,"timestamp":448374827857,"id":530,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919827,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374887739,"id":552,"parentId":530,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"630575104","memory.heapUsed":"216036192","memory.heapTotal":"258666496"},"startTime":1772194919887,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":2731,"timestamp":448374886491,"id":551,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919886,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":59939,"timestamp":448374838784,"id":535,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919838,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374898749,"id":553,"parentId":535,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"630644736","memory.heapUsed":"218591584","memory.heapTotal":"258666496"},"startTime":1772194919898,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":169,"timestamp":448374899095,"id":554,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919898,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":100,"timestamp":448374899285,"id":555,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919899,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":47892,"timestamp":448374852725,"id":538,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919852,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374900647,"id":556,"parentId":538,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"630652928","memory.heapUsed":"218896016","memory.heapTotal":"258666496"},"startTime":1772194919900,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":184,"timestamp":448374900718,"id":557,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919900,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":130,"timestamp":448374900919,"id":558,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919900,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":914,"timestamp":448374901782,"id":560,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919901,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":2711,"timestamp":448374911100,"id":562,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919910,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":58345,"timestamp":448374865512,"id":546,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919865,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374923884,"id":565,"parentId":546,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"630677504","memory.heapUsed":"214108160","memory.heapTotal":"258666496"},"startTime":1772194919923,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1254,"timestamp":448374923287,"id":564,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919923,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":67497,"timestamp":448374866212,"id":548,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919866,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374933749,"id":566,"parentId":548,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"630677504","memory.heapUsed":"216668040","memory.heapTotal":"258666496"},"startTime":1772194919933,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":183,"timestamp":448374934663,"id":567,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919934,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":232,"timestamp":448374934873,"id":568,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919934,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":49615,"timestamp":448374886050,"id":550,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919885,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374935690,"id":569,"parentId":550,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"630685696","memory.heapUsed":"216934936","memory.heapTotal":"258666496"},"startTime":1772194919935,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":157,"timestamp":448374936543,"id":572,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919936,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":107,"timestamp":448374936718,"id":573,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919936,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1290,"timestamp":448374936404,"id":571,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919936,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":801,"timestamp":448374946960,"id":575,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919946,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":57568,"timestamp":448374901369,"id":559,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919901,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374958980,"id":578,"parentId":559,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"630702080","memory.heapUsed":"222844944","memory.heapTotal":"258666496"},"startTime":1772194919958,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1657,"timestamp":448374958084,"id":577,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919957,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":59731,"timestamp":448374910885,"id":561,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919910,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":448374970652,"id":579,"parentId":561,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"630824960","memory.heapUsed":"214899576","memory.heapTotal":"258666496"},"startTime":1772194919970,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":217,"timestamp":448374971635,"id":580,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919971,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":111,"timestamp":448374971882,"id":581,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919971,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":49756,"timestamp":448374923074,"id":563,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919922,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374972857,"id":582,"parentId":563,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"630829056","memory.heapUsed":"215199888","memory.heapTotal":"258666496"},"startTime":1772194919972,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":157,"timestamp":448374973373,"id":585,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919973,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":103,"timestamp":448374973546,"id":586,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919973,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1210,"timestamp":448374973161,"id":584,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772194919973,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":935,"timestamp":448374985410,"id":588,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194919985,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":60059,"timestamp":448374936140,"id":570,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919935,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448374996242,"id":589,"parentId":570,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"630849536","memory.heapUsed":"220873824","memory.heapTotal":"258666496"},"startTime":1772194919996,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":180,"timestamp":448374997135,"id":590,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919996,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":107,"timestamp":448374997339,"id":591,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919997,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":51310,"timestamp":448374946722,"id":574,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919946,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374998056,"id":592,"parentId":574,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"630857728","memory.heapUsed":"221153176","memory.heapTotal":"258666496"},"startTime":1772194919997,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":442,"timestamp":448374998331,"id":593,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919998,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":177,"timestamp":448374998798,"id":594,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194919998,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":41774,"timestamp":448374957826,"id":576,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919957,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448374999627,"id":595,"parentId":576,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"630857728","memory.heapUsed":"221337712","memory.heapTotal":"258666496"},"startTime":1772194919999,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1322,"timestamp":448375000351,"id":597,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920000,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":41732,"timestamp":448374972951,"id":583,"tags":{"url":"/login?_rsc=hl69e"},"startTime":1772194919972,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448375014718,"id":598,"parentId":583,"tags":{"url":"/login?_rsc=hl69e","memory.rss":"630882304","memory.heapUsed":"224460088","memory.heapTotal":"258666496"},"startTime":1772194920014,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":288,"timestamp":448375014804,"id":599,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920014,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":517,"timestamp":448375015123,"id":600,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920014,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":199,"timestamp":448375016344,"id":601,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920016,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":116,"timestamp":448375016570,"id":602,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920016,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":32469,"timestamp":448374984878,"id":587,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919984,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448375017379,"id":603,"parentId":587,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"630882304","memory.heapUsed":"224766680","memory.heapTotal":"258666496"},"startTime":1772194920017,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":769,"timestamp":448375018073,"id":605,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920017,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":191,"timestamp":448375030915,"id":606,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920030,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":124,"timestamp":448375031133,"id":607,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920030,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":31683,"timestamp":448375000076,"id":596,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194919999,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448375031787,"id":608,"parentId":596,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"630890496","memory.heapUsed":"227987896","memory.heapTotal":"258666496"},"startTime":1772194920031,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":211,"timestamp":448375034367,"id":609,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920034,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":108,"timestamp":448375034604,"id":610,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920034,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":885,"timestamp":448375035666,"id":612,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920035,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":177,"timestamp":448375052496,"id":613,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920052,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":108,"timestamp":448375052697,"id":614,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920052,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":35660,"timestamp":448375017825,"id":604,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920017,"traceId":"0ba7bcf04db23df0"}] +[{"name":"memory-usage","duration":3,"timestamp":448375053845,"id":615,"parentId":604,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"630915072","memory.heapUsed":"221950984","memory.heapTotal":"258666496"},"startTime":1772194920053,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":292,"timestamp":448375054590,"id":616,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920054,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":102,"timestamp":448375054910,"id":617,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920054,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1288,"timestamp":448375056341,"id":619,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920056,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":195,"timestamp":448375071517,"id":620,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920071,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":109,"timestamp":448375071739,"id":621,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920071,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":37390,"timestamp":448375035412,"id":611,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920035,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448375072833,"id":622,"parentId":611,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"632766464","memory.heapUsed":"227145856","memory.heapTotal":"260509696"},"startTime":1772194920072,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":160,"timestamp":448375072892,"id":623,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920072,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":94,"timestamp":448375073067,"id":624,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920072,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":909,"timestamp":448375073773,"id":626,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920073,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":28555,"timestamp":448375055950,"id":618,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920055,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448375084547,"id":627,"parentId":618,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"632770560","memory.heapUsed":"230285224","memory.heapTotal":"260509696"},"startTime":1772194920084,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":170,"timestamp":448375085304,"id":628,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920085,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":100,"timestamp":448375085498,"id":629,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920085,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":134,"timestamp":448375085884,"id":630,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920085,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":94,"timestamp":448375086035,"id":631,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920085,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":930,"timestamp":448375086843,"id":633,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920086,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":27122,"timestamp":448375073541,"id":625,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920073,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448375100698,"id":634,"parentId":625,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"633196544","memory.heapUsed":"223694432","memory.heapTotal":"261820416"},"startTime":1772194920100,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":201,"timestamp":448375100845,"id":635,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920100,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":105,"timestamp":448375101069,"id":636,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920100,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":150,"timestamp":448375101669,"id":637,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920101,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":111,"timestamp":448375101836,"id":638,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920101,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":822,"timestamp":448375102615,"id":640,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920102,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":26961,"timestamp":448375086587,"id":632,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920086,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448375113599,"id":641,"parentId":632,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"633651200","memory.heapUsed":"227071416","memory.heapTotal":"261820416"},"startTime":1772194920113,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":188,"timestamp":448375113727,"id":642,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920113,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":100,"timestamp":448375113936,"id":643,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920113,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":143,"timestamp":448375114342,"id":644,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920114,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":95,"timestamp":448375114501,"id":645,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920114,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":998,"timestamp":448375115148,"id":647,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920115,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":170,"timestamp":448375126749,"id":648,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920126,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":106,"timestamp":448375126944,"id":649,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920126,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":25288,"timestamp":448375102309,"id":639,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920102,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448375127624,"id":650,"parentId":639,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"633847808","memory.heapUsed":"230549440","memory.heapTotal":"261820416"},"startTime":1772194920127,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":316,"timestamp":448375128129,"id":651,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920127,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":250,"timestamp":448375128473,"id":652,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920128,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":835,"timestamp":448375129881,"id":654,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920129,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":175,"timestamp":448375141050,"id":655,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920140,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":103,"timestamp":448375141250,"id":656,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920141,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":26961,"timestamp":448375114921,"id":646,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920114,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448375141910,"id":657,"parentId":646,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"634470400","memory.heapUsed":"233981144","memory.heapTotal":"262344704"},"startTime":1772194920141,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":168,"timestamp":448375142150,"id":658,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920142,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":108,"timestamp":448375142335,"id":659,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920142,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":855,"timestamp":448375143075,"id":661,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920142,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":179,"timestamp":448375156524,"id":662,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920156,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":102,"timestamp":448375156729,"id":663,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920156,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":27976,"timestamp":448375129422,"id":653,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920129,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448375157430,"id":664,"parentId":653,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"636198912","memory.heapUsed":"227375992","memory.heapTotal":"264441856"},"startTime":1772194920157,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":328,"timestamp":448375157814,"id":665,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920157,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":270,"timestamp":448375158171,"id":666,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920158,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":758,"timestamp":448375159415,"id":668,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920159,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":171,"timestamp":448375170906,"id":669,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920170,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":105,"timestamp":448375171102,"id":670,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920170,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":28887,"timestamp":448375142847,"id":660,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920142,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448375171762,"id":671,"parentId":660,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"636538880","memory.heapUsed":"230725728","memory.heapTotal":"264441856"},"startTime":1772194920171,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":165,"timestamp":448375171999,"id":672,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920171,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":108,"timestamp":448375172184,"id":673,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920172,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":741,"timestamp":448375172897,"id":675,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920172,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":201,"timestamp":448375183958,"id":676,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920183,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":133,"timestamp":448375184185,"id":677,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920184,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":25973,"timestamp":448375159040,"id":667,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920158,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448375185044,"id":678,"parentId":667,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"636874752","memory.heapUsed":"234105000","memory.heapTotal":"264704000"},"startTime":1772194920184,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":152,"timestamp":448375185122,"id":679,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920184,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":141,"timestamp":448375185289,"id":680,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920185,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":749,"timestamp":448375186051,"id":682,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920185,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":184,"timestamp":448375197127,"id":683,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920196,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":99,"timestamp":448375197337,"id":684,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920197,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":132,"timestamp":448375197729,"id":685,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920197,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":93,"timestamp":448375197878,"id":686,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920197,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":25850,"timestamp":448375172660,"id":674,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920172,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448375198546,"id":687,"parentId":674,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"637382656","memory.heapUsed":"237595040","memory.heapTotal":"265228288"},"startTime":1772194920198,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":807,"timestamp":448375199086,"id":689,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920198,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":226,"timestamp":448375211350,"id":690,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920211,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":235,"timestamp":448375211630,"id":691,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920211,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":26851,"timestamp":448375185837,"id":681,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920185,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448375212728,"id":692,"parentId":681,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"639971328","memory.heapUsed":"231024616","memory.heapTotal":"267988992"},"startTime":1772194920212,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":176,"timestamp":448375212800,"id":693,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920212,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":105,"timestamp":448375212991,"id":694,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920212,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":798,"timestamp":448375213820,"id":696,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920213,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":190,"timestamp":448375225938,"id":697,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920225,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":111,"timestamp":448375226152,"id":698,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920226,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":144,"timestamp":448375226573,"id":699,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920226,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":95,"timestamp":448375226734,"id":700,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920226,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":28645,"timestamp":448375198820,"id":688,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920198,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448375227507,"id":701,"parentId":688,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"640405504","memory.heapUsed":"234580040","memory.heapTotal":"267988992"},"startTime":1772194920227,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":922,"timestamp":448375228267,"id":703,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920228,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":174,"timestamp":448375239908,"id":704,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920239,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":117,"timestamp":448375240107,"id":705,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920239,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":27390,"timestamp":448375213575,"id":695,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920213,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448375241003,"id":706,"parentId":695,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"640966656","memory.heapUsed":"237826632","memory.heapTotal":"268513280"},"startTime":1772194920240,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":163,"timestamp":448375241073,"id":707,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920240,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":99,"timestamp":448375241253,"id":708,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920241,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":910,"timestamp":448375242093,"id":710,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920241,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":212,"timestamp":448375253758,"id":711,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920253,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":122,"timestamp":448375253995,"id":712,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920253,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":26777,"timestamp":448375227918,"id":702,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920227,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448375254728,"id":713,"parentId":702,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"641355776","memory.heapUsed":"241162152","memory.heapTotal":"269037568"},"startTime":1772194920254,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":158,"timestamp":448375254908,"id":714,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920254,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":102,"timestamp":448375255082,"id":715,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920254,"traceId":"0ba7bcf04db23df0"}] +[{"name":"ensure-page","duration":730,"timestamp":448375255943,"id":717,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920255,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":190,"timestamp":448375269213,"id":718,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920269,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":107,"timestamp":448375269432,"id":719,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920269,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":28467,"timestamp":448375241820,"id":709,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920241,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448375270323,"id":720,"parentId":709,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"643964928","memory.heapUsed":"234672888","memory.heapTotal":"271921152"},"startTime":1772194920270,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":180,"timestamp":448375270406,"id":721,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920270,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":114,"timestamp":448375270602,"id":722,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920270,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1011,"timestamp":448375271641,"id":724,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920271,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":174,"timestamp":448375283128,"id":725,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920282,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":109,"timestamp":448375283327,"id":726,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920283,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":28288,"timestamp":448375255718,"id":716,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920255,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448375284044,"id":727,"parentId":716,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"644435968","memory.heapUsed":"238048272","memory.heapTotal":"271921152"},"startTime":1772194920283,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":165,"timestamp":448375284290,"id":728,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920284,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":110,"timestamp":448375284474,"id":729,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920284,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":737,"timestamp":448375285233,"id":731,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920285,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":198,"timestamp":448375298379,"id":732,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920298,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":102,"timestamp":448375298602,"id":733,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920298,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":28018,"timestamp":448375271300,"id":723,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920271,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448375299359,"id":734,"parentId":723,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"644870144","memory.heapUsed":"241409536","memory.heapTotal":"272183296"},"startTime":1772194920299,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":240,"timestamp":448375299772,"id":735,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920299,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":115,"timestamp":448375300033,"id":736,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920299,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1103,"timestamp":448375301063,"id":738,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920300,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":181,"timestamp":448375313591,"id":739,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920313,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":140,"timestamp":448375313800,"id":740,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920313,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":138,"timestamp":448375314316,"id":741,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920314,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":101,"timestamp":448375314470,"id":742,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772194920314,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":30166,"timestamp":448375284995,"id":730,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920284,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448375315199,"id":743,"parentId":730,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"645378048","memory.heapUsed":"244898792","memory.heapTotal":"272707584"},"startTime":1772194920315,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1156,"timestamp":448375315841,"id":745,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772194920315,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":29757,"timestamp":448375300669,"id":737,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920300,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448375330462,"id":746,"parentId":737,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"647958528","memory.heapUsed":"238048072","memory.heapTotal":"275591168"},"startTime":1772194920330,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":15661,"timestamp":448375315546,"id":744,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g"},"startTime":1772194920315,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448375331234,"id":747,"parentId":744,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=16a9g","memory.rss":"647962624","memory.heapUsed":"238143640","memory.heapTotal":"275591168"},"startTime":1772194920331,"traceId":"0ba7bcf04db23df0"},{"name":"client-hmr-latency","duration":53000,"timestamp":448390984622,"id":748,"parentId":3,"tags":{"updatedModules":[],"page":"/project/cmm4125nw0002s0i93fuqcown","isPageHidden":true},"startTime":1772194936076,"traceId":"0ba7bcf04db23df0"},{"name":"client-hmr-latency","duration":54000,"timestamp":448390984040,"id":749,"parentId":3,"tags":{"updatedModules":[],"page":"/login","isPageHidden":false},"startTime":1772194936103,"traceId":"0ba7bcf04db23df0"},{"name":"client-hmr-latency","duration":33000,"timestamp":448730718368,"id":750,"parentId":3,"tags":{"updatedModules":["[project]/Documents/00 - projet/plumeia/src/components/Dashboard.tsx [app-client]"],"page":"/login","isPageHidden":false},"startTime":1772195275778,"traceId":"0ba7bcf04db23df0"},{"name":"client-hmr-latency","duration":34000,"timestamp":448730718476,"id":751,"parentId":3,"tags":{"updatedModules":["[project]/Documents/00 - projet/plumeia/src/components/Dashboard.tsx [app-client]"],"page":"/project/cmm4125nw0002s0i93fuqcown","isPageHidden":true},"startTime":1772195275778,"traceId":"0ba7bcf04db23df0"},{"name":"client-hmr-latency","duration":48000,"timestamp":448854245533,"id":752,"parentId":3,"tags":{"updatedModules":["[project]/Documents/00 - projet/plumeia/src/hooks/useAuth.ts [app-client]"],"page":"/login","isPageHidden":false},"startTime":1772195399307,"traceId":"0ba7bcf04db23df0"},{"name":"client-hmr-latency","duration":48000,"timestamp":448854245606,"id":753,"parentId":3,"tags":{"updatedModules":["[project]/Documents/00 - projet/plumeia/src/hooks/useAuth.ts [app-client]"],"page":"/project/cmm4125nw0002s0i93fuqcown","isPageHidden":true},"startTime":1772195399307,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":256,"timestamp":448854346049,"id":756,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772195399345,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":125,"timestamp":448854346332,"id":757,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772195399346,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":10144,"timestamp":448854345688,"id":755,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772195399345,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":197,"timestamp":448854441366,"id":758,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772195399441,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":92,"timestamp":448854441583,"id":759,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772195399441,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":14715,"timestamp":448854445440,"id":761,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772195399445,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":178,"timestamp":448854560370,"id":762,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195399560,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":99,"timestamp":448854560572,"id":763,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195399560,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":181,"timestamp":448854562258,"id":764,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195399562,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":104,"timestamp":448854562459,"id":765,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195399562,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":219484,"timestamp":448854345417,"id":754,"tags":{"url":"/login"},"startTime":1772195399345,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448854564925,"id":766,"parentId":754,"tags":{"url":"/login","memory.rss":"663023616","memory.heapUsed":"213907616","memory.heapTotal":"230973440"},"startTime":1772195399564,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":121165,"timestamp":448854445136,"id":760,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772195399445,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":448854566323,"id":767,"parentId":760,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown","memory.rss":"663023616","memory.heapUsed":"214125408","memory.heapTotal":"230973440"},"startTime":1772195399566,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":186,"timestamp":448854630282,"id":768,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195399630,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":105,"timestamp":448854630489,"id":769,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195399630,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":153,"timestamp":448854630912,"id":770,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195399630,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":103,"timestamp":448854631083,"id":771,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195399630,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":197,"timestamp":448855119059,"id":772,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400118,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":107,"timestamp":448855119278,"id":773,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400119,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":162,"timestamp":448855119655,"id":774,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400119,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":111,"timestamp":448855119837,"id":775,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400119,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":7376,"timestamp":448855120574,"id":777,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195400120,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":75741,"timestamp":448855120297,"id":776,"tags":{"url":"/api/auth/session"},"startTime":1772195400120,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448855196062,"id":778,"parentId":776,"tags":{"url":"/api/auth/session","memory.rss":"692625408","memory.heapUsed":"223662248","memory.heapTotal":"257323008"},"startTime":1772195400195,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":171,"timestamp":448855244879,"id":779,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400244,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":95,"timestamp":448855245070,"id":780,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400244,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":128,"timestamp":448855245615,"id":781,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400245,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":90,"timestamp":448855245758,"id":782,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400245,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":393,"timestamp":448855246691,"id":786,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195400246,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":7247,"timestamp":448855246518,"id":785,"tags":{"url":"/api/auth/session"},"startTime":1772195400246,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":448855253795,"id":787,"parentId":785,"tags":{"url":"/api/auth/session","memory.rss":"699752448","memory.heapUsed":"225422624","memory.heapTotal":"257585152"},"startTime":1772195400253,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":21909,"timestamp":448855246208,"id":784,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772195400246,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":206269,"timestamp":448855246020,"id":783,"tags":{"url":"/api/user/profile"},"startTime":1772195400245,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448855452316,"id":788,"parentId":783,"tags":{"url":"/api/user/profile","memory.rss":"744501248","memory.heapUsed":"263837832","memory.heapTotal":"291205120"},"startTime":1772195400452,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":182,"timestamp":448855455153,"id":789,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400455,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":134,"timestamp":448855455355,"id":790,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400455,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":125,"timestamp":448855455623,"id":791,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772195400455,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":104,"timestamp":448855455761,"id":792,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772195400455,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":742,"timestamp":448855456329,"id":794,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772195400456,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":172,"timestamp":448855459322,"id":795,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400459,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":105,"timestamp":448855459514,"id":796,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400459,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":136,"timestamp":448855459794,"id":797,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772195400459,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":119,"timestamp":448855459946,"id":798,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772195400459,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1217,"timestamp":448855461859,"id":800,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195400461,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":5438,"timestamp":448855462251,"id":802,"parentId":3,"tags":{"inputPage":"/api/projects/[id]/route"},"startTime":1772195400462,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":121199,"timestamp":448855456123,"id":793,"tags":{"url":"/api/user/profile"},"startTime":1772195400456,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448855577347,"id":803,"parentId":793,"tags":{"url":"/api/user/profile","memory.rss":"750755840","memory.heapUsed":"262790248","memory.heapTotal":"298020864"},"startTime":1772195400577,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":119032,"timestamp":448855461633,"id":799,"tags":{"url":"/api/auth/session"},"startTime":1772195400461,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448855580687,"id":804,"parentId":799,"tags":{"url":"/api/auth/session","memory.rss":"750755840","memory.heapUsed":"263180064","memory.heapTotal":"298020864"},"startTime":1772195400580,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":164,"timestamp":448855588594,"id":805,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400588,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":95,"timestamp":448855588780,"id":806,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400588,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":156,"timestamp":448855589394,"id":807,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400589,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":95,"timestamp":448855589570,"id":808,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400589,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":583,"timestamp":448855590193,"id":810,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195400590,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":8074,"timestamp":448855589984,"id":809,"tags":{"url":"/api/auth/session"},"startTime":1772195400589,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":448855598080,"id":813,"parentId":809,"tags":{"url":"/api/auth/session","memory.rss":"751046656","memory.heapUsed":"265235480","memory.heapTotal":"298020864"},"startTime":1772195400597,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1774,"timestamp":448855597060,"id":812,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772195400596,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":177,"timestamp":448855611385,"id":814,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400611,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":106,"timestamp":448855611587,"id":815,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400611,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":803,"timestamp":448855612084,"id":817,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772195400611,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":151,"timestamp":448855614915,"id":818,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400614,"traceId":"0ba7bcf04db23df0"}] +[{"name":"ensure-page","duration":120,"timestamp":448855615301,"id":819,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195400615,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1249,"timestamp":448855617004,"id":821,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195400616,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":26120,"timestamp":448855596854,"id":811,"tags":{"url":"/login?_rsc=i9656"},"startTime":1772195400596,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448855622999,"id":822,"parentId":811,"tags":{"url":"/login?_rsc=i9656","memory.rss":"751910912","memory.heapUsed":"269861072","memory.heapTotal":"298807296"},"startTime":1772195400622,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":77800,"timestamp":448855611881,"id":816,"tags":{"url":"/api/user/profile"},"startTime":1772195400611,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448855689717,"id":823,"parentId":816,"tags":{"url":"/api/user/profile","memory.rss":"762437632","memory.heapUsed":"282101584","memory.heapTotal":"310038528"},"startTime":1772195400689,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":79783,"timestamp":448855616795,"id":820,"tags":{"url":"/api/auth/session"},"startTime":1772195400616,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448855696601,"id":824,"parentId":820,"tags":{"url":"/api/auth/session","memory.rss":"762552320","memory.heapUsed":"282952336","memory.heapTotal":"310038528"},"startTime":1772195400696,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":3151,"timestamp":448855697187,"id":826,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772195400697,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":67441,"timestamp":448855696990,"id":825,"tags":{"url":"/api/user/profile"},"startTime":1772195400696,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448855764457,"id":827,"parentId":825,"tags":{"url":"/api/user/profile","memory.rss":"779755520","memory.heapUsed":"293443328","memory.heapTotal":"326897664"},"startTime":1772195400764,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":997,"timestamp":448855767701,"id":829,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772195400767,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":69229,"timestamp":448855767523,"id":828,"tags":{"url":"/api/user/profile"},"startTime":1772195400767,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":4,"timestamp":448855836799,"id":830,"parentId":828,"tags":{"url":"/api/user/profile","memory.rss":"792473600","memory.heapUsed":"308966952","memory.heapTotal":"340168704"},"startTime":1772195400836,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":386447,"timestamp":448855462069,"id":801,"tags":{"url":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772195400461,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":7,"timestamp":448855848576,"id":831,"parentId":801,"tags":{"url":"/api/projects/cmm4125nw0002s0i93fuqcown","memory.rss":"792506368","memory.heapUsed":"309317912","memory.heapTotal":"340168704"},"startTime":1772195400848,"traceId":"0ba7bcf04db23df0"},{"name":"client-hmr-latency","duration":32000,"timestamp":448855915546,"id":832,"parentId":3,"tags":{"updatedModules":["[project]/Documents/00 - projet/plumeia/src/hooks/useAuth.ts [app-client]"],"page":"/login","isPageHidden":false},"startTime":1772195400976,"traceId":"0ba7bcf04db23df0"},{"name":"client-hmr-latency","duration":32000,"timestamp":448855915623,"id":833,"parentId":3,"tags":{"updatedModules":["[project]/Documents/00 - projet/plumeia/src/hooks/useAuth.ts [app-client]"],"page":"/login","isPageHidden":true},"startTime":1772195400976,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":9321,"timestamp":448856017362,"id":835,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772195401017,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":768,"timestamp":448856096714,"id":837,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772195401096,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":107091,"timestamp":448856017151,"id":834,"tags":{"url":"/login"},"startTime":1772195401017,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":448856124279,"id":838,"parentId":834,"tags":{"url":"/login","memory.rss":"819732480","memory.heapUsed":"323884848","memory.heapTotal":"360177664"},"startTime":1772195401124,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":29368,"timestamp":448856096537,"id":836,"tags":{"url":"/login"},"startTime":1772195401096,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448856125931,"id":839,"parentId":836,"tags":{"url":"/login","memory.rss":"819769344","memory.heapUsed":"324033280","memory.heapTotal":"360177664"},"startTime":1772195401125,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":340,"timestamp":448856199845,"id":840,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195401199,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":221,"timestamp":448856200233,"id":841,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195401200,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":260,"timestamp":448856201125,"id":842,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195401201,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":179,"timestamp":448856201415,"id":843,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195401201,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":211,"timestamp":448856367225,"id":844,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195401367,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":108,"timestamp":448856367461,"id":845,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195401367,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":143,"timestamp":448856367898,"id":846,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195401367,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":99,"timestamp":448856368056,"id":847,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195401367,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":168,"timestamp":448856840611,"id":848,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195401840,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":95,"timestamp":448856840804,"id":849,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195401840,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":112,"timestamp":448856841167,"id":850,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195401841,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":86,"timestamp":448856841293,"id":851,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195401841,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":614,"timestamp":448856841947,"id":853,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195401841,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":15652,"timestamp":448856841720,"id":852,"tags":{"url":"/api/auth/session"},"startTime":1772195401841,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448856857404,"id":854,"parentId":852,"tags":{"url":"/api/auth/session","memory.rss":"810639360","memory.heapUsed":"265880816","memory.heapTotal":"328613888"},"startTime":1772195401857,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":338,"timestamp":448856883393,"id":857,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195401883,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":250,"timestamp":448856883766,"id":858,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195401883,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":1648,"timestamp":448856883094,"id":856,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772195401882,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":176,"timestamp":448856887045,"id":859,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195401886,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":107,"timestamp":448856887243,"id":860,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195401887,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":571,"timestamp":448856888484,"id":862,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195401888,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":73649,"timestamp":448856882723,"id":855,"tags":{"url":"/api/user/profile"},"startTime":1772195401882,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448856956406,"id":863,"parentId":855,"tags":{"url":"/api/user/profile","memory.rss":"814788608","memory.heapUsed":"282780016","memory.heapTotal":"331669504"},"startTime":1772195401956,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":70808,"timestamp":448856888291,"id":861,"tags":{"url":"/api/auth/session"},"startTime":1772195401888,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":448856959134,"id":864,"parentId":861,"tags":{"url":"/api/auth/session","memory.rss":"814997504","memory.heapUsed":"283097192","memory.heapTotal":"331669504"},"startTime":1772195401959,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":180,"timestamp":448856960025,"id":865,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195401959,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":97,"timestamp":448856960224,"id":866,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195401960,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":149,"timestamp":448856960614,"id":867,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195401960,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":95,"timestamp":448856960778,"id":868,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195401960,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":513,"timestamp":448856961351,"id":870,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195401961,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":7885,"timestamp":448856961162,"id":869,"tags":{"url":"/api/auth/session"},"startTime":1772195401961,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448856969088,"id":871,"parentId":869,"tags":{"url":"/api/auth/session","memory.rss":"815001600","memory.heapUsed":"284646480","memory.heapTotal":"331669504"},"startTime":1772195401968,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":172,"timestamp":448856987092,"id":872,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195401986,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":102,"timestamp":448856987286,"id":873,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195401987,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":200,"timestamp":448856987740,"id":874,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195401987,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":116,"timestamp":448856987960,"id":875,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195401987,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":485,"timestamp":448856988624,"id":877,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195401988,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":714,"timestamp":448856993188,"id":879,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772195401993,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":12208,"timestamp":448856988409,"id":876,"tags":{"url":"/api/auth/session"},"startTime":1772195401988,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":4,"timestamp":448857000662,"id":880,"parentId":876,"tags":{"url":"/api/auth/session","memory.rss":"815235072","memory.heapUsed":"287300448","memory.heapTotal":"331931648"},"startTime":1772195402000,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":163,"timestamp":448857002215,"id":881,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195402002,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":100,"timestamp":448857002397,"id":882,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195402002,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":132,"timestamp":448857002995,"id":883,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195402002,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":96,"timestamp":448857003142,"id":884,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195402003,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":576,"timestamp":448857004344,"id":886,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195402004,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":74237,"timestamp":448856992963,"id":878,"tags":{"url":"/api/user/profile"},"startTime":1772195401992,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448857067236,"id":887,"parentId":878,"tags":{"url":"/api/user/profile","memory.rss":"816115712","memory.heapUsed":"299497600","memory.heapTotal":"334053376"},"startTime":1772195402067,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":2586,"timestamp":448857069424,"id":889,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772195402069,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":76074,"timestamp":448857004095,"id":885,"tags":{"url":"/api/auth/session"},"startTime":1772195402003,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":3,"timestamp":448857080213,"id":890,"parentId":885,"tags":{"url":"/api/auth/session","memory.rss":"816140288","memory.heapUsed":"294919376","memory.heapTotal":"333848576"},"startTime":1772195402080,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":72015,"timestamp":448857069152,"id":888,"tags":{"url":"/api/user/profile"},"startTime":1772195402069,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448857141200,"id":891,"parentId":888,"tags":{"url":"/api/user/profile","memory.rss":"819847168","memory.heapUsed":"309826736","memory.heapTotal":"344358912"},"startTime":1772195402141,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":516,"timestamp":448857142564,"id":893,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772195402142,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":72437,"timestamp":448857142342,"id":892,"tags":{"url":"/api/user/profile"},"startTime":1772195402142,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448857214807,"id":894,"parentId":892,"tags":{"url":"/api/user/profile","memory.rss":"821641216","memory.heapUsed":"322170200","memory.heapTotal":"354664448"},"startTime":1772195402214,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":456,"timestamp":448857216235,"id":896,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772195402216,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":61138,"timestamp":448857216026,"id":895,"tags":{"url":"/api/user/profile"},"startTime":1772195402215,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":448857277190,"id":897,"parentId":895,"tags":{"url":"/api/user/profile","memory.rss":"830033920","memory.heapUsed":"337322264","memory.heapTotal":"367443968"},"startTime":1772195402277,"traceId":"0ba7bcf04db23df0"},{"name":"client-hmr-latency","duration":43000,"timestamp":449243455892,"id":898,"parentId":3,"tags":{"updatedModules":[],"page":"/login","isPageHidden":true},"startTime":1772195788531,"traceId":"0ba7bcf04db23df0"},{"name":"client-hmr-latency","duration":43000,"timestamp":449243456248,"id":899,"parentId":3,"tags":{"updatedModules":[],"page":"/login","isPageHidden":false},"startTime":1772195788546,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":16687,"timestamp":449264688417,"id":901,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1772195809688,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":95866,"timestamp":449264687702,"id":900,"tags":{"url":"/"},"startTime":1772195809687,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":2,"timestamp":449264783594,"id":902,"parentId":900,"tags":{"url":"/","memory.rss":"753483776","memory.heapUsed":"281489488","memory.heapTotal":"293326848"},"startTime":1772195809783,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":459,"timestamp":449264910803,"id":903,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195809910,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":281,"timestamp":449264911301,"id":904,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195809911,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":282,"timestamp":449264912093,"id":905,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195809912,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":226,"timestamp":449264912402,"id":906,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195809912,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":7352,"timestamp":449264914506,"id":908,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195809914,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":20667,"timestamp":449264913579,"id":907,"tags":{"url":"/api/auth/session"},"startTime":1772195809913,"traceId":"0ba7bcf04db23df0"},{"name":"memory-usage","duration":1,"timestamp":449264934268,"id":909,"parentId":907,"tags":{"url":"/api/auth/session","memory.rss":"759197696","memory.heapUsed":"277373656","memory.heapTotal":"298668032"},"startTime":1772195809934,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":438,"timestamp":449264936564,"id":910,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195809936,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":148,"timestamp":449264937060,"id":911,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195809937,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":119,"timestamp":449264937662,"id":912,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195809937,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":86,"timestamp":449264937797,"id":913,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195809937,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":661,"timestamp":449264939278,"id":917,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195809939,"traceId":"0ba7bcf04db23df0"},{"name":"ensure-page","duration":10363,"timestamp":449264938467,"id":915,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772195809938,"traceId":"0ba7bcf04db23df0"},{"name":"handle-request","duration":87300,"timestamp":449264938857,"id":916,"tags":{"url":"/api/auth/session"},"startTime":1772195809939,"traceId":"0ba7bcf04db23df0"}] +[{"name":"hot-reloader","duration":37,"timestamp":449290122484,"id":3,"tags":{"version":"16.1.6"},"startTime":1772195835122,"traceId":"7433d9e08240bf45"},{"name":"setup-dev-bundler","duration":194828,"timestamp":449290031791,"id":2,"parentId":1,"tags":{},"startTime":1772195835031,"traceId":"7433d9e08240bf45"},{"name":"start-dev-server","duration":587153,"timestamp":449289725415,"id":1,"tags":{"cpus":"32","platform":"win32","memory.freeMem":"8482160640","memory.totalMem":"34186964992","memory.heapSizeLimit":"17143169024","memory.rss":"274923520","memory.heapTotal":"90763264","memory.heapUsed":"64029632"},"startTime":1772195834725,"traceId":"7433d9e08240bf45"},{"name":"compile-path","duration":323120,"timestamp":449290325813,"id":6,"tags":{"trigger":"/login"},"startTime":1772195835325,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":293315,"timestamp":449290355781,"id":8,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772195835355,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":468645,"timestamp":449290325390,"id":5,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772195835325,"traceId":"7433d9e08240bf45"}] +[{"name":"ensure-page","duration":1739,"timestamp":449290874757,"id":10,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772195835874,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":585,"timestamp":449290920656,"id":11,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195835920,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":165,"timestamp":449290921291,"id":12,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195835921,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":287,"timestamp":449290923011,"id":13,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195835922,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":180,"timestamp":449290923341,"id":14,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195835923,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":573565,"timestamp":449290355377,"id":7,"tags":{"url":"/login"},"startTime":1772195835355,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":5,"timestamp":449290929003,"id":15,"parentId":7,"tags":{"url":"/login","memory.rss":"460709888","memory.heapUsed":"97110224","memory.heapTotal":"126996480"},"startTime":1772195835928,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":608900,"timestamp":449290321026,"id":4,"tags":{"url":"/login"},"startTime":1772195835320,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":7,"timestamp":449290929966,"id":16,"parentId":4,"tags":{"url":"/login","memory.rss":"460771328","memory.heapUsed":"97164024","memory.heapTotal":"126996480"},"startTime":1772195835929,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":63669,"timestamp":449290874274,"id":9,"tags":{"url":"/login"},"startTime":1772195835874,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":6,"timestamp":449290937986,"id":17,"parentId":9,"tags":{"url":"/login","memory.rss":"462622720","memory.heapUsed":"97795600","memory.heapTotal":"127258624"},"startTime":1772195835937,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":439,"timestamp":449290999571,"id":18,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195835999,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":559,"timestamp":449291000063,"id":19,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195835999,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":242,"timestamp":449291001313,"id":20,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836001,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":134,"timestamp":449291001583,"id":21,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836001,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":314,"timestamp":449291003572,"id":25,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195836003,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":311,"timestamp":449291003940,"id":26,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195836003,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":296,"timestamp":449291004845,"id":27,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195836004,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":259,"timestamp":449291005173,"id":28,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772195836005,"traceId":"7433d9e08240bf45"},{"name":"compile-path","duration":10121,"timestamp":449291003363,"id":24,"tags":{"trigger":"/api/auth/[...nextauth]"},"startTime":1772195836003,"traceId":"7433d9e08240bf45"}] +[{"name":"ensure-page","duration":185,"timestamp":449291355781,"id":29,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836355,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":119,"timestamp":449291355992,"id":30,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836355,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":212,"timestamp":449291356448,"id":31,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836356,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":121,"timestamp":449291356676,"id":32,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836356,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":598,"timestamp":449291357642,"id":34,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195836357,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":678322,"timestamp":449291002862,"id":22,"tags":{"url":"/api/auth/session"},"startTime":1772195836002,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":5,"timestamp":449291681211,"id":35,"parentId":22,"tags":{"url":"/api/auth/session","memory.rss":"519852032","memory.heapUsed":"111889776","memory.heapTotal":"143138816"},"startTime":1772195836681,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":325200,"timestamp":449291357285,"id":33,"tags":{"url":"/api/auth/session"},"startTime":1772195836357,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":4,"timestamp":449291682510,"id":36,"parentId":33,"tags":{"url":"/api/auth/session","memory.rss":"519864320","memory.heapUsed":"112116048","memory.heapTotal":"143138816"},"startTime":1772195836682,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":186,"timestamp":449291689088,"id":37,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836688,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":131,"timestamp":449291689299,"id":38,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836689,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":159,"timestamp":449291690261,"id":42,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836690,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":121,"timestamp":449291690439,"id":43,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836690,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":454,"timestamp":449291691416,"id":45,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195836691,"traceId":"7433d9e08240bf45"},{"name":"compile-path","duration":11453,"timestamp":449291689920,"id":41,"tags":{"trigger":"/api/user/profile"},"startTime":1772195836689,"traceId":"7433d9e08240bf45"}] +[{"name":"ensure-page","duration":192,"timestamp":449291777619,"id":46,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836777,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":108,"timestamp":449291777833,"id":47,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836777,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":3510,"timestamp":449291779047,"id":49,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772195836778,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":190,"timestamp":449291786410,"id":50,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836786,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":117,"timestamp":449291786621,"id":51,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836786,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":1269,"timestamp":449291789297,"id":53,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195836789,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":109045,"timestamp":449291691055,"id":44,"tags":{"url":"/api/auth/session"},"startTime":1772195836690,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":5,"timestamp":449291800130,"id":54,"parentId":44,"tags":{"url":"/api/auth/session","memory.rss":"536281088","memory.heapUsed":"121728568","memory.heapTotal":"150986752"},"startTime":1772195836800,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":93768,"timestamp":449291788811,"id":52,"tags":{"url":"/api/auth/session"},"startTime":1772195836788,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":6,"timestamp":449291882615,"id":55,"parentId":52,"tags":{"url":"/api/auth/session","memory.rss":"558989312","memory.heapUsed":"134589064","memory.heapTotal":"161300480"},"startTime":1772195836882,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":221,"timestamp":449291884035,"id":56,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836883,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":146,"timestamp":449291884279,"id":57,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836884,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":181,"timestamp":449291884878,"id":58,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836884,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":106,"timestamp":449291885078,"id":59,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836884,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":2316,"timestamp":449291886046,"id":61,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195836885,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":12196,"timestamp":449291885613,"id":60,"tags":{"url":"/api/auth/session"},"startTime":1772195836885,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":8,"timestamp":449291897868,"id":62,"parentId":60,"tags":{"url":"/api/auth/session","memory.rss":"559423488","memory.heapUsed":"136517736","memory.heapTotal":"162086912"},"startTime":1772195836897,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":189,"timestamp":449291911370,"id":63,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836911,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":117,"timestamp":449291911579,"id":64,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836911,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":170,"timestamp":449291912022,"id":65,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836911,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":108,"timestamp":449291912210,"id":66,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836912,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":589,"timestamp":449291912995,"id":68,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195836912,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":229490,"timestamp":449291689617,"id":39,"tags":{"url":"/api/user/profile"},"startTime":1772195836689,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":11,"timestamp":449291919170,"id":69,"parentId":39,"tags":{"url":"/api/user/profile","memory.rss":"560250880","memory.heapUsed":"138322400","memory.heapTotal":"162349056"},"startTime":1772195836919,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":747,"timestamp":449291921863,"id":71,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772195836921,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":148592,"timestamp":449291778743,"id":48,"tags":{"url":"/api/user/profile"},"startTime":1772195836778,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":9,"timestamp":449291927385,"id":72,"parentId":48,"tags":{"url":"/api/user/profile","memory.rss":"560709632","memory.heapUsed":"139693312","memory.heapTotal":"163135488"},"startTime":1772195836927,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":813,"timestamp":449291930308,"id":74,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772195836930,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":25690,"timestamp":449291912721,"id":67,"tags":{"url":"/api/auth/session"},"startTime":1772195836912,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":6,"timestamp":449291938437,"id":75,"parentId":67,"tags":{"url":"/api/auth/session","memory.rss":"562380800","memory.heapUsed":"134865608","memory.heapTotal":"169164800"},"startTime":1772195836938,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":201,"timestamp":449291940916,"id":76,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836940,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":114,"timestamp":449291941138,"id":77,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836941,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":321,"timestamp":449291943825,"id":78,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836943,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":182,"timestamp":449291944175,"id":79,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195836944,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":585,"timestamp":449291945729,"id":81,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195836945,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":9414,"timestamp":449291945449,"id":80,"tags":{"url":"/api/auth/session"},"startTime":1772195836945,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":4,"timestamp":449291954886,"id":82,"parentId":80,"tags":{"url":"/api/auth/session","memory.rss":"563597312","memory.heapUsed":"137432560","memory.heapTotal":"169426944"},"startTime":1772195836954,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":38509,"timestamp":449291921572,"id":70,"tags":{"url":"/api/user/profile"},"startTime":1772195836921,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":7,"timestamp":449291960113,"id":83,"parentId":70,"tags":{"url":"/api/user/profile","memory.rss":"563625984","memory.heapUsed":"137786752","memory.heapTotal":"169426944"},"startTime":1772195836960,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":35767,"timestamp":449291930024,"id":73,"tags":{"url":"/api/user/profile"},"startTime":1772195836929,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":5,"timestamp":449291965820,"id":84,"parentId":73,"tags":{"url":"/api/user/profile","memory.rss":"563691520","memory.heapUsed":"138060448","memory.heapTotal":"169426944"},"startTime":1772195836965,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":639,"timestamp":449291967034,"id":86,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772195836966,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":26172,"timestamp":449291966849,"id":85,"tags":{"url":"/api/user/profile"},"startTime":1772195836966,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":6,"timestamp":449291993044,"id":87,"parentId":85,"tags":{"url":"/api/user/profile","memory.rss":"568037376","memory.heapUsed":"141552880","memory.heapTotal":"169426944"},"startTime":1772195836992,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":571,"timestamp":449291997364,"id":89,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772195836997,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":23228,"timestamp":449291997152,"id":88,"tags":{"url":"/api/user/profile"},"startTime":1772195836997,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":10,"timestamp":449292020428,"id":90,"parentId":88,"tags":{"url":"/api/user/profile","memory.rss":"570552320","memory.heapUsed":"144316488","memory.heapTotal":"169689088"},"startTime":1772195837020,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":741,"timestamp":449292022499,"id":92,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772195837022,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":20771,"timestamp":449292022270,"id":91,"tags":{"url":"/api/user/profile"},"startTime":1772195837022,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":6,"timestamp":449292043069,"id":93,"parentId":91,"tags":{"url":"/api/user/profile","memory.rss":"571252736","memory.heapUsed":"145962424","memory.heapTotal":"170213376"},"startTime":1772195837042,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":179,"timestamp":449297405584,"id":94,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772195842405,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":103,"timestamp":449297405784,"id":95,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772195842405,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":147,"timestamp":449297406189,"id":96,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772195842406,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":156,"timestamp":449297406380,"id":97,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772195842406,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":541,"timestamp":449297407593,"id":99,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195842407,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":13256,"timestamp":449297407230,"id":98,"tags":{"url":"/api/auth/providers"},"startTime":1772195842407,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":5,"timestamp":449297420507,"id":100,"parentId":98,"tags":{"url":"/api/auth/providers","memory.rss":"600719360","memory.heapUsed":"138881704","memory.heapTotal":"173883392"},"startTime":1772195842420,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":180,"timestamp":449297421821,"id":101,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772195842421,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":107,"timestamp":449297422019,"id":102,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772195842421,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":120,"timestamp":449297422364,"id":103,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772195842422,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":92,"timestamp":449297422498,"id":104,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772195842422,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":683,"timestamp":449297423395,"id":106,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195842423,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":4666,"timestamp":449297423058,"id":105,"tags":{"url":"/api/auth/csrf"},"startTime":1772195842422,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":7,"timestamp":449297427754,"id":107,"parentId":105,"tags":{"url":"/api/auth/csrf","memory.rss":"601034752","memory.heapUsed":"140086680","memory.heapTotal":"173883392"},"startTime":1772195842427,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":172,"timestamp":449297428867,"id":108,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772195842428,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":114,"timestamp":449297429057,"id":109,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772195842428,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":159,"timestamp":449297429456,"id":110,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772195842429,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":106,"timestamp":449297429630,"id":111,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772195842429,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":404,"timestamp":449297430332,"id":113,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195842430,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":204279,"timestamp":449297430070,"id":112,"tags":{"url":"/api/auth/callback/credentials?"},"startTime":1772195842429,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":1,"timestamp":449297634368,"id":114,"parentId":112,"tags":{"url":"/api/auth/callback/credentials?","memory.rss":"603025408","memory.heapUsed":"144368592","memory.heapTotal":"173883392"},"startTime":1772195842634,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":206,"timestamp":449297636346,"id":115,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195842636,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":105,"timestamp":449297636571,"id":116,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195842636,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":206,"timestamp":449297637048,"id":117,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195842636,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":106,"timestamp":449297637273,"id":118,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195842637,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":566,"timestamp":449297637920,"id":120,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195842637,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":6008,"timestamp":449297637701,"id":119,"tags":{"url":"/api/auth/session"},"startTime":1772195842637,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":1,"timestamp":449297643730,"id":121,"parentId":119,"tags":{"url":"/api/auth/session","memory.rss":"603353088","memory.heapUsed":"145919680","memory.heapTotal":"174145536"},"startTime":1772195842643,"traceId":"7433d9e08240bf45"},{"name":"compile-path","duration":7359,"timestamp":449297646758,"id":124,"tags":{"trigger":"/dashboard"},"startTime":1772195842646,"traceId":"7433d9e08240bf45"}] +[{"name":"ensure-page","duration":560,"timestamp":449297674151,"id":126,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772195842674,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":36193,"timestamp":449297646243,"id":122,"tags":{"url":"/dashboard?_rsc=5c339"},"startTime":1772195842646,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":1,"timestamp":449297682456,"id":127,"parentId":122,"tags":{"url":"/dashboard?_rsc=5c339","memory.rss":"607531008","memory.heapUsed":"145020968","memory.heapTotal":"178319360"},"startTime":1772195842682,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":23930,"timestamp":449297673928,"id":125,"tags":{"url":"/api/user/profile"},"startTime":1772195842673,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":2,"timestamp":449297697883,"id":128,"parentId":125,"tags":{"url":"/api/user/profile","memory.rss":"609427456","memory.heapUsed":"145669416","memory.heapTotal":"178581504"},"startTime":1772195842697,"traceId":"7433d9e08240bf45"},{"name":"compile-path","duration":15120,"timestamp":449297720553,"id":131,"tags":{"trigger":"/api/projects"},"startTime":1772195842720,"traceId":"7433d9e08240bf45"}] +[{"name":"handle-request","duration":60338,"timestamp":449297720232,"id":129,"tags":{"url":"/api/projects"},"startTime":1772195842720,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":2,"timestamp":449297780593,"id":132,"parentId":129,"tags":{"url":"/api/projects","memory.rss":"642240512","memory.heapUsed":"153404800","memory.heapTotal":"182558720"},"startTime":1772195842780,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":536,"timestamp":449297781596,"id":134,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772195842781,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":24528,"timestamp":449297781389,"id":133,"tags":{"url":"/api/projects"},"startTime":1772195842781,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":2,"timestamp":449297805944,"id":135,"parentId":133,"tags":{"url":"/api/projects","memory.rss":"642756608","memory.heapUsed":"154784384","memory.heapTotal":"182558720"},"startTime":1772195842805,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":577,"timestamp":449297807319,"id":137,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772195842807,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":13244,"timestamp":449297806984,"id":136,"tags":{"url":"/api/projects"},"startTime":1772195842806,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":2,"timestamp":449297820256,"id":138,"parentId":136,"tags":{"url":"/api/projects","memory.rss":"643039232","memory.heapUsed":"156155560","memory.heapTotal":"182820864"},"startTime":1772195842820,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":182,"timestamp":449307438280,"id":139,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772195852438,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":105,"timestamp":449307438484,"id":140,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772195852438,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":149,"timestamp":449307439393,"id":144,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772195852439,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":105,"timestamp":449307439558,"id":145,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772195852439,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":424,"timestamp":449307440327,"id":147,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195852440,"traceId":"7433d9e08240bf45"},{"name":"compile-path","duration":20600,"timestamp":449307439063,"id":143,"tags":{"trigger":"/"},"startTime":1772195852438,"traceId":"7433d9e08240bf45"}] +[{"name":"handle-request","duration":43624,"timestamp":449307440063,"id":146,"tags":{"url":"/api/auth/csrf"},"startTime":1772195852439,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":1,"timestamp":449307483706,"id":148,"parentId":146,"tags":{"url":"/api/auth/csrf","memory.rss":"599175168","memory.heapUsed":"132755096","memory.heapTotal":"139927552"},"startTime":1772195852483,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":45963,"timestamp":449307438765,"id":141,"tags":{"url":"/?_rsc=1h1b5"},"startTime":1772195852438,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":1,"timestamp":449307484743,"id":149,"parentId":141,"tags":{"url":"/?_rsc=1h1b5","memory.rss":"599179264","memory.heapUsed":"132833536","memory.heapTotal":"139927552"},"startTime":1772195852484,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":152,"timestamp":449307485713,"id":150,"parentId":3,"tags":{"inputPage":"/api/auth/signout"},"startTime":1772195852485,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":93,"timestamp":449307485881,"id":151,"parentId":3,"tags":{"inputPage":"/api/auth/signout"},"startTime":1772195852485,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":152,"timestamp":449307486675,"id":152,"parentId":3,"tags":{"inputPage":"/api/auth/signout"},"startTime":1772195852486,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":94,"timestamp":449307486843,"id":153,"parentId":3,"tags":{"inputPage":"/api/auth/signout"},"startTime":1772195852486,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":542,"timestamp":449307487779,"id":155,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195852487,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":6291,"timestamp":449307487594,"id":154,"tags":{"url":"/api/auth/signout"},"startTime":1772195852487,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":1,"timestamp":449307493902,"id":156,"parentId":154,"tags":{"url":"/api/auth/signout","memory.rss":"602091520","memory.heapUsed":"133397056","memory.heapTotal":"140713984"},"startTime":1772195852493,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":155,"timestamp":449307505546,"id":157,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195852505,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":101,"timestamp":449307505721,"id":158,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195852505,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":232,"timestamp":449307506213,"id":159,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195852506,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":208,"timestamp":449307506472,"id":160,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772195852506,"traceId":"7433d9e08240bf45"},{"name":"ensure-page","duration":759,"timestamp":449307508208,"id":162,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772195852508,"traceId":"7433d9e08240bf45"},{"name":"handle-request","duration":6602,"timestamp":449307507832,"id":161,"tags":{"url":"/api/auth/session"},"startTime":1772195852507,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":1,"timestamp":449307514476,"id":163,"parentId":161,"tags":{"url":"/api/auth/session","memory.rss":"603602944","memory.heapUsed":"133755328","memory.heapTotal":"141238272"},"startTime":1772195852514,"traceId":"7433d9e08240bf45"},{"name":"compile-path","duration":43402,"timestamp":449308929814,"id":166,"tags":{"trigger":"/pricing"},"startTime":1772195853929,"traceId":"7433d9e08240bf45"}] +[{"name":"handle-request","duration":62246,"timestamp":449308929537,"id":164,"tags":{"url":"/pricing?_rsc=vusbg"},"startTime":1772195853929,"traceId":"7433d9e08240bf45"},{"name":"memory-usage","duration":1,"timestamp":449308991801,"id":167,"parentId":164,"tags":{"url":"/pricing?_rsc=vusbg","memory.rss":"736366592","memory.heapUsed":"137414416","memory.heapTotal":"148819968"},"startTime":1772195853991,"traceId":"7433d9e08240bf45"},{"name":"compile-path","duration":79639,"timestamp":449309007197,"id":170,"tags":{"trigger":"/api/plans"},"startTime":1772195854007,"traceId":"7433d9e08240bf45"}] +[{"name":"hot-reloader","duration":38,"timestamp":456933724361,"id":3,"tags":{"version":"16.1.6"},"startTime":1772203478723,"traceId":"50b98691e03488c6"},{"name":"setup-dev-bundler","duration":213274,"timestamp":456933632921,"id":2,"parentId":1,"tags":{},"startTime":1772203478632,"traceId":"50b98691e03488c6"},{"name":"start-dev-server","duration":605898,"timestamp":456933321239,"id":1,"tags":{"cpus":"32","platform":"win32","memory.freeMem":"7240257536","memory.totalMem":"34186964992","memory.heapSizeLimit":"17143169024","memory.rss":"273260544","memory.heapTotal":"91086848","memory.heapUsed":"64540200"},"startTime":1772203478320,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":40316,"timestamp":456933952724,"id":8,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772203478952,"traceId":"50b98691e03488c6"},{"name":"compile-path","duration":186469,"timestamp":456933951031,"id":6,"tags":{"trigger":"/pricing"},"startTime":1772203478950,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":186980,"timestamp":456933950842,"id":5,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772203478950,"traceId":"50b98691e03488c6"}] +[{"name":"handle-request","duration":297657,"timestamp":456933947260,"id":4,"tags":{"url":"/pricing"},"startTime":1772203478946,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":6,"timestamp":456934244987,"id":9,"parentId":4,"tags":{"url":"/pricing","memory.rss":"495382528","memory.heapUsed":"106048304","memory.heapTotal":"131670016"},"startTime":1772203479244,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":293657,"timestamp":456933952485,"id":7,"tags":{"url":"/login"},"startTime":1772203478952,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":6,"timestamp":456934246260,"id":10,"parentId":7,"tags":{"url":"/login","memory.rss":"495398912","memory.heapUsed":"106152080","memory.heapTotal":"131670016"},"startTime":1772203479245,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":601,"timestamp":456934271514,"id":11,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772203479271,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":351,"timestamp":456934272163,"id":12,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772203479271,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":416,"timestamp":456934277208,"id":13,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772203479276,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":184,"timestamp":456934277657,"id":14,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772203479277,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":236,"timestamp":456934341899,"id":15,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203479341,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":138,"timestamp":456934342166,"id":16,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203479341,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":409,"timestamp":456934343339,"id":20,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203479342,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":230,"timestamp":456934343792,"id":21,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203479343,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":6459,"timestamp":456934342955,"id":18,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772203479342,"traceId":"50b98691e03488c6"},{"name":"compile-path","duration":161996,"timestamp":456934342995,"id":19,"tags":{"trigger":"/api/plans"},"startTime":1772203479342,"traceId":"50b98691e03488c6"}] +[{"name":"handle-request","duration":232088,"timestamp":456934342597,"id":17,"tags":{"url":"/api/plans"},"startTime":1772203479342,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":456934574715,"id":24,"parentId":17,"tags":{"url":"/api/plans","memory.rss":"586756096","memory.heapUsed":"132816392","memory.heapTotal":"155959296"},"startTime":1772203479574,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":317,"timestamp":456935021522,"id":25,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203480021,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":178,"timestamp":456935021870,"id":26,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203480021,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":172,"timestamp":456935022318,"id":27,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203480021,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":121,"timestamp":456935022509,"id":28,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203480022,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":603,"timestamp":456935023557,"id":30,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203480023,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":730120,"timestamp":456934344912,"id":22,"tags":{"url":"/api/auth/session"},"startTime":1772203479344,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":456935075061,"id":31,"parentId":22,"tags":{"url":"/api/auth/session","memory.rss":"589627392","memory.heapUsed":"132966024","memory.heapTotal":"159617024"},"startTime":1772203480074,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":61927,"timestamp":456935023144,"id":29,"tags":{"url":"/api/auth/session"},"startTime":1772203480022,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":456935085102,"id":32,"parentId":29,"tags":{"url":"/api/auth/session","memory.rss":"590049280","memory.heapUsed":"133996328","memory.heapTotal":"160022528"},"startTime":1772203480084,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":182,"timestamp":456935085768,"id":33,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203480085,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":106,"timestamp":456935085970,"id":34,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203480085,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":202,"timestamp":456935086351,"id":35,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203480085,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":127,"timestamp":456935086586,"id":36,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203480086,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":581,"timestamp":456935087353,"id":38,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203480086,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":9210,"timestamp":456935087115,"id":37,"tags":{"url":"/api/auth/session"},"startTime":1772203480086,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":456935096350,"id":39,"parentId":37,"tags":{"url":"/api/auth/session","memory.rss":"590336000","memory.heapUsed":"135467672","memory.heapTotal":"160284672"},"startTime":1772203480095,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":247,"timestamp":456935105190,"id":40,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203480104,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":124,"timestamp":456935105460,"id":41,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203480105,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":149,"timestamp":456935106266,"id":42,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203480105,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":104,"timestamp":456935106434,"id":43,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203480106,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":659,"timestamp":456935107584,"id":48,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203480107,"traceId":"50b98691e03488c6"},{"name":"compile-path","duration":6177,"timestamp":456935107025,"id":46,"tags":{"trigger":"/api/user/profile"},"startTime":1772203480106,"traceId":"50b98691e03488c6"}] +[{"name":"handle-request","duration":36902,"timestamp":456935107383,"id":47,"tags":{"url":"/api/auth/session"},"startTime":1772203480107,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":3,"timestamp":456935144309,"id":49,"parentId":47,"tags":{"url":"/api/auth/session","memory.rss":"600748032","memory.heapUsed":"135242496","memory.heapTotal":"167587840"},"startTime":1772203480143,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":62295,"timestamp":456935106746,"id":44,"tags":{"url":"/api/user/profile"},"startTime":1772203480106,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":456935169070,"id":50,"parentId":44,"tags":{"url":"/api/user/profile","memory.rss":"602611712","memory.heapUsed":"136064232","memory.heapTotal":"167849984"},"startTime":1772203480168,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":657,"timestamp":456935173525,"id":52,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772203480173,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":27493,"timestamp":456935173143,"id":51,"tags":{"url":"/api/user/profile"},"startTime":1772203480172,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":5,"timestamp":456935200671,"id":53,"parentId":51,"tags":{"url":"/api/user/profile","memory.rss":"603103232","memory.heapUsed":"137932072","memory.heapTotal":"168374272"},"startTime":1772203480200,"traceId":"50b98691e03488c6"},{"name":"client-hmr-latency","duration":47000,"timestamp":457124313893,"id":54,"parentId":3,"tags":{"updatedModules":["[project]/Documents/00 - projet/plumeia/src/app/pricing/page.tsx [app-client]"],"page":"/pricing","isPageHidden":false},"startTime":1772203669391,"traceId":"50b98691e03488c6"},{"name":"client-hmr-latency","duration":48000,"timestamp":457124313065,"id":55,"parentId":3,"tags":{"updatedModules":["[project]/Documents/00 - projet/plumeia/src/app/pricing/page.tsx [app-client]"],"page":"/login","isPageHidden":true},"startTime":1772203669392,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":14285,"timestamp":457131926713,"id":57,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772203676926,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":91164,"timestamp":457131926321,"id":56,"tags":{"url":"/pricing"},"startTime":1772203676926,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":457132017526,"id":58,"parentId":56,"tags":{"url":"/pricing","memory.rss":"660951040","memory.heapUsed":"140731712","memory.heapTotal":"160878592"},"startTime":1772203677017,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":387,"timestamp":457132085317,"id":61,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203677085,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":256,"timestamp":457132085738,"id":62,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203677085,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":367,"timestamp":457132086531,"id":63,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203677086,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":240,"timestamp":457132086928,"id":64,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203677086,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":641,"timestamp":457132088219,"id":66,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203677088,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":20966,"timestamp":457132085074,"id":60,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772203677085,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":45009,"timestamp":457132087962,"id":65,"tags":{"url":"/api/auth/session"},"startTime":1772203677087,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":6,"timestamp":457132133012,"id":67,"parentId":65,"tags":{"url":"/api/auth/session","memory.rss":"671223808","memory.heapUsed":"144876552","memory.heapTotal":"161566720"},"startTime":1772203677133,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":364,"timestamp":457132135796,"id":68,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203677135,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":336,"timestamp":457132136208,"id":69,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203677136,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":158,"timestamp":457132136860,"id":70,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203677136,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":108,"timestamp":457132137034,"id":71,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203677137,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":537,"timestamp":457132138291,"id":73,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203677138,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":4818,"timestamp":457132137849,"id":72,"tags":{"url":"/api/auth/session"},"startTime":1772203677137,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":6,"timestamp":457132142694,"id":74,"parentId":72,"tags":{"url":"/api/auth/session","memory.rss":"672526336","memory.heapUsed":"146226376","memory.heapTotal":"161828864"},"startTime":1772203677142,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":80474,"timestamp":457132084305,"id":59,"tags":{"url":"/api/plans"},"startTime":1772203677084,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":6,"timestamp":457132164812,"id":75,"parentId":59,"tags":{"url":"/api/plans","memory.rss":"672976896","memory.heapUsed":"146633984","memory.heapTotal":"161828864"},"startTime":1772203677164,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":1583,"timestamp":457132907727,"id":77,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772203677907,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":22201,"timestamp":457132907529,"id":76,"tags":{"url":"/pricing"},"startTime":1772203677907,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":457132929749,"id":78,"parentId":76,"tags":{"url":"/pricing","memory.rss":"679780352","memory.heapUsed":"147337488","memory.heapTotal":"182276096"},"startTime":1772203677929,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":448,"timestamp":457132988589,"id":81,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203677988,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":263,"timestamp":457132989069,"id":82,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203677989,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":1795,"timestamp":457132988335,"id":80,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772203677988,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":336,"timestamp":457132995648,"id":83,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203677995,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":244,"timestamp":457132996015,"id":84,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203677996,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":500,"timestamp":457132996999,"id":86,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203677997,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":19072,"timestamp":457132987958,"id":79,"tags":{"url":"/api/plans"},"startTime":1772203677987,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":457133007053,"id":87,"parentId":79,"tags":{"url":"/api/plans","memory.rss":"685182976","memory.heapUsed":"153406016","memory.heapTotal":"182743040"},"startTime":1772203678007,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":11212,"timestamp":457132996764,"id":85,"tags":{"url":"/api/auth/session"},"startTime":1772203677996,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":457133007994,"id":88,"parentId":85,"tags":{"url":"/api/auth/session","memory.rss":"685207552","memory.heapUsed":"153587496","memory.heapTotal":"182743040"},"startTime":1772203678008,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":360,"timestamp":457133016384,"id":89,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203678016,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":254,"timestamp":457133016781,"id":90,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203678016,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":147,"timestamp":457133017520,"id":91,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203678017,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":111,"timestamp":457133017683,"id":92,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203678017,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":660,"timestamp":457133018455,"id":94,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203678018,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":6330,"timestamp":457133018248,"id":93,"tags":{"url":"/api/auth/session"},"startTime":1772203678018,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":6,"timestamp":457133024608,"id":95,"parentId":93,"tags":{"url":"/api/auth/session","memory.rss":"686063616","memory.heapUsed":"154744168","memory.heapTotal":"182743040"},"startTime":1772203678024,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":1015,"timestamp":457133648728,"id":97,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772203678648,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":18777,"timestamp":457133648509,"id":96,"tags":{"url":"/pricing"},"startTime":1772203678648,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":457133667307,"id":98,"parentId":96,"tags":{"url":"/pricing","memory.rss":"691163136","memory.heapUsed":"159696664","memory.heapTotal":"183267328"},"startTime":1772203678667,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":1207,"timestamp":457133724369,"id":100,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772203678724,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":187,"timestamp":457133729774,"id":101,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203678729,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":102,"timestamp":457133729982,"id":102,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203678729,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":129,"timestamp":457133730428,"id":103,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203678730,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":94,"timestamp":457133730573,"id":104,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203678730,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":410,"timestamp":457133731172,"id":106,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203678731,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":14545,"timestamp":457133724167,"id":99,"tags":{"url":"/api/plans"},"startTime":1772203678724,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":457133738734,"id":107,"parentId":99,"tags":{"url":"/api/plans","memory.rss":"695107584","memory.heapUsed":"155615920","memory.heapTotal":"185364480"},"startTime":1772203678738,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":8637,"timestamp":457133730953,"id":105,"tags":{"url":"/api/auth/session"},"startTime":1772203678730,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":3,"timestamp":457133739605,"id":108,"parentId":105,"tags":{"url":"/api/auth/session","memory.rss":"695222272","memory.heapUsed":"155810672","memory.heapTotal":"185364480"},"startTime":1772203678739,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":174,"timestamp":457133746999,"id":109,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203678747,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":109,"timestamp":457133747194,"id":110,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203678747,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":114,"timestamp":457133747536,"id":111,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203678747,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":95,"timestamp":457133747664,"id":112,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203678747,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":395,"timestamp":457133748233,"id":114,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203678748,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":3527,"timestamp":457133748045,"id":113,"tags":{"url":"/api/auth/session"},"startTime":1772203678748,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":3,"timestamp":457133751590,"id":115,"parentId":113,"tags":{"url":"/api/auth/session","memory.rss":"695631872","memory.heapUsed":"156981328","memory.heapTotal":"185626624"},"startTime":1772203678751,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":957,"timestamp":457134267140,"id":117,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772203679267,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":21728,"timestamp":457134266746,"id":116,"tags":{"url":"/pricing"},"startTime":1772203679266,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":5,"timestamp":457134288501,"id":118,"parentId":116,"tags":{"url":"/pricing","memory.rss":"701669376","memory.heapUsed":"162767056","memory.heapTotal":"187076608"},"startTime":1772203679288,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":182,"timestamp":457134342110,"id":121,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203679342,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":124,"timestamp":457134342313,"id":122,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203679342,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":941,"timestamp":457134341903,"id":120,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772203679341,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":257,"timestamp":457134345686,"id":123,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203679345,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":115,"timestamp":457134345965,"id":124,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203679345,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":490,"timestamp":457134346701,"id":126,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203679346,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":12061,"timestamp":457134341713,"id":119,"tags":{"url":"/api/plans"},"startTime":1772203679341,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":457134353794,"id":127,"parentId":119,"tags":{"url":"/api/plans","memory.rss":"707026944","memory.heapUsed":"159924224","memory.heapTotal":"190222336"},"startTime":1772203679353,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":8083,"timestamp":457134346499,"id":125,"tags":{"url":"/api/auth/session"},"startTime":1772203679346,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":3,"timestamp":457134354598,"id":128,"parentId":125,"tags":{"url":"/api/auth/session","memory.rss":"707035136","memory.heapUsed":"160092872","memory.heapTotal":"190222336"},"startTime":1772203679354,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":381,"timestamp":457134363075,"id":129,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203679363,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":275,"timestamp":457134363495,"id":130,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203679363,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":253,"timestamp":457134364209,"id":131,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203679364,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":266,"timestamp":457134364486,"id":132,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203679364,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":718,"timestamp":457134365607,"id":134,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203679365,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":6085,"timestamp":457134365270,"id":133,"tags":{"url":"/api/auth/session"},"startTime":1772203679365,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":457134371377,"id":135,"parentId":133,"tags":{"url":"/api/auth/session","memory.rss":"668143616","memory.heapUsed":"161249160","memory.heapTotal":"190484480"},"startTime":1772203679371,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":842,"timestamp":457134830729,"id":137,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772203679830,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":18815,"timestamp":457134830538,"id":136,"tags":{"url":"/pricing"},"startTime":1772203679830,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":6,"timestamp":457134849410,"id":138,"parentId":136,"tags":{"url":"/pricing","memory.rss":"668819456","memory.heapUsed":"166086632","memory.heapTotal":"191008768"},"startTime":1772203679849,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":171,"timestamp":457134909627,"id":141,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203679909,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":102,"timestamp":457134909817,"id":142,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203679909,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":1165,"timestamp":457134909096,"id":140,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772203679909,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":152,"timestamp":457134912655,"id":143,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203679912,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":98,"timestamp":457134912825,"id":144,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203679912,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":397,"timestamp":457134913454,"id":146,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203679913,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":12261,"timestamp":457134908652,"id":139,"tags":{"url":"/api/plans"},"startTime":1772203679908,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":457134920935,"id":147,"parentId":139,"tags":{"url":"/api/plans","memory.rss":"672215040","memory.heapUsed":"162920592","memory.heapTotal":"194154496"},"startTime":1772203679920,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":9048,"timestamp":457134913235,"id":145,"tags":{"url":"/api/auth/session"},"startTime":1772203679913,"traceId":"50b98691e03488c6"}] +[{"name":"memory-usage","duration":6,"timestamp":457134922786,"id":148,"parentId":145,"tags":{"url":"/api/auth/session","memory.rss":"672247808","memory.heapUsed":"163136112","memory.heapTotal":"194154496"},"startTime":1772203679922,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":173,"timestamp":457134930297,"id":149,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203679930,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":116,"timestamp":457134930491,"id":150,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203679930,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":126,"timestamp":457134930821,"id":151,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203679930,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":96,"timestamp":457134930962,"id":152,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203679930,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":399,"timestamp":457134931556,"id":154,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203679931,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":3874,"timestamp":457134931357,"id":153,"tags":{"url":"/api/auth/session"},"startTime":1772203679931,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":6,"timestamp":457134935264,"id":155,"parentId":153,"tags":{"url":"/api/auth/session","memory.rss":"672583680","memory.heapUsed":"164316024","memory.heapTotal":"194416640"},"startTime":1772203679935,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":1465,"timestamp":457135384264,"id":157,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772203680384,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":19915,"timestamp":457135383942,"id":156,"tags":{"url":"/pricing"},"startTime":1772203680383,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":3,"timestamp":457135403878,"id":158,"parentId":156,"tags":{"url":"/pricing","memory.rss":"673058816","memory.heapUsed":"169105304","memory.heapTotal":"194940928"},"startTime":1772203680403,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":165,"timestamp":457135467135,"id":161,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203680467,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":106,"timestamp":457135467322,"id":162,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203680467,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":786,"timestamp":457135467005,"id":160,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772203680467,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":156,"timestamp":457135470484,"id":163,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203680470,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":107,"timestamp":457135470660,"id":164,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203680470,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":427,"timestamp":457135471584,"id":166,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203680471,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":12701,"timestamp":457135466799,"id":159,"tags":{"url":"/api/plans"},"startTime":1772203680466,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":5,"timestamp":457135479523,"id":167,"parentId":159,"tags":{"url":"/api/plans","memory.rss":"674586624","memory.heapUsed":"165876736","memory.heapTotal":"197824512"},"startTime":1772203680479,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":9081,"timestamp":457135471280,"id":165,"tags":{"url":"/api/auth/session"},"startTime":1772203680471,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":3,"timestamp":457135480377,"id":168,"parentId":165,"tags":{"url":"/api/auth/session","memory.rss":"674598912","memory.heapUsed":"166035176","memory.heapTotal":"197824512"},"startTime":1772203680480,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":178,"timestamp":457135488323,"id":169,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203680488,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":157,"timestamp":457135488552,"id":170,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203680488,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":139,"timestamp":457135488992,"id":171,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203680488,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":96,"timestamp":457135489147,"id":172,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203680489,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":400,"timestamp":457135489764,"id":174,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203680489,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":3713,"timestamp":457135489564,"id":173,"tags":{"url":"/api/auth/session"},"startTime":1772203680489,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":6,"timestamp":457135493320,"id":175,"parentId":173,"tags":{"url":"/api/auth/session","memory.rss":"674865152","memory.heapUsed":"167190088","memory.heapTotal":"197824512"},"startTime":1772203680493,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":718,"timestamp":457135983243,"id":177,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772203680983,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":20426,"timestamp":457135983055,"id":176,"tags":{"url":"/pricing"},"startTime":1772203680983,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":457136003504,"id":178,"parentId":176,"tags":{"url":"/pricing","memory.rss":"676487168","memory.heapUsed":"172337728","memory.heapTotal":"198610944"},"startTime":1772203681003,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":158,"timestamp":457136062832,"id":181,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203681062,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":102,"timestamp":457136063009,"id":182,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203681063,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":723,"timestamp":457136062709,"id":180,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772203681062,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":147,"timestamp":457136066686,"id":183,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203681066,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":98,"timestamp":457136066851,"id":184,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203681066,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":691,"timestamp":457136067470,"id":186,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203681067,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":15404,"timestamp":457136062514,"id":179,"tags":{"url":"/api/plans"},"startTime":1772203681062,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":457136077944,"id":187,"parentId":179,"tags":{"url":"/api/plans","memory.rss":"680595456","memory.heapUsed":"170813240","memory.heapTotal":"203599872"},"startTime":1772203681077,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":11450,"timestamp":457136067301,"id":185,"tags":{"url":"/api/auth/session"},"startTime":1772203681067,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":3,"timestamp":457136078772,"id":188,"parentId":185,"tags":{"url":"/api/auth/session","memory.rss":"680673280","memory.heapUsed":"170970888","memory.heapTotal":"203599872"},"startTime":1772203681078,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":317,"timestamp":457136087312,"id":189,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203681087,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":226,"timestamp":457136087658,"id":190,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203681087,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":379,"timestamp":457136088266,"id":191,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203681088,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":301,"timestamp":457136088674,"id":192,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203681088,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":482,"timestamp":457136089840,"id":194,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203681089,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":4580,"timestamp":457136089501,"id":193,"tags":{"url":"/api/auth/session"},"startTime":1772203681089,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":8,"timestamp":457136094133,"id":195,"parentId":193,"tags":{"url":"/api/auth/session","memory.rss":"680923136","memory.heapUsed":"172124408","memory.heapTotal":"203599872"},"startTime":1772203681094,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":801,"timestamp":457136621087,"id":197,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772203681621,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":23427,"timestamp":457136620737,"id":196,"tags":{"url":"/pricing"},"startTime":1772203681620,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":5,"timestamp":457136644194,"id":198,"parentId":196,"tags":{"url":"/pricing","memory.rss":"680079360","memory.heapUsed":"177010768","memory.heapTotal":"204124160"},"startTime":1772203681644,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":162,"timestamp":457136704120,"id":201,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203681704,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":100,"timestamp":457136704300,"id":202,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203681704,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":1134,"timestamp":457136703902,"id":200,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772203681703,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":163,"timestamp":457136707708,"id":203,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203681707,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":101,"timestamp":457136707888,"id":204,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203681707,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":412,"timestamp":457136708894,"id":206,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203681708,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":12282,"timestamp":457136708707,"id":205,"tags":{"url":"/api/auth/session"},"startTime":1772203681708,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":5,"timestamp":457136721011,"id":207,"parentId":205,"tags":{"url":"/api/auth/session","memory.rss":"680976384","memory.heapUsed":"155650160","memory.heapTotal":"204087296"},"startTime":1772203681721,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":18412,"timestamp":457136703692,"id":199,"tags":{"url":"/api/plans"},"startTime":1772203681703,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":457136722124,"id":208,"parentId":199,"tags":{"url":"/api/plans","memory.rss":"680976384","memory.heapUsed":"155860312","memory.heapTotal":"204087296"},"startTime":1772203681722,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":438,"timestamp":457136723232,"id":209,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203681723,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":338,"timestamp":457136723731,"id":210,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203681723,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":171,"timestamp":457136724620,"id":211,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203681724,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":116,"timestamp":457136724810,"id":212,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203681724,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":450,"timestamp":457136725800,"id":214,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203681725,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":3562,"timestamp":457136725421,"id":213,"tags":{"url":"/api/auth/session"},"startTime":1772203681725,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":3,"timestamp":457136729009,"id":215,"parentId":213,"tags":{"url":"/api/auth/session","memory.rss":"681181184","memory.heapUsed":"157086312","memory.heapTotal":"204087296"},"startTime":1772203681729,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":1251,"timestamp":457137189465,"id":217,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772203682189,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":20069,"timestamp":457137189275,"id":216,"tags":{"url":"/pricing"},"startTime":1772203682189,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":5,"timestamp":457137209363,"id":218,"parentId":216,"tags":{"url":"/pricing","memory.rss":"681775104","memory.heapUsed":"162435032","memory.heapTotal":"204587008"},"startTime":1772203682209,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":160,"timestamp":457137265283,"id":221,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203682265,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":98,"timestamp":457137265464,"id":222,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203682265,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":864,"timestamp":457137265074,"id":220,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772203682265,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":366,"timestamp":457137270145,"id":223,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203682270,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":123,"timestamp":457137270535,"id":224,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203682270,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":493,"timestamp":457137271491,"id":226,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203682271,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":14853,"timestamp":457137264868,"id":219,"tags":{"url":"/api/plans"},"startTime":1772203682264,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":457137279745,"id":227,"parentId":219,"tags":{"url":"/api/plans","memory.rss":"685907968","memory.heapUsed":"167882656","memory.heapTotal":"204587008"},"startTime":1772203682279,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":9356,"timestamp":457137271109,"id":225,"tags":{"url":"/api/auth/session"},"startTime":1772203682271,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":457137280486,"id":228,"parentId":225,"tags":{"url":"/api/auth/session","memory.rss":"685907968","memory.heapUsed":"168039672","memory.heapTotal":"204587008"},"startTime":1772203682280,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":166,"timestamp":457137287616,"id":229,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203682287,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":97,"timestamp":457137287802,"id":230,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203682287,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":117,"timestamp":457137288091,"id":231,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203682288,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":84,"timestamp":457137288222,"id":232,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203682288,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":382,"timestamp":457137288786,"id":234,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203682288,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":4540,"timestamp":457137288600,"id":233,"tags":{"url":"/api/auth/session"},"startTime":1772203682288,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":3,"timestamp":457137293157,"id":235,"parentId":233,"tags":{"url":"/api/auth/session","memory.rss":"681779200","memory.heapUsed":"158751616","memory.heapTotal":"204587008"},"startTime":1772203682293,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":628,"timestamp":457243063864,"id":237,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772203788063,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":35238,"timestamp":457243063630,"id":236,"tags":{"url":"/api/plans"},"startTime":1772203788063,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":457243098890,"id":238,"parentId":236,"tags":{"url":"/api/plans","memory.rss":"617029632","memory.heapUsed":"137605568","memory.heapTotal":"145887232"},"startTime":1772203788098,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":848,"timestamp":457264474189,"id":240,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772203809474,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":34966,"timestamp":457264473786,"id":239,"tags":{"url":"/pricing"},"startTime":1772203809473,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":457264508772,"id":241,"parentId":239,"tags":{"url":"/pricing","memory.rss":"635928576","memory.heapUsed":"139189632","memory.heapTotal":"146149376"},"startTime":1772203809508,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":420,"timestamp":457264576695,"id":244,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203809576,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":278,"timestamp":457264577156,"id":245,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203809577,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":2703,"timestamp":457264576307,"id":243,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772203809576,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":336,"timestamp":457264585071,"id":246,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203809584,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":352,"timestamp":457264585444,"id":247,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203809585,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":1918,"timestamp":457264587055,"id":249,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203809586,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":11414,"timestamp":457264586622,"id":248,"tags":{"url":"/api/auth/session"},"startTime":1772203809586,"traceId":"50b98691e03488c6"}] +[{"name":"memory-usage","duration":7,"timestamp":457264598405,"id":250,"parentId":248,"tags":{"url":"/api/auth/session","memory.rss":"637046784","memory.heapUsed":"141256360","memory.heapTotal":"148746240"},"startTime":1772203809598,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":173,"timestamp":457264602324,"id":251,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203809602,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":102,"timestamp":457264602517,"id":252,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203809602,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":475,"timestamp":457264603057,"id":253,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203809602,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":134,"timestamp":457264603554,"id":254,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203809603,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":1233,"timestamp":457264605202,"id":256,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203809605,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":6399,"timestamp":457264604767,"id":255,"tags":{"url":"/api/auth/session"},"startTime":1772203809604,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":457264611187,"id":257,"parentId":255,"tags":{"url":"/api/auth/session","memory.rss":"637706240","memory.heapUsed":"142503064","memory.heapTotal":"149008384"},"startTime":1772203809611,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":50886,"timestamp":457264575807,"id":242,"tags":{"url":"/api/plans"},"startTime":1772203809575,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":5,"timestamp":457264626721,"id":258,"parentId":242,"tags":{"url":"/api/plans","memory.rss":"638062592","memory.heapUsed":"142788704","memory.heapTotal":"149008384"},"startTime":1772203809626,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":662,"timestamp":457275241749,"id":260,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772203820241,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":31689,"timestamp":457275241485,"id":259,"tags":{"url":"/api/plans"},"startTime":1772203820241,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":5,"timestamp":457275273198,"id":261,"parentId":259,"tags":{"url":"/api/plans","memory.rss":"653242368","memory.heapUsed":"142704448","memory.heapTotal":"149270528"},"startTime":1772203820273,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":624,"timestamp":457275274898,"id":263,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772203820274,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":7361,"timestamp":457275274707,"id":262,"tags":{"url":"/api/plans"},"startTime":1772203820274,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":3,"timestamp":457275282086,"id":264,"parentId":262,"tags":{"url":"/api/plans","memory.rss":"654147584","memory.heapUsed":"142554936","memory.heapTotal":"146649088"},"startTime":1772203820281,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":11211,"timestamp":457347394793,"id":266,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772203892394,"traceId":"50b98691e03488c6"},{"name":"client-hmr-latency","duration":31000,"timestamp":457347351999,"id":267,"parentId":3,"tags":{"updatedModules":["[project]/Documents/00 - projet/plumeia/src/hooks/useAuth.ts [app-client]"],"page":"/pricing","isPageHidden":false},"startTime":1772203892495,"traceId":"50b98691e03488c6"},{"name":"client-hmr-latency","duration":32000,"timestamp":457347351080,"id":268,"parentId":3,"tags":{"updatedModules":["[project]/Documents/00 - projet/plumeia/src/hooks/useAuth.ts [app-client]"],"page":"/login","isPageHidden":true},"startTime":1772203892496,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":21690,"timestamp":457347497592,"id":270,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772203892497,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":216344,"timestamp":457347394337,"id":265,"tags":{"url":"/pricing"},"startTime":1772203892394,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":7,"timestamp":457347610724,"id":271,"parentId":265,"tags":{"url":"/pricing","memory.rss":"714723328","memory.heapUsed":"165665856","memory.heapTotal":"183902208"},"startTime":1772203892610,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":117924,"timestamp":457347497376,"id":269,"tags":{"url":"/login"},"startTime":1772203892497,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":7,"timestamp":457347615329,"id":272,"parentId":269,"tags":{"url":"/login","memory.rss":"715161600","memory.heapUsed":"165946624","memory.heapTotal":"183902208"},"startTime":1772203892615,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":365,"timestamp":457347640088,"id":273,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772203892640,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":288,"timestamp":457347640490,"id":274,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772203892640,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":325,"timestamp":457347641771,"id":275,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772203892641,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":261,"timestamp":457347642126,"id":276,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772203892642,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":393,"timestamp":457347668182,"id":279,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203892668,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":266,"timestamp":457347668611,"id":280,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203892668,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":2456,"timestamp":457347667486,"id":278,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772203892667,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":275,"timestamp":457347678320,"id":281,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203892678,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":235,"timestamp":457347678626,"id":282,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203892678,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":745,"timestamp":457347680776,"id":284,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203892680,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":13468,"timestamp":457347680381,"id":283,"tags":{"url":"/api/auth/session"},"startTime":1772203892680,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":7,"timestamp":457347693886,"id":285,"parentId":283,"tags":{"url":"/api/auth/session","memory.rss":"713932800","memory.heapUsed":"166839328","memory.heapTotal":"203038720"},"startTime":1772203892693,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":348,"timestamp":457347695584,"id":286,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203892695,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":284,"timestamp":457347695963,"id":287,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203892695,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":331,"timestamp":457347697256,"id":288,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203892697,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":253,"timestamp":457347697616,"id":289,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203892697,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":830,"timestamp":457347699171,"id":291,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203892699,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":5617,"timestamp":457347698763,"id":290,"tags":{"url":"/api/auth/session"},"startTime":1772203892698,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":5,"timestamp":457347704403,"id":292,"parentId":290,"tags":{"url":"/api/auth/session","memory.rss":"714235904","memory.heapUsed":"168114912","memory.heapTotal":"203038720"},"startTime":1772203892704,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":54494,"timestamp":457347667065,"id":277,"tags":{"url":"/api/plans"},"startTime":1772203892667,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":8,"timestamp":457347721599,"id":293,"parentId":277,"tags":{"url":"/api/plans","memory.rss":"714301440","memory.heapUsed":"168357128","memory.heapTotal":"203038720"},"startTime":1772203892721,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":198,"timestamp":457348360944,"id":294,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203893360,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":112,"timestamp":457348361165,"id":295,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203893361,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":325,"timestamp":457348361764,"id":296,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203893361,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":154,"timestamp":457348362112,"id":297,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203893362,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":543,"timestamp":457348362872,"id":299,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203893362,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":15224,"timestamp":457348362638,"id":298,"tags":{"url":"/api/auth/session"},"startTime":1772203893362,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":6,"timestamp":457348377905,"id":300,"parentId":298,"tags":{"url":"/api/auth/session","memory.rss":"729735168","memory.heapUsed":"175581416","memory.heapTotal":"204029952"},"startTime":1772203893377,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":172,"timestamp":457348395497,"id":303,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203893395,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":104,"timestamp":457348395688,"id":304,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203893395,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":150,"timestamp":457348396162,"id":305,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203893396,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":107,"timestamp":457348396330,"id":306,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203893396,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":538,"timestamp":457348397395,"id":308,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203893397,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":7710,"timestamp":457348397016,"id":307,"tags":{"url":"/api/auth/session"},"startTime":1772203893396,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":3,"timestamp":457348404753,"id":309,"parentId":307,"tags":{"url":"/api/auth/session","memory.rss":"747765760","memory.heapUsed":"177314904","memory.heapTotal":"204292096"},"startTime":1772203893404,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":42053,"timestamp":457348395368,"id":302,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772203893395,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":2338,"timestamp":457348494385,"id":311,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772203893494,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":131757,"timestamp":457348395134,"id":301,"tags":{"url":"/api/user/profile"},"startTime":1772203893395,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":7,"timestamp":457348526928,"id":312,"parentId":301,"tags":{"url":"/api/user/profile","memory.rss":"754909184","memory.heapUsed":"163689648","memory.heapTotal":"207495168"},"startTime":1772203893526,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":55120,"timestamp":457348494054,"id":310,"tags":{"url":"/api/user/profile"},"startTime":1772203893493,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":5,"timestamp":457348549195,"id":313,"parentId":310,"tags":{"url":"/api/user/profile","memory.rss":"754909184","memory.heapUsed":"164036344","memory.heapTotal":"207495168"},"startTime":1772203893549,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":1689,"timestamp":457382912470,"id":315,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772203927912,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":33005,"timestamp":457382912188,"id":314,"tags":{"url":"/pricing"},"startTime":1772203927912,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":5,"timestamp":457382945213,"id":316,"parentId":314,"tags":{"url":"/pricing","memory.rss":"738463744","memory.heapUsed":"154137408","memory.heapTotal":"160366592"},"startTime":1772203927945,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":438,"timestamp":457383010973,"id":319,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203928010,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":275,"timestamp":457383011450,"id":320,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203928011,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":1839,"timestamp":457383010741,"id":318,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772203928010,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":370,"timestamp":457383019286,"id":321,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203928019,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":305,"timestamp":457383019721,"id":322,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203928019,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":905,"timestamp":457383021398,"id":324,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203928021,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":14416,"timestamp":457383021013,"id":323,"tags":{"url":"/api/auth/session"},"startTime":1772203928020,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":4,"timestamp":457383035454,"id":325,"parentId":323,"tags":{"url":"/api/auth/session","memory.rss":"742047744","memory.heapUsed":"157082536","memory.heapTotal":"164536320"},"startTime":1772203928035,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":158,"timestamp":457383038336,"id":326,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203928038,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":118,"timestamp":457383038512,"id":327,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203928038,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":170,"timestamp":457383039001,"id":328,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203928038,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":95,"timestamp":457383039187,"id":329,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203928039,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":739,"timestamp":457383040126,"id":331,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203928040,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":5941,"timestamp":457383039939,"id":330,"tags":{"url":"/api/auth/session"},"startTime":1772203928039,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":5,"timestamp":457383045905,"id":332,"parentId":330,"tags":{"url":"/api/auth/session","memory.rss":"742416384","memory.heapUsed":"157361584","memory.heapTotal":"164536320"},"startTime":1772203928045,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":43401,"timestamp":457383010391,"id":317,"tags":{"url":"/api/plans"},"startTime":1772203928010,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":7,"timestamp":457383053822,"id":333,"parentId":317,"tags":{"url":"/api/plans","memory.rss":"742416384","memory.heapUsed":"157588256","memory.heapTotal":"164536320"},"startTime":1772203928053,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":794,"timestamp":457383677656,"id":335,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772203928677,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":20958,"timestamp":457383677287,"id":334,"tags":{"url":"/pricing"},"startTime":1772203928677,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":7,"timestamp":457383698279,"id":336,"parentId":334,"tags":{"url":"/pricing","memory.rss":"743878656","memory.heapUsed":"158901616","memory.heapTotal":"170041344"},"startTime":1772203928698,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":161,"timestamp":457383758513,"id":339,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203928758,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":99,"timestamp":457383758694,"id":340,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203928758,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":733,"timestamp":457383758387,"id":338,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772203928758,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":153,"timestamp":457383762358,"id":341,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203928762,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":122,"timestamp":457383762530,"id":342,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203928762,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":393,"timestamp":457383763176,"id":344,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203928763,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":12492,"timestamp":457383758196,"id":337,"tags":{"url":"/api/plans"},"startTime":1772203928758,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":6,"timestamp":457383770721,"id":345,"parentId":337,"tags":{"url":"/api/plans","memory.rss":"752332800","memory.heapUsed":"162457176","memory.heapTotal":"171032576"},"startTime":1772203928770,"traceId":"50b98691e03488c6"},{"name":"handle-request","duration":10081,"timestamp":457383762984,"id":343,"tags":{"url":"/api/auth/session"},"startTime":1772203928762,"traceId":"50b98691e03488c6"},{"name":"memory-usage","duration":5,"timestamp":457383773091,"id":346,"parentId":343,"tags":{"url":"/api/auth/session","memory.rss":"748273664","memory.heapUsed":"160262416","memory.heapTotal":"172343296"},"startTime":1772203928773,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":168,"timestamp":457383779079,"id":347,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203928779,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":98,"timestamp":457383779268,"id":348,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203928779,"traceId":"50b98691e03488c6"},{"name":"ensure-page","duration":265,"timestamp":457383779835,"id":349,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203928779,"traceId":"50b98691e03488c6"}] +[{"name":"hot-reloader","duration":70,"timestamp":457389319787,"id":3,"tags":{"version":"16.1.6"},"startTime":1772203934319,"traceId":"60c56fde07386dfc"},{"name":"setup-dev-bundler","duration":189709,"timestamp":457389231403,"id":2,"parentId":1,"tags":{},"startTime":1772203934231,"traceId":"60c56fde07386dfc"},{"name":"start-dev-server","duration":577394,"timestamp":457388925521,"id":1,"tags":{"cpus":"32","platform":"win32","memory.freeMem":"7307030528","memory.totalMem":"34186964992","memory.heapSizeLimit":"17143169024","memory.rss":"269611008","memory.heapTotal":"90763264","memory.heapUsed":"64047904"},"startTime":1772203933925,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":37490,"timestamp":457389528123,"id":5,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772203934528,"traceId":"60c56fde07386dfc"},{"name":"compile-path","duration":237401,"timestamp":457389528417,"id":6,"tags":{"trigger":"/pricing"},"startTime":1772203934528,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":236605,"timestamp":457389529602,"id":8,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772203934529,"traceId":"60c56fde07386dfc"}] +[{"name":"handle-request","duration":312775,"timestamp":457389524538,"id":4,"tags":{"url":"/pricing"},"startTime":1772203934524,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":49,"timestamp":457389837380,"id":9,"parentId":4,"tags":{"url":"/pricing","memory.rss":"479465472","memory.heapUsed":"95910728","memory.heapTotal":"127295488"},"startTime":1772203934837,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":309033,"timestamp":457389529145,"id":7,"tags":{"url":"/login"},"startTime":1772203934529,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":8,"timestamp":457389838258,"id":10,"parentId":7,"tags":{"url":"/login","memory.rss":"478801920","memory.heapUsed":"96007568","memory.heapTotal":"127295488"},"startTime":1772203934838,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":568,"timestamp":457389851510,"id":11,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772203934851,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":185,"timestamp":457389852123,"id":12,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772203934852,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":258,"timestamp":457389855442,"id":13,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772203934855,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":378,"timestamp":457389855731,"id":14,"parentId":3,"tags":{"inputPage":"/.well-known/appspecific/com.chrome.devtools.json"},"startTime":1772203934855,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":290,"timestamp":457389919477,"id":18,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203934919,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":167,"timestamp":457389919809,"id":19,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203934919,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":376,"timestamp":457389920736,"id":20,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203934920,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":222,"timestamp":457389921154,"id":21,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203934921,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":7352,"timestamp":457389919236,"id":16,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772203934919,"traceId":"60c56fde07386dfc"},{"name":"compile-path","duration":159910,"timestamp":457389919284,"id":17,"tags":{"trigger":"/api/plans"},"startTime":1772203934919,"traceId":"60c56fde07386dfc"}] +[{"name":"handle-request","duration":247737,"timestamp":457389918601,"id":15,"tags":{"url":"/api/plans"},"startTime":1772203934918,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":6,"timestamp":457390166373,"id":24,"parentId":15,"tags":{"url":"/api/plans","memory.rss":"583565312","memory.heapUsed":"127580880","memory.heapTotal":"157315072"},"startTime":1772203935166,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":266,"timestamp":457390637019,"id":25,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203935637,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":137,"timestamp":457390637315,"id":26,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203935637,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":194,"timestamp":457390637914,"id":27,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203935637,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":123,"timestamp":457390638130,"id":28,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203935638,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":643,"timestamp":457390639257,"id":30,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203935639,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":767488,"timestamp":457389922738,"id":22,"tags":{"url":"/api/auth/session"},"startTime":1772203934922,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":6,"timestamp":457390690256,"id":31,"parentId":22,"tags":{"url":"/api/auth/session","memory.rss":"587706368","memory.heapUsed":"134426360","memory.heapTotal":"158568448"},"startTime":1772203935690,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":244,"timestamp":457390701551,"id":32,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203935701,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":130,"timestamp":457390701827,"id":33,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203935701,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":65461,"timestamp":457390638707,"id":29,"tags":{"url":"/api/auth/session"},"startTime":1772203935638,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":5,"timestamp":457390704196,"id":34,"parentId":29,"tags":{"url":"/api/auth/session","memory.rss":"588230656","memory.heapUsed":"135682832","memory.heapTotal":"158973952"},"startTime":1772203935704,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":282,"timestamp":457390704276,"id":35,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203935704,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":141,"timestamp":457390704579,"id":36,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203935704,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":966,"timestamp":457390705592,"id":38,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203935705,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":13179,"timestamp":457390705181,"id":37,"tags":{"url":"/api/auth/session"},"startTime":1772203935705,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":8,"timestamp":457390718424,"id":39,"parentId":37,"tags":{"url":"/api/auth/session","memory.rss":"582623232","memory.heapUsed":"129324464","memory.heapTotal":"164478976"},"startTime":1772203935718,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":222,"timestamp":457390722848,"id":40,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203935722,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":135,"timestamp":457390723102,"id":41,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203935723,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":303,"timestamp":457390724443,"id":45,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203935724,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":125,"timestamp":457390724772,"id":46,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772203935724,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":669,"timestamp":457390725656,"id":48,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772203935725,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":10465,"timestamp":457390725337,"id":47,"tags":{"url":"/api/auth/session"},"startTime":1772203935725,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":6,"timestamp":457390735837,"id":49,"parentId":47,"tags":{"url":"/api/auth/session","memory.rss":"607166464","memory.heapUsed":"131138664","memory.heapTotal":"164478976"},"startTime":1772203935735,"traceId":"60c56fde07386dfc"},{"name":"compile-path","duration":16819,"timestamp":457390724204,"id":44,"tags":{"trigger":"/api/user/profile"},"startTime":1772203935724,"traceId":"60c56fde07386dfc"}] +[{"name":"ensure-page","duration":757,"timestamp":457390769773,"id":51,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772203935769,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":79765,"timestamp":457390723729,"id":42,"tags":{"url":"/api/user/profile"},"startTime":1772203935723,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":6,"timestamp":457390803526,"id":52,"parentId":42,"tags":{"url":"/api/user/profile","memory.rss":"625369088","memory.heapUsed":"141698064","memory.heapTotal":"170217472"},"startTime":1772203935803,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":61591,"timestamp":457390769401,"id":50,"tags":{"url":"/api/user/profile"},"startTime":1772203935769,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":7,"timestamp":457390831032,"id":53,"parentId":50,"tags":{"url":"/api/user/profile","memory.rss":"625598464","memory.heapUsed":"142332920","memory.heapTotal":"170741760"},"startTime":1772203935831,"traceId":"60c56fde07386dfc"},{"name":"client-hmr-latency","duration":265000,"timestamp":457440488796,"id":54,"parentId":3,"tags":{"updatedModules":["[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx [app-client]"],"page":"/pricing","isPageHidden":false},"startTime":1772203985784,"traceId":"60c56fde07386dfc"},{"name":"client-hmr-latency","duration":266000,"timestamp":457440488921,"id":55,"parentId":3,"tags":{"updatedModules":["[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx [app-client]"],"page":"/login","isPageHidden":true},"startTime":1772203985784,"traceId":"60c56fde07386dfc"},{"name":"client-hmr-latency","duration":47000,"timestamp":457442318928,"id":56,"parentId":3,"tags":{"updatedModules":["[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx [app-client]"],"page":"/pricing","isPageHidden":false},"startTime":1772203987396,"traceId":"60c56fde07386dfc"},{"name":"client-hmr-latency","duration":47000,"timestamp":457442319035,"id":57,"parentId":3,"tags":{"updatedModules":["[project]/Documents/00 - projet/plumeia/src/components/Pricing.tsx [app-client]"],"page":"/login","isPageHidden":true},"startTime":1772203987396,"traceId":"60c56fde07386dfc"},{"name":"compile-path","duration":14203,"timestamp":457468419306,"id":60,"tags":{"trigger":"/"},"startTime":1772204013419,"traceId":"60c56fde07386dfc"}] +[{"name":"handle-request","duration":42618,"timestamp":457468418530,"id":58,"tags":{"url":"/?_rsc=1j1r8"},"startTime":1772204013418,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":4,"timestamp":457468461187,"id":61,"parentId":58,"tags":{"url":"/?_rsc=1j1r8","memory.rss":"617889792","memory.heapUsed":"130028272","memory.heapTotal":"134651904"},"startTime":1772204013461,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":1219,"timestamp":457470752482,"id":63,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772204015752,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":11588,"timestamp":457470752161,"id":62,"tags":{"url":"/pricing?_rsc=vusbg"},"startTime":1772204015752,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":7,"timestamp":457470763797,"id":64,"parentId":62,"tags":{"url":"/pricing?_rsc=vusbg","memory.rss":"638373888","memory.heapUsed":"130568312","memory.heapTotal":"135700480"},"startTime":1772204015763,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":874,"timestamp":457470777741,"id":66,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772204015777,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":4404,"timestamp":457470778075,"id":68,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772204015778,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":30983,"timestamp":457470777530,"id":65,"tags":{"url":"/api/plans"},"startTime":1772204015777,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":4,"timestamp":457470808534,"id":69,"parentId":65,"tags":{"url":"/api/plans","memory.rss":"638799872","memory.heapUsed":"131893016","memory.heapTotal":"137011200"},"startTime":1772204015808,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":31927,"timestamp":457470777915,"id":67,"tags":{"url":"/api/plans"},"startTime":1772204015777,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":3,"timestamp":457470809856,"id":70,"parentId":67,"tags":{"url":"/api/plans","memory.rss":"638922752","memory.heapUsed":"132184408","memory.heapTotal":"137011200"},"startTime":1772204015809,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":757,"timestamp":457472703107,"id":72,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772204017703,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":10298,"timestamp":457472702894,"id":71,"tags":{"url":"/login?_rsc=1j1r8"},"startTime":1772204017702,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":3,"timestamp":457472713209,"id":73,"parentId":71,"tags":{"url":"/login?_rsc=1j1r8","memory.rss":"640937984","memory.heapUsed":"132628016","memory.heapTotal":"140156928"},"startTime":1772204017713,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":190,"timestamp":457477774719,"id":74,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772204022774,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":106,"timestamp":457477774929,"id":75,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772204022774,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":147,"timestamp":457477775340,"id":76,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772204022775,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":110,"timestamp":457477775502,"id":77,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772204022775,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":490,"timestamp":457477776136,"id":79,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772204022776,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":9564,"timestamp":457477775926,"id":78,"tags":{"url":"/api/auth/providers"},"startTime":1772204022775,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":4,"timestamp":457477785510,"id":80,"parentId":78,"tags":{"url":"/api/auth/providers","memory.rss":"654606336","memory.heapUsed":"133741088","memory.heapTotal":"137773056"},"startTime":1772204022785,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":170,"timestamp":457477787189,"id":81,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772204022787,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":100,"timestamp":457477787378,"id":82,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772204022787,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":316,"timestamp":457477787797,"id":83,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772204022787,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":298,"timestamp":457477788150,"id":84,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772204022788,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":395,"timestamp":457477789189,"id":86,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772204022789,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":4362,"timestamp":457477789017,"id":85,"tags":{"url":"/api/auth/csrf"},"startTime":1772204022789,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":3,"timestamp":457477793395,"id":87,"parentId":85,"tags":{"url":"/api/auth/csrf","memory.rss":"655114240","memory.heapUsed":"134393976","memory.heapTotal":"139083776"},"startTime":1772204022793,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":175,"timestamp":457477794855,"id":88,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772204022794,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":109,"timestamp":457477795050,"id":89,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772204022795,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":153,"timestamp":457477795408,"id":90,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772204022795,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":101,"timestamp":457477795577,"id":91,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772204022795,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":452,"timestamp":457477796461,"id":93,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772204022796,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":203247,"timestamp":457477796279,"id":92,"tags":{"url":"/api/auth/callback/credentials?"},"startTime":1772204022796,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457477999547,"id":94,"parentId":92,"tags":{"url":"/api/auth/callback/credentials?","memory.rss":"656855040","memory.heapUsed":"136739728","memory.heapTotal":"142491648"},"startTime":1772204022999,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":164,"timestamp":457478001272,"id":95,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204023001,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":101,"timestamp":457478001454,"id":96,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204023001,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":122,"timestamp":457478001789,"id":97,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204023001,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":91,"timestamp":457478001925,"id":98,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204023001,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":522,"timestamp":457478002537,"id":100,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772204023002,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":6471,"timestamp":457478002339,"id":99,"tags":{"url":"/api/auth/session"},"startTime":1772204023002,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457478008830,"id":101,"parentId":99,"tags":{"url":"/api/auth/session","memory.rss":"657289216","memory.heapUsed":"136612232","memory.heapTotal":"142753792"},"startTime":1772204023008,"traceId":"60c56fde07386dfc"},{"name":"compile-path","duration":8267,"timestamp":457478011540,"id":104,"tags":{"trigger":"/dashboard"},"startTime":1772204023011,"traceId":"60c56fde07386dfc"}] +[{"name":"ensure-page","duration":509,"timestamp":457478038762,"id":106,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772204023038,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":35323,"timestamp":457478011138,"id":102,"tags":{"url":"/dashboard?_rsc=5c339"},"startTime":1772204023011,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457478046480,"id":107,"parentId":102,"tags":{"url":"/dashboard?_rsc=5c339","memory.rss":"662962176","memory.heapUsed":"140622672","memory.heapTotal":"151658496"},"startTime":1772204023046,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":24478,"timestamp":457478038502,"id":105,"tags":{"url":"/api/user/profile"},"startTime":1772204023038,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457478063000,"id":108,"parentId":105,"tags":{"url":"/api/user/profile","memory.rss":"664481792","memory.heapUsed":"137365032","memory.heapTotal":"151384064"},"startTime":1772204023063,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":884,"timestamp":457478067055,"id":110,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772204023067,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":745,"timestamp":457478079168,"id":115,"parentId":3,"tags":{"inputPage":"/login/page"},"startTime":1772204023079,"traceId":"60c56fde07386dfc"},{"name":"compile-path","duration":10866,"timestamp":457478078733,"id":113,"tags":{"trigger":"/api/projects"},"startTime":1772204023078,"traceId":"60c56fde07386dfc"}] +[{"name":"handle-request","duration":43307,"timestamp":457478066839,"id":109,"tags":{"url":"/login?_rsc=1h1b5"},"startTime":1772204023066,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457478110168,"id":116,"parentId":109,"tags":{"url":"/login?_rsc=1h1b5","memory.rss":"671485952","memory.heapUsed":"142706368","memory.heapTotal":"153931776"},"startTime":1772204023110,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":32369,"timestamp":457478078930,"id":114,"tags":{"url":"/login?_rsc=1h1b5"},"startTime":1772204023078,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457478111315,"id":117,"parentId":114,"tags":{"url":"/login?_rsc=1h1b5","memory.rss":"671485952","memory.heapUsed":"142851352","memory.heapTotal":"153931776"},"startTime":1772204023111,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":42983,"timestamp":457478078503,"id":111,"tags":{"url":"/api/projects"},"startTime":1772204023078,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457478121508,"id":118,"parentId":111,"tags":{"url":"/api/projects","memory.rss":"671924224","memory.heapUsed":"143286408","memory.heapTotal":"153931776"},"startTime":1772204023121,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":224,"timestamp":457485740283,"id":119,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772204030740,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":101,"timestamp":457485740531,"id":120,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772204030740,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":136,"timestamp":457485741080,"id":121,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772204030741,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":91,"timestamp":457485741232,"id":122,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772204030741,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":549,"timestamp":457485741889,"id":124,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772204030741,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":7512,"timestamp":457485741698,"id":123,"tags":{"url":"/api/auth/providers"},"startTime":1772204030741,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457485749229,"id":125,"parentId":123,"tags":{"url":"/api/auth/providers","memory.rss":"681897984","memory.heapUsed":"144896088","memory.heapTotal":"154193920"},"startTime":1772204030749,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":155,"timestamp":457485750786,"id":126,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772204030750,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":93,"timestamp":457485750959,"id":127,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772204030750,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":348,"timestamp":457485751373,"id":128,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772204030751,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":254,"timestamp":457485751750,"id":129,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772204030751,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":551,"timestamp":457485752673,"id":131,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772204030752,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":3852,"timestamp":457485752486,"id":130,"tags":{"url":"/api/auth/csrf"},"startTime":1772204030752,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":3,"timestamp":457485756370,"id":132,"parentId":130,"tags":{"url":"/api/auth/csrf","memory.rss":"683585536","memory.heapUsed":"144646112","memory.heapTotal":"156004352"},"startTime":1772204030756,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":337,"timestamp":457485758630,"id":133,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772204030758,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":258,"timestamp":457485758999,"id":134,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772204030759,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":276,"timestamp":457485759662,"id":135,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772204030759,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":273,"timestamp":457485759963,"id":136,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772204030759,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":626,"timestamp":457485761066,"id":138,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772204030761,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":192039,"timestamp":457485760746,"id":137,"tags":{"url":"/api/auth/callback/credentials?"},"startTime":1772204030760,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457485952805,"id":139,"parentId":137,"tags":{"url":"/api/auth/callback/credentials?","memory.rss":"684142592","memory.heapUsed":"144713360","memory.heapTotal":"156790784"},"startTime":1772204030952,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":164,"timestamp":457485954686,"id":140,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204030954,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":96,"timestamp":457485954871,"id":141,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204030954,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":109,"timestamp":457485955144,"id":142,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204030955,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":84,"timestamp":457485955266,"id":143,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204030955,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":496,"timestamp":457485955744,"id":145,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772204030955,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":5940,"timestamp":457485955577,"id":144,"tags":{"url":"/api/auth/session"},"startTime":1772204030955,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457485961538,"id":146,"parentId":144,"tags":{"url":"/api/auth/session","memory.rss":"684486656","memory.heapUsed":"146286536","memory.heapTotal":"156790784"},"startTime":1772204030961,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":860,"timestamp":457485963799,"id":148,"parentId":3,"tags":{"inputPage":"/dashboard/page"},"startTime":1772204030963,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":525,"timestamp":457485974974,"id":150,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772204030974,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":14660,"timestamp":457485963581,"id":147,"tags":{"url":"/dashboard?_rsc=5c339"},"startTime":1772204030963,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457485978262,"id":151,"parentId":147,"tags":{"url":"/dashboard?_rsc=5c339","memory.rss":"685838336","memory.heapUsed":"146799200","memory.heapTotal":"158101504"},"startTime":1772204030978,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":20528,"timestamp":457485974731,"id":149,"tags":{"url":"/api/user/profile"},"startTime":1772204030974,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457485995283,"id":152,"parentId":149,"tags":{"url":"/api/user/profile","memory.rss":"685342720","memory.heapUsed":"147712456","memory.heapTotal":"158363648"},"startTime":1772204030995,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":423,"timestamp":457485997057,"id":154,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772204030997,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":18488,"timestamp":457485996873,"id":153,"tags":{"url":"/api/projects"},"startTime":1772204030996,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457486015384,"id":155,"parentId":153,"tags":{"url":"/api/projects","memory.rss":"685670400","memory.heapUsed":"149109712","memory.heapTotal":"158363648"},"startTime":1772204031015,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":418,"timestamp":457486016196,"id":157,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772204031016,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":14180,"timestamp":457486016023,"id":156,"tags":{"url":"/api/projects"},"startTime":1772204031016,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457486030229,"id":158,"parentId":156,"tags":{"url":"/api/projects","memory.rss":"686661632","memory.heapUsed":"148220120","memory.heapTotal":"159150080"},"startTime":1772204031030,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":622,"timestamp":457486031125,"id":160,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772204031031,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":14182,"timestamp":457486030864,"id":159,"tags":{"url":"/api/projects"},"startTime":1772204031030,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457486045070,"id":161,"parentId":159,"tags":{"url":"/api/projects","memory.rss":"687411200","memory.heapUsed":"150053344","memory.heapTotal":"159617024"},"startTime":1772204031045,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":1450,"timestamp":457489148076,"id":163,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772204034148,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":13482,"timestamp":457489147702,"id":162,"tags":{"url":"/pricing?_rsc=1h1b5"},"startTime":1772204034147,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457489161211,"id":164,"parentId":162,"tags":{"url":"/pricing?_rsc=1h1b5","memory.rss":"659378176","memory.heapUsed":"149744656","memory.heapTotal":"169840640"},"startTime":1772204034161,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":575,"timestamp":457489178697,"id":166,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772204034178,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":2759,"timestamp":457489178943,"id":168,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772204034178,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":9727,"timestamp":457489178511,"id":165,"tags":{"url":"/api/plans"},"startTime":1772204034178,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457489188264,"id":169,"parentId":165,"tags":{"url":"/api/plans","memory.rss":"658440192","memory.heapUsed":"144075384","memory.heapTotal":"168517632"},"startTime":1772204034188,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":35771,"timestamp":457489178836,"id":167,"tags":{"url":"/api/plans"},"startTime":1772204034178,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457489214632,"id":170,"parentId":167,"tags":{"url":"/api/plans","memory.rss":"658448384","memory.heapUsed":"144465392","memory.heapTotal":"168517632"},"startTime":1772204034214,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":782,"timestamp":457563082384,"id":172,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772204108082,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":35897,"timestamp":457563082145,"id":171,"tags":{"url":"/pricing"},"startTime":1772204108082,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457563118064,"id":173,"parentId":171,"tags":{"url":"/pricing","memory.rss":"648175616","memory.heapUsed":"134268576","memory.heapTotal":"139563008"},"startTime":1772204108118,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":176,"timestamp":457563186231,"id":176,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204108186,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":105,"timestamp":457563186429,"id":177,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204108186,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":874,"timestamp":457563186106,"id":175,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772204108186,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":271,"timestamp":457563191274,"id":178,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204108191,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":169,"timestamp":457563191578,"id":179,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204108191,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":423,"timestamp":457563192430,"id":181,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772204108192,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":12087,"timestamp":457563192193,"id":180,"tags":{"url":"/api/auth/session"},"startTime":1772204108192,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457563204303,"id":182,"parentId":180,"tags":{"url":"/api/auth/session","memory.rss":"650964992","memory.heapUsed":"136674856","memory.heapTotal":"143470592"},"startTime":1772204108204,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":181,"timestamp":457563207670,"id":183,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204108207,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":116,"timestamp":457563207874,"id":184,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204108207,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":129,"timestamp":457563208662,"id":187,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204108208,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":102,"timestamp":457563208811,"id":188,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204108208,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":772,"timestamp":457563208551,"id":186,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772204108208,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":876,"timestamp":457563212470,"id":190,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772204108212,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":8094,"timestamp":457563212302,"id":189,"tags":{"url":"/api/auth/session"},"startTime":1772204108212,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":3,"timestamp":457563220432,"id":191,"parentId":189,"tags":{"url":"/api/auth/session","memory.rss":"653701120","memory.heapUsed":"138530656","memory.heapTotal":"143994880"},"startTime":1772204108220,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":692,"timestamp":457563223324,"id":193,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772204108223,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":50433,"timestamp":457563185912,"id":174,"tags":{"url":"/api/plans"},"startTime":1772204108186,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":3,"timestamp":457563236385,"id":194,"parentId":174,"tags":{"url":"/api/plans","memory.rss":"654278656","memory.heapUsed":"138877360","memory.heapTotal":"144781312"},"startTime":1772204108236,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":53392,"timestamp":457563208362,"id":185,"tags":{"url":"/api/user/profile"},"startTime":1772204108208,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457563261782,"id":195,"parentId":185,"tags":{"url":"/api/user/profile","memory.rss":"655011840","memory.heapUsed":"138580952","memory.heapTotal":"145305600"},"startTime":1772204108261,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":46657,"timestamp":457563223084,"id":192,"tags":{"url":"/api/user/profile"},"startTime":1772204108223,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457563269764,"id":196,"parentId":192,"tags":{"url":"/api/user/profile","memory.rss":"655020032","memory.heapUsed":"138840544","memory.heapTotal":"145305600"},"startTime":1772204108269,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":921,"timestamp":457564679613,"id":198,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772204109679,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":18810,"timestamp":457564679209,"id":197,"tags":{"url":"/pricing"},"startTime":1772204109679,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457564698040,"id":199,"parentId":197,"tags":{"url":"/pricing","memory.rss":"658362368","memory.heapUsed":"140255096","memory.heapTotal":"151801856"},"startTime":1772204109698,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":174,"timestamp":457564771003,"id":202,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204109771,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":96,"timestamp":457564771199,"id":203,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204109771,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":794,"timestamp":457564770868,"id":201,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772204109770,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":337,"timestamp":457564774930,"id":204,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204109775,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":267,"timestamp":457564775302,"id":205,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204109775,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":418,"timestamp":457564776135,"id":207,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772204109776,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":13449,"timestamp":457564770640,"id":200,"tags":{"url":"/api/plans"},"startTime":1772204109770,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457564784112,"id":208,"parentId":200,"tags":{"url":"/api/plans","memory.rss":"658702336","memory.heapUsed":"136015112","memory.heapTotal":"146907136"},"startTime":1772204109784,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":12861,"timestamp":457564775940,"id":206,"tags":{"url":"/api/auth/session"},"startTime":1772204109776,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":3,"timestamp":457564788889,"id":209,"parentId":206,"tags":{"url":"/api/auth/session","memory.rss":"657694720","memory.heapUsed":"134032680","memory.heapTotal":"146907136"},"startTime":1772204109788,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":154,"timestamp":457564794226,"id":212,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204109794,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":96,"timestamp":457564794399,"id":213,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204109794,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":722,"timestamp":457564794102,"id":211,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772204109794,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":296,"timestamp":457564798953,"id":214,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204109799,"traceId":"60c56fde07386dfc"}] +[{"name":"ensure-page","duration":292,"timestamp":457564799743,"id":215,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772204109799,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":676,"timestamp":457564801559,"id":217,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772204109801,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":7400,"timestamp":457564801220,"id":216,"tags":{"url":"/api/auth/session"},"startTime":1772204109801,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457564808649,"id":218,"parentId":216,"tags":{"url":"/api/auth/session","memory.rss":"657575936","memory.heapUsed":"136886840","memory.heapTotal":"147169280"},"startTime":1772204109808,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":468,"timestamp":457564815382,"id":220,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772204109815,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":25413,"timestamp":457564793920,"id":210,"tags":{"url":"/api/user/profile"},"startTime":1772204109794,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457564819352,"id":221,"parentId":210,"tags":{"url":"/api/user/profile","memory.rss":"658509824","memory.heapUsed":"135806872","memory.heapTotal":"147955712"},"startTime":1772204109819,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":18195,"timestamp":457564815109,"id":219,"tags":{"url":"/api/user/profile"},"startTime":1772204109815,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457564833334,"id":222,"parentId":219,"tags":{"url":"/api/user/profile","memory.rss":"659365888","memory.heapUsed":"136857584","memory.heapTotal":"148193280"},"startTime":1772204109833,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":776,"timestamp":457572546977,"id":224,"parentId":3,"tags":{"inputPage":"/dashboard/page"},"startTime":1772204117547,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":11733,"timestamp":457572546745,"id":223,"tags":{"url":"/dashboard?_rsc=1j1r8"},"startTime":1772204117546,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457572558499,"id":225,"parentId":223,"tags":{"url":"/dashboard?_rsc=1j1r8","memory.rss":"662261760","memory.heapUsed":"136586952","memory.heapTotal":"148717568"},"startTime":1772204117558,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":986,"timestamp":457572578539,"id":227,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772204117578,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":17576,"timestamp":457572578332,"id":226,"tags":{"url":"/api/projects"},"startTime":1772204117578,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457572595933,"id":228,"parentId":226,"tags":{"url":"/api/projects","memory.rss":"662921216","memory.heapUsed":"138575240","memory.heapTotal":"148979712"},"startTime":1772204117596,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":404,"timestamp":457572596716,"id":230,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772204117596,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":20190,"timestamp":457572596539,"id":229,"tags":{"url":"/api/projects"},"startTime":1772204117596,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457572616755,"id":231,"parentId":229,"tags":{"url":"/api/projects","memory.rss":"663429120","memory.heapUsed":"137834128","memory.heapTotal":"149504000"},"startTime":1772204117616,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":483,"timestamp":457579434075,"id":233,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772204124434,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":33985,"timestamp":457579433866,"id":232,"tags":{"url":"/api/projects"},"startTime":1772204124433,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457579467877,"id":234,"parentId":232,"tags":{"url":"/api/projects","memory.rss":"664842240","memory.heapUsed":"139480536","memory.heapTotal":"149766144"},"startTime":1772204124467,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":1295,"timestamp":457581582169,"id":236,"parentId":3,"tags":{"inputPage":"/pricing/page"},"startTime":1772204126582,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":12718,"timestamp":457581581757,"id":235,"tags":{"url":"/pricing?_rsc=1h1b5"},"startTime":1772204126581,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":3,"timestamp":457581594516,"id":237,"parentId":235,"tags":{"url":"/pricing?_rsc=1h1b5","memory.rss":"670932992","memory.heapUsed":"139069104","memory.heapTotal":"143998976"},"startTime":1772204126594,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":652,"timestamp":457581602137,"id":239,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772204126602,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":443,"timestamp":457581606581,"id":241,"parentId":3,"tags":{"inputPage":"/api/plans/route"},"startTime":1772204126606,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":9984,"timestamp":457581601792,"id":238,"tags":{"url":"/api/plans"},"startTime":1772204126601,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457581611808,"id":242,"parentId":238,"tags":{"url":"/api/plans","memory.rss":"673992704","memory.heapUsed":"140550712","memory.heapTotal":"145776640"},"startTime":1772204126611,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":33869,"timestamp":457581606408,"id":240,"tags":{"url":"/api/plans"},"startTime":1772204126606,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457581640304,"id":243,"parentId":240,"tags":{"url":"/api/plans","memory.rss":"674017280","memory.heapUsed":"140984704","memory.heapTotal":"145776640"},"startTime":1772204126640,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":730,"timestamp":457583171000,"id":245,"parentId":3,"tags":{"inputPage":"/dashboard/page"},"startTime":1772204128171,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":8821,"timestamp":457583170793,"id":244,"tags":{"url":"/dashboard?_rsc=1j1r8"},"startTime":1772204128170,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457583179636,"id":246,"parentId":244,"tags":{"url":"/dashboard?_rsc=1j1r8","memory.rss":"674025472","memory.heapUsed":"141218216","memory.heapTotal":"148922368"},"startTime":1772204128179,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":467,"timestamp":457583198873,"id":248,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772204128198,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":18076,"timestamp":457583198672,"id":247,"tags":{"url":"/api/projects"},"startTime":1772204128198,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457583216773,"id":249,"parentId":247,"tags":{"url":"/api/projects","memory.rss":"674029568","memory.heapUsed":"142580480","memory.heapTotal":"148922368"},"startTime":1772204128216,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":822,"timestamp":457583217583,"id":251,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772204128217,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":27773,"timestamp":457583217402,"id":250,"tags":{"url":"/api/projects"},"startTime":1772204128217,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457583245203,"id":252,"parentId":250,"tags":{"url":"/api/projects","memory.rss":"674045952","memory.heapUsed":"142878192","memory.heapTotal":"149184512"},"startTime":1772204128245,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":166,"timestamp":457591790729,"id":253,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204136790,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":93,"timestamp":457591790915,"id":254,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204136791,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":140,"timestamp":457591791260,"id":255,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204136791,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":95,"timestamp":457591791418,"id":256,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204136791,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":234,"timestamp":457591794013,"id":260,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772204136794,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":117,"timestamp":457591794269,"id":261,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772204136794,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":147,"timestamp":457591794837,"id":262,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772204136794,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":142,"timestamp":457591795002,"id":263,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772204136795,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":4885,"timestamp":457591795743,"id":265,"parentId":3,"tags":{"inputPage":"/api/projects/[id]/route"},"startTime":1772204136795,"traceId":"60c56fde07386dfc"},{"name":"compile-path","duration":38397,"timestamp":457591792268,"id":259,"tags":{"trigger":"/project/[id]"},"startTime":1772204136792,"traceId":"60c56fde07386dfc"}] +[{"name":"handle-request","duration":326447,"timestamp":457591791983,"id":257,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1h1b5"},"startTime":1772204136792,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457592118452,"id":266,"parentId":257,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1h1b5","memory.rss":"727023616","memory.heapUsed":"140040688","memory.heapTotal":"158732288"},"startTime":1772204137118,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":536,"timestamp":457592146732,"id":268,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772204137146,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":15016,"timestamp":457592146518,"id":267,"tags":{"url":"/api/projects"},"startTime":1772204137146,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457592161554,"id":269,"parentId":267,"tags":{"url":"/api/projects","memory.rss":"734814208","memory.heapUsed":"140525216","memory.heapTotal":"158732288"},"startTime":1772204137161,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":420,"timestamp":457592162304,"id":271,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772204137162,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":16926,"timestamp":457592162135,"id":270,"tags":{"url":"/api/projects"},"startTime":1772204137162,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457592179082,"id":272,"parentId":270,"tags":{"url":"/api/projects","memory.rss":"735653888","memory.heapUsed":"142335128","memory.heapTotal":"158732288"},"startTime":1772204137179,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":607708,"timestamp":457591795535,"id":264,"tags":{"url":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772204136795,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457592403267,"id":273,"parentId":264,"tags":{"url":"/api/projects/cmm4125nw0002s0i93fuqcown","memory.rss":"736509952","memory.heapUsed":"142476232","memory.heapTotal":"158875648"},"startTime":1772204137403,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":174,"timestamp":457592403974,"id":274,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772204137404,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":100,"timestamp":457592404167,"id":275,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772204137404,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":118,"timestamp":457592404493,"id":276,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772204137404,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":89,"timestamp":457592404626,"id":277,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772204137404,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":458,"timestamp":457592405338,"id":279,"parentId":3,"tags":{"inputPage":"/api/projects/[id]/route"},"startTime":1772204137405,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":22289,"timestamp":457592405064,"id":278,"tags":{"url":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772204137405,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457592427373,"id":280,"parentId":278,"tags":{"url":"/api/projects/cmm4125nw0002s0i93fuqcown","memory.rss":"736792576","memory.heapUsed":"142665552","memory.heapTotal":"159113216"},"startTime":1772204137427,"traceId":"60c56fde07386dfc"},{"name":"compile-path","duration":25271,"timestamp":457599230309,"id":283,"tags":{"trigger":"/api/ai/generate"},"startTime":1772204144230,"traceId":"60c56fde07386dfc"}] +[{"name":"handle-request","duration":5130253,"timestamp":457599229788,"id":281,"tags":{"url":"/api/ai/generate"},"startTime":1772204144229,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457604360070,"id":284,"parentId":281,"tags":{"url":"/api/ai/generate","memory.rss":"838201344","memory.heapUsed":"149650664","memory.heapTotal":"174751744"},"startTime":1772204149360,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":637,"timestamp":457604372009,"id":286,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772204149372,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":18498,"timestamp":457604371715,"id":285,"tags":{"url":"/api/projects"},"startTime":1772204149371,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457604390235,"id":287,"parentId":285,"tags":{"url":"/api/projects","memory.rss":"838332416","memory.heapUsed":"151169656","memory.heapTotal":"175013888"},"startTime":1772204149390,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":185,"timestamp":457624765314,"id":288,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204169765,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":103,"timestamp":457624765520,"id":289,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204169765,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":146,"timestamp":457624765943,"id":290,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204169765,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":97,"timestamp":457624766107,"id":291,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204169765,"traceId":"60c56fde07386dfc"},{"name":"compile-path","duration":15956,"timestamp":457624767102,"id":294,"tags":{"trigger":"/api/chapters/[id]"},"startTime":1772204169766,"traceId":"60c56fde07386dfc"}] +[{"name":"handle-request","duration":630804,"timestamp":457624766548,"id":292,"tags":{"url":"/api/chapters/placeholder-0"},"startTime":1772204169766,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457625397378,"id":295,"parentId":292,"tags":{"url":"/api/chapters/placeholder-0","memory.rss":"784769024","memory.heapUsed":"154005816","memory.heapTotal":"159354880"},"startTime":1772204170397,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":172,"timestamp":457629039735,"id":296,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204174039,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":98,"timestamp":457629039930,"id":297,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204174039,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":118,"timestamp":457629040289,"id":298,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204174039,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":89,"timestamp":457629040421,"id":299,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204174040,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":505,"timestamp":457629041098,"id":301,"parentId":3,"tags":{"inputPage":"/api/chapters/[id]/route"},"startTime":1772204174040,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":15768,"timestamp":457629040863,"id":300,"tags":{"url":"/api/chapters/placeholder-0"},"startTime":1772204174040,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457629056655,"id":302,"parentId":300,"tags":{"url":"/api/chapters/placeholder-0","memory.rss":"821383168","memory.heapUsed":"155217992","memory.heapTotal":"160403456"},"startTime":1772204174056,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":233,"timestamp":457636263369,"id":303,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204181263,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":160,"timestamp":457636263627,"id":304,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204181263,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":151,"timestamp":457636264087,"id":305,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204181263,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":103,"timestamp":457636264255,"id":306,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204181263,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":716,"timestamp":457636264852,"id":308,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772204181264,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":16264,"timestamp":457636264599,"id":307,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1mgu0"},"startTime":1772204181264,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457636280885,"id":309,"parentId":307,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1mgu0","memory.rss":"790937600","memory.heapUsed":"156062168","memory.heapTotal":"160665600"},"startTime":1772204181280,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":338,"timestamp":457636439842,"id":310,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204181439,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":269,"timestamp":457636440215,"id":311,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204181439,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":276,"timestamp":457636440904,"id":312,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204181440,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":328,"timestamp":457636441208,"id":313,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204181440,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":743,"timestamp":457636442706,"id":315,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772204181442,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":10465,"timestamp":457636442488,"id":314,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1mgu0"},"startTime":1772204181442,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457636452975,"id":316,"parentId":314,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1mgu0","memory.rss":"791810048","memory.heapUsed":"156899576","memory.heapTotal":"161452032"},"startTime":1772204181452,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":219,"timestamp":457636942325,"id":317,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204181942,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":232,"timestamp":457636942649,"id":318,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204181942,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":127,"timestamp":457636943434,"id":319,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204181943,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":88,"timestamp":457636943576,"id":320,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204181943,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":863,"timestamp":457636944123,"id":322,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772204181943,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":13768,"timestamp":457636943909,"id":321,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1mgu0"},"startTime":1772204181943,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457636957696,"id":323,"parentId":321,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1mgu0","memory.rss":"793006080","memory.heapUsed":"158305536","memory.heapTotal":"165883904"},"startTime":1772204181957,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":401,"timestamp":457637150544,"id":324,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204182150,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":277,"timestamp":457637150998,"id":325,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204182150,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":300,"timestamp":457637151673,"id":326,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204182151,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":269,"timestamp":457637152110,"id":327,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204182151,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":787,"timestamp":457637153288,"id":329,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772204182152,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":11871,"timestamp":457637152858,"id":328,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1mgu0"},"startTime":1772204182152,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457637164762,"id":330,"parentId":328,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1mgu0","memory.rss":"795500544","memory.heapUsed":"159581648","memory.heapTotal":"166146048"},"startTime":1772204182164,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":168,"timestamp":457637623595,"id":331,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204182623,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":94,"timestamp":457637623785,"id":332,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204182623,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":107,"timestamp":457637624068,"id":333,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204182623,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":92,"timestamp":457637624189,"id":334,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204182623,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":749,"timestamp":457637624727,"id":336,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772204182624,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":14915,"timestamp":457637624512,"id":335,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1mgu0"},"startTime":1772204182624,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457637639450,"id":337,"parentId":335,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1mgu0","memory.rss":"795959296","memory.heapUsed":"160001424","memory.heapTotal":"167194624"},"startTime":1772204182639,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":426,"timestamp":457638564179,"id":338,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204183563,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":337,"timestamp":457638564647,"id":339,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204183564,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":254,"timestamp":457638565494,"id":340,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204183565,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":105,"timestamp":457638565770,"id":341,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204183565,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":1372,"timestamp":457638566725,"id":343,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772204183566,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":15893,"timestamp":457638566393,"id":342,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1mgu0"},"startTime":1772204183566,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":4,"timestamp":457638582346,"id":344,"parentId":342,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1mgu0","memory.rss":"797417472","memory.heapUsed":"160466320","memory.heapTotal":"172437504"},"startTime":1772204183582,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":166,"timestamp":457638755254,"id":345,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204183754,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":95,"timestamp":457638755443,"id":346,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204183755,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":344,"timestamp":457638755996,"id":347,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204183755,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":185,"timestamp":457638756369,"id":348,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204183756,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":739,"timestamp":457638757196,"id":350,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772204183756,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":9646,"timestamp":457638756943,"id":349,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1mgu0"},"startTime":1772204183756,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457638766608,"id":351,"parentId":349,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1mgu0","memory.rss":"796893184","memory.heapUsed":"156433392","memory.heapTotal":"169959424"},"startTime":1772204183766,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":302,"timestamp":457639778342,"id":352,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204184778,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":274,"timestamp":457639778679,"id":353,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204184778,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":134,"timestamp":457639779243,"id":354,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204184778,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":92,"timestamp":457639779392,"id":355,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772204184779,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":723,"timestamp":457639779978,"id":357,"parentId":3,"tags":{"inputPage":"/project/[id]/page"},"startTime":1772204184779,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":14880,"timestamp":457639779757,"id":356,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1mgu0"},"startTime":1772204184779,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":3,"timestamp":457639794672,"id":358,"parentId":356,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1mgu0","memory.rss":"798715904","memory.heapUsed":"156424120","memory.heapTotal":"169959424"},"startTime":1772204184794,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":549,"timestamp":457656579519,"id":360,"parentId":3,"tags":{"inputPage":"/api/ai/generate/route"},"startTime":1772204201579,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":6076055,"timestamp":457656579314,"id":359,"tags":{"url":"/api/ai/generate"},"startTime":1772204201579,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457662655391,"id":361,"parentId":359,"tags":{"url":"/api/ai/generate","memory.rss":"818868224","memory.heapUsed":"156240688","memory.heapTotal":"162619392"},"startTime":1772204207655,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":1007,"timestamp":457662666366,"id":363,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772204207666,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":17827,"timestamp":457662666137,"id":362,"tags":{"url":"/api/projects"},"startTime":1772204207665,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457662683990,"id":364,"parentId":362,"tags":{"url":"/api/projects","memory.rss":"818884608","memory.heapUsed":"157118872","memory.heapTotal":"162619392"},"startTime":1772204207683,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":340,"timestamp":457692559373,"id":365,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204237559,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":239,"timestamp":457692559749,"id":366,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204237559,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":292,"timestamp":457692560466,"id":367,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204237560,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":362,"timestamp":457692560786,"id":368,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204237560,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":559,"timestamp":457692561951,"id":370,"parentId":3,"tags":{"inputPage":"/api/chapters/[id]/route"},"startTime":1772204237561,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":39971,"timestamp":457692561625,"id":369,"tags":{"url":"/api/chapters/placeholder-0"},"startTime":1772204237561,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457692601622,"id":371,"parentId":369,"tags":{"url":"/api/chapters/placeholder-0","memory.rss":"819257344","memory.heapUsed":"157881736","memory.heapTotal":"163119104"},"startTime":1772204237601,"traceId":"60c56fde07386dfc"},{"name":"compile-path","duration":191097,"timestamp":457693609443,"id":374,"tags":{"trigger":"/api/ai/transform"},"startTime":1772204238609,"traceId":"60c56fde07386dfc"}] +[{"name":"handle-request","duration":6906962,"timestamp":457693609171,"id":372,"tags":{"url":"/api/ai/transform"},"startTime":1772204238609,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457700516162,"id":375,"parentId":372,"tags":{"url":"/api/ai/transform","memory.rss":"901644288","memory.heapUsed":"164205736","memory.heapTotal":"169979904"},"startTime":1772204245516,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":1047,"timestamp":457700529549,"id":377,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772204245529,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":22587,"timestamp":457700529240,"id":376,"tags":{"url":"/api/projects"},"startTime":1772204245529,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":3,"timestamp":457700551852,"id":378,"parentId":376,"tags":{"url":"/api/projects","memory.rss":"901648384","memory.heapUsed":"164547168","memory.heapTotal":"169193472"},"startTime":1772204245551,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":162,"timestamp":457702524008,"id":379,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204247523,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":96,"timestamp":457702524192,"id":380,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204247524,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":112,"timestamp":457702524517,"id":381,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204247524,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":89,"timestamp":457702524644,"id":382,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204247524,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":844,"timestamp":457702525176,"id":384,"parentId":3,"tags":{"inputPage":"/api/chapters/[id]/route"},"startTime":1772204247525,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":20984,"timestamp":457702524980,"id":383,"tags":{"url":"/api/chapters/placeholder-0"},"startTime":1772204247524,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457702545989,"id":385,"parentId":383,"tags":{"url":"/api/chapters/placeholder-0","memory.rss":"901701632","memory.heapUsed":"165458920","memory.heapTotal":"169717760"},"startTime":1772204247545,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":187,"timestamp":457740699751,"id":386,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204285699,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":100,"timestamp":457740699964,"id":387,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204285699,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":136,"timestamp":457740700330,"id":388,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204285700,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":91,"timestamp":457740700483,"id":389,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204285700,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":693,"timestamp":457740701088,"id":391,"parentId":3,"tags":{"inputPage":"/api/chapters/[id]/route"},"startTime":1772204285700,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":32512,"timestamp":457740700864,"id":390,"tags":{"url":"/api/chapters/placeholder-0"},"startTime":1772204285700,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457740733402,"id":392,"parentId":390,"tags":{"url":"/api/chapters/placeholder-0","memory.rss":"872656896","memory.heapUsed":"166489224","memory.heapTotal":"172019712"},"startTime":1772204285733,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":159,"timestamp":457753303262,"id":393,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204298303,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":93,"timestamp":457753303443,"id":394,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204298303,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":113,"timestamp":457753303791,"id":395,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204298304,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":91,"timestamp":457753303918,"id":396,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204298304,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":611,"timestamp":457753304839,"id":398,"parentId":3,"tags":{"inputPage":"/api/chapters/[id]/route"},"startTime":1772204298305,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":38423,"timestamp":457753304641,"id":397,"tags":{"url":"/api/chapters/placeholder-0"},"startTime":1772204298304,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457753343090,"id":399,"parentId":397,"tags":{"url":"/api/chapters/placeholder-0","memory.rss":"886206464","memory.heapUsed":"167584704","memory.heapTotal":"171757568"},"startTime":1772204298343,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":555,"timestamp":457757821354,"id":401,"parentId":3,"tags":{"inputPage":"/api/ai/transform/route"},"startTime":1772204302821,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":7432929,"timestamp":457757821157,"id":400,"tags":{"url":"/api/ai/transform"},"startTime":1772204302821,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457765254114,"id":402,"parentId":400,"tags":{"url":"/api/ai/transform","memory.rss":"887730176","memory.heapUsed":"168196096","memory.heapTotal":"172544000"},"startTime":1772204310254,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":927,"timestamp":457765264310,"id":404,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772204310264,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":19944,"timestamp":457765264101,"id":403,"tags":{"url":"/api/projects"},"startTime":1772204310264,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457765284072,"id":405,"parentId":403,"tags":{"url":"/api/projects","memory.rss":"887730176","memory.heapUsed":"168546728","memory.heapTotal":"173330432"},"startTime":1772204310284,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":165,"timestamp":457767258349,"id":406,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204312258,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":94,"timestamp":457767258537,"id":407,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204312258,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":120,"timestamp":457767258881,"id":408,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204312259,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":87,"timestamp":457767259016,"id":409,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204312259,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":1166,"timestamp":457767259550,"id":411,"parentId":3,"tags":{"inputPage":"/api/chapters/[id]/route"},"startTime":1772204312259,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":24715,"timestamp":457767259353,"id":410,"tags":{"url":"/api/chapters/placeholder-0"},"startTime":1772204312259,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457767284103,"id":412,"parentId":410,"tags":{"url":"/api/chapters/placeholder-0","memory.rss":"887939072","memory.heapUsed":"169481432","memory.heapTotal":"173854720"},"startTime":1772204312284,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":169,"timestamp":457770561048,"id":413,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204315561,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":97,"timestamp":457770561243,"id":414,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204315561,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":144,"timestamp":457770561648,"id":415,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204315561,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":94,"timestamp":457770561808,"id":416,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204315562,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":516,"timestamp":457770562614,"id":418,"parentId":3,"tags":{"inputPage":"/api/chapters/[id]/route"},"startTime":1772204315562,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":22615,"timestamp":457770562214,"id":417,"tags":{"url":"/api/chapters/placeholder-0"},"startTime":1772204315562,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457770584857,"id":419,"parentId":417,"tags":{"url":"/api/chapters/placeholder-0","memory.rss":"889069568","memory.heapUsed":"170301448","memory.heapTotal":"174379008"},"startTime":1772204315585,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":176,"timestamp":457792474999,"id":420,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204337475,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":98,"timestamp":457792475199,"id":421,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204337475,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":139,"timestamp":457792475569,"id":422,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204337475,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":93,"timestamp":457792475729,"id":423,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204337476,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":609,"timestamp":457792476313,"id":425,"parentId":3,"tags":{"inputPage":"/api/chapters/[id]/route"},"startTime":1772204337476,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":43348,"timestamp":457792476105,"id":424,"tags":{"url":"/api/chapters/placeholder-0"},"startTime":1772204337476,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457792519483,"id":426,"parentId":424,"tags":{"url":"/api/chapters/placeholder-0","memory.rss":"889835520","memory.heapUsed":"170749024","memory.heapTotal":"175689728"},"startTime":1772204337519,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":638,"timestamp":457795526659,"id":428,"parentId":3,"tags":{"inputPage":"/api/ai/transform/route"},"startTime":1772204340526,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":8209137,"timestamp":457795526175,"id":427,"tags":{"url":"/api/ai/transform"},"startTime":1772204340526,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457803735335,"id":429,"parentId":427,"tags":{"url":"/api/ai/transform","memory.rss":"875753472","memory.heapUsed":"157714600","memory.heapTotal":"163094528"},"startTime":1772204348735,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":942,"timestamp":457803744855,"id":431,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772204348745,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":17457,"timestamp":457803744646,"id":430,"tags":{"url":"/api/projects"},"startTime":1772204348744,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457803762128,"id":432,"parentId":430,"tags":{"url":"/api/projects","memory.rss":"875892736","memory.heapUsed":"158054816","memory.heapTotal":"163356672"},"startTime":1772204348762,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":172,"timestamp":457805741726,"id":433,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204350742,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":92,"timestamp":457805741920,"id":434,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204350742,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":108,"timestamp":457805742258,"id":435,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204350742,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":90,"timestamp":457805742380,"id":436,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204350742,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":528,"timestamp":457805743046,"id":438,"parentId":3,"tags":{"inputPage":"/api/chapters/[id]/route"},"startTime":1772204350743,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":20673,"timestamp":457805742796,"id":437,"tags":{"url":"/api/chapters/placeholder-0"},"startTime":1772204350743,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457805763489,"id":439,"parentId":437,"tags":{"url":"/api/chapters/placeholder-0","memory.rss":"876625920","memory.heapUsed":"157790872","memory.heapTotal":"163618816"},"startTime":1772204350763,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":166,"timestamp":457832547525,"id":440,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204377547,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":91,"timestamp":457832547713,"id":441,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204377547,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":148,"timestamp":457832548590,"id":442,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204377548,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":87,"timestamp":457832548755,"id":443,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204377548,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":554,"timestamp":457832549740,"id":445,"parentId":3,"tags":{"inputPage":"/api/chapters/[id]/route"},"startTime":1772204377549,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":39185,"timestamp":457832549423,"id":444,"tags":{"url":"/api/chapters/placeholder-0"},"startTime":1772204377549,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457832588629,"id":446,"parentId":444,"tags":{"url":"/api/chapters/placeholder-0","memory.rss":"877531136","memory.heapUsed":"158582472","memory.heapTotal":"164405248"},"startTime":1772204377588,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":186,"timestamp":457835021523,"id":447,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204380021,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":99,"timestamp":457835021733,"id":448,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204380021,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":117,"timestamp":457835022091,"id":449,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204380022,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":87,"timestamp":457835022223,"id":450,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204380022,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":560,"timestamp":457835022888,"id":452,"parentId":3,"tags":{"inputPage":"/api/chapters/[id]/route"},"startTime":1772204380022,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":30789,"timestamp":457835022583,"id":451,"tags":{"url":"/api/chapters/placeholder-0"},"startTime":1772204380022,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457835053396,"id":453,"parentId":451,"tags":{"url":"/api/chapters/placeholder-0","memory.rss":"878063616","memory.heapUsed":"159489144","memory.heapTotal":"165715968"},"startTime":1772204380053,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":726,"timestamp":457836954340,"id":455,"parentId":3,"tags":{"inputPage":"/api/ai/transform/route"},"startTime":1772204381954,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":47115674,"timestamp":457836954137,"id":454,"tags":{"url":"/api/ai/transform"},"startTime":1772204381954,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457884069837,"id":456,"parentId":454,"tags":{"url":"/api/ai/transform","memory.rss":"879075328","memory.heapUsed":"160847032","memory.heapTotal":"166477824"},"startTime":1772204429069,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":509,"timestamp":457884080637,"id":458,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772204429080,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":11505,"timestamp":457884080453,"id":457,"tags":{"url":"/api/projects"},"startTime":1772204429080,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":2,"timestamp":457884091991,"id":459,"parentId":457,"tags":{"url":"/api/projects","memory.rss":"879755264","memory.heapUsed":"161184720","memory.heapTotal":"165953536"},"startTime":1772204429091,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":162,"timestamp":457886074566,"id":460,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204431074,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":91,"timestamp":457886074750,"id":461,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204431074,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":111,"timestamp":457886075090,"id":462,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204431075,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":87,"timestamp":457886075215,"id":463,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204431075,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":532,"timestamp":457886076165,"id":465,"parentId":3,"tags":{"inputPage":"/api/chapters/[id]/route"},"startTime":1772204431076,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":15723,"timestamp":457886075987,"id":464,"tags":{"url":"/api/chapters/placeholder-0"},"startTime":1772204431075,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457886091734,"id":466,"parentId":464,"tags":{"url":"/api/chapters/placeholder-0","memory.rss":"880107520","memory.heapUsed":"162106552","memory.heapTotal":"167526400"},"startTime":1772204431091,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":160,"timestamp":457891723675,"id":467,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204436723,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":91,"timestamp":457891723858,"id":468,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204436723,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":162,"timestamp":457891724391,"id":469,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204436724,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":90,"timestamp":457891724571,"id":470,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204436724,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":545,"timestamp":457891725225,"id":472,"parentId":3,"tags":{"inputPage":"/api/chapters/[id]/route"},"startTime":1772204436725,"traceId":"60c56fde07386dfc"},{"name":"handle-request","duration":18372,"timestamp":457891724992,"id":471,"tags":{"url":"/api/chapters/placeholder-0"},"startTime":1772204436724,"traceId":"60c56fde07386dfc"},{"name":"memory-usage","duration":1,"timestamp":457891743389,"id":473,"parentId":471,"tags":{"url":"/api/chapters/placeholder-0","memory.rss":"881324032","memory.heapUsed":"162453832","memory.heapTotal":"167526400"},"startTime":1772204436743,"traceId":"60c56fde07386dfc"},{"name":"ensure-page","duration":167,"timestamp":457918970352,"id":474,"parentId":3,"tags":{"inputPage":"/api/chapters/placeholder-0"},"startTime":1772204463970,"traceId":"60c56fde07386dfc"}] +[{"name":"hot-reloader","duration":37,"timestamp":483817368234,"id":3,"tags":{"version":"16.1.6"},"startTime":1772230362368,"traceId":"ac832ea7e7a97813"},{"name":"setup-dev-bundler","duration":201750,"timestamp":483817280515,"id":2,"parentId":1,"tags":{},"startTime":1772230362280,"traceId":"ac832ea7e7a97813"},{"name":"start-dev-server","duration":583503,"timestamp":483816975025,"id":1,"tags":{"cpus":"32","platform":"win32","memory.freeMem":"6294134784","memory.totalMem":"34186964992","memory.heapSizeLimit":"17143169024","memory.rss":"276918272","memory.heapTotal":"93122560","memory.heapUsed":"61394256"},"startTime":1772230361975,"traceId":"ac832ea7e7a97813"},{"name":"compile-path","duration":64147,"timestamp":483821254125,"id":6,"tags":{"trigger":"/"},"startTime":1772230366254,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":65042,"timestamp":483821253653,"id":5,"parentId":3,"tags":{"inputPage":"/page"},"startTime":1772230366253,"traceId":"ac832ea7e7a97813"}] +[{"name":"handle-request","duration":303701,"timestamp":483821249768,"id":4,"tags":{"url":"/"},"startTime":1772230366249,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":4,"timestamp":483821553521,"id":7,"parentId":4,"tags":{"url":"/","memory.rss":"458010624","memory.heapUsed":"94616480","memory.heapTotal":"127381504"},"startTime":1772230366553,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":1143,"timestamp":483821934806,"id":8,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772230366934,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":811,"timestamp":483821936010,"id":9,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772230366936,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":568,"timestamp":483821937978,"id":10,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772230366938,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":825,"timestamp":483821938619,"id":11,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772230366938,"traceId":"ac832ea7e7a97813"},{"name":"compile-path","duration":18006,"timestamp":483821942627,"id":14,"tags":{"trigger":"/api/auth/[...nextauth]"},"startTime":1772230366942,"traceId":"ac832ea7e7a97813"}] +[{"name":"handle-request","duration":663313,"timestamp":483821941614,"id":12,"tags":{"url":"/api/auth/session"},"startTime":1772230366941,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":5,"timestamp":483822604981,"id":15,"parentId":12,"tags":{"url":"/api/auth/session","memory.rss":"531398656","memory.heapUsed":"104628416","memory.heapTotal":"132313088"},"startTime":1772230367605,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":273,"timestamp":483822612009,"id":19,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772230367612,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":212,"timestamp":483822612352,"id":20,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772230367612,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":283,"timestamp":483822613575,"id":21,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772230367613,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":303,"timestamp":483822613884,"id":22,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772230367613,"traceId":"ac832ea7e7a97813"},{"name":"compile-path","duration":5077,"timestamp":483822611831,"id":18,"tags":{"trigger":"/api/user/profile"},"startTime":1772230367611,"traceId":"ac832ea7e7a97813"}] +[{"name":"ensure-page","duration":1363,"timestamp":483822685436,"id":24,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772230367685,"traceId":"ac832ea7e7a97813"},{"name":"handle-request","duration":83684,"timestamp":483822685116,"id":23,"tags":{"url":"/api/auth/session"},"startTime":1772230367685,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":4,"timestamp":483822768827,"id":25,"parentId":23,"tags":{"url":"/api/auth/session","memory.rss":"579620864","memory.heapUsed":"125432816","memory.heapTotal":"154005504"},"startTime":1772230367768,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":596,"timestamp":483822774788,"id":27,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772230367774,"traceId":"ac832ea7e7a97813"},{"name":"handle-request","duration":209036,"timestamp":483822611363,"id":16,"tags":{"url":"/api/user/profile"},"startTime":1772230367611,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":5,"timestamp":483822820427,"id":28,"parentId":16,"tags":{"url":"/api/user/profile","memory.rss":"580681728","memory.heapUsed":"127988552","memory.heapTotal":"154529792"},"startTime":1772230367820,"traceId":"ac832ea7e7a97813"},{"name":"handle-request","duration":47472,"timestamp":483822774298,"id":26,"tags":{"url":"/api/user/profile"},"startTime":1772230367774,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":4,"timestamp":483822821798,"id":29,"parentId":26,"tags":{"url":"/api/user/profile","memory.rss":"580816896","memory.heapUsed":"128234928","memory.heapTotal":"154791936"},"startTime":1772230367821,"traceId":"ac832ea7e7a97813"},{"name":"compile-path","duration":12931,"timestamp":483840839960,"id":32,"tags":{"trigger":"/login"},"startTime":1772230385840,"traceId":"ac832ea7e7a97813"}] +[{"name":"handle-request","duration":43193,"timestamp":483840839002,"id":30,"tags":{"url":"/login?_rsc=vusbg"},"startTime":1772230385839,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":4,"timestamp":483840882235,"id":33,"parentId":30,"tags":{"url":"/login?_rsc=vusbg","memory.rss":"544157696","memory.heapUsed":"123162592","memory.heapTotal":"129413120"},"startTime":1772230385882,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":298,"timestamp":483850648614,"id":34,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772230395648,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":167,"timestamp":483850648943,"id":35,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772230395649,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":132,"timestamp":483850649379,"id":36,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772230395649,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":92,"timestamp":483850649526,"id":37,"parentId":3,"tags":{"inputPage":"/api/auth/providers"},"startTime":1772230395649,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":596,"timestamp":483850650210,"id":39,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772230395650,"traceId":"ac832ea7e7a97813"},{"name":"handle-request","duration":10808,"timestamp":483850649923,"id":38,"tags":{"url":"/api/auth/providers"},"startTime":1772230395650,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":7,"timestamp":483850660778,"id":40,"parentId":38,"tags":{"url":"/api/auth/providers","memory.rss":"568934400","memory.heapUsed":"123339752","memory.heapTotal":"127053824"},"startTime":1772230395660,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":181,"timestamp":483850664127,"id":41,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772230395664,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":108,"timestamp":483850664380,"id":42,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772230395664,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":159,"timestamp":483850664766,"id":43,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772230395664,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":106,"timestamp":483850664941,"id":44,"parentId":3,"tags":{"inputPage":"/api/auth/csrf"},"startTime":1772230395665,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":479,"timestamp":483850665797,"id":46,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772230395665,"traceId":"ac832ea7e7a97813"},{"name":"handle-request","duration":4987,"timestamp":483850665458,"id":45,"tags":{"url":"/api/auth/csrf"},"startTime":1772230395665,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":4,"timestamp":483850670468,"id":47,"parentId":45,"tags":{"url":"/api/auth/csrf","memory.rss":"567930880","memory.heapUsed":"124217464","memory.heapTotal":"128626688"},"startTime":1772230395670,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":192,"timestamp":483850674042,"id":48,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772230395674,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":125,"timestamp":483850674259,"id":49,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772230395674,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":162,"timestamp":483850675089,"id":50,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772230395675,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":102,"timestamp":483850675267,"id":51,"parentId":3,"tags":{"inputPage":"/api/auth/callback/credentials"},"startTime":1772230395675,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":749,"timestamp":483850676580,"id":53,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772230395676,"traceId":"ac832ea7e7a97813"},{"name":"handle-request","duration":223658,"timestamp":483850675938,"id":52,"tags":{"url":"/api/auth/callback/credentials?"},"startTime":1772230395676,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":1,"timestamp":483850899624,"id":54,"parentId":52,"tags":{"url":"/api/auth/callback/credentials?","memory.rss":"547192832","memory.heapUsed":"125369544","memory.heapTotal":"129150976"},"startTime":1772230395899,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":195,"timestamp":483850904939,"id":55,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772230395905,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":115,"timestamp":483850905158,"id":56,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772230395905,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":149,"timestamp":483850905572,"id":57,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772230395905,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":104,"timestamp":483850905737,"id":58,"parentId":3,"tags":{"inputPage":"/api/auth/session"},"startTime":1772230395905,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":479,"timestamp":483850906455,"id":60,"parentId":3,"tags":{"inputPage":"/api/auth/[...nextauth]/route"},"startTime":1772230395906,"traceId":"ac832ea7e7a97813"},{"name":"handle-request","duration":6535,"timestamp":483850906158,"id":59,"tags":{"url":"/api/auth/session"},"startTime":1772230395906,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":1,"timestamp":483850912717,"id":61,"parentId":59,"tags":{"url":"/api/auth/session","memory.rss":"547299328","memory.heapUsed":"126207040","memory.heapTotal":"130723840"},"startTime":1772230395912,"traceId":"ac832ea7e7a97813"},{"name":"compile-path","duration":7937,"timestamp":483850918043,"id":64,"tags":{"trigger":"/dashboard"},"startTime":1772230395918,"traceId":"ac832ea7e7a97813"}] +[{"name":"ensure-page","duration":1262,"timestamp":483850947420,"id":66,"parentId":3,"tags":{"inputPage":"/api/user/profile/route"},"startTime":1772230395947,"traceId":"ac832ea7e7a97813"},{"name":"handle-request","duration":44619,"timestamp":483850917562,"id":62,"tags":{"url":"/dashboard?_rsc=5c339"},"startTime":1772230395917,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":3,"timestamp":483850962217,"id":67,"parentId":62,"tags":{"url":"/dashboard?_rsc=5c339","memory.rss":"555393024","memory.heapUsed":"130901928","memory.heapTotal":"142487552"},"startTime":1772230395962,"traceId":"ac832ea7e7a97813"},{"name":"handle-request","duration":39917,"timestamp":483850947135,"id":65,"tags":{"url":"/api/user/profile"},"startTime":1772230395947,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":3,"timestamp":483850987080,"id":68,"parentId":65,"tags":{"url":"/api/user/profile","memory.rss":"557096960","memory.heapUsed":"127798176","memory.heapTotal":"141676544"},"startTime":1772230395987,"traceId":"ac832ea7e7a97813"},{"name":"compile-path","duration":6942,"timestamp":483851008631,"id":71,"tags":{"trigger":"/api/projects"},"startTime":1772230396008,"traceId":"ac832ea7e7a97813"}] +[{"name":"handle-request","duration":49860,"timestamp":483851008196,"id":69,"tags":{"url":"/api/projects"},"startTime":1772230396008,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":11,"timestamp":483851058152,"id":72,"parentId":69,"tags":{"url":"/api/projects","memory.rss":"564441088","memory.heapUsed":"131806656","memory.heapTotal":"143699968"},"startTime":1772230396058,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":551,"timestamp":483851059724,"id":74,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772230396059,"traceId":"ac832ea7e7a97813"},{"name":"handle-request","duration":25704,"timestamp":483851059409,"id":73,"tags":{"url":"/api/projects"},"startTime":1772230396059,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":2,"timestamp":483851085137,"id":75,"parentId":73,"tags":{"url":"/api/projects","memory.rss":"565547008","memory.heapUsed":"133471584","memory.heapTotal":"143699968"},"startTime":1772230396085,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":536,"timestamp":483851086423,"id":77,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772230396086,"traceId":"ac832ea7e7a97813"},{"name":"handle-request","duration":14821,"timestamp":483851086106,"id":76,"tags":{"url":"/api/projects"},"startTime":1772230396086,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":2,"timestamp":483851100949,"id":78,"parentId":76,"tags":{"url":"/api/projects","memory.rss":"567508992","memory.heapUsed":"133403592","memory.heapTotal":"153137152"},"startTime":1772230396101,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":247,"timestamp":483858611802,"id":79,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772230403611,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":103,"timestamp":483858612072,"id":80,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772230403612,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":335,"timestamp":483858612741,"id":81,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772230403612,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":151,"timestamp":483858613101,"id":82,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown"},"startTime":1772230403613,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":140,"timestamp":483858614555,"id":86,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772230403614,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":143,"timestamp":483858614715,"id":87,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772230403614,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":377,"timestamp":483858615449,"id":88,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772230403615,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":122,"timestamp":483858615844,"id":89,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772230403615,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":5284,"timestamp":483858616680,"id":91,"parentId":3,"tags":{"inputPage":"/api/projects/[id]/route"},"startTime":1772230403616,"traceId":"ac832ea7e7a97813"},{"name":"compile-path","duration":34401,"timestamp":483858614415,"id":85,"tags":{"trigger":"/project/[id]"},"startTime":1772230403614,"traceId":"ac832ea7e7a97813"}] +[{"name":"handle-request","duration":327206,"timestamp":483858614079,"id":83,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1h1b5"},"startTime":1772230403614,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":2,"timestamp":483858941304,"id":92,"parentId":83,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown?_rsc=1h1b5","memory.rss":"639041536","memory.heapUsed":"140727312","memory.heapTotal":"158384128"},"startTime":1772230403941,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":521,"timestamp":483858988438,"id":94,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772230403988,"traceId":"ac832ea7e7a97813"},{"name":"handle-request","duration":15533,"timestamp":483858988184,"id":93,"tags":{"url":"/api/projects"},"startTime":1772230403988,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":2,"timestamp":483859003743,"id":95,"parentId":93,"tags":{"url":"/api/projects","memory.rss":"656338944","memory.heapUsed":"143574792","memory.heapTotal":"158384128"},"startTime":1772230404003,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":632,"timestamp":483859004762,"id":97,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772230404004,"traceId":"ac832ea7e7a97813"},{"name":"handle-request","duration":27600,"timestamp":483859004554,"id":96,"tags":{"url":"/api/projects"},"startTime":1772230404004,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":3,"timestamp":483859032191,"id":98,"parentId":96,"tags":{"url":"/api/projects","memory.rss":"659750912","memory.heapUsed":"142067184","memory.heapTotal":"161267712"},"startTime":1772230404032,"traceId":"ac832ea7e7a97813"},{"name":"handle-request","duration":622419,"timestamp":483858616471,"id":90,"tags":{"url":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772230403616,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":2,"timestamp":483859238916,"id":99,"parentId":90,"tags":{"url":"/api/projects/cmm4125nw0002s0i93fuqcown","memory.rss":"660803584","memory.heapUsed":"144477848","memory.heapTotal":"161411072"},"startTime":1772230404239,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":182,"timestamp":483859239638,"id":100,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772230404239,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":103,"timestamp":483859239839,"id":101,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772230404239,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":148,"timestamp":483859240292,"id":102,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772230404240,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":98,"timestamp":483859240455,"id":103,"parentId":3,"tags":{"inputPage":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772230404240,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":475,"timestamp":483859241083,"id":105,"parentId":3,"tags":{"inputPage":"/api/projects/[id]/route"},"startTime":1772230404241,"traceId":"ac832ea7e7a97813"},{"name":"handle-request","duration":25339,"timestamp":483859240896,"id":104,"tags":{"url":"/api/projects/cmm4125nw0002s0i93fuqcown"},"startTime":1772230404241,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":3,"timestamp":483859266269,"id":106,"parentId":104,"tags":{"url":"/api/projects/cmm4125nw0002s0i93fuqcown","memory.rss":"661737472","memory.heapUsed":"147099088","memory.heapTotal":"162664448"},"startTime":1772230404266,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":223,"timestamp":483863595889,"id":107,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown/world"},"startTime":1772230408595,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":116,"timestamp":483863596136,"id":108,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown/world"},"startTime":1772230408596,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":159,"timestamp":483863596663,"id":109,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown/world"},"startTime":1772230408596,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":106,"timestamp":483863596840,"id":110,"parentId":3,"tags":{"inputPage":"/project/cmm4125nw0002s0i93fuqcown/world"},"startTime":1772230408596,"traceId":"ac832ea7e7a97813"},{"name":"compile-path","duration":360354,"timestamp":483863597765,"id":113,"tags":{"trigger":"/project/[id]/world"},"startTime":1772230408597,"traceId":"ac832ea7e7a97813"}] +[{"name":"handle-request","duration":668522,"timestamp":483863597432,"id":111,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown/world?_rsc=1mgu0"},"startTime":1772230408597,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":2,"timestamp":483864265980,"id":114,"parentId":111,"tags":{"url":"/project/cmm4125nw0002s0i93fuqcown/world?_rsc=1mgu0","memory.rss":"880676864","memory.heapUsed":"148626544","memory.heapTotal":"183623680"},"startTime":1772230409266,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":816,"timestamp":483864321981,"id":116,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772230409322,"traceId":"ac832ea7e7a97813"},{"name":"handle-request","duration":36530,"timestamp":483864321743,"id":115,"tags":{"url":"/api/projects"},"startTime":1772230409321,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":3,"timestamp":483864358313,"id":117,"parentId":115,"tags":{"url":"/api/projects","memory.rss":"881725440","memory.heapUsed":"143567368","memory.heapTotal":"183611392"},"startTime":1772230409358,"traceId":"ac832ea7e7a97813"},{"name":"ensure-page","duration":1410,"timestamp":483864359751,"id":119,"parentId":3,"tags":{"inputPage":"/api/projects/route"},"startTime":1772230409359,"traceId":"ac832ea7e7a97813"},{"name":"handle-request","duration":27188,"timestamp":483864359384,"id":118,"tags":{"url":"/api/projects"},"startTime":1772230409359,"traceId":"ac832ea7e7a97813"},{"name":"memory-usage","duration":2,"timestamp":483864386598,"id":120,"parentId":118,"tags":{"url":"/api/projects","memory.rss":"881999872","memory.heapUsed":"145075560","memory.heapTotal":"183873536"},"startTime":1772230409386,"traceId":"ac832ea7e7a97813"},{"name":"compile-path","duration":83677,"timestamp":483873687248,"id":123,"tags":{"trigger":"/api/entities"},"startTime":1772230418687,"traceId":"ac832ea7e7a97813"}] diff --git a/.next/dev/types/routes.d.ts b/.next/dev/types/routes.d.ts index bf19f60..fa7847a 100644 --- a/.next/dev/types/routes.d.ts +++ b/.next/dev/types/routes.d.ts @@ -2,7 +2,7 @@ // Do not edit this file manually type AppRoutes = "/" | "/checkout" | "/dashboard" | "/features" | "/login" | "/pricing" | "/profile" | "/project/[id]" | "/project/[id]/ideas" | "/project/[id]/settings" | "/project/[id]/workflow" | "/project/[id]/world" | "/signup" -type AppRouteHandlerRoutes = "/api/ai/generate" | "/api/ai/transform" | "/api/auth/[...nextauth]" | "/api/auth/register" | "/api/chapters" | "/api/chapters/[id]" | "/api/entities" | "/api/entities/[id]" | "/api/ideas" | "/api/ideas/[id]" | "/api/projects" | "/api/projects/[id]" | "/api/projects/[id]/workflow" | "/api/user/profile" +type AppRouteHandlerRoutes = "/api/ai/generate" | "/api/ai/transform" | "/api/auth/[...nextauth]" | "/api/auth/register" | "/api/chapters" | "/api/chapters/[id]" | "/api/entities" | "/api/entities/[id]" | "/api/ideas" | "/api/ideas/[id]" | "/api/plans" | "/api/projects" | "/api/projects/[id]" | "/api/projects/[id]/workflow" | "/api/user/profile" type PageRoutes = never type LayoutRoutes = "/" | "/project/[id]" type RedirectRoutes = never @@ -22,6 +22,7 @@ interface ParamMap { "/api/entities/[id]": { "id": string; } "/api/ideas": {} "/api/ideas/[id]": { "id": string; } + "/api/plans": {} "/api/projects": {} "/api/projects/[id]": { "id": string; } "/api/projects/[id]/workflow": { "id": string; } diff --git a/.next/dev/types/validator.ts b/.next/dev/types/validator.ts index cf62213..2249e1b 100644 --- a/.next/dev/types/validator.ts +++ b/.next/dev/types/validator.ts @@ -254,6 +254,15 @@ type RouteHandlerConfig> = Specific + const handler = {} as typeof import("../../../src/app/api/plans/route.js") + type __Check = __IsExpected + // @ts-ignore + type __Unused = __Check +} + // Validate ../../../src/app/api/projects/[id]/route.ts { type __IsExpected> = Specific diff --git a/src/app/project/[id]/layout.tsx b/src/app/project/[id]/layout.tsx index f69f170..2c34c1e 100644 --- a/src/app/project/[id]/layout.tsx +++ b/src/app/project/[id]/layout.tsx @@ -30,6 +30,7 @@ export default function ProjectLayout({ children }: { children: React.ReactNode const { projects, setCurrentProjectId, updateProject, updateChapter, addChapter, + createEntity, updateEntity, deleteEntity, deleteProject } = useProjects(user); const { chatHistory, isGenerating, sendMessage } = useChat(); @@ -98,6 +99,10 @@ export default function ProjectLayout({ children }: { children: React.ReactNode setCurrentChapterId, updateProject: (updates) => updateProject(projectId, updates), updateChapter: (chapterId, data) => updateChapter(projectId, chapterId, data), + createEntity: (type, data) => createEntity(projectId, type, data), + updateEntity: (entityId, data) => updateEntity(projectId, entityId, data), + deleteEntity: (entityId) => deleteEntity(projectId, entityId), + deleteProject: () => deleteProject(projectId), incrementUsage, }}> updateProject(updates)} onDeleteProject={async () => { - await deleteProject(projectId); + await deleteProject(); router.push('/dashboard'); }} /> diff --git a/src/app/project/[id]/world/page.tsx b/src/app/project/[id]/world/page.tsx index 09f37c0..6464325 100644 --- a/src/app/project/[id]/world/page.tsx +++ b/src/app/project/[id]/world/page.tsx @@ -2,22 +2,18 @@ import WorldBuilder from '@/components/WorldBuilder'; import { useProjectContext } from '@/providers/ProjectProvider'; -import { useProjects } from '@/hooks/useProjects'; -import { useAuthContext } from '@/providers/AuthProvider'; export default function WorldPage() { - const { project, projectId, updateProject } = useProjectContext(); - const { user } = useAuthContext(); - const { createEntity, updateEntity, deleteEntity } = useProjects(user); + const { project, updateProject, createEntity, updateEntity, deleteEntity } = useProjectContext(); return ( { - return await createEntity(projectId, entityData.type, entityData); + return await createEntity(entityData.type, entityData); }} - onUpdate={(entityId, updates) => updateEntity(projectId, entityId, updates)} - onDelete={(entityId) => deleteEntity(projectId, entityId)} + onUpdate={(entityId, updates) => updateEntity(entityId, updates)} + onDelete={(entityId) => deleteEntity(entityId)} templates={project.templates || []} onUpdateTemplates={(t) => updateProject({ templates: t })} initialSelectedId={null} diff --git a/src/providers/ProjectProvider.tsx b/src/providers/ProjectProvider.tsx index d481b2d..1235129 100644 --- a/src/providers/ProjectProvider.tsx +++ b/src/providers/ProjectProvider.tsx @@ -1,7 +1,7 @@ 'use client'; import React, { createContext, useContext } from 'react'; -import { BookProject, UserProfile } from '@/lib/types'; +import { BookProject, UserProfile, Entity, EntityType } from '@/lib/types'; interface ProjectContextType { project: BookProject; @@ -11,6 +11,10 @@ interface ProjectContextType { setCurrentChapterId: (id: string) => void; updateProject: (updates: Partial) => void; updateChapter: (chapterId: string, data: any) => void; + createEntity: (type: EntityType, initialData?: Partial) => Promise; + updateEntity: (entityId: string, data: Partial) => Promise; + deleteEntity: (entityId: string) => Promise; + deleteProject: () => Promise; incrementUsage: () => void; }