recce-nightly 1.9.0.20250622__tar.gz → 1.9.0.20250624__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of recce-nightly might be problematic. Click here for more details.

Files changed (162) hide show
  1. {recce_nightly-1.9.0.20250622/recce_nightly.egg-info → recce_nightly-1.9.0.20250624}/PKG-INFO +1 -1
  2. recce_nightly-1.9.0.20250624/recce/VERSION +1 -0
  3. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/adapter/dbt_adapter/__init__.py +108 -45
  4. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/cli.py +42 -11
  5. recce_nightly-1.9.0.20250624/recce/connect_to_cloud.py +138 -0
  6. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/404.html +2 -2
  7. recce_nightly-1.9.0.20250622/recce/data/_next/static/chunks/92-7ab55ae02606193c.js → recce_nightly-1.9.0.20250624/recce/data/_next/static/chunks/92-607cd1af83c41f43.js +1 -1
  8. recce_nightly-1.9.0.20250624/recce/data/_next/static/chunks/app/page-3f79c2e6d6f03a09.js +1 -0
  9. recce_nightly-1.9.0.20250624/recce/data/auth_callback.html +68 -0
  10. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/index.html +2 -2
  11. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/index.txt +3 -3
  12. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/models/types.py +7 -0
  13. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/server.py +37 -33
  14. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/state.py +3 -2
  15. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/util/api_token.py +1 -9
  16. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/util/lineage.py +16 -12
  17. recce_nightly-1.9.0.20250624/recce/util/onboarding_state.py +45 -0
  18. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/util/recce_cloud.py +7 -7
  19. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624/recce_nightly.egg-info}/PKG-INFO +1 -1
  20. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce_nightly.egg-info/SOURCES.txt +8 -4
  21. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/adapter/dbt_adapter/test_dbt_cll.py +9 -9
  22. recce_nightly-1.9.0.20250624/tests/test_connect_to_cloud.py +82 -0
  23. recce_nightly-1.9.0.20250622/recce/VERSION +0 -1
  24. recce_nightly-1.9.0.20250622/recce/data/_next/static/chunks/app/page-707b8e8d98d7f780.js +0 -1
  25. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/LICENSE +0 -0
  26. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/README.md +0 -0
  27. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/pyproject.toml +0 -0
  28. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/__init__.py +0 -0
  29. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/adapter/__init__.py +0 -0
  30. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/adapter/base.py +0 -0
  31. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/adapter/dbt_adapter/dbt_version.py +0 -0
  32. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/adapter/sqlmesh_adapter.py +0 -0
  33. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/apis/__init__.py +0 -0
  34. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/apis/check_api.py +0 -0
  35. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/apis/check_func.py +0 -0
  36. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/apis/run_api.py +0 -0
  37. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/apis/run_func.py +0 -0
  38. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/artifact.py +0 -0
  39. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/config.py +0 -0
  40. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/core.py +0 -0
  41. {recce_nightly-1.9.0.20250622/recce/data/_next/static/M3_t2h-wA4_IXOtKHdJqV → recce_nightly-1.9.0.20250624/recce/data/_next/static/Iga3yMdHBVJ_Vhluh2SdE}/_buildManifest.js +0 -0
  42. {recce_nightly-1.9.0.20250622/recce/data/_next/static/M3_t2h-wA4_IXOtKHdJqV → recce_nightly-1.9.0.20250624/recce/data/_next/static/Iga3yMdHBVJ_Vhluh2SdE}/_ssgManifest.js +0 -0
  43. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/181-acc61ddada3bc0ca.js +0 -0
  44. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/1bff33f1-1ef85cf5e658a751.js +0 -0
  45. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/217-879a84d70f7a907c.js +0 -0
  46. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/29e3cc0d-60045b2e47aa3916.js +0 -0
  47. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/36e1c10d-8e7be4a6c1f6ab2d.js +0 -0
  48. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/3998a672-03adacad07b346ac.js +0 -0
  49. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/3a92ee20-1081c360214f9602.js +0 -0
  50. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/42-cd3c06533f5fd47c.js +0 -0
  51. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/450c323b-fd94e7ffaa4a5efa.js +0 -0
  52. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/47d8844f-929aed9b1c73a905.js +0 -0
  53. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/608-3b079b544e5d5f5e.js +0 -0
  54. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/6dc81886-adbfa45836061d79.js +0 -0
  55. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/7a8a3e83-edf6dc64b5d5f0a5.js +0 -0
  56. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/7f27ae6c-d5f0438edd5c2a5b.js +0 -0
  57. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/86730205-cfb14e3f051bab35.js +0 -0
  58. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/8d700b6a.8bb140898499c512.js +0 -0
  59. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/9746af58-a42b7d169cacadf0.js +0 -0
  60. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/a30376cd-de84559016d7e133.js +0 -0
  61. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/app/_not-found/page-01ed58b7f971d311.js +0 -0
  62. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/app/layout-177a410a97e0d018.js +0 -0
  63. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/b63b1b3f-4282bdcf459e075c.js +0 -0
  64. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/bbda5537-9ec25eb1dd62348a.js +0 -0
  65. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/c132bf7d-08cb668a789d6afd.js +0 -0
  66. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/ce84277d-2e5d1d46910cf052.js +0 -0
  67. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/febdd86e-c6b525341634b860.js +0 -0
  68. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/fee69bc6-2dbccaf9b90474e6.js +0 -0
  69. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/framework-ded83d71b51ce901.js +0 -0
  70. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/main-app-39061b0166c47f55.js +0 -0
  71. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/main-b5b3ae20a1405261.js +0 -0
  72. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/pages/_app-437c455677d62394.js +0 -0
  73. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/pages/_error-e7650df18ca04bde.js +0 -0
  74. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -0
  75. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/chunks/webpack-7b49d5ba7e3a434d.js +0 -0
  76. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/css/17a96168e3a9db13.css +0 -0
  77. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/css/1b121dc4d36aeb4d.css +0 -0
  78. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/css/35c6679a098e1e34.css +0 -0
  79. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/css/951e2e0eea2d4a5b.css +0 -0
  80. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/media/montserrat-cyrillic-800-normal.22628180.woff2 +0 -0
  81. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/media/montserrat-cyrillic-800-normal.bd5c9f50.woff +0 -0
  82. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.94a63aea.woff2 +0 -0
  83. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/media/montserrat-cyrillic-ext-800-normal.e6e0d8d0.woff +0 -0
  84. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/media/montserrat-latin-800-normal.6f8fa298.woff2 +0 -0
  85. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/media/montserrat-latin-800-normal.fc315020.woff +0 -0
  86. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/media/montserrat-latin-ext-800-normal.013b84f9.woff2 +0 -0
  87. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/media/montserrat-latin-ext-800-normal.2e5381b2.woff +0 -0
  88. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/media/montserrat-vietnamese-800-normal.20c545e6.woff +0 -0
  89. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/media/montserrat-vietnamese-800-normal.c0035377.woff2 +0 -0
  90. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/_next/static/media/reload-image.79aabb7d.svg +0 -0
  91. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/favicon.ico +0 -0
  92. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/imgs/feedback/thumbs-down.png +0 -0
  93. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/imgs/feedback/thumbs-up.png +0 -0
  94. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/imgs/reload-image.svg +0 -0
  95. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/data/logo/recce-logo-white.png +0 -0
  96. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/diff.py +0 -0
  97. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/event/CONFIG +0 -0
  98. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/event/SENTRY_DNS +0 -0
  99. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/event/__init__.py +0 -0
  100. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/event/collector.py +0 -0
  101. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/event/track.py +0 -0
  102. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/exceptions.py +0 -0
  103. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/git.py +0 -0
  104. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/github.py +0 -0
  105. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/models/__init__.py +0 -0
  106. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/models/check.py +0 -0
  107. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/models/run.py +0 -0
  108. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/pull_request.py +0 -0
  109. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/run.py +0 -0
  110. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/summary.py +0 -0
  111. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/tasks/__init__.py +0 -0
  112. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/tasks/core.py +0 -0
  113. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/tasks/dataframe.py +0 -0
  114. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/tasks/histogram.py +0 -0
  115. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/tasks/lineage.py +0 -0
  116. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/tasks/profile.py +0 -0
  117. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/tasks/query.py +0 -0
  118. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/tasks/rowcount.py +0 -0
  119. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/tasks/schema.py +0 -0
  120. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/tasks/top_k.py +0 -0
  121. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/tasks/valuediff.py +0 -0
  122. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/util/__init__.py +0 -0
  123. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/util/breaking.py +0 -0
  124. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/util/cache.py +0 -0
  125. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/util/cll.py +0 -0
  126. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/util/io.py +0 -0
  127. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/util/logger.py +0 -0
  128. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/util/pydantic_model.py +0 -0
  129. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/util/singleton.py +0 -0
  130. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce/yaml/__init__.py +0 -0
  131. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce_nightly.egg-info/dependency_links.txt +0 -0
  132. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce_nightly.egg-info/entry_points.txt +0 -0
  133. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce_nightly.egg-info/requires.txt +0 -0
  134. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/recce_nightly.egg-info/top_level.txt +0 -0
  135. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/setup.cfg +0 -0
  136. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/setup.py +0 -0
  137. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/__init__.py +0 -0
  138. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/adapter/__init__.py +0 -0
  139. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/adapter/dbt_adapter/__init__.py +0 -0
  140. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/adapter/dbt_adapter/conftest.py +0 -0
  141. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/adapter/dbt_adapter/dbt_test_helper.py +0 -0
  142. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/adapter/dbt_adapter/test_dbt_adapter.py +0 -0
  143. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/adapter/dbt_adapter/test_selector.py +0 -0
  144. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/tasks/__init__.py +0 -0
  145. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/tasks/conftest.py +0 -0
  146. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/tasks/test_histogram.py +0 -0
  147. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/tasks/test_lineage.py +0 -0
  148. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/tasks/test_preset_checks.py +0 -0
  149. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/tasks/test_profile.py +0 -0
  150. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/tasks/test_query.py +0 -0
  151. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/tasks/test_row_count.py +0 -0
  152. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/tasks/test_schema.py +0 -0
  153. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/tasks/test_top_k.py +0 -0
  154. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/tasks/test_valuediff.py +0 -0
  155. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/test_cli.py +0 -0
  156. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/test_config.py +0 -0
  157. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/test_core.py +0 -0
  158. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/test_dbt.py +0 -0
  159. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/test_pull_request.py +0 -0
  160. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/test_server.py +0 -0
  161. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/test_state.py +0 -0
  162. {recce_nightly-1.9.0.20250622 → recce_nightly-1.9.0.20250624}/tests/test_summary.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: recce-nightly
3
- Version: 1.9.0.20250622
3
+ Version: 1.9.0.20250624
4
4
  Summary: Environment diff tool for dbt
5
5
  Home-page: https://github.com/InfuseAI/recce
6
6
  Author: InfuseAI Dev Team
@@ -0,0 +1 @@
1
+ 1.9.0.20250624
@@ -915,65 +915,128 @@ class DbtAdapter(BaseAdapter):
915
915
  diff=diff,
916
916
  )
917
917
 
918
- def get_cll(self, node_id: str, column: Optional[str]) -> CllData:
919
- cll = self.get_cll_by_node_id(node_id)
920
- if not column:
921
- return cll
922
-
923
- target_column = f"{node_id}_{column}"
924
- upstream, downstream = find_column_dependencies(target_column, cll.parent_map, cll.child_map)
925
- relevant_columns = {target_column}
926
- relevant_columns.update(upstream, downstream)
927
- nodes, columns = filter_lineage_vertices(cll.nodes, cll.columns, relevant_columns)
928
- p_map, c_map = filter_dependency_maps(cll.parent_map, cll.child_map, relevant_columns)
929
- return CllData(
930
- nodes=nodes,
931
- columns=columns,
932
- parent_map=p_map,
933
- child_map=c_map,
934
- )
935
-
936
- def get_cll_by_node_id(self, node_id: str, base: Optional[bool] = False) -> CllData:
918
+ def get_cll(
919
+ self,
920
+ node_id: Optional[str] = None,
921
+ column: Optional[str] = None,
922
+ change_analysis: Optional[bool] = False,
923
+ cll: Optional[bool] = True,
924
+ upstream: Optional[bool] = True,
925
+ downstream: Optional[bool] = True,
926
+ no_filter: Optional[bool] = False,
927
+ ) -> CllData:
937
928
  cll_tracker = CLLPerformanceTracking()
938
929
  cll_tracker.start_column_lineage()
939
930
 
940
- manifest = self.curr_manifest if base is False else self.base_manifest
931
+ manifest = self.curr_manifest
941
932
  manifest_dict = manifest.to_dict()
942
933
 
943
- parent_ids = find_upstream(node_id, manifest_dict.get("parent_map"))
944
- child_ids = find_downstream(node_id, manifest_dict.get("child_map"))
945
- cll_node_ids = parent_ids.union(child_ids)
946
- cll_node_ids.add(node_id)
934
+ # Find related model nodes
935
+ if node_id is not None:
936
+ cll_node_ids = {node_id}
937
+ else:
938
+ lineage_diff = self.get_lineage_diff()
939
+ cll_node_ids = lineage_diff.diff.keys()
947
940
 
948
941
  nodes = {}
949
- cll_data = CllData()
950
- for node_id in cll_node_ids:
951
- if node_id not in manifest.sources and node_id not in manifest.nodes and node_id not in manifest.exposures:
952
- continue
953
- cll_data_one = self.get_cll_cached(node_id, base=base)
954
- if cll_data_one is None:
955
- continue
956
- for n_id, n in cll_data_one.nodes.items():
957
- cll_data.nodes[n_id] = n
958
- for c_id, c in cll_data_one.columns.items():
959
- cll_data.columns[c_id] = c
960
- for p_id, parents in cll_data_one.parent_map.items():
961
- cll_data.parent_map[p_id] = parents
942
+ columns = {}
943
+ parent_map = {}
944
+ child_map = {}
945
+
946
+ if upstream:
947
+ cll_node_ids = cll_node_ids.union(find_upstream(cll_node_ids, manifest_dict.get("parent_map")))
948
+ if downstream:
949
+ cll_node_ids = cll_node_ids.union(find_downstream(cll_node_ids, manifest_dict.get("child_map")))
950
+
951
+ if cll:
952
+ for cll_node_id in cll_node_ids:
953
+ if (
954
+ cll_node_id not in manifest.sources
955
+ and cll_node_id not in manifest.nodes
956
+ and cll_node_id not in manifest.exposures
957
+ ):
958
+ continue
959
+ cll_data_one = self.get_cll_cached(cll_node_id, base=False)
960
+ if cll_data_one is None:
961
+ continue
962
+
963
+ node_diff = self.get_lineage_diff().diff.get(cll_node_id) if change_analysis else None
964
+ for n_id, n in cll_data_one.nodes.items():
965
+ nodes[n_id] = n
966
+
967
+ if node_diff is not None:
968
+ n.change_status = node_diff.change_status
969
+ if node_diff.change is not None:
970
+ n.change_category = node_diff.change.category
971
+ for c_id, c in cll_data_one.columns.items():
972
+ columns[c_id] = c
973
+ if node_diff is not None and node_diff.change is not None:
974
+ column_diff = node_diff.change.columns.get(c.name)
975
+ if column_diff:
976
+ c.change_status = column_diff
977
+
978
+ for p_id, parents in cll_data_one.parent_map.items():
979
+ parent_map[p_id] = parents
962
980
 
963
981
  # build the child map
964
- cll_data.child_map = {}
965
- for node_id, parents in cll_data.parent_map.items():
982
+ for parent_id, parents in parent_map.items():
966
983
  for parent in parents:
967
- if parent not in cll_data.child_map:
968
- cll_data.child_map[parent] = set()
969
- cll_data.child_map[parent].add(node_id)
984
+ if parent not in child_map:
985
+ child_map[parent] = set()
986
+ child_map[parent].add(parent_id)
987
+
988
+ # Find the anchor nodes
989
+ anchor_node_ids = set()
990
+ if node_id is None and column is None:
991
+ if change_analysis:
992
+ # If change analysis is requested, we need to find the nodes that have changes
993
+ for node_id, node_diff in self.get_lineage_diff().diff.items():
994
+ if node_diff.change.category == "breaking":
995
+ anchor_node_ids.add(node_id)
996
+ for column_name in node_diff.change.columns:
997
+ anchor_node_ids.add(f"{node_id}_{column_name}")
998
+ else:
999
+ lineage_diff = self.get_lineage_diff()
1000
+ anchor_node_ids = lineage_diff.diff.keys()
1001
+ elif node_id is not None and column is None:
1002
+ if change_analysis:
1003
+ # If change analysis is requested, we need to find the nodes that have changes
1004
+ node_diff = self.get_lineage_diff().diff.get(node_id)
1005
+ if node_diff:
1006
+ if node_diff.change.category == "breaking":
1007
+ anchor_node_ids.add(node_id)
1008
+ for column_name in node_diff.change.columns:
1009
+ anchor_node_ids.add(f"{node_id}_{column_name}")
1010
+ else:
1011
+ anchor_node_ids.add(node_id)
1012
+ else:
1013
+ anchor_node_ids.add(node_id)
1014
+ else:
1015
+ anchor_node_ids.add(f"{node_id}_{column}")
1016
+
1017
+ result_node_ids = set(anchor_node_ids)
1018
+ if upstream:
1019
+ result_node_ids = result_node_ids.union(find_upstream(anchor_node_ids, parent_map))
1020
+ if downstream:
1021
+ result_node_ids = result_node_ids.union(find_downstream(anchor_node_ids, child_map))
1022
+
1023
+ # Filter the nodes and columns based on the anchor nodes
1024
+ if not no_filter:
1025
+ nodes = {k: v for k, v in nodes.items() if k in result_node_ids}
1026
+ columns = {k: v for k, v in columns.items() if k in result_node_ids}
1027
+ parent_map, child_map = filter_dependency_maps(parent_map, child_map, result_node_ids)
970
1028
 
971
1029
  cll_tracker.end_column_lineage()
972
1030
  cll_tracker.set_total_nodes(len(nodes))
973
1031
  log_performance("column level lineage", cll_tracker.to_dict())
974
1032
  cll_tracker.reset()
975
1033
 
976
- return cll_data
1034
+ return CllData(
1035
+ nodes=nodes,
1036
+ columns=columns,
1037
+ parent_map=parent_map,
1038
+ child_map=child_map,
1039
+ )
977
1040
 
978
1041
  @lru_cache(maxsize=128)
979
1042
  def get_cll_cached(self, node_id: str, base: Optional[bool] = False) -> Optional[CllData]:
@@ -1202,7 +1265,7 @@ class DbtAdapter(BaseAdapter):
1202
1265
  change_category = diff_info.change.category
1203
1266
 
1204
1267
  if change_category == "breaking":
1205
- cll = self.get_cll_by_node_id(node_id)
1268
+ cll = self.get_cll(node_id, no_filter=True)
1206
1269
  _, downstream = find_column_dependencies(node_id, cll.parent_map, cll.child_map)
1207
1270
  relevant_columns = {node_id}
1208
1271
  relevant_columns.update(downstream)
@@ -1220,7 +1283,7 @@ class DbtAdapter(BaseAdapter):
1220
1283
  return CllData()
1221
1284
  change_columns = diff_info.change.columns
1222
1285
 
1223
- cll = self.get_cll_by_node_id(node_id)
1286
+ cll = self.get_cll(node_id, no_filter=True)
1224
1287
  relevant_columns = set()
1225
1288
  for col, change_status in change_columns.items():
1226
1289
  if change_status == "removed":
@@ -10,6 +10,11 @@ from click import Abort
10
10
  from recce import event
11
11
  from recce.artifact import download_dbt_artifacts, upload_dbt_artifacts
12
12
  from recce.config import RECCE_CONFIG_FILE, RECCE_ERROR_LOG_FILE, RecceConfig
13
+ from recce.connect_to_cloud import (
14
+ generate_key_pair,
15
+ prepare_connection_url,
16
+ run_one_time_http_server,
17
+ )
13
18
  from recce.exceptions import RecceConfigException
14
19
  from recce.git import current_branch, current_default_branch
15
20
  from recce.run import check_github_ci_env, cli_run
@@ -17,9 +22,9 @@ from recce.state import RecceCloudStateManager, RecceShareStateManager, RecceSta
17
22
  from recce.summary import generate_markdown_summary
18
23
  from recce.util.api_token import prepare_api_token, show_invalid_api_token_message
19
24
  from recce.util.logger import CustomFormatter
25
+ from recce.util.onboarding_state import update_onboarding_state
20
26
  from recce.util.recce_cloud import (
21
27
  RecceCloudException,
22
- get_recce_cloud_onboarding_state,
23
28
  )
24
29
 
25
30
  from .core import RecceContext, set_default_context
@@ -397,15 +402,21 @@ def server(host, port, lifetime, state_file=None, **kwargs):
397
402
  is_cloud = kwargs.get("cloud", False)
398
403
  console = Console()
399
404
  cloud_options = None
400
- flag = {"show_onboarding_guide": True, "single_env_onboarding": False, "show_relaunch_hint": False}
405
+ flag = {"single_env_onboarding": False, "show_relaunch_hint": False}
401
406
  if is_cloud:
402
407
  cloud_options = {
403
408
  "host": kwargs.get("state_file_host"),
404
409
  "token": kwargs.get("cloud_token"),
405
410
  "password": kwargs.get("password"),
406
411
  }
407
- cloud_onboarding_state = get_recce_cloud_onboarding_state(kwargs.get("cloud_token"))
408
- flag["show_onboarding_guide"] = False if cloud_onboarding_state == "completed" else True
412
+
413
+ # Check Single Environment Onboarding Mode if the review mode is False
414
+ if not Path(kwargs.get("target_base_path", "target-base")).is_dir() and not is_review:
415
+ # Mark as single env onboarding mode if user provides the target-path only
416
+ flag["single_env_onboarding"] = True
417
+ flag["show_relaunch_hint"] = True
418
+ # Use the target path as the base path
419
+ kwargs["target_base_path"] = kwargs.get("target_path")
409
420
 
410
421
  auth_options = {}
411
422
  try:
@@ -415,13 +426,8 @@ def server(host, port, lifetime, state_file=None, **kwargs):
415
426
  exit(1)
416
427
  auth_options["api_token"] = api_token
417
428
 
418
- # Check Single Environment Onboarding Mode if the review mode is False
419
- if not Path(kwargs.get("target_base_path", "target-base")).is_dir() and not is_review:
420
- # Mark as single env onboarding mode if user provides the target-path only
421
- flag["single_env_onboarding"] = True
422
- flag["show_relaunch_hint"] = True
423
- # Use the target path as the base path
424
- kwargs["target_base_path"] = kwargs.get("target_path")
429
+ # Onboarding State logic update here
430
+ update_onboarding_state(api_token, flag["single_env_onboarding"])
425
431
 
426
432
  state_loader = create_state_loader(is_review, is_cloud, state_file, cloud_options)
427
433
 
@@ -641,6 +647,31 @@ def summary(state_file, **kwargs):
641
647
  print(output)
642
648
 
643
649
 
650
+ @cli.command(cls=TrackCommand)
651
+ def connect_to_cloud():
652
+ """
653
+ Connect OSS to Cloud
654
+ """
655
+ import webbrowser
656
+
657
+ from rich.console import Console
658
+
659
+ console = Console()
660
+
661
+ # Prepare RSA keys for connecting to cloud
662
+ private_key, public_key = generate_key_pair()
663
+
664
+ connect_url, callback_port = prepare_connection_url(public_key)
665
+ console.rule("Connecting to Recce Cloud")
666
+ console.print("Attempting to automatically open the Recce Cloud authorization page in your default browser.")
667
+ console.print("If the browser does not open, please open the following URL:")
668
+ console.print(connect_url)
669
+ webbrowser.open(connect_url)
670
+
671
+ # Launch a callback HTTP server for fetching the api-token
672
+ run_one_time_http_server(private_key, port=callback_port)
673
+
674
+
644
675
  @cli.group("cloud", short_help="Manage Recce Cloud state file.")
645
676
  def cloud(**kwargs):
646
677
  # Manage Recce Cloud.
@@ -0,0 +1,138 @@
1
+ import base64
2
+ import os.path
3
+ import random
4
+ import threading
5
+ from http.server import BaseHTTPRequestHandler, HTTPServer
6
+ from pathlib import Path
7
+ from typing import Tuple
8
+ from urllib.parse import parse_qs, urlparse
9
+
10
+ from cryptography.hazmat.backends import default_backend
11
+ from cryptography.hazmat.primitives import hashes, serialization
12
+ from cryptography.hazmat.primitives.asymmetric import padding, rsa
13
+ from cryptography.hazmat.primitives.asymmetric.rsa import RSAPrivateKey, RSAPublicKey
14
+ from rich.console import Console
15
+
16
+ from recce.event import update_recce_api_token
17
+ from recce.exceptions import RecceConfigException
18
+ from recce.util.onboarding_state import update_onboarding_state
19
+ from recce.util.recce_cloud import RECCE_CLOUD_BASE_URL, RecceCloud
20
+
21
+ console = Console()
22
+
23
+ static_folder_path = Path(__file__).parent / "data"
24
+ _server_lock = threading.Lock()
25
+ _connection_url = None
26
+
27
+
28
+ def decrypt_code(private_key: RSAPrivateKey, code: str) -> str:
29
+ ciphertext = base64.b64decode(code)
30
+ plaintext = private_key.decrypt(
31
+ ciphertext,
32
+ padding.OAEP(
33
+ mgf=padding.MGF1(algorithm=hashes.SHA1()), # Node.js uses SHA1 by default
34
+ algorithm=hashes.SHA1(),
35
+ label=None,
36
+ ),
37
+ )
38
+ return plaintext.decode("utf-8")
39
+
40
+
41
+ def handle_callback_request(query_string: str, private_key: RSAPrivateKey):
42
+ query_params = parse_qs(query_string)
43
+ code = query_params.get("code", [None])[0]
44
+ if not code:
45
+ raise RecceConfigException("Missing `code` in query")
46
+
47
+ api_token = decrypt_code(private_key, code)
48
+ if not RecceCloud(api_token).verify_token():
49
+ raise RecceConfigException("Invalid Recce Cloud API token")
50
+
51
+ update_recce_api_token(api_token)
52
+ update_onboarding_state(api_token, False)
53
+
54
+ return api_token # for testability/debugging
55
+
56
+
57
+ def make_callback_handler(private_key: RSAPrivateKey):
58
+ class OneTimeHTTPRequestHandler(BaseHTTPRequestHandler):
59
+ def do_GET(self):
60
+ try:
61
+ with open(os.path.join(static_folder_path, "auth_callback.html"), "r") as f:
62
+ callback_html_content = f.read()
63
+
64
+ # Parse query parameters
65
+ parsed_url = urlparse(self.path)
66
+
67
+ handle_callback_request(parsed_url.query, private_key)
68
+
69
+ # Construct HTML content
70
+ self.send_response(200)
71
+ self.send_header("Content-Type", "text/html")
72
+ self.send_header("Content-Length", str(len(callback_html_content.encode())))
73
+ self.end_headers()
74
+ self.wfile.write(callback_html_content.encode())
75
+
76
+ except Exception:
77
+ console.print_exception()
78
+ self.send_response(500)
79
+ self.end_headers()
80
+ self.wfile.write(b"<h1>Internal Server Error</h1>")
81
+ finally:
82
+ # Shut down the server after handling the first request
83
+ # Shutdown in a new thread to avoid deadlock
84
+ self.server.server_close()
85
+ threading.Thread(target=self.server.shutdown, daemon=True).start()
86
+
87
+ def log_message(self, format, *args):
88
+ # Suppress default logging
89
+ return
90
+
91
+ return OneTimeHTTPRequestHandler
92
+
93
+
94
+ def is_callback_server_running():
95
+ return _server_lock.locked()
96
+
97
+
98
+ def get_connection_url():
99
+ return _connection_url
100
+
101
+
102
+ def run_one_time_http_server(private_key: RSAPrivateKey, port=8080):
103
+ handler = make_callback_handler(private_key)
104
+ server = HTTPServer(("localhost", port), handler)
105
+ server.serve_forever()
106
+
107
+
108
+ def prepare_connection_url(public_key: RSAPublicKey):
109
+ public_key_pem_bytes = public_key.public_bytes(
110
+ encoding=serialization.Encoding.PEM,
111
+ format=serialization.PublicFormat.SubjectPublicKeyInfo,
112
+ )
113
+ public_key_pem_str = base64.b64encode(public_key_pem_bytes).decode("utf-8")
114
+ callback_port = random.randint(10000, 15000)
115
+ connect_url = f"{RECCE_CLOUD_BASE_URL}/connect?_key={public_key_pem_str}&_port={callback_port}"
116
+ return connect_url, callback_port
117
+
118
+
119
+ def generate_key_pair() -> Tuple[RSAPrivateKey, RSAPublicKey]:
120
+ key_size = 2048 # Should be at least 2048
121
+
122
+ private_key = rsa.generate_private_key(
123
+ public_exponent=65537, key_size=key_size, backend=default_backend() # Do not change
124
+ )
125
+
126
+ public_key = private_key.public_key()
127
+ return private_key, public_key
128
+
129
+
130
+ def connect_to_cloud_background_task(private_key: RSAPrivateKey, callback_port, connection_url):
131
+ if is_callback_server_running():
132
+ return
133
+
134
+ with _server_lock:
135
+ global _connection_url
136
+ _connection_url = connection_url
137
+ run_one_time_http_server(private_key, callback_port)
138
+ _connection_url = None
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/1b121dc4d36aeb4d.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/951e2e0eea2d4a5b.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-7b49d5ba7e3a434d.js"/><script src="/_next/static/chunks/86730205-cfb14e3f051bab35.js" async=""></script><script src="/_next/static/chunks/217-879a84d70f7a907c.js" async=""></script><script src="/_next/static/chunks/main-app-39061b0166c47f55.js" async=""></script><script src="/_next/static/chunks/9746af58-a42b7d169cacadf0.js" async=""></script><script src="/_next/static/chunks/47d8844f-929aed9b1c73a905.js" async=""></script><script src="/_next/static/chunks/a30376cd-de84559016d7e133.js" async=""></script><script src="/_next/static/chunks/6dc81886-adbfa45836061d79.js" async=""></script><script src="/_next/static/chunks/3a92ee20-1081c360214f9602.js" async=""></script><script src="/_next/static/chunks/3998a672-03adacad07b346ac.js" async=""></script><script src="/_next/static/chunks/1bff33f1-1ef85cf5e658a751.js" async=""></script><script src="/_next/static/chunks/bbda5537-9ec25eb1dd62348a.js" async=""></script><script src="/_next/static/chunks/42-cd3c06533f5fd47c.js" async=""></script><script src="/_next/static/chunks/608-3b079b544e5d5f5e.js" async=""></script><script src="/_next/static/chunks/92-7ab55ae02606193c.js" async=""></script><script src="/_next/static/chunks/app/layout-177a410a97e0d018.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>recce</title><meta name="description" content="Recce: Data validation toolkit for comprehensive PR review"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><style data-emotion="css-global dh58eu">:host,:root,[data-theme]{--chakra-ring-inset:var(--chakra-empty,/*!*/ /*!*/);--chakra-ring-offset-width:0px;--chakra-ring-offset-color:#fff;--chakra-ring-color:rgba(66, 153, 225, 0.6);--chakra-ring-offset-shadow:0 0 #0000;--chakra-ring-shadow:0 0 #0000;--chakra-space-x-reverse:0;--chakra-space-y-reverse:0;--chakra-colors-transparent:transparent;--chakra-colors-current:currentColor;--chakra-colors-black:#000000;--chakra-colors-white:#FFFFFF;--chakra-colors-whiteAlpha-50:rgba(255, 255, 255, 0.04);--chakra-colors-whiteAlpha-100:rgba(255, 255, 255, 0.06);--chakra-colors-whiteAlpha-200:rgba(255, 255, 255, 0.08);--chakra-colors-whiteAlpha-300:rgba(255, 255, 255, 0.16);--chakra-colors-whiteAlpha-400:rgba(255, 255, 255, 0.24);--chakra-colors-whiteAlpha-500:rgba(255, 255, 255, 0.36);--chakra-colors-whiteAlpha-600:rgba(255, 255, 255, 0.48);--chakra-colors-whiteAlpha-700:rgba(255, 255, 255, 0.64);--chakra-colors-whiteAlpha-800:rgba(255, 255, 255, 0.80);--chakra-colors-whiteAlpha-900:rgba(255, 255, 255, 0.92);--chakra-colors-blackAlpha-50:rgba(0, 0, 0, 0.04);--chakra-colors-blackAlpha-100:rgba(0, 0, 0, 0.06);--chakra-colors-blackAlpha-200:rgba(0, 0, 0, 0.08);--chakra-colors-blackAlpha-300:rgba(0, 0, 0, 0.16);--chakra-colors-blackAlpha-400:rgba(0, 0, 0, 0.24);--chakra-colors-blackAlpha-500:rgba(0, 0, 0, 0.36);--chakra-colors-blackAlpha-600:rgba(0, 0, 0, 0.48);--chakra-colors-blackAlpha-700:rgba(0, 0, 0, 0.64);--chakra-colors-blackAlpha-800:rgba(0, 0, 0, 0.80);--chakra-colors-blackAlpha-900:rgba(0, 0, 0, 0.92);--chakra-colors-gray-50:#F7FAFC;--chakra-colors-gray-100:#EDF2F7;--chakra-colors-gray-200:#E2E8F0;--chakra-colors-gray-300:#CBD5E0;--chakra-colors-gray-400:#A0AEC0;--chakra-colors-gray-500:#718096;--chakra-colors-gray-600:#4A5568;--chakra-colors-gray-700:#2D3748;--chakra-colors-gray-800:#1A202C;--chakra-colors-gray-900:#171923;--chakra-colors-red-50:#FFF5F5;--chakra-colors-red-100:#FED7D7;--chakra-colors-red-200:#FEB2B2;--chakra-colors-red-300:#FC8181;--chakra-colors-red-400:#F56565;--chakra-colors-red-500:#E53E3E;--chakra-colors-red-600:#C53030;--chakra-colors-red-700:#9B2C2C;--chakra-colors-red-800:#822727;--chakra-colors-red-900:#63171B;--chakra-colors-orange-50:#FFFAF0;--chakra-colors-orange-100:#FEEBC8;--chakra-colors-orange-200:#FBD38D;--chakra-colors-orange-300:#F6AD55;--chakra-colors-orange-400:#ED8936;--chakra-colors-orange-500:#DD6B20;--chakra-colors-orange-600:#C05621;--chakra-colors-orange-700:#9C4221;--chakra-colors-orange-800:#7B341E;--chakra-colors-orange-900:#652B19;--chakra-colors-yellow-50:#FFFFF0;--chakra-colors-yellow-100:#FEFCBF;--chakra-colors-yellow-200:#FAF089;--chakra-colors-yellow-300:#F6E05E;--chakra-colors-yellow-400:#ECC94B;--chakra-colors-yellow-500:#D69E2E;--chakra-colors-yellow-600:#B7791F;--chakra-colors-yellow-700:#975A16;--chakra-colors-yellow-800:#744210;--chakra-colors-yellow-900:#5F370E;--chakra-colors-green-50:#F0FFF4;--chakra-colors-green-100:#C6F6D5;--chakra-colors-green-200:#9AE6B4;--chakra-colors-green-300:#68D391;--chakra-colors-green-400:#48BB78;--chakra-colors-green-500:#38A169;--chakra-colors-green-600:#2F855A;--chakra-colors-green-700:#276749;--chakra-colors-green-800:#22543D;--chakra-colors-green-900:#1C4532;--chakra-colors-teal-50:#E6FFFA;--chakra-colors-teal-100:#B2F5EA;--chakra-colors-teal-200:#81E6D9;--chakra-colors-teal-300:#4FD1C5;--chakra-colors-teal-400:#38B2AC;--chakra-colors-teal-500:#319795;--chakra-colors-teal-600:#2C7A7B;--chakra-colors-teal-700:#285E61;--chakra-colors-teal-800:#234E52;--chakra-colors-teal-900:#1D4044;--chakra-colors-blue-50:#ebf8ff;--chakra-colors-blue-100:#bee3f8;--chakra-colors-blue-200:#90cdf4;--chakra-colors-blue-300:#63b3ed;--chakra-colors-blue-400:#4299e1;--chakra-colors-blue-500:#3182ce;--chakra-colors-blue-600:#2b6cb0;--chakra-colors-blue-700:#2c5282;--chakra-colors-blue-800:#2a4365;--chakra-colors-blue-900:#1A365D;--chakra-colors-cyan-50:#EDFDFD;--chakra-colors-cyan-100:#C4F1F9;--chakra-colors-cyan-200:#9DECF9;--chakra-colors-cyan-300:#76E4F7;--chakra-colors-cyan-400:#0BC5EA;--chakra-colors-cyan-500:#00B5D8;--chakra-colors-cyan-600:#00A3C4;--chakra-colors-cyan-700:#0987A0;--chakra-colors-cyan-800:#086F83;--chakra-colors-cyan-900:#065666;--chakra-colors-purple-50:#FAF5FF;--chakra-colors-purple-100:#E9D8FD;--chakra-colors-purple-200:#D6BCFA;--chakra-colors-purple-300:#B794F4;--chakra-colors-purple-400:#9F7AEA;--chakra-colors-purple-500:#805AD5;--chakra-colors-purple-600:#6B46C1;--chakra-colors-purple-700:#553C9A;--chakra-colors-purple-800:#44337A;--chakra-colors-purple-900:#322659;--chakra-colors-pink-50:#FFF5F7;--chakra-colors-pink-100:#FED7E2;--chakra-colors-pink-200:#FBB6CE;--chakra-colors-pink-300:#F687B3;--chakra-colors-pink-400:#ED64A6;--chakra-colors-pink-500:#D53F8C;--chakra-colors-pink-600:#B83280;--chakra-colors-pink-700:#97266D;--chakra-colors-pink-800:#702459;--chakra-colors-pink-900:#521B41;--chakra-colors-brand-100:#fd683e;--chakra-colors-brand-200:#fd683e;--chakra-colors-brand-300:#fd683e;--chakra-colors-brand-400:#fd683e;--chakra-colors-brand-500:#fd683e;--chakra-colors-brand-600:#fd683e;--chakra-colors-brand-700:#fd683e;--chakra-colors-brand-800:#fd683e;--chakra-colors-brand-900:#fd683e;--chakra-borders-none:0;--chakra-borders-1px:1px solid;--chakra-borders-2px:2px solid;--chakra-borders-4px:4px solid;--chakra-borders-8px:8px solid;--chakra-fonts-heading:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--chakra-fonts-body:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--chakra-fonts-mono:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--chakra-fontSizes-3xs:0.45rem;--chakra-fontSizes-2xs:0.625rem;--chakra-fontSizes-xs:0.75rem;--chakra-fontSizes-sm:0.875rem;--chakra-fontSizes-md:1rem;--chakra-fontSizes-lg:1.125rem;--chakra-fontSizes-xl:1.25rem;--chakra-fontSizes-2xl:1.5rem;--chakra-fontSizes-3xl:1.875rem;--chakra-fontSizes-4xl:2.25rem;--chakra-fontSizes-5xl:3rem;--chakra-fontSizes-6xl:3.75rem;--chakra-fontSizes-7xl:4.5rem;--chakra-fontSizes-8xl:6rem;--chakra-fontSizes-9xl:8rem;--chakra-fontWeights-hairline:100;--chakra-fontWeights-thin:200;--chakra-fontWeights-light:300;--chakra-fontWeights-normal:400;--chakra-fontWeights-medium:500;--chakra-fontWeights-semibold:600;--chakra-fontWeights-bold:700;--chakra-fontWeights-extrabold:800;--chakra-fontWeights-black:900;--chakra-letterSpacings-tighter:-0.05em;--chakra-letterSpacings-tight:-0.025em;--chakra-letterSpacings-normal:0;--chakra-letterSpacings-wide:0.025em;--chakra-letterSpacings-wider:0.05em;--chakra-letterSpacings-widest:0.1em;--chakra-lineHeights-3:.75rem;--chakra-lineHeights-4:1rem;--chakra-lineHeights-5:1.25rem;--chakra-lineHeights-6:1.5rem;--chakra-lineHeights-7:1.75rem;--chakra-lineHeights-8:2rem;--chakra-lineHeights-9:2.25rem;--chakra-lineHeights-10:2.5rem;--chakra-lineHeights-normal:normal;--chakra-lineHeights-none:1;--chakra-lineHeights-shorter:1.25;--chakra-lineHeights-short:1.375;--chakra-lineHeights-base:1.5;--chakra-lineHeights-tall:1.625;--chakra-lineHeights-taller:2;--chakra-radii-none:0;--chakra-radii-sm:0.125rem;--chakra-radii-base:0.25rem;--chakra-radii-md:0.375rem;--chakra-radii-lg:0.5rem;--chakra-radii-xl:0.75rem;--chakra-radii-2xl:1rem;--chakra-radii-3xl:1.5rem;--chakra-radii-full:9999px;--chakra-space-1:0.25rem;--chakra-space-2:0.5rem;--chakra-space-3:0.75rem;--chakra-space-4:1rem;--chakra-space-5:1.25rem;--chakra-space-6:1.5rem;--chakra-space-7:1.75rem;--chakra-space-8:2rem;--chakra-space-9:2.25rem;--chakra-space-10:2.5rem;--chakra-space-12:3rem;--chakra-space-14:3.5rem;--chakra-space-16:4rem;--chakra-space-20:5rem;--chakra-space-24:6rem;--chakra-space-28:7rem;--chakra-space-32:8rem;--chakra-space-36:9rem;--chakra-space-40:10rem;--chakra-space-44:11rem;--chakra-space-48:12rem;--chakra-space-52:13rem;--chakra-space-56:14rem;--chakra-space-60:15rem;--chakra-space-64:16rem;--chakra-space-72:18rem;--chakra-space-80:20rem;--chakra-space-96:24rem;--chakra-space-px:1px;--chakra-space-0-5:0.125rem;--chakra-space-1-5:0.375rem;--chakra-space-2-5:0.625rem;--chakra-space-3-5:0.875rem;--chakra-shadows-xs:0 0 0 1px rgba(0, 0, 0, 0.05);--chakra-shadows-sm:0 1px 2px 0 rgba(0, 0, 0, 0.05);--chakra-shadows-base:0 1px 3px 0 rgba(0, 0, 0, 0.1),0 1px 2px 0 rgba(0, 0, 0, 0.06);--chakra-shadows-md:0 4px 6px -1px rgba(0, 0, 0, 0.1),0 2px 4px -1px rgba(0, 0, 0, 0.06);--chakra-shadows-lg:0 10px 15px -3px rgba(0, 0, 0, 0.1),0 4px 6px -2px rgba(0, 0, 0, 0.05);--chakra-shadows-xl:0 20px 25px -5px rgba(0, 0, 0, 0.1),0 10px 10px -5px rgba(0, 0, 0, 0.04);--chakra-shadows-2xl:0 25px 50px -12px rgba(0, 0, 0, 0.25);--chakra-shadows-outline:0 0 0 3px rgba(66, 153, 225, 0.6);--chakra-shadows-inner:inset 0 2px 4px 0 rgba(0,0,0,0.06);--chakra-shadows-none:none;--chakra-shadows-dark-lg:rgba(0, 0, 0, 0.1) 0px 0px 0px 1px,rgba(0, 0, 0, 0.2) 0px 5px 10px,rgba(0, 0, 0, 0.4) 0px 15px 40px;--chakra-sizes-1:0.25rem;--chakra-sizes-2:0.5rem;--chakra-sizes-3:0.75rem;--chakra-sizes-4:1rem;--chakra-sizes-5:1.25rem;--chakra-sizes-6:1.5rem;--chakra-sizes-7:1.75rem;--chakra-sizes-8:2rem;--chakra-sizes-9:2.25rem;--chakra-sizes-10:2.5rem;--chakra-sizes-12:3rem;--chakra-sizes-14:3.5rem;--chakra-sizes-16:4rem;--chakra-sizes-20:5rem;--chakra-sizes-24:6rem;--chakra-sizes-28:7rem;--chakra-sizes-32:8rem;--chakra-sizes-36:9rem;--chakra-sizes-40:10rem;--chakra-sizes-44:11rem;--chakra-sizes-48:12rem;--chakra-sizes-52:13rem;--chakra-sizes-56:14rem;--chakra-sizes-60:15rem;--chakra-sizes-64:16rem;--chakra-sizes-72:18rem;--chakra-sizes-80:20rem;--chakra-sizes-96:24rem;--chakra-sizes-px:1px;--chakra-sizes-0-5:0.125rem;--chakra-sizes-1-5:0.375rem;--chakra-sizes-2-5:0.625rem;--chakra-sizes-3-5:0.875rem;--chakra-sizes-max:max-content;--chakra-sizes-min:min-content;--chakra-sizes-full:100%;--chakra-sizes-3xs:14rem;--chakra-sizes-2xs:16rem;--chakra-sizes-xs:20rem;--chakra-sizes-sm:24rem;--chakra-sizes-md:28rem;--chakra-sizes-lg:32rem;--chakra-sizes-xl:36rem;--chakra-sizes-2xl:42rem;--chakra-sizes-3xl:48rem;--chakra-sizes-4xl:56rem;--chakra-sizes-5xl:64rem;--chakra-sizes-6xl:72rem;--chakra-sizes-7xl:80rem;--chakra-sizes-8xl:90rem;--chakra-sizes-prose:60ch;--chakra-sizes-container-sm:640px;--chakra-sizes-container-md:768px;--chakra-sizes-container-lg:1024px;--chakra-sizes-container-xl:1280px;--chakra-zIndices-hide:-1;--chakra-zIndices-auto:auto;--chakra-zIndices-base:0;--chakra-zIndices-docked:10;--chakra-zIndices-dropdown:1000;--chakra-zIndices-sticky:1100;--chakra-zIndices-banner:1200;--chakra-zIndices-overlay:1300;--chakra-zIndices-modal:1400;--chakra-zIndices-popover:1500;--chakra-zIndices-skipLink:1600;--chakra-zIndices-toast:1700;--chakra-zIndices-tooltip:1800;--chakra-transition-property-common:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;--chakra-transition-property-colors:background-color,border-color,color,fill,stroke;--chakra-transition-property-dimensions:width,height;--chakra-transition-property-position:left,right,top,bottom;--chakra-transition-property-background:background-color,background-image,background-position;--chakra-transition-easing-ease-in:cubic-bezier(0.4, 0, 1, 1);--chakra-transition-easing-ease-out:cubic-bezier(0, 0, 0.2, 1);--chakra-transition-easing-ease-in-out:cubic-bezier(0.4, 0, 0.2, 1);--chakra-transition-duration-ultra-fast:50ms;--chakra-transition-duration-faster:100ms;--chakra-transition-duration-fast:150ms;--chakra-transition-duration-normal:200ms;--chakra-transition-duration-slow:300ms;--chakra-transition-duration-slower:400ms;--chakra-transition-duration-ultra-slow:500ms;--chakra-blur-none:0;--chakra-blur-sm:4px;--chakra-blur-base:8px;--chakra-blur-md:12px;--chakra-blur-lg:16px;--chakra-blur-xl:24px;--chakra-blur-2xl:40px;--chakra-blur-3xl:64px;--chakra-breakpoints-base:0em;--chakra-breakpoints-sm:30em;--chakra-breakpoints-md:48em;--chakra-breakpoints-lg:62em;--chakra-breakpoints-xl:80em;--chakra-breakpoints-2xl:96em;}.chakra-ui-light :host:not([data-theme]),.chakra-ui-light :root:not([data-theme]),.chakra-ui-light [data-theme]:not([data-theme]),[data-theme=light] :host:not([data-theme]),[data-theme=light] :root:not([data-theme]),[data-theme=light] [data-theme]:not([data-theme]),:host[data-theme=light],:root[data-theme=light],[data-theme][data-theme=light]{--chakra-colors-chakra-body-text:var(--chakra-colors-gray-800);--chakra-colors-chakra-body-bg:var(--chakra-colors-white);--chakra-colors-chakra-border-color:var(--chakra-colors-gray-200);--chakra-colors-chakra-inverse-text:var(--chakra-colors-white);--chakra-colors-chakra-subtle-bg:var(--chakra-colors-gray-100);--chakra-colors-chakra-subtle-text:var(--chakra-colors-gray-600);--chakra-colors-chakra-placeholder-color:var(--chakra-colors-gray-500);}.chakra-ui-dark :host:not([data-theme]),.chakra-ui-dark :root:not([data-theme]),.chakra-ui-dark [data-theme]:not([data-theme]),[data-theme=dark] :host:not([data-theme]),[data-theme=dark] :root:not([data-theme]),[data-theme=dark] [data-theme]:not([data-theme]),:host[data-theme=dark],:root[data-theme=dark],[data-theme][data-theme=dark]{--chakra-colors-chakra-body-text:var(--chakra-colors-whiteAlpha-900);--chakra-colors-chakra-body-bg:var(--chakra-colors-gray-800);--chakra-colors-chakra-border-color:var(--chakra-colors-whiteAlpha-300);--chakra-colors-chakra-inverse-text:var(--chakra-colors-gray-800);--chakra-colors-chakra-subtle-bg:var(--chakra-colors-gray-700);--chakra-colors-chakra-subtle-text:var(--chakra-colors-gray-400);--chakra-colors-chakra-placeholder-color:var(--chakra-colors-whiteAlpha-400);}</style><style data-emotion="css-global fubdgu">html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:system-ui,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;touch-action:manipulation;}body{position:relative;min-height:100%;margin:0;font-feature-settings:"kern";}:where(*, *::before, *::after){border-width:0;border-style:solid;box-sizing:border-box;word-wrap:break-word;}main{display:block;}hr{border-top-width:1px;box-sizing:content-box;height:0;overflow:visible;}:where(pre, code, kbd,samp){font-family:SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:1em;}a{background-color:transparent;color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit;}abbr[title]{border-bottom:none;-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration:underline dotted;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}:where(b, strong){font-weight:bold;}small{font-size:80%;}:where(sub,sup){font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sub{bottom:-0.25em;}sup{top:-0.5em;}img{border-style:none;}:where(button, input, optgroup, select, textarea){font-family:inherit;font-size:100%;line-height:1.15;margin:0;}:where(button, input){overflow:visible;}:where(button, select){text-transform:none;}:where(
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/1b121dc4d36aeb4d.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/951e2e0eea2d4a5b.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-7b49d5ba7e3a434d.js"/><script src="/_next/static/chunks/86730205-cfb14e3f051bab35.js" async=""></script><script src="/_next/static/chunks/217-879a84d70f7a907c.js" async=""></script><script src="/_next/static/chunks/main-app-39061b0166c47f55.js" async=""></script><script src="/_next/static/chunks/9746af58-a42b7d169cacadf0.js" async=""></script><script src="/_next/static/chunks/47d8844f-929aed9b1c73a905.js" async=""></script><script src="/_next/static/chunks/a30376cd-de84559016d7e133.js" async=""></script><script src="/_next/static/chunks/6dc81886-adbfa45836061d79.js" async=""></script><script src="/_next/static/chunks/3a92ee20-1081c360214f9602.js" async=""></script><script src="/_next/static/chunks/3998a672-03adacad07b346ac.js" async=""></script><script src="/_next/static/chunks/1bff33f1-1ef85cf5e658a751.js" async=""></script><script src="/_next/static/chunks/bbda5537-9ec25eb1dd62348a.js" async=""></script><script src="/_next/static/chunks/42-cd3c06533f5fd47c.js" async=""></script><script src="/_next/static/chunks/608-3b079b544e5d5f5e.js" async=""></script><script src="/_next/static/chunks/92-607cd1af83c41f43.js" async=""></script><script src="/_next/static/chunks/app/layout-177a410a97e0d018.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>recce</title><meta name="description" content="Recce: Data validation toolkit for comprehensive PR review"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><style data-emotion="css-global dh58eu">:host,:root,[data-theme]{--chakra-ring-inset:var(--chakra-empty,/*!*/ /*!*/);--chakra-ring-offset-width:0px;--chakra-ring-offset-color:#fff;--chakra-ring-color:rgba(66, 153, 225, 0.6);--chakra-ring-offset-shadow:0 0 #0000;--chakra-ring-shadow:0 0 #0000;--chakra-space-x-reverse:0;--chakra-space-y-reverse:0;--chakra-colors-transparent:transparent;--chakra-colors-current:currentColor;--chakra-colors-black:#000000;--chakra-colors-white:#FFFFFF;--chakra-colors-whiteAlpha-50:rgba(255, 255, 255, 0.04);--chakra-colors-whiteAlpha-100:rgba(255, 255, 255, 0.06);--chakra-colors-whiteAlpha-200:rgba(255, 255, 255, 0.08);--chakra-colors-whiteAlpha-300:rgba(255, 255, 255, 0.16);--chakra-colors-whiteAlpha-400:rgba(255, 255, 255, 0.24);--chakra-colors-whiteAlpha-500:rgba(255, 255, 255, 0.36);--chakra-colors-whiteAlpha-600:rgba(255, 255, 255, 0.48);--chakra-colors-whiteAlpha-700:rgba(255, 255, 255, 0.64);--chakra-colors-whiteAlpha-800:rgba(255, 255, 255, 0.80);--chakra-colors-whiteAlpha-900:rgba(255, 255, 255, 0.92);--chakra-colors-blackAlpha-50:rgba(0, 0, 0, 0.04);--chakra-colors-blackAlpha-100:rgba(0, 0, 0, 0.06);--chakra-colors-blackAlpha-200:rgba(0, 0, 0, 0.08);--chakra-colors-blackAlpha-300:rgba(0, 0, 0, 0.16);--chakra-colors-blackAlpha-400:rgba(0, 0, 0, 0.24);--chakra-colors-blackAlpha-500:rgba(0, 0, 0, 0.36);--chakra-colors-blackAlpha-600:rgba(0, 0, 0, 0.48);--chakra-colors-blackAlpha-700:rgba(0, 0, 0, 0.64);--chakra-colors-blackAlpha-800:rgba(0, 0, 0, 0.80);--chakra-colors-blackAlpha-900:rgba(0, 0, 0, 0.92);--chakra-colors-gray-50:#F7FAFC;--chakra-colors-gray-100:#EDF2F7;--chakra-colors-gray-200:#E2E8F0;--chakra-colors-gray-300:#CBD5E0;--chakra-colors-gray-400:#A0AEC0;--chakra-colors-gray-500:#718096;--chakra-colors-gray-600:#4A5568;--chakra-colors-gray-700:#2D3748;--chakra-colors-gray-800:#1A202C;--chakra-colors-gray-900:#171923;--chakra-colors-red-50:#FFF5F5;--chakra-colors-red-100:#FED7D7;--chakra-colors-red-200:#FEB2B2;--chakra-colors-red-300:#FC8181;--chakra-colors-red-400:#F56565;--chakra-colors-red-500:#E53E3E;--chakra-colors-red-600:#C53030;--chakra-colors-red-700:#9B2C2C;--chakra-colors-red-800:#822727;--chakra-colors-red-900:#63171B;--chakra-colors-orange-50:#FFFAF0;--chakra-colors-orange-100:#FEEBC8;--chakra-colors-orange-200:#FBD38D;--chakra-colors-orange-300:#F6AD55;--chakra-colors-orange-400:#ED8936;--chakra-colors-orange-500:#DD6B20;--chakra-colors-orange-600:#C05621;--chakra-colors-orange-700:#9C4221;--chakra-colors-orange-800:#7B341E;--chakra-colors-orange-900:#652B19;--chakra-colors-yellow-50:#FFFFF0;--chakra-colors-yellow-100:#FEFCBF;--chakra-colors-yellow-200:#FAF089;--chakra-colors-yellow-300:#F6E05E;--chakra-colors-yellow-400:#ECC94B;--chakra-colors-yellow-500:#D69E2E;--chakra-colors-yellow-600:#B7791F;--chakra-colors-yellow-700:#975A16;--chakra-colors-yellow-800:#744210;--chakra-colors-yellow-900:#5F370E;--chakra-colors-green-50:#F0FFF4;--chakra-colors-green-100:#C6F6D5;--chakra-colors-green-200:#9AE6B4;--chakra-colors-green-300:#68D391;--chakra-colors-green-400:#48BB78;--chakra-colors-green-500:#38A169;--chakra-colors-green-600:#2F855A;--chakra-colors-green-700:#276749;--chakra-colors-green-800:#22543D;--chakra-colors-green-900:#1C4532;--chakra-colors-teal-50:#E6FFFA;--chakra-colors-teal-100:#B2F5EA;--chakra-colors-teal-200:#81E6D9;--chakra-colors-teal-300:#4FD1C5;--chakra-colors-teal-400:#38B2AC;--chakra-colors-teal-500:#319795;--chakra-colors-teal-600:#2C7A7B;--chakra-colors-teal-700:#285E61;--chakra-colors-teal-800:#234E52;--chakra-colors-teal-900:#1D4044;--chakra-colors-blue-50:#ebf8ff;--chakra-colors-blue-100:#bee3f8;--chakra-colors-blue-200:#90cdf4;--chakra-colors-blue-300:#63b3ed;--chakra-colors-blue-400:#4299e1;--chakra-colors-blue-500:#3182ce;--chakra-colors-blue-600:#2b6cb0;--chakra-colors-blue-700:#2c5282;--chakra-colors-blue-800:#2a4365;--chakra-colors-blue-900:#1A365D;--chakra-colors-cyan-50:#EDFDFD;--chakra-colors-cyan-100:#C4F1F9;--chakra-colors-cyan-200:#9DECF9;--chakra-colors-cyan-300:#76E4F7;--chakra-colors-cyan-400:#0BC5EA;--chakra-colors-cyan-500:#00B5D8;--chakra-colors-cyan-600:#00A3C4;--chakra-colors-cyan-700:#0987A0;--chakra-colors-cyan-800:#086F83;--chakra-colors-cyan-900:#065666;--chakra-colors-purple-50:#FAF5FF;--chakra-colors-purple-100:#E9D8FD;--chakra-colors-purple-200:#D6BCFA;--chakra-colors-purple-300:#B794F4;--chakra-colors-purple-400:#9F7AEA;--chakra-colors-purple-500:#805AD5;--chakra-colors-purple-600:#6B46C1;--chakra-colors-purple-700:#553C9A;--chakra-colors-purple-800:#44337A;--chakra-colors-purple-900:#322659;--chakra-colors-pink-50:#FFF5F7;--chakra-colors-pink-100:#FED7E2;--chakra-colors-pink-200:#FBB6CE;--chakra-colors-pink-300:#F687B3;--chakra-colors-pink-400:#ED64A6;--chakra-colors-pink-500:#D53F8C;--chakra-colors-pink-600:#B83280;--chakra-colors-pink-700:#97266D;--chakra-colors-pink-800:#702459;--chakra-colors-pink-900:#521B41;--chakra-colors-brand-100:#fd683e;--chakra-colors-brand-200:#fd683e;--chakra-colors-brand-300:#fd683e;--chakra-colors-brand-400:#fd683e;--chakra-colors-brand-500:#fd683e;--chakra-colors-brand-600:#fd683e;--chakra-colors-brand-700:#fd683e;--chakra-colors-brand-800:#fd683e;--chakra-colors-brand-900:#fd683e;--chakra-borders-none:0;--chakra-borders-1px:1px solid;--chakra-borders-2px:2px solid;--chakra-borders-4px:4px solid;--chakra-borders-8px:8px solid;--chakra-fonts-heading:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--chakra-fonts-body:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--chakra-fonts-mono:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--chakra-fontSizes-3xs:0.45rem;--chakra-fontSizes-2xs:0.625rem;--chakra-fontSizes-xs:0.75rem;--chakra-fontSizes-sm:0.875rem;--chakra-fontSizes-md:1rem;--chakra-fontSizes-lg:1.125rem;--chakra-fontSizes-xl:1.25rem;--chakra-fontSizes-2xl:1.5rem;--chakra-fontSizes-3xl:1.875rem;--chakra-fontSizes-4xl:2.25rem;--chakra-fontSizes-5xl:3rem;--chakra-fontSizes-6xl:3.75rem;--chakra-fontSizes-7xl:4.5rem;--chakra-fontSizes-8xl:6rem;--chakra-fontSizes-9xl:8rem;--chakra-fontWeights-hairline:100;--chakra-fontWeights-thin:200;--chakra-fontWeights-light:300;--chakra-fontWeights-normal:400;--chakra-fontWeights-medium:500;--chakra-fontWeights-semibold:600;--chakra-fontWeights-bold:700;--chakra-fontWeights-extrabold:800;--chakra-fontWeights-black:900;--chakra-letterSpacings-tighter:-0.05em;--chakra-letterSpacings-tight:-0.025em;--chakra-letterSpacings-normal:0;--chakra-letterSpacings-wide:0.025em;--chakra-letterSpacings-wider:0.05em;--chakra-letterSpacings-widest:0.1em;--chakra-lineHeights-3:.75rem;--chakra-lineHeights-4:1rem;--chakra-lineHeights-5:1.25rem;--chakra-lineHeights-6:1.5rem;--chakra-lineHeights-7:1.75rem;--chakra-lineHeights-8:2rem;--chakra-lineHeights-9:2.25rem;--chakra-lineHeights-10:2.5rem;--chakra-lineHeights-normal:normal;--chakra-lineHeights-none:1;--chakra-lineHeights-shorter:1.25;--chakra-lineHeights-short:1.375;--chakra-lineHeights-base:1.5;--chakra-lineHeights-tall:1.625;--chakra-lineHeights-taller:2;--chakra-radii-none:0;--chakra-radii-sm:0.125rem;--chakra-radii-base:0.25rem;--chakra-radii-md:0.375rem;--chakra-radii-lg:0.5rem;--chakra-radii-xl:0.75rem;--chakra-radii-2xl:1rem;--chakra-radii-3xl:1.5rem;--chakra-radii-full:9999px;--chakra-space-1:0.25rem;--chakra-space-2:0.5rem;--chakra-space-3:0.75rem;--chakra-space-4:1rem;--chakra-space-5:1.25rem;--chakra-space-6:1.5rem;--chakra-space-7:1.75rem;--chakra-space-8:2rem;--chakra-space-9:2.25rem;--chakra-space-10:2.5rem;--chakra-space-12:3rem;--chakra-space-14:3.5rem;--chakra-space-16:4rem;--chakra-space-20:5rem;--chakra-space-24:6rem;--chakra-space-28:7rem;--chakra-space-32:8rem;--chakra-space-36:9rem;--chakra-space-40:10rem;--chakra-space-44:11rem;--chakra-space-48:12rem;--chakra-space-52:13rem;--chakra-space-56:14rem;--chakra-space-60:15rem;--chakra-space-64:16rem;--chakra-space-72:18rem;--chakra-space-80:20rem;--chakra-space-96:24rem;--chakra-space-px:1px;--chakra-space-0-5:0.125rem;--chakra-space-1-5:0.375rem;--chakra-space-2-5:0.625rem;--chakra-space-3-5:0.875rem;--chakra-shadows-xs:0 0 0 1px rgba(0, 0, 0, 0.05);--chakra-shadows-sm:0 1px 2px 0 rgba(0, 0, 0, 0.05);--chakra-shadows-base:0 1px 3px 0 rgba(0, 0, 0, 0.1),0 1px 2px 0 rgba(0, 0, 0, 0.06);--chakra-shadows-md:0 4px 6px -1px rgba(0, 0, 0, 0.1),0 2px 4px -1px rgba(0, 0, 0, 0.06);--chakra-shadows-lg:0 10px 15px -3px rgba(0, 0, 0, 0.1),0 4px 6px -2px rgba(0, 0, 0, 0.05);--chakra-shadows-xl:0 20px 25px -5px rgba(0, 0, 0, 0.1),0 10px 10px -5px rgba(0, 0, 0, 0.04);--chakra-shadows-2xl:0 25px 50px -12px rgba(0, 0, 0, 0.25);--chakra-shadows-outline:0 0 0 3px rgba(66, 153, 225, 0.6);--chakra-shadows-inner:inset 0 2px 4px 0 rgba(0,0,0,0.06);--chakra-shadows-none:none;--chakra-shadows-dark-lg:rgba(0, 0, 0, 0.1) 0px 0px 0px 1px,rgba(0, 0, 0, 0.2) 0px 5px 10px,rgba(0, 0, 0, 0.4) 0px 15px 40px;--chakra-sizes-1:0.25rem;--chakra-sizes-2:0.5rem;--chakra-sizes-3:0.75rem;--chakra-sizes-4:1rem;--chakra-sizes-5:1.25rem;--chakra-sizes-6:1.5rem;--chakra-sizes-7:1.75rem;--chakra-sizes-8:2rem;--chakra-sizes-9:2.25rem;--chakra-sizes-10:2.5rem;--chakra-sizes-12:3rem;--chakra-sizes-14:3.5rem;--chakra-sizes-16:4rem;--chakra-sizes-20:5rem;--chakra-sizes-24:6rem;--chakra-sizes-28:7rem;--chakra-sizes-32:8rem;--chakra-sizes-36:9rem;--chakra-sizes-40:10rem;--chakra-sizes-44:11rem;--chakra-sizes-48:12rem;--chakra-sizes-52:13rem;--chakra-sizes-56:14rem;--chakra-sizes-60:15rem;--chakra-sizes-64:16rem;--chakra-sizes-72:18rem;--chakra-sizes-80:20rem;--chakra-sizes-96:24rem;--chakra-sizes-px:1px;--chakra-sizes-0-5:0.125rem;--chakra-sizes-1-5:0.375rem;--chakra-sizes-2-5:0.625rem;--chakra-sizes-3-5:0.875rem;--chakra-sizes-max:max-content;--chakra-sizes-min:min-content;--chakra-sizes-full:100%;--chakra-sizes-3xs:14rem;--chakra-sizes-2xs:16rem;--chakra-sizes-xs:20rem;--chakra-sizes-sm:24rem;--chakra-sizes-md:28rem;--chakra-sizes-lg:32rem;--chakra-sizes-xl:36rem;--chakra-sizes-2xl:42rem;--chakra-sizes-3xl:48rem;--chakra-sizes-4xl:56rem;--chakra-sizes-5xl:64rem;--chakra-sizes-6xl:72rem;--chakra-sizes-7xl:80rem;--chakra-sizes-8xl:90rem;--chakra-sizes-prose:60ch;--chakra-sizes-container-sm:640px;--chakra-sizes-container-md:768px;--chakra-sizes-container-lg:1024px;--chakra-sizes-container-xl:1280px;--chakra-zIndices-hide:-1;--chakra-zIndices-auto:auto;--chakra-zIndices-base:0;--chakra-zIndices-docked:10;--chakra-zIndices-dropdown:1000;--chakra-zIndices-sticky:1100;--chakra-zIndices-banner:1200;--chakra-zIndices-overlay:1300;--chakra-zIndices-modal:1400;--chakra-zIndices-popover:1500;--chakra-zIndices-skipLink:1600;--chakra-zIndices-toast:1700;--chakra-zIndices-tooltip:1800;--chakra-transition-property-common:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;--chakra-transition-property-colors:background-color,border-color,color,fill,stroke;--chakra-transition-property-dimensions:width,height;--chakra-transition-property-position:left,right,top,bottom;--chakra-transition-property-background:background-color,background-image,background-position;--chakra-transition-easing-ease-in:cubic-bezier(0.4, 0, 1, 1);--chakra-transition-easing-ease-out:cubic-bezier(0, 0, 0.2, 1);--chakra-transition-easing-ease-in-out:cubic-bezier(0.4, 0, 0.2, 1);--chakra-transition-duration-ultra-fast:50ms;--chakra-transition-duration-faster:100ms;--chakra-transition-duration-fast:150ms;--chakra-transition-duration-normal:200ms;--chakra-transition-duration-slow:300ms;--chakra-transition-duration-slower:400ms;--chakra-transition-duration-ultra-slow:500ms;--chakra-blur-none:0;--chakra-blur-sm:4px;--chakra-blur-base:8px;--chakra-blur-md:12px;--chakra-blur-lg:16px;--chakra-blur-xl:24px;--chakra-blur-2xl:40px;--chakra-blur-3xl:64px;--chakra-breakpoints-base:0em;--chakra-breakpoints-sm:30em;--chakra-breakpoints-md:48em;--chakra-breakpoints-lg:62em;--chakra-breakpoints-xl:80em;--chakra-breakpoints-2xl:96em;}.chakra-ui-light :host:not([data-theme]),.chakra-ui-light :root:not([data-theme]),.chakra-ui-light [data-theme]:not([data-theme]),[data-theme=light] :host:not([data-theme]),[data-theme=light] :root:not([data-theme]),[data-theme=light] [data-theme]:not([data-theme]),:host[data-theme=light],:root[data-theme=light],[data-theme][data-theme=light]{--chakra-colors-chakra-body-text:var(--chakra-colors-gray-800);--chakra-colors-chakra-body-bg:var(--chakra-colors-white);--chakra-colors-chakra-border-color:var(--chakra-colors-gray-200);--chakra-colors-chakra-inverse-text:var(--chakra-colors-white);--chakra-colors-chakra-subtle-bg:var(--chakra-colors-gray-100);--chakra-colors-chakra-subtle-text:var(--chakra-colors-gray-600);--chakra-colors-chakra-placeholder-color:var(--chakra-colors-gray-500);}.chakra-ui-dark :host:not([data-theme]),.chakra-ui-dark :root:not([data-theme]),.chakra-ui-dark [data-theme]:not([data-theme]),[data-theme=dark] :host:not([data-theme]),[data-theme=dark] :root:not([data-theme]),[data-theme=dark] [data-theme]:not([data-theme]),:host[data-theme=dark],:root[data-theme=dark],[data-theme][data-theme=dark]{--chakra-colors-chakra-body-text:var(--chakra-colors-whiteAlpha-900);--chakra-colors-chakra-body-bg:var(--chakra-colors-gray-800);--chakra-colors-chakra-border-color:var(--chakra-colors-whiteAlpha-300);--chakra-colors-chakra-inverse-text:var(--chakra-colors-gray-800);--chakra-colors-chakra-subtle-bg:var(--chakra-colors-gray-700);--chakra-colors-chakra-subtle-text:var(--chakra-colors-gray-400);--chakra-colors-chakra-placeholder-color:var(--chakra-colors-whiteAlpha-400);}</style><style data-emotion="css-global fubdgu">html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:system-ui,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;touch-action:manipulation;}body{position:relative;min-height:100%;margin:0;font-feature-settings:"kern";}:where(*, *::before, *::after){border-width:0;border-style:solid;box-sizing:border-box;word-wrap:break-word;}main{display:block;}hr{border-top-width:1px;box-sizing:content-box;height:0;overflow:visible;}:where(pre, code, kbd,samp){font-family:SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:1em;}a{background-color:transparent;color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit;}abbr[title]{border-bottom:none;-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration:underline dotted;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}:where(b, strong){font-weight:bold;}small{font-size:80%;}:where(sub,sup){font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sub{bottom:-0.25em;}sup{top:-0.5em;}img{border-style:none;}:where(button, input, optgroup, select, textarea){font-family:inherit;font-size:100%;line-height:1.15;margin:0;}:where(button, input){overflow:visible;}:where(button, select){text-transform:none;}:where(
2
2
  button::-moz-focus-inner,
3
3
  [type="button"]::-moz-focus-inner,
4
4
  [type="reset"]::-moz-focus-inner,
@@ -19,4 +19,4 @@
19
19
  pre
20
20
  ){margin:0;}button{background:transparent;padding:0;}fieldset{margin:0;padding:0;}:where(ol, ul){margin:0;padding:0;}textarea{resize:vertical;}:where(button, [role="button"]){cursor:pointer;}button::-moz-focus-inner{border:0!important;}table{border-collapse:collapse;}:where(h1, h2, h3, h4, h5, h6){font-size:inherit;font-weight:inherit;}:where(button, input, optgroup, select, textarea){padding:0;line-height:inherit;color:inherit;}:where(img, svg, video, canvas, audio, iframe, embed, object){display:block;}:where(img, video){max-width:100%;height:auto;}[data-js-focus-visible] :focus:not([data-focus-visible-added]):not(
21
21
  [data-focus-visible-disabled]
22
- ){outline:none;box-shadow:none;}select::-ms-expand{display:none;}:root,:host{--chakra-vh:100vh;}@supports (height: -webkit-fill-available){:root,:host{--chakra-vh:-webkit-fill-available;}}@supports (height: -moz-fill-available){:root,:host{--chakra-vh:-moz-fill-available;}}@supports (height: 100dvh){:root,:host{--chakra-vh:100dvh;}}</style><style data-emotion="css-global 1cgn62j">body{font-family:var(--chakra-fonts-body);color:var(--chakra-colors-chakra-body-text);background:var(--chakra-colors-chakra-body-bg);transition-property:background-color;transition-duration:var(--chakra-transition-duration-normal);line-height:var(--chakra-lineHeights-base);}*::-webkit-input-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*::-moz-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*:-ms-input-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*::placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*,*::before,::after{border-color:var(--chakra-colors-chakra-border-color);}</style><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><span></span><span id="__chakra_env" hidden=""></span><script src="/_next/static/chunks/webpack-7b49d5ba7e3a434d.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/1b121dc4d36aeb4d.css\",\"style\"]\n2:HL[\"/_next/static/css/951e2e0eea2d4a5b.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"3:I[35639,[],\"\"]\n5:I[51454,[],\"\"]\n6:I[48464,[],\"\"]\n7:I[76413,[\"509\",\"static/chunks/9746af58-a42b7d169cacadf0.js\",\"989\",\"static/chunks/47d8844f-929aed9b1c73a905.js\",\"147\",\"static/chunks/a30376cd-de84559016d7e133.js\",\"495\",\"static/chunks/6dc81886-adbfa45836061d79.js\",\"376\",\"static/chunks/3a92ee20-1081c360214f9602.js\",\"678\",\"static/chunks/3998a672-03adacad07b346ac.js\",\"20\",\"static/chunks/1bff33f1-1ef85cf5e658a751.js\",\"413\",\"static/chunks/bbda5537-9ec25eb1dd62348a.js\",\"42\",\"static/chunks/42-cd3c06533f5fd47c.js\",\"608\",\"static/chunks/608-3b079b544e5d5f5e.js\",\"92\",\"static/chunks/92-7ab55ae02606193c.js\",\"185\",\"static/chunks/app/layout-177a410a97e0d018.js\"],\"default\"]\nd:I[26480,[],\"\"]\n8:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n9:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\na:{\"display\":\"inline-block\"}\nb:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\ne:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L3\",null,{\"buildId\":\"M3_t2h-wA4_IXOtKHdJqV\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L4\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/1b121dc4d36aeb4d.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/951e2e0eea2d4a5b.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"suppressHydrationWarning\":true,\"children\":[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$8\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$9\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$a\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$b\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$Lc\"],\"globalErrorComponent\":\"$d\",\"missingSlots\":\"$We\"}]\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"recce\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Recce: Data validation toolkit for comprehensive PR review\"}]]\n4:null\n"])</script></body></html>
22
+ ){outline:none;box-shadow:none;}select::-ms-expand{display:none;}:root,:host{--chakra-vh:100vh;}@supports (height: -webkit-fill-available){:root,:host{--chakra-vh:-webkit-fill-available;}}@supports (height: -moz-fill-available){:root,:host{--chakra-vh:-moz-fill-available;}}@supports (height: 100dvh){:root,:host{--chakra-vh:100dvh;}}</style><style data-emotion="css-global 1cgn62j">body{font-family:var(--chakra-fonts-body);color:var(--chakra-colors-chakra-body-text);background:var(--chakra-colors-chakra-body-bg);transition-property:background-color;transition-duration:var(--chakra-transition-duration-normal);line-height:var(--chakra-lineHeights-base);}*::-webkit-input-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*::-moz-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*:-ms-input-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*::placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*,*::before,::after{border-color:var(--chakra-colors-chakra-border-color);}</style><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><span></span><span id="__chakra_env" hidden=""></span><script src="/_next/static/chunks/webpack-7b49d5ba7e3a434d.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/1b121dc4d36aeb4d.css\",\"style\"]\n2:HL[\"/_next/static/css/951e2e0eea2d4a5b.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"3:I[35639,[],\"\"]\n5:I[51454,[],\"\"]\n6:I[48464,[],\"\"]\n7:I[76413,[\"509\",\"static/chunks/9746af58-a42b7d169cacadf0.js\",\"989\",\"static/chunks/47d8844f-929aed9b1c73a905.js\",\"147\",\"static/chunks/a30376cd-de84559016d7e133.js\",\"495\",\"static/chunks/6dc81886-adbfa45836061d79.js\",\"376\",\"static/chunks/3a92ee20-1081c360214f9602.js\",\"678\",\"static/chunks/3998a672-03adacad07b346ac.js\",\"20\",\"static/chunks/1bff33f1-1ef85cf5e658a751.js\",\"413\",\"static/chunks/bbda5537-9ec25eb1dd62348a.js\",\"42\",\"static/chunks/42-cd3c06533f5fd47c.js\",\"608\",\"static/chunks/608-3b079b544e5d5f5e.js\",\"92\",\"static/chunks/92-607cd1af83c41f43.js\",\"185\",\"static/chunks/app/layout-177a410a97e0d018.js\"],\"default\"]\nd:I[26480,[],\"\"]\n8:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n9:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\na:{\"display\":\"inline-block\"}\nb:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\ne:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L3\",null,{\"buildId\":\"Iga3yMdHBVJ_Vhluh2SdE\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L4\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/1b121dc4d36aeb4d.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/951e2e0eea2d4a5b.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"suppressHydrationWarning\":true,\"children\":[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$8\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$9\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$a\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$b\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$Lc\"],\"globalErrorComponent\":\"$d\",\"missingSlots\":\"$We\"}]\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"recce\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Recce: Data validation toolkit for comprehensive PR review\"}]]\n4:null\n"])</script></body></html>