@nightkatana/kronosys-app 1.0.0-beta.4 → 1.0.0-beta.40

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.
Files changed (542) hide show
  1. package/.next/BUILD_ID +1 -0
  2. package/.next/standalone/.next/BUILD_ID +1 -1
  3. package/.next/standalone/.next/app-path-routes-manifest.json +6 -1
  4. package/.next/standalone/.next/build-manifest.json +3 -3
  5. package/.next/standalone/.next/prerender-manifest.json +3 -172
  6. package/.next/standalone/.next/required-server-files.json +7 -5
  7. package/.next/standalone/.next/routes-manifest.json +30 -0
  8. package/.next/standalone/.next/server/app/_global-error/page.js +3 -3
  9. package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  11. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  12. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  13. package/.next/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  14. package/.next/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  15. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  16. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  17. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  18. package/.next/standalone/.next/server/app/_not-found/page.js +2 -2
  19. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/api/action/route.js +24 -6
  22. package/.next/standalone/.next/server/app/api/action/route.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/api/action-logs/route.js +45 -0
  24. package/.next/standalone/.next/server/app/api/action-logs/route.js.nft.json +1 -0
  25. package/.next/standalone/.next/server/app/api/action-logs/route_client-reference-manifest.js +1 -0
  26. package/.next/standalone/.next/server/app/api/backup/route.js +1 -1
  27. package/.next/standalone/.next/server/app/api/backup/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/health/route.js +1 -1
  29. package/.next/standalone/.next/server/app/api/health/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/restore/route.js +1 -0
  31. package/.next/standalone/.next/server/app/api/restore/route.js.nft.json +1 -0
  32. package/.next/standalone/.next/server/app/api/restore/route_client-reference-manifest.js +1 -0
  33. package/.next/standalone/.next/server/app/api/state/route.js +1 -1
  34. package/.next/standalone/.next/server/app/api/state/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/version-check/route.js +1 -0
  36. package/.next/standalone/.next/server/app/api/version-check/route.js.nft.json +1 -0
  37. package/.next/standalone/.next/server/app/api/version-check/route_client-reference-manifest.js +1 -0
  38. package/.next/standalone/.next/server/app/apple-icon.png/route.js +1 -1
  39. package/.next/standalone/.next/server/app/changelog/page.js +2 -2
  40. package/.next/standalone/.next/server/app/changelog/page.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/guide/page.js +2 -2
  43. package/.next/standalone/.next/server/app/guide/page.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/guide/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/icon.png/route.js +1 -1
  46. package/.next/standalone/.next/server/app/implementation/page.js +2 -0
  47. package/.next/standalone/.next/server/app/implementation/page.js.nft.json +1 -0
  48. package/.next/standalone/.next/server/app/implementation/page_client-reference-manifest.js +1 -0
  49. package/.next/standalone/.next/server/app/licenses/page.js +2 -22
  50. package/.next/standalone/.next/server/app/licenses/page.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/licenses/page_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/logs/page.js +2 -0
  53. package/.next/standalone/.next/server/app/logs/page.js.nft.json +1 -0
  54. package/.next/standalone/.next/server/app/logs/page_client-reference-manifest.js +1 -0
  55. package/.next/standalone/.next/server/app/manifest.webmanifest/route.js +2 -2
  56. package/.next/standalone/.next/server/app/manifest.webmanifest.body +1 -1
  57. package/.next/standalone/.next/server/app/page.js +10 -7
  58. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  59. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/app/reporting/page.js +2 -2
  61. package/.next/standalone/.next/server/app/reporting/page.js.nft.json +1 -1
  62. package/.next/standalone/.next/server/app/reporting/page_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/settings/page.js +2 -2
  64. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  65. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/app-paths-manifest.json +6 -1
  67. package/.next/standalone/.next/server/chunks/23.js +1 -0
  68. package/.next/standalone/.next/server/chunks/277.js +13 -7
  69. package/.next/standalone/.next/server/chunks/445.js +12 -12
  70. package/.next/standalone/.next/server/chunks/487.js +1 -0
  71. package/.next/standalone/.next/server/chunks/63.js +8 -8
  72. package/.next/standalone/.next/server/chunks/631.js +1 -0
  73. package/.next/standalone/.next/server/chunks/642.js +1 -0
  74. package/.next/standalone/.next/server/chunks/657.js +1 -0
  75. package/.next/standalone/.next/server/chunks/714.js +1 -0
  76. package/.next/standalone/.next/server/chunks/740.js +3 -0
  77. package/.next/standalone/.next/server/chunks/752.js +90 -0
  78. package/.next/standalone/.next/server/chunks/813.js +1 -1
  79. package/.next/standalone/.next/server/functions-config-manifest.json +2 -0
  80. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  81. package/.next/standalone/.next/server/next-font-manifest.js +1 -1
  82. package/.next/standalone/.next/server/next-font-manifest.json +1 -1
  83. package/.next/standalone/.next/server/pages/500.html +1 -1
  84. package/.next/standalone/.next/server/pages-manifest.json +0 -1
  85. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  86. package/.next/standalone/.next/server/webpack-runtime.js +1 -1
  87. package/.next/standalone/.next/static/74KXPItqRU0btbDqBJB0U/_buildManifest.js +1 -0
  88. package/.next/standalone/.next/static/chunks/102-fd643497497a9b9e.js +1 -0
  89. package/.next/standalone/.next/static/chunks/227-ac9bbcd07955fca9.js +53 -0
  90. package/.next/standalone/.next/static/chunks/244-c21028178977c774.js +1 -0
  91. package/.next/standalone/.next/static/chunks/317-edd92575d16974d9.js +1 -0
  92. package/.next/standalone/.next/static/chunks/400-0c9965113885b1fe.js +1 -0
  93. package/.next/standalone/.next/static/chunks/555-2cfd8090114d5ac8.js +1 -0
  94. package/.next/standalone/.next/static/chunks/558-8151f422e3fd565a.js +1 -0
  95. package/.next/standalone/.next/static/chunks/569-aafda3bfeb1cb4e5.js +1 -0
  96. package/.next/standalone/.next/static/chunks/702-033cf3571bb1add5.js +3 -0
  97. package/.next/standalone/.next/static/chunks/82-542b1f214e2e39ae.js +1 -0
  98. package/.next/standalone/.next/static/chunks/840-83aa65cc3eee5ac5.js +1 -0
  99. package/.next/standalone/.next/static/chunks/918-30897bc0b3f88e97.js +1 -0
  100. package/.next/standalone/.next/static/chunks/952-4037952633818146.js +1 -0
  101. package/.next/standalone/.next/static/chunks/963-fef8714a78716b1a.js +1 -0
  102. package/.next/standalone/.next/static/chunks/app/_global-error/page-d4e4e10b259d5f0f.js +1 -0
  103. package/.next/standalone/.next/static/chunks/app/api/action/route-d4e4e10b259d5f0f.js +1 -0
  104. package/.next/standalone/.next/static/chunks/app/api/action-logs/route-d4e4e10b259d5f0f.js +1 -0
  105. package/.next/standalone/.next/static/chunks/app/api/backup/route-d4e4e10b259d5f0f.js +1 -0
  106. package/.next/standalone/.next/static/chunks/app/api/health/route-d4e4e10b259d5f0f.js +1 -0
  107. package/.next/standalone/.next/static/chunks/app/api/restore/route-d4e4e10b259d5f0f.js +1 -0
  108. package/.next/standalone/.next/static/chunks/app/api/state/route-d4e4e10b259d5f0f.js +1 -0
  109. package/.next/standalone/.next/static/chunks/app/api/version-check/route-d4e4e10b259d5f0f.js +1 -0
  110. package/.next/standalone/.next/static/chunks/app/changelog/page-7f780c1b36a2ddb9.js +1 -0
  111. package/.next/standalone/.next/static/chunks/app/guide/layout-d4e4e10b259d5f0f.js +1 -0
  112. package/.next/standalone/.next/static/chunks/app/guide/page-6e07594ac3175190.js +1 -0
  113. package/.next/standalone/.next/static/chunks/app/implementation/page-dfb5f75f238ecd34.js +1 -0
  114. package/.next/standalone/.next/static/chunks/app/layout-41f2b6f04960592f.js +21 -0
  115. package/.next/standalone/.next/static/chunks/app/licenses/layout-d4e4e10b259d5f0f.js +1 -0
  116. package/.next/standalone/.next/static/chunks/app/licenses/page-9f61c749a03e5545.js +21 -0
  117. package/.next/standalone/.next/static/chunks/app/logs/page-d8640a587ea16957.js +1 -0
  118. package/.next/standalone/.next/static/chunks/app/manifest.webmanifest/route-d4e4e10b259d5f0f.js +1 -0
  119. package/.next/standalone/.next/static/chunks/app/page-74a25ca62ff92f6d.js +25 -0
  120. package/.next/standalone/.next/static/chunks/app/reporting/page-ad780bfe6b4e868e.js +1 -0
  121. package/.next/standalone/.next/static/chunks/app/settings/layout-d4e4e10b259d5f0f.js +1 -0
  122. package/.next/standalone/.next/static/chunks/app/settings/page-2881390ef5c8c138.js +1 -0
  123. package/.next/standalone/.next/static/chunks/{main-934b539e9c7e4abe.js → main-c475a78be9d9d3c9.js} +1 -1
  124. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d4e4e10b259d5f0f.js +1 -0
  125. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d4e4e10b259d5f0f.js +1 -0
  126. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d4e4e10b259d5f0f.js +1 -0
  127. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d4e4e10b259d5f0f.js +1 -0
  128. package/.next/standalone/.next/static/chunks/webpack-72874cc65370f1cd.js +1 -0
  129. package/.next/{static/css/6fcf52f950db63c8.css → standalone/.next/static/css/0b46491b34c5c567.css} +1 -1
  130. package/.next/standalone/.next/static/css/2cef87557f7a0efb.css +1 -0
  131. package/.next/standalone/.next/static/media/0f1bdadaf30e2d5f-s.woff2 +0 -0
  132. package/.next/standalone/.next/static/media/2c34d62a75506231-s.woff2 +0 -0
  133. package/.next/standalone/.next/static/media/601f5c280d60caca-s.woff2 +0 -0
  134. package/.next/standalone/.next/static/media/a115172161b307bb-s.woff2 +0 -0
  135. package/.next/standalone/.next/static/media/d100b2a099e34044-s.woff2 +0 -0
  136. package/.next/standalone/.next/static/media/f5271587012faf78-s.p.woff2 +0 -0
  137. package/.next/standalone/kronosys-package-meta.json +1 -0
  138. package/.next/standalone/package.json +28 -33
  139. package/.next/standalone/server.js +1 -1
  140. package/README.md +49 -12
  141. package/bin/kronosys.mjs +211 -24
  142. package/package.json +28 -33
  143. package/.next/standalone/.next/server/app/_not-found.html +0 -9
  144. package/.next/standalone/.next/server/app/_not-found.meta +0 -16
  145. package/.next/standalone/.next/server/app/_not-found.rsc +0 -27
  146. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +0 -27
  147. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +0 -6
  148. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +0 -13
  149. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +0 -5
  150. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +0 -5
  151. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +0 -6
  152. package/.next/standalone/.next/server/app/changelog.html +0 -9
  153. package/.next/standalone/.next/server/app/changelog.meta +0 -15
  154. package/.next/standalone/.next/server/app/changelog.rsc +0 -31
  155. package/.next/standalone/.next/server/app/changelog.segments/_full.segment.rsc +0 -31
  156. package/.next/standalone/.next/server/app/changelog.segments/_head.segment.rsc +0 -6
  157. package/.next/standalone/.next/server/app/changelog.segments/_index.segment.rsc +0 -13
  158. package/.next/standalone/.next/server/app/changelog.segments/_tree.segment.rsc +0 -6
  159. package/.next/standalone/.next/server/app/changelog.segments/changelog/__PAGE__.segment.rsc +0 -9
  160. package/.next/standalone/.next/server/app/changelog.segments/changelog.segment.rsc +0 -5
  161. package/.next/standalone/.next/server/app/guide.html +0 -9
  162. package/.next/standalone/.next/server/app/guide.meta +0 -15
  163. package/.next/standalone/.next/server/app/guide.rsc +0 -29
  164. package/.next/standalone/.next/server/app/guide.segments/_full.segment.rsc +0 -29
  165. package/.next/standalone/.next/server/app/guide.segments/_head.segment.rsc +0 -6
  166. package/.next/standalone/.next/server/app/guide.segments/_index.segment.rsc +0 -13
  167. package/.next/standalone/.next/server/app/guide.segments/_tree.segment.rsc +0 -6
  168. package/.next/standalone/.next/server/app/guide.segments/guide/__PAGE__.segment.rsc +0 -9
  169. package/.next/standalone/.next/server/app/guide.segments/guide.segment.rsc +0 -4
  170. package/.next/standalone/.next/server/app/index.html +0 -9
  171. package/.next/standalone/.next/server/app/index.meta +0 -14
  172. package/.next/standalone/.next/server/app/index.rsc +0 -30
  173. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +0 -10
  174. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +0 -30
  175. package/.next/standalone/.next/server/app/index.segments/_head.segment.rsc +0 -6
  176. package/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +0 -13
  177. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +0 -7
  178. package/.next/standalone/.next/server/app/licenses.html +0 -9
  179. package/.next/standalone/.next/server/app/licenses.meta +0 -15
  180. package/.next/standalone/.next/server/app/licenses.rsc +0 -29
  181. package/.next/standalone/.next/server/app/licenses.segments/_full.segment.rsc +0 -29
  182. package/.next/standalone/.next/server/app/licenses.segments/_head.segment.rsc +0 -6
  183. package/.next/standalone/.next/server/app/licenses.segments/_index.segment.rsc +0 -13
  184. package/.next/standalone/.next/server/app/licenses.segments/_tree.segment.rsc +0 -6
  185. package/.next/standalone/.next/server/app/licenses.segments/licenses/__PAGE__.segment.rsc +0 -9
  186. package/.next/standalone/.next/server/app/licenses.segments/licenses.segment.rsc +0 -4
  187. package/.next/standalone/.next/server/app/reporting.html +0 -9
  188. package/.next/standalone/.next/server/app/reporting.meta +0 -15
  189. package/.next/standalone/.next/server/app/reporting.rsc +0 -31
  190. package/.next/standalone/.next/server/app/reporting.segments/_full.segment.rsc +0 -31
  191. package/.next/standalone/.next/server/app/reporting.segments/_head.segment.rsc +0 -6
  192. package/.next/standalone/.next/server/app/reporting.segments/_index.segment.rsc +0 -13
  193. package/.next/standalone/.next/server/app/reporting.segments/_tree.segment.rsc +0 -6
  194. package/.next/standalone/.next/server/app/reporting.segments/reporting/__PAGE__.segment.rsc +0 -9
  195. package/.next/standalone/.next/server/app/reporting.segments/reporting.segment.rsc +0 -5
  196. package/.next/standalone/.next/server/app/settings.html +0 -9
  197. package/.next/standalone/.next/server/app/settings.meta +0 -15
  198. package/.next/standalone/.next/server/app/settings.rsc +0 -29
  199. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +0 -29
  200. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +0 -6
  201. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +0 -13
  202. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +0 -6
  203. package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +0 -9
  204. package/.next/standalone/.next/server/app/settings.segments/settings.segment.rsc +0 -4
  205. package/.next/standalone/.next/server/chunks/104.js +0 -9
  206. package/.next/standalone/.next/server/chunks/16.js +0 -49
  207. package/.next/standalone/.next/server/chunks/177.js +0 -3
  208. package/.next/standalone/.next/server/chunks/590.js +0 -1
  209. package/.next/standalone/.next/server/chunks/658.js +0 -1
  210. package/.next/standalone/.next/server/chunks/942.js +0 -1
  211. package/.next/standalone/.next/server/pages/404.html +0 -9
  212. package/.next/standalone/.next/static/chunks/155-cdedad19f06ee45f.js +0 -49
  213. package/.next/standalone/.next/static/chunks/270-e7888e3c35848652.js +0 -1
  214. package/.next/standalone/.next/static/chunks/479-489c69d6eff752a2.js +0 -1
  215. package/.next/standalone/.next/static/chunks/498-1d9dbcc0c36b51e7.js +0 -1
  216. package/.next/standalone/.next/static/chunks/598-cc57a6fa6801c570.js +0 -1
  217. package/.next/standalone/.next/static/chunks/690-7c901031274462f8.js +0 -3
  218. package/.next/standalone/.next/static/chunks/889-3440fe146e529e67.js +0 -1
  219. package/.next/standalone/.next/static/chunks/993-1cb2e8683d684629.js +0 -1
  220. package/.next/standalone/.next/static/chunks/app/_global-error/page-53bc079dff893b85.js +0 -1
  221. package/.next/standalone/.next/static/chunks/app/api/action/route-53bc079dff893b85.js +0 -1
  222. package/.next/standalone/.next/static/chunks/app/api/backup/route-53bc079dff893b85.js +0 -1
  223. package/.next/standalone/.next/static/chunks/app/api/health/route-53bc079dff893b85.js +0 -1
  224. package/.next/standalone/.next/static/chunks/app/api/state/route-53bc079dff893b85.js +0 -1
  225. package/.next/standalone/.next/static/chunks/app/changelog/page-541aedca8e06f3e3.js +0 -1
  226. package/.next/standalone/.next/static/chunks/app/guide/layout-53bc079dff893b85.js +0 -1
  227. package/.next/standalone/.next/static/chunks/app/guide/page-b9347f93c8a9ebaa.js +0 -1
  228. package/.next/standalone/.next/static/chunks/app/layout-3c9b2ade2cd28d2c.js +0 -1
  229. package/.next/standalone/.next/static/chunks/app/licenses/layout-53bc079dff893b85.js +0 -1
  230. package/.next/standalone/.next/static/chunks/app/licenses/page-23a6137932aa9856.js +0 -21
  231. package/.next/standalone/.next/static/chunks/app/manifest.webmanifest/route-53bc079dff893b85.js +0 -1
  232. package/.next/standalone/.next/static/chunks/app/page-779637e187607866.js +0 -22
  233. package/.next/standalone/.next/static/chunks/app/reporting/page-bcb5a1897297e797.js +0 -1
  234. package/.next/standalone/.next/static/chunks/app/settings/layout-53bc079dff893b85.js +0 -1
  235. package/.next/standalone/.next/static/chunks/app/settings/page-b7eac8aeb092494d.js +0 -1
  236. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-53bc079dff893b85.js +0 -1
  237. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-53bc079dff893b85.js +0 -1
  238. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-53bc079dff893b85.js +0 -1
  239. package/.next/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-53bc079dff893b85.js +0 -1
  240. package/.next/standalone/.next/static/chunks/webpack-94545331cf4a1281.js +0 -1
  241. package/.next/standalone/.next/static/css/2cb439d7bd6673bc.css +0 -1
  242. package/.next/standalone/.next/static/css/6fcf52f950db63c8.css +0 -1
  243. package/.next/standalone/.next/static/media/747892c23ea88013-s.woff2 +0 -0
  244. package/.next/standalone/.next/static/media/93f479601ee12b01-s.p.woff2 +0 -0
  245. package/.next/standalone/.next/static/media/9610d9e46709d722-s.woff2 +0 -0
  246. package/.next/standalone/.next/static/nzXLNr4JHdARH6TrNp6lD/_buildManifest.js +0 -1
  247. package/.next/standalone/node_modules/@img/colour/color.cjs +0 -1596
  248. package/.next/standalone/node_modules/@img/colour/index.cjs +0 -1
  249. package/.next/standalone/node_modules/@img/colour/package.json +0 -58
  250. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/index.js +0 -1
  251. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  252. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/package.json +0 -42
  253. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/versions.json +0 -30
  254. package/.next/standalone/node_modules/@img/sharp-linux-x64/LICENSE +0 -191
  255. package/.next/standalone/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
  256. package/.next/standalone/node_modules/@img/sharp-linux-x64/package.json +0 -46
  257. package/.next/standalone/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
  258. package/.next/standalone/node_modules/better-sqlite3/lib/database.js +0 -90
  259. package/.next/standalone/node_modules/better-sqlite3/lib/index.js +0 -3
  260. package/.next/standalone/node_modules/better-sqlite3/lib/methods/aggregate.js +0 -43
  261. package/.next/standalone/node_modules/better-sqlite3/lib/methods/backup.js +0 -67
  262. package/.next/standalone/node_modules/better-sqlite3/lib/methods/function.js +0 -31
  263. package/.next/standalone/node_modules/better-sqlite3/lib/methods/inspect.js +0 -7
  264. package/.next/standalone/node_modules/better-sqlite3/lib/methods/pragma.js +0 -12
  265. package/.next/standalone/node_modules/better-sqlite3/lib/methods/serialize.js +0 -16
  266. package/.next/standalone/node_modules/better-sqlite3/lib/methods/table.js +0 -189
  267. package/.next/standalone/node_modules/better-sqlite3/lib/methods/transaction.js +0 -78
  268. package/.next/standalone/node_modules/better-sqlite3/lib/methods/wrappers.js +0 -54
  269. package/.next/standalone/node_modules/better-sqlite3/lib/sqlite-error.js +0 -20
  270. package/.next/standalone/node_modules/better-sqlite3/lib/util.js +0 -12
  271. package/.next/standalone/node_modules/better-sqlite3/package.json +0 -59
  272. package/.next/standalone/node_modules/bindings/bindings.js +0 -221
  273. package/.next/standalone/node_modules/bindings/package.json +0 -28
  274. package/.next/standalone/node_modules/detect-libc/lib/detect-libc.js +0 -313
  275. package/.next/standalone/node_modules/detect-libc/lib/elf.js +0 -39
  276. package/.next/standalone/node_modules/detect-libc/lib/filesystem.js +0 -51
  277. package/.next/standalone/node_modules/detect-libc/lib/process.js +0 -24
  278. package/.next/standalone/node_modules/detect-libc/package.json +0 -44
  279. package/.next/standalone/node_modules/file-uri-to-path/index.js +0 -66
  280. package/.next/standalone/node_modules/file-uri-to-path/package.json +0 -32
  281. package/.next/standalone/node_modules/sharp/lib/channel.js +0 -177
  282. package/.next/standalone/node_modules/sharp/lib/colour.js +0 -195
  283. package/.next/standalone/node_modules/sharp/lib/composite.js +0 -212
  284. package/.next/standalone/node_modules/sharp/lib/constructor.js +0 -499
  285. package/.next/standalone/node_modules/sharp/lib/index.js +0 -16
  286. package/.next/standalone/node_modules/sharp/lib/input.js +0 -809
  287. package/.next/standalone/node_modules/sharp/lib/is.js +0 -143
  288. package/.next/standalone/node_modules/sharp/lib/libvips.js +0 -207
  289. package/.next/standalone/node_modules/sharp/lib/operation.js +0 -1016
  290. package/.next/standalone/node_modules/sharp/lib/output.js +0 -1666
  291. package/.next/standalone/node_modules/sharp/lib/resize.js +0 -595
  292. package/.next/standalone/node_modules/sharp/lib/sharp.js +0 -121
  293. package/.next/standalone/node_modules/sharp/lib/utility.js +0 -291
  294. package/.next/standalone/node_modules/sharp/node_modules/semver/classes/comparator.js +0 -143
  295. package/.next/standalone/node_modules/sharp/node_modules/semver/classes/range.js +0 -557
  296. package/.next/standalone/node_modules/sharp/node_modules/semver/classes/semver.js +0 -333
  297. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/cmp.js +0 -54
  298. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/coerce.js +0 -62
  299. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/compare.js +0 -7
  300. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/eq.js +0 -5
  301. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/gt.js +0 -5
  302. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/gte.js +0 -5
  303. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/lt.js +0 -5
  304. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/lte.js +0 -5
  305. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/neq.js +0 -5
  306. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/parse.js +0 -18
  307. package/.next/standalone/node_modules/sharp/node_modules/semver/functions/satisfies.js +0 -12
  308. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/constants.js +0 -37
  309. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/debug.js +0 -11
  310. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/identifiers.js +0 -29
  311. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/lrucache.js +0 -42
  312. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/parse-options.js +0 -17
  313. package/.next/standalone/node_modules/sharp/node_modules/semver/internal/re.js +0 -223
  314. package/.next/standalone/node_modules/sharp/node_modules/semver/package.json +0 -78
  315. package/.next/standalone/node_modules/sharp/package.json +0 -202
  316. package/.next/static/chunks/155-cdedad19f06ee45f.js +0 -49
  317. package/.next/static/chunks/270-e7888e3c35848652.js +0 -1
  318. package/.next/static/chunks/479-489c69d6eff752a2.js +0 -1
  319. package/.next/static/chunks/498-1d9dbcc0c36b51e7.js +0 -1
  320. package/.next/static/chunks/4bd1b696-215e5051988c3dde.js +0 -1
  321. package/.next/static/chunks/598-cc57a6fa6801c570.js +0 -1
  322. package/.next/static/chunks/690-7c901031274462f8.js +0 -3
  323. package/.next/static/chunks/794-3bbf792b9526214d.js +0 -32
  324. package/.next/static/chunks/889-3440fe146e529e67.js +0 -1
  325. package/.next/static/chunks/993-1cb2e8683d684629.js +0 -1
  326. package/.next/static/chunks/app/_global-error/page-53bc079dff893b85.js +0 -1
  327. package/.next/static/chunks/app/_not-found/page-2acaadd098144869.js +0 -1
  328. package/.next/static/chunks/app/api/action/route-53bc079dff893b85.js +0 -1
  329. package/.next/static/chunks/app/api/backup/route-53bc079dff893b85.js +0 -1
  330. package/.next/static/chunks/app/api/health/route-53bc079dff893b85.js +0 -1
  331. package/.next/static/chunks/app/api/state/route-53bc079dff893b85.js +0 -1
  332. package/.next/static/chunks/app/changelog/page-541aedca8e06f3e3.js +0 -1
  333. package/.next/static/chunks/app/guide/layout-53bc079dff893b85.js +0 -1
  334. package/.next/static/chunks/app/guide/page-b9347f93c8a9ebaa.js +0 -1
  335. package/.next/static/chunks/app/layout-3c9b2ade2cd28d2c.js +0 -1
  336. package/.next/static/chunks/app/licenses/layout-53bc079dff893b85.js +0 -1
  337. package/.next/static/chunks/app/licenses/page-23a6137932aa9856.js +0 -21
  338. package/.next/static/chunks/app/manifest.webmanifest/route-53bc079dff893b85.js +0 -1
  339. package/.next/static/chunks/app/page-779637e187607866.js +0 -22
  340. package/.next/static/chunks/app/reporting/page-bcb5a1897297e797.js +0 -1
  341. package/.next/static/chunks/app/settings/layout-53bc079dff893b85.js +0 -1
  342. package/.next/static/chunks/app/settings/page-b7eac8aeb092494d.js +0 -1
  343. package/.next/static/chunks/framework-93cda6578f6c76ec.js +0 -1
  344. package/.next/static/chunks/main-934b539e9c7e4abe.js +0 -5
  345. package/.next/static/chunks/main-app-bdb688080b70ecf6.js +0 -1
  346. package/.next/static/chunks/next/dist/client/components/builtin/app-error-53bc079dff893b85.js +0 -1
  347. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-53bc079dff893b85.js +0 -1
  348. package/.next/static/chunks/next/dist/client/components/builtin/global-error-399b3c3c70060eef.js +0 -1
  349. package/.next/static/chunks/next/dist/client/components/builtin/not-found-53bc079dff893b85.js +0 -1
  350. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-53bc079dff893b85.js +0 -1
  351. package/.next/static/chunks/polyfills-42372ed130431b0a.js +0 -1
  352. package/.next/static/chunks/webpack-94545331cf4a1281.js +0 -1
  353. package/.next/static/css/2cb439d7bd6673bc.css +0 -1
  354. package/.next/static/css/bdc8353fadd67def.css +0 -1
  355. package/.next/static/media/0a86735c6520d94f-s.p.woff2 +0 -0
  356. package/.next/static/media/32c80fb7588b7a2e-s.woff2 +0 -0
  357. package/.next/static/media/5b25d60b4670300e-s.p.woff2 +0 -0
  358. package/.next/static/media/60181e10ad16e354-s.woff2 +0 -0
  359. package/.next/static/media/747892c23ea88013-s.woff2 +0 -0
  360. package/.next/static/media/93f479601ee12b01-s.p.woff2 +0 -0
  361. package/.next/static/media/9610d9e46709d722-s.woff2 +0 -0
  362. package/.next/static/media/99e31c27a1524300-s.woff2 +0 -0
  363. package/.next/static/media/c1b11e140b58cf5a-s.woff2 +0 -0
  364. package/.next/static/nzXLNr4JHdARH6TrNp6lD/_buildManifest.js +0 -1
  365. package/.next/static/nzXLNr4JHdARH6TrNp6lD/_ssgManifest.js +0 -1
  366. package/app/api/action/route.ts +0 -16
  367. package/app/api/backup/route.ts +0 -84
  368. package/app/api/health/route.ts +0 -22
  369. package/app/api/state/route.ts +0 -27
  370. package/app/apple-icon.png +0 -0
  371. package/app/changelog/page.tsx +0 -122
  372. package/app/globals.css +0 -210
  373. package/app/guide/layout.tsx +0 -11
  374. package/app/guide/page.tsx +0 -278
  375. package/app/icon.png +0 -0
  376. package/app/layout.tsx +0 -77
  377. package/app/licenses/layout.tsx +0 -11
  378. package/app/licenses/page.tsx +0 -246
  379. package/app/manifest.ts +0 -32
  380. package/app/page.tsx +0 -1610
  381. package/app/reporting/page.tsx +0 -2943
  382. package/app/settings/layout.tsx +0 -10
  383. package/app/settings/page.tsx +0 -3518
  384. package/components/KronosysPackageVersionProvider.tsx +0 -19
  385. package/components/KronosysPayloadProvider.tsx +0 -109
  386. package/components/PwaRegister.tsx +0 -25
  387. package/components/SiteLegalFooter.tsx +0 -21
  388. package/components/ThemeProvider.tsx +0 -78
  389. package/components/dashboard/AppShellLiveSessionDrawer.tsx +0 -394
  390. package/components/dashboard/AppShellRouteNav.tsx +0 -131
  391. package/components/dashboard/AppVersionStamp.tsx +0 -16
  392. package/components/dashboard/DashboardCollapsibleSection.tsx +0 -57
  393. package/components/dashboard/DashboardColumnHintsBanner.tsx +0 -159
  394. package/components/dashboard/DashboardCommandCenter.tsx +0 -470
  395. package/components/dashboard/DashboardLangGateModal.tsx +0 -118
  396. package/components/dashboard/DashboardLoadingOverlay.tsx +0 -42
  397. package/components/dashboard/DashboardSimpleModal.tsx +0 -337
  398. package/components/dashboard/DashboardSuspenseFallback.tsx +0 -52
  399. package/components/dashboard/DashboardToastProvider.tsx +0 -64
  400. package/components/dashboard/DashboardTour.tsx +0 -435
  401. package/components/dashboard/DeferredDescriptionPopoverWrap.tsx +0 -39
  402. package/components/dashboard/DeleteSessionModal.tsx +0 -130
  403. package/components/dashboard/DescriptionTooltipPortaled.tsx +0 -31
  404. package/components/dashboard/GitIdentityQuickSetupModal.tsx +0 -211
  405. package/components/dashboard/HeaderIntegrationBadges.tsx +0 -69
  406. package/components/dashboard/InlineMetricHelpTrigger.tsx +0 -102
  407. package/components/dashboard/IssuePickerModal.tsx +0 -168
  408. package/components/dashboard/KronoFocusPanel.tsx +0 -834
  409. package/components/dashboard/KronosysDatetimePopoverField.tsx +0 -357
  410. package/components/dashboard/KronosysTimePopoverField.tsx +0 -233
  411. package/components/dashboard/LanguageMenu.tsx +0 -123
  412. package/components/dashboard/MongoMirrorSyncLine.tsx +0 -57
  413. package/components/dashboard/NewSessionScopeModal.tsx +0 -410
  414. package/components/dashboard/PageRefreshButton.tsx +0 -130
  415. package/components/dashboard/PlainHelpPopover.tsx +0 -97
  416. package/components/dashboard/ReportingPageToc.tsx +0 -68
  417. package/components/dashboard/ReportingTour.tsx +0 -342
  418. package/components/dashboard/SavedProjectPicker.tsx +0 -92
  419. package/components/dashboard/SavedTagPicker.tsx +0 -115
  420. package/components/dashboard/ScrollToTopFab.tsx +0 -41
  421. package/components/dashboard/SelectedSessionSidebarBlock.tsx +0 -630
  422. package/components/dashboard/SessionEndReasonEditor.tsx +0 -114
  423. package/components/dashboard/SessionListPanel.tsx +0 -320
  424. package/components/dashboard/SessionLocMetricsSection.tsx +0 -128
  425. package/components/dashboard/SettingsTagsProjectsSection.tsx +0 -993
  426. package/components/dashboard/SettingsTour.tsx +0 -332
  427. package/components/dashboard/TagPills.tsx +0 -149
  428. package/components/dashboard/TagsHelpTrigger.tsx +0 -84
  429. package/components/dashboard/TaskFocusPanel.tsx +0 -1261
  430. package/components/dashboard/TaskSessionLiveCard.tsx +0 -832
  431. package/components/dashboard/TaskSubtasksBlock.tsx +0 -748
  432. package/components/dashboard/ThemeToggle.test.tsx +0 -26
  433. package/components/dashboard/ThemeToggle.tsx +0 -36
  434. package/components/dashboard/UserGuideBodyText.tsx +0 -62
  435. package/components/dashboard/WorkspaceGitRepoCard.tsx +0 -191
  436. package/components/dashboard/taskFieldStyles.ts +0 -139
  437. package/components/dashboard/useAnchoredFloatingPortalStyle.ts +0 -71
  438. package/components/dashboard/useDescriptionPopoverAfterMs.ts +0 -220
  439. package/components/dashboard/useKronoFocusLiveSeconds.ts +0 -36
  440. package/components/dashboard/useSmoothStopwatchMs.ts +0 -25
  441. package/lib/appShellHeaderClasses.ts +0 -12
  442. package/lib/backupCsvExport.test.ts +0 -149
  443. package/lib/backupCsvExport.ts +0 -392
  444. package/lib/changelogCopy.ts +0 -34
  445. package/lib/concurrentTaskStartPreference.ts +0 -29
  446. package/lib/dashboardClockFormat.ts +0 -13
  447. package/lib/dashboardColumnChrome.ts +0 -3
  448. package/lib/dashboardColumnHintsStorage.ts +0 -57
  449. package/lib/dashboardCopy.ts +0 -1831
  450. package/lib/dashboardDetachedUrlHintStorage.ts +0 -24
  451. package/lib/dashboardGitIdentityBannerStorage.ts +0 -36
  452. package/lib/dashboardLangStorage.ts +0 -72
  453. package/lib/dashboardQuickSearch.ts +0 -476
  454. package/lib/dashboardQuickSearchQuery.test.ts +0 -63
  455. package/lib/dashboardQuickSearchQuery.ts +0 -179
  456. package/lib/dashboardSessionNav.ts +0 -33
  457. package/lib/dashboardShortcuts.ts +0 -268
  458. package/lib/dashboardTimeZone.ts +0 -91
  459. package/lib/dashboardTourStorage.ts +0 -68
  460. package/lib/dataDir.test.ts +0 -87
  461. package/lib/dataDir.ts +0 -83
  462. package/lib/devDataPreferenceFile.ts +0 -55
  463. package/lib/devDataRuntimeInfo.ts +0 -34
  464. package/lib/formatIsoShort.test.ts +0 -46
  465. package/lib/formatIsoShort.ts +0 -29
  466. package/lib/generatedUserChangelog.ts +0 -34
  467. package/lib/gitlabIssueSearch.ts +0 -8
  468. package/lib/kronoFocusDurationHistory.ts +0 -71
  469. package/lib/kronoFocusRhythm.test.ts +0 -130
  470. package/lib/kronoFocusRhythm.ts +0 -46
  471. package/lib/kronoFocusTimerUrgency.test.ts +0 -74
  472. package/lib/kronoFocusTimerUrgency.ts +0 -24
  473. package/lib/kronosysApi.ts +0 -143
  474. package/lib/legacyEditorPayloadKeys.ts +0 -52
  475. package/lib/legacyKronoFocusStorageKeys.test.ts +0 -29
  476. package/lib/legacyKronoFocusStorageKeys.ts +0 -32
  477. package/lib/licensesCopy.ts +0 -128
  478. package/lib/openPlainTextInNewTab.ts +0 -49
  479. package/lib/readKronosysPackageVersion.ts +0 -10
  480. package/lib/reportingAggregate.test.ts +0 -325
  481. package/lib/reportingAggregate.ts +0 -819
  482. package/lib/reportingDatePresets.ts +0 -41
  483. package/lib/reportingMetricHelp.ts +0 -430
  484. package/lib/reportingNonFinalIndicators.test.ts +0 -157
  485. package/lib/reportingNonFinalIndicators.ts +0 -102
  486. package/lib/reportingStrings.ts +0 -491
  487. package/lib/reportingTagWeekBreakdown.test.ts +0 -141
  488. package/lib/reportingTagWeekBreakdown.ts +0 -181
  489. package/lib/reportingWeekLayout.test.ts +0 -239
  490. package/lib/reportingWeekLayout.ts +0 -313
  491. package/lib/sessionAssiduity.test.ts +0 -25
  492. package/lib/sessionAssiduity.ts +0 -33
  493. package/lib/sessionEndReason.ts +0 -55
  494. package/lib/sessionEndWarnings.test.ts +0 -200
  495. package/lib/sessionEndWarnings.ts +0 -125
  496. package/lib/sessionListMerge.test.ts +0 -101
  497. package/lib/sessionListMerge.ts +0 -70
  498. package/lib/sessionTaskSidebarStats.test.ts +0 -24
  499. package/lib/sessionTaskSidebarStats.ts +0 -54
  500. package/lib/settingsCopy.ts +0 -1276
  501. package/lib/taskParsing.test.ts +0 -153
  502. package/lib/taskParsing.ts +0 -737
  503. package/lib/theme.ts +0 -15
  504. package/lib/translucentButtonClasses.ts +0 -34
  505. package/lib/usageProfile.test.ts +0 -84
  506. package/lib/usageProfile.ts +0 -52
  507. package/lib/userGuideCopy.ts +0 -464
  508. package/lib/workspaceLocDefaults.ts +0 -21
  509. package/next-env.d.ts +0 -6
  510. package/next.config.ts +0 -16
  511. package/postcss.config.mjs +0 -12
  512. package/public/apple-icon.png +0 -0
  513. package/public/favicon.ico +0 -0
  514. package/public/file.svg +0 -1
  515. package/public/globe.svg +0 -1
  516. package/public/icon-192.png +0 -0
  517. package/public/icon-512.png +0 -0
  518. package/public/icon.png +0 -0
  519. package/public/next.svg +0 -1
  520. package/public/sw.js +0 -13
  521. package/public/traceback.png +0 -0
  522. package/public/vercel.svg +0 -1
  523. package/public/window.svg +0 -1
  524. package/server/actionDispatch.test.ts +0 -723
  525. package/server/actionDispatch.ts +0 -1476
  526. package/server/actionTaskSession.test.ts +0 -713
  527. package/server/actionTaskSession.ts +0 -717
  528. package/server/db.ts +0 -42
  529. package/server/defaultCfg.ts +0 -87
  530. package/server/gitlabTokenStore.ts +0 -34
  531. package/server/kronoFocusHydrate.test.ts +0 -142
  532. package/server/kronoFocusHydrate.ts +0 -69
  533. package/server/kronoFocusMigrate.test.ts +0 -53
  534. package/server/kronoFocusMigrate.ts +0 -78
  535. package/server/mainTimerHydrate.test.ts +0 -65
  536. package/server/mainTimerHydrate.ts +0 -53
  537. package/server/payloadStore.test.ts +0 -78
  538. package/server/payloadStore.ts +0 -83
  539. package/server/sessionWallHydrate.test.ts +0 -46
  540. package/server/sessionWallHydrate.ts +0 -88
  541. package/tsconfig.json +0 -41
  542. /package/.next/standalone/.next/static/{nzXLNr4JHdARH6TrNp6lD → 74KXPItqRU0btbDqBJB0U}/_ssgManifest.js +0 -0
@@ -1,15 +0,0 @@
1
- {
2
- "headers": {
3
- "x-nextjs-stale-time": "300",
4
- "x-nextjs-prerender": "1",
5
- "x-next-cache-tags": "_N_T_/layout,_N_T_/settings/layout,_N_T_/settings/page,_N_T_/settings"
6
- },
7
- "segmentPaths": [
8
- "/_tree",
9
- "/_full",
10
- "/settings/__PAGE__",
11
- "/settings",
12
- "/_index",
13
- "/_head"
14
- ]
15
- }
@@ -1,29 +0,0 @@
1
- 1:"$Sreact.fragment"
2
- 2:I[7249,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],"ThemeProvider"]
3
- 3:I[9956,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],"KronosysPackageVersionProvider"]
4
- 4:I[2228,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],"DashboardToastProvider"]
5
- 5:I[8428,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],"KronosysPayloadProvider"]
6
- 6:I[6756,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],"PwaRegister"]
7
- 7:I[7121,[],""]
8
- 8:I[4581,[],""]
9
- 9:I[7072,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],"AppShellLiveSessionDrawer"]
10
- a:I[8500,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],""]
11
- b:I[1304,[],"ClientPageRoot"]
12
- c:I[2664,["479","static/chunks/479-489c69d6eff752a2.js","993","static/chunks/993-1cb2e8683d684629.js","270","static/chunks/270-e7888e3c35848652.js","155","static/chunks/155-cdedad19f06ee45f.js","598","static/chunks/598-cc57a6fa6801c570.js","690","static/chunks/690-7c901031274462f8.js","662","static/chunks/app/settings/page-b7eac8aeb092494d.js"],"default"]
13
- f:I[484,[],"OutletBoundary"]
14
- 10:"$Sreact.suspense"
15
- 12:I[484,[],"ViewportBoundary"]
16
- 14:I[484,[],"MetadataBoundary"]
17
- 16:I[7123,[],"default",1]
18
- :HL["/_next/static/media/0a86735c6520d94f-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
19
- :HL["/_next/static/media/5b25d60b4670300e-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
20
- :HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
21
- :HL["/_next/static/css/2cb439d7bd6673bc.css","style"]
22
- :HL["/_next/static/css/6fcf52f950db63c8.css","style"]
23
- 0:{"P":null,"c":["","settings"],"q":"","i":false,"f":[[["",{"children":["settings",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/2cb439d7bd6673bc.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6fcf52f950db63c8.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"fr","className":"__variable_cc5b65 __variable_9a8899 h-full scroll-smooth antialiased","suppressHydrationWarning":true,"children":["$","body",null,{"className":"flex min-h-full flex-col font-sans","children":[["$","script",null,{"dangerouslySetInnerHTML":{"__html":"try {\n var key = \"kronosys-dashboard-theme\";\n var stored = localStorage.getItem(key);\n var theme = stored === \"light\" || stored === \"dark\"\n ? stored\n : (window.matchMedia && window.matchMedia(\"(prefers-color-scheme: light)\").matches ? \"light\" : \"dark\");\n document.documentElement.classList.toggle(\"dark\", theme === \"dark\");\n } catch (_) {}\n"}}],["$","$L2",null,{"children":["$","$L3",null,{"version":"1.0.0-beta.4","children":["$","$L4",null,{"children":["$","$L5",null,{"children":[["$","$L6",null,{}],["$","div",null,{"className":"flex min-h-full flex-1 flex-col","children":["$","$L7",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L8",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","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."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L9",null,{}],["$","footer",null,{"className":"border-t border-zinc-200 bg-zinc-50 px-4 py-3 text-center text-[0.7rem] leading-relaxed text-zinc-600 dark:border-zinc-800/80 dark:bg-zinc-900 dark:text-zinc-500 sm:py-4 sm:text-xs","children":["$","p",null,{"children":[["$","$La",null,{"href":"/licenses","className":"text-zinc-600 underline-offset-2 hover:text-violet-700 dark:text-zinc-400 dark:hover:text-violet-300 hover:underline","children":"Licences et mentions · Licenses"}],["$","span",null,{"className":"text-zinc-400 dark:text-zinc-600","aria-hidden":true,"children":" · "}],["$","span",null,{"children":"Kronosys — MIT License"}]]}]}]]}]}]}]}]]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L7",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L8",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$Lb",null,{"Component":"$c","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@d","$@e"]}}],null,["$","$Lf",null,{"children":["$","$10",null,{"name":"Next.MetadataOutlet","children":"$@11"}]}]]}],{},null,false,null]},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$L12",null,{"children":"$L13"}],["$","div",null,{"hidden":true,"children":["$","$L14",null,{"children":["$","$10",null,{"name":"Next.Metadata","children":"$L15"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$16",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"nzXLNr4JHdARH6TrNp6lD"}
24
- d:{}
25
- e:"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params"
26
- 13:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","2",{"name":"theme-color","content":"#18181b"}],["$","meta","3",{"name":"color-scheme","content":"dark light"}]]
27
- 17:I[6869,[],"IconMark"]
28
- 11:null
29
- 15:[["$","title","0",{"children":"Paramètres — Kronosys"}],["$","meta","1",{"name":"description","content":"Kronosys : paramètres et stockage local via l’API du serveur."}],["$","meta","2",{"name":"application-name","content":"Kronosys Dashboard"}],["$","link","3",{"rel":"manifest","href":"/manifest.webmanifest","crossOrigin":"$undefined"}],["$","meta","4",{"name":"format-detection","content":"telephone=no"}],["$","meta","5",{"name":"mobile-web-app-capable","content":"yes"}],["$","meta","6",{"name":"apple-mobile-web-app-title","content":"Kronosys"}],["$","meta","7",{"name":"apple-mobile-web-app-status-bar-style","content":"black-translucent"}],["$","link","8",{"rel":"icon","href":"/icon-192.png","sizes":"192x192","type":"image/png"}],["$","link","9",{"rel":"icon","href":"/icon-512.png","sizes":"512x512","type":"image/png"}],["$","link","10",{"rel":"apple-touch-icon","href":"/apple-icon.png","sizes":"180x180","type":"image/png"}],["$","$L17","11",{}]]
@@ -1,29 +0,0 @@
1
- 1:"$Sreact.fragment"
2
- 2:I[7249,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],"ThemeProvider"]
3
- 3:I[9956,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],"KronosysPackageVersionProvider"]
4
- 4:I[2228,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],"DashboardToastProvider"]
5
- 5:I[8428,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],"KronosysPayloadProvider"]
6
- 6:I[6756,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],"PwaRegister"]
7
- 7:I[7121,[],""]
8
- 8:I[4581,[],""]
9
- 9:I[7072,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],"AppShellLiveSessionDrawer"]
10
- a:I[8500,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],""]
11
- b:I[1304,[],"ClientPageRoot"]
12
- c:I[2664,["479","static/chunks/479-489c69d6eff752a2.js","993","static/chunks/993-1cb2e8683d684629.js","270","static/chunks/270-e7888e3c35848652.js","155","static/chunks/155-cdedad19f06ee45f.js","598","static/chunks/598-cc57a6fa6801c570.js","690","static/chunks/690-7c901031274462f8.js","662","static/chunks/app/settings/page-b7eac8aeb092494d.js"],"default"]
13
- f:I[484,[],"OutletBoundary"]
14
- 10:"$Sreact.suspense"
15
- 12:I[484,[],"ViewportBoundary"]
16
- 14:I[484,[],"MetadataBoundary"]
17
- 16:I[7123,[],"default",1]
18
- :HL["/_next/static/media/0a86735c6520d94f-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
19
- :HL["/_next/static/media/5b25d60b4670300e-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
20
- :HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
21
- :HL["/_next/static/css/2cb439d7bd6673bc.css","style"]
22
- :HL["/_next/static/css/6fcf52f950db63c8.css","style"]
23
- 0:{"P":null,"c":["","settings"],"q":"","i":false,"f":[[["",{"children":["settings",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/2cb439d7bd6673bc.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6fcf52f950db63c8.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"fr","className":"__variable_cc5b65 __variable_9a8899 h-full scroll-smooth antialiased","suppressHydrationWarning":true,"children":["$","body",null,{"className":"flex min-h-full flex-col font-sans","children":[["$","script",null,{"dangerouslySetInnerHTML":{"__html":"try {\n var key = \"kronosys-dashboard-theme\";\n var stored = localStorage.getItem(key);\n var theme = stored === \"light\" || stored === \"dark\"\n ? stored\n : (window.matchMedia && window.matchMedia(\"(prefers-color-scheme: light)\").matches ? \"light\" : \"dark\");\n document.documentElement.classList.toggle(\"dark\", theme === \"dark\");\n } catch (_) {}\n"}}],["$","$L2",null,{"children":["$","$L3",null,{"version":"1.0.0-beta.4","children":["$","$L4",null,{"children":["$","$L5",null,{"children":[["$","$L6",null,{}],["$","div",null,{"className":"flex min-h-full flex-1 flex-col","children":["$","$L7",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L8",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","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."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}],["$","$L9",null,{}],["$","footer",null,{"className":"border-t border-zinc-200 bg-zinc-50 px-4 py-3 text-center text-[0.7rem] leading-relaxed text-zinc-600 dark:border-zinc-800/80 dark:bg-zinc-900 dark:text-zinc-500 sm:py-4 sm:text-xs","children":["$","p",null,{"children":[["$","$La",null,{"href":"/licenses","className":"text-zinc-600 underline-offset-2 hover:text-violet-700 dark:text-zinc-400 dark:hover:text-violet-300 hover:underline","children":"Licences et mentions · Licenses"}],["$","span",null,{"className":"text-zinc-400 dark:text-zinc-600","aria-hidden":true,"children":" · "}],["$","span",null,{"children":"Kronosys — MIT License"}]]}]}]]}]}]}]}]]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L7",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L8",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$Lb",null,{"Component":"$c","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@d","$@e"]}}],null,["$","$Lf",null,{"children":["$","$10",null,{"name":"Next.MetadataOutlet","children":"$@11"}]}]]}],{},null,false,null]},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$L12",null,{"children":"$L13"}],["$","div",null,{"hidden":true,"children":["$","$L14",null,{"children":["$","$10",null,{"name":"Next.Metadata","children":"$L15"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$16",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"nzXLNr4JHdARH6TrNp6lD"}
24
- d:{}
25
- e:"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params"
26
- 13:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","2",{"name":"theme-color","content":"#18181b"}],["$","meta","3",{"name":"color-scheme","content":"dark light"}]]
27
- 17:I[6869,[],"IconMark"]
28
- 11:null
29
- 15:[["$","title","0",{"children":"Paramètres — Kronosys"}],["$","meta","1",{"name":"description","content":"Kronosys : paramètres et stockage local via l’API du serveur."}],["$","meta","2",{"name":"application-name","content":"Kronosys Dashboard"}],["$","link","3",{"rel":"manifest","href":"/manifest.webmanifest","crossOrigin":"$undefined"}],["$","meta","4",{"name":"format-detection","content":"telephone=no"}],["$","meta","5",{"name":"mobile-web-app-capable","content":"yes"}],["$","meta","6",{"name":"apple-mobile-web-app-title","content":"Kronosys"}],["$","meta","7",{"name":"apple-mobile-web-app-status-bar-style","content":"black-translucent"}],["$","link","8",{"rel":"icon","href":"/icon-192.png","sizes":"192x192","type":"image/png"}],["$","link","9",{"rel":"icon","href":"/icon-512.png","sizes":"512x512","type":"image/png"}],["$","link","10",{"rel":"apple-touch-icon","href":"/apple-icon.png","sizes":"180x180","type":"image/png"}],["$","$L17","11",{}]]
@@ -1,6 +0,0 @@
1
- 1:"$Sreact.fragment"
2
- 2:I[484,[],"ViewportBoundary"]
3
- 3:I[484,[],"MetadataBoundary"]
4
- 4:"$Sreact.suspense"
5
- 5:I[6869,[],"IconMark"]
6
- 0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","2",{"name":"theme-color","content":"#18181b"}],["$","meta","3",{"name":"color-scheme","content":"dark light"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Paramètres — Kronosys"}],["$","meta","1",{"name":"description","content":"Kronosys : paramètres et stockage local via l’API du serveur."}],["$","meta","2",{"name":"application-name","content":"Kronosys Dashboard"}],["$","link","3",{"rel":"manifest","href":"/manifest.webmanifest"}],["$","meta","4",{"name":"format-detection","content":"telephone=no"}],["$","meta","5",{"name":"mobile-web-app-capable","content":"yes"}],["$","meta","6",{"name":"apple-mobile-web-app-title","content":"Kronosys"}],["$","meta","7",{"name":"apple-mobile-web-app-status-bar-style","content":"black-translucent"}],["$","link","8",{"rel":"icon","href":"/icon-192.png","sizes":"192x192","type":"image/png"}],["$","link","9",{"rel":"icon","href":"/icon-512.png","sizes":"512x512","type":"image/png"}],["$","link","10",{"rel":"apple-touch-icon","href":"/apple-icon.png","sizes":"180x180","type":"image/png"}],["$","$L5","11",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"nzXLNr4JHdARH6TrNp6lD"}
@@ -1,13 +0,0 @@
1
- 1:"$Sreact.fragment"
2
- 2:I[7249,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],"ThemeProvider"]
3
- 3:I[9956,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],"KronosysPackageVersionProvider"]
4
- 4:I[2228,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],"DashboardToastProvider"]
5
- 5:I[8428,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],"KronosysPayloadProvider"]
6
- 6:I[6756,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],"PwaRegister"]
7
- 7:I[7121,[],""]
8
- 8:I[4581,[],""]
9
- 9:I[7072,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],"AppShellLiveSessionDrawer"]
10
- a:I[8500,["479","static/chunks/479-489c69d6eff752a2.js","270","static/chunks/270-e7888e3c35848652.js","598","static/chunks/598-cc57a6fa6801c570.js","177","static/chunks/app/layout-3c9b2ade2cd28d2c.js"],""]
11
- :HL["/_next/static/css/2cb439d7bd6673bc.css","style"]
12
- :HL["/_next/static/css/6fcf52f950db63c8.css","style"]
13
- 0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/2cb439d7bd6673bc.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6fcf52f950db63c8.css","precedence":"next"}]],["$","html",null,{"lang":"fr","className":"__variable_cc5b65 __variable_9a8899 h-full scroll-smooth antialiased","suppressHydrationWarning":true,"children":["$","body",null,{"className":"flex min-h-full flex-col font-sans","children":[["$","script",null,{"dangerouslySetInnerHTML":{"__html":"try {\n var key = \"kronosys-dashboard-theme\";\n var stored = localStorage.getItem(key);\n var theme = stored === \"light\" || stored === \"dark\"\n ? stored\n : (window.matchMedia && window.matchMedia(\"(prefers-color-scheme: light)\").matches ? \"light\" : \"dark\");\n document.documentElement.classList.toggle(\"dark\", theme === \"dark\");\n } catch (_) {}\n"}}],["$","$L2",null,{"children":["$","$L3",null,{"version":"1.0.0-beta.4","children":["$","$L4",null,{"children":["$","$L5",null,{"children":[["$","$L6",null,{}],["$","div",null,{"className":"flex min-h-full flex-1 flex-col","children":["$","$L7",null,{"parallelRouterKey":"children","template":["$","$L8",null,{}],"notFound":[[["$","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."}]}]]}]}]],[]]}]}],["$","$L9",null,{}],["$","footer",null,{"className":"border-t border-zinc-200 bg-zinc-50 px-4 py-3 text-center text-[0.7rem] leading-relaxed text-zinc-600 dark:border-zinc-800/80 dark:bg-zinc-900 dark:text-zinc-500 sm:py-4 sm:text-xs","children":["$","p",null,{"children":[["$","$La",null,{"href":"/licenses","className":"text-zinc-600 underline-offset-2 hover:text-violet-700 dark:text-zinc-400 dark:hover:text-violet-300 hover:underline","children":"Licences et mentions · Licenses"}],["$","span",null,{"className":"text-zinc-400 dark:text-zinc-600","aria-hidden":true,"children":" · "}],["$","span",null,{"children":"Kronosys — MIT License"}]]}]}]]}]}]}]}]]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"nzXLNr4JHdARH6TrNp6lD"}
@@ -1,6 +0,0 @@
1
- :HL["/_next/static/media/0a86735c6520d94f-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
2
- :HL["/_next/static/media/5b25d60b4670300e-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
3
- :HL["/_next/static/media/93f479601ee12b01-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
4
- :HL["/_next/static/css/2cb439d7bd6673bc.css","style"]
5
- :HL["/_next/static/css/6fcf52f950db63c8.css","style"]
6
- 0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"settings","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"nzXLNr4JHdARH6TrNp6lD"}
@@ -1,9 +0,0 @@
1
- 1:"$Sreact.fragment"
2
- 2:I[1304,[],"ClientPageRoot"]
3
- 3:I[2664,["479","static/chunks/479-489c69d6eff752a2.js","993","static/chunks/993-1cb2e8683d684629.js","270","static/chunks/270-e7888e3c35848652.js","155","static/chunks/155-cdedad19f06ee45f.js","598","static/chunks/598-cc57a6fa6801c570.js","690","static/chunks/690-7c901031274462f8.js","662","static/chunks/app/settings/page-b7eac8aeb092494d.js"],"default"]
4
- 6:I[484,[],"OutletBoundary"]
5
- 7:"$Sreact.suspense"
6
- 0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],null,["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"nzXLNr4JHdARH6TrNp6lD"}
7
- 4:{}
8
- 5:"$0:rsc:props:children:0:props:serverProvidedParams:params"
9
- 8:null
@@ -1,4 +0,0 @@
1
- 1:"$Sreact.fragment"
2
- 2:I[7121,[],""]
3
- 3:I[4581,[],""]
4
- 0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"nzXLNr4JHdARH6TrNp6lD"}
@@ -1,9 +0,0 @@
1
- exports.id=104,exports.ids=[104],exports.modules={256:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>u,metadata:()=>s,viewport:()=>t});var d=c(5735),e=c(6893),f=c.n(e),g=c(8205),h=c.n(g),i=c(5876),j=c(3059),k=c.n(j);function l(){return(0,d.jsx)("footer",{className:"border-t border-zinc-200 bg-zinc-50 px-4 py-3 text-center text-[0.7rem] leading-relaxed text-zinc-600 dark:border-zinc-800/80 dark:bg-zinc-900 dark:text-zinc-500 sm:py-4 sm:text-xs",children:(0,d.jsxs)("p",{children:[(0,d.jsx)(k(),{href:"/licenses",className:"text-zinc-600 underline-offset-2 hover:text-violet-700 dark:text-zinc-400 dark:hover:text-violet-300 hover:underline",children:"Licences et mentions \xb7 Licenses"}),(0,d.jsx)("span",{className:"text-zinc-400 dark:text-zinc-600","aria-hidden":!0,children:" \xb7 "}),(0,d.jsx)("span",{children:"Kronosys — MIT License"})]})})}var m=c(7843),n=c(4490),o=c(1066),p=c(3356),q=c(8528),r=c(8032);c(2704);let s={title:"Kronosys — Tableau de bord",description:"Kronosys : sessions, t\xe2ches, KronoFocus — application web locale (Next.js + SQLite).",applicationName:"Kronosys Dashboard",icons:{icon:[{url:"/icon-192.png",sizes:"192x192",type:"image/png"},{url:"/icon-512.png",sizes:"512x512",type:"image/png"}],apple:[{url:"/apple-icon.png",sizes:"180x180",type:"image/png"}]},appleWebApp:{capable:!0,title:"Kronosys",statusBarStyle:"black-translucent"},formatDetection:{telephone:!1}},t={themeColor:"#18181b",colorScheme:"dark light"};function u({children:a}){let b=(0,r.Z)();return(0,d.jsx)("html",{lang:"fr",className:`${f().variable} ${h().variable} h-full scroll-smooth antialiased`,suppressHydrationWarning:!0,children:(0,d.jsxs)("body",{className:"flex min-h-full flex-col font-sans",children:[(0,d.jsx)("script",{dangerouslySetInnerHTML:{__html:`try {
2
- var key = ${JSON.stringify("kronosys-dashboard-theme")};
3
- var stored = localStorage.getItem(key);
4
- var theme = stored === "light" || stored === "dark"
5
- ? stored
6
- : (window.matchMedia && window.matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark");
7
- document.documentElement.classList.toggle("dark", theme === "dark");
8
- } catch (_) {}
9
- `}}),(0,d.jsx)(m.ThemeProvider,{children:(0,d.jsx)(n.KronosysPackageVersionProvider,{version:b,children:(0,d.jsx)(o.DashboardToastProvider,{children:(0,d.jsxs)(p.KronosysPayloadProvider,{children:[(0,d.jsx)(i.PwaRegister,{}),(0,d.jsx)("div",{className:"flex min-h-full flex-1 flex-col",children:a}),(0,d.jsx)(q.AppShellLiveSessionDrawer,{}),(0,d.jsx)(l,{})]})})})})]})})}},1066:(a,b,c)=>{"use strict";c.d(b,{DashboardToastProvider:()=>e});var d=c(7943);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call DashboardToastProvider() from the server but DashboardToastProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/feelx/code/projects/business/nightkatana/project-kronosys/components/dashboard/DashboardToastProvider.tsx","DashboardToastProvider");(0,d.registerClientReference)(function(){throw Error("Attempted to call useDashboardToast() from the server but useDashboardToast is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/feelx/code/projects/business/nightkatana/project-kronosys/components/dashboard/DashboardToastProvider.tsx","useDashboardToast")},1355:(a,b,c)=>{"use strict";function d(a,b){let c="string"==typeof b?b.trim():"";if(!c)return a;let d=a.indexOf("#"),e=d>=0?a.slice(0,d):a,f=d>=0?a.slice(d):"",g=e.includes("?")?"&":"?";return`${e}${g}session=${encodeURIComponent(c)}${f}`}function e(a,b,c){let d=new URLSearchParams(b);null===c||""===c?d.delete("session"):d.set("session",c);let e=d.toString();return e?`${a}?${e}`:a}c.d(b,{c:()=>d,q:()=>e})},1788:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>g,V:()=>h});var d=c(8249),e=c(7484);let f=(0,e.createContext)(null);function g({children:a}){let[b,c]=(0,e.useState)("light"),[h,i]=(0,e.useState)(!1),j=(0,e.useCallback)(a=>{c(a)},[]),k=(0,e.useCallback)(()=>{c(a=>"dark"===a?"light":"dark")},[]);return(0,d.jsx)(f.Provider,{value:{theme:b,setTheme:j,toggleTheme:k,mounted:h},children:a})}function h(){let a=(0,e.useContext)(f);if(!a)throw Error("useKronosysTheme must be used within ThemeProvider");return a}},2576:(a,b,c)=>{"use strict";c.d(b,{KronosysPackageVersionProvider:()=>g,a:()=>h});var d=c(8249),e=c(7484);let f=(0,e.createContext)("0.0.0");function g({version:a,children:b}){return(0,d.jsx)(f.Provider,{value:a,children:b})}function h(){return(0,e.useContext)(f)}},2685:(a,b,c)=>{Promise.resolve().then(c.bind(c,8528)),Promise.resolve().then(c.bind(c,1066)),Promise.resolve().then(c.bind(c,4490)),Promise.resolve().then(c.bind(c,3356)),Promise.resolve().then(c.bind(c,5876)),Promise.resolve().then(c.bind(c,7843)),Promise.resolve().then(c.t.bind(c,3318,23))},2704:()=>{},2829:(a,b,c)=>{Promise.resolve().then(c.bind(c,7178)),Promise.resolve().then(c.bind(c,4464)),Promise.resolve().then(c.bind(c,2576)),Promise.resolve().then(c.bind(c,4682)),Promise.resolve().then(c.bind(c,9806)),Promise.resolve().then(c.bind(c,1788)),Promise.resolve().then(c.t.bind(c,2116,23))},2987:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(8868);let e=async a=>[{type:"image/png",sizes:"192x192",url:(0,d.fillMetadataSegment)(".",await a.params,"icon.png",!0)+"?cb225cdf0cbf2d52"}]},3356:(a,b,c)=>{"use strict";c.d(b,{KronosysPayloadProvider:()=>e});var d=c(7943);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call KronosysPayloadProvider() from the server but KronosysPayloadProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/feelx/code/projects/business/nightkatana/project-kronosys/components/KronosysPayloadProvider.tsx","KronosysPayloadProvider");(0,d.registerClientReference)(function(){throw Error("Attempted to call useKronosysPayload() from the server but useKronosysPayload is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/feelx/code/projects/business/nightkatana/project-kronosys/components/KronosysPayloadProvider.tsx","useKronosysPayload")},3912:(a,b,c)=>{"use strict";async function d(a){let b=`_=${Date.now()}`,c=await fetch(`/api/state?view=${a}&${b}`,{cache:"no-store",headers:{"Cache-Control":"no-cache",Pragma:"no-cache"}});if(!c.ok)throw Error(`Kronosys API ${c.status}: ${await c.text()}`);return c.json()}async function e(a,b){let c,d=await fetch("/api/action",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a),signal:b?.signal}),e=await d.text();try{c=e?JSON.parse(e):{}}catch{throw Error(e.trim()?e:`Kronosys action ${d.status} (invalid JSON)`)}if(!d.ok)throw Error("string"==typeof c?.error&&c.error.length>0?c.error:e||`HTTP ${d.status}`);return c}c.d(b,{$:()=>e,e:()=>d})},4464:(a,b,c)=>{"use strict";c.d(b,{DashboardToastProvider:()=>g,f:()=>h});var d=c(8249),e=c(7484);let f=(0,e.createContext)(null);function g({children:a}){let[b,c]=(0,e.useState)([]),h=(0,e.useRef)(0),i=(0,e.useCallback)(a=>{let b=a.trim();if(!b)return;let d=++h.current;c(a=>[...a,{id:d,message:b}]),window.setTimeout(()=>{c(a=>a.filter(a=>a.id!==d))},5500)},[]),j=(0,e.useMemo)(()=>({pushToast:i}),[i]);return(0,d.jsxs)(f.Provider,{value:j,children:[a,(0,d.jsx)("div",{className:"pointer-events-none fixed bottom-4 right-4 z-[100] flex w-[min(calc(100vw-2rem),22rem)] flex-col gap-2","aria-live":"polite",children:b.map(a=>(0,d.jsx)("div",{className:"pointer-events-auto rounded-lg border border-zinc-200 bg-white/95 px-4 py-3 text-sm leading-snug text-zinc-800 shadow-lg dark:border-zinc-600 dark:bg-zinc-900/95 dark:text-zinc-100",children:a.message},a.id))})]})}function h(){let a=(0,e.useContext)(f);return a||{pushToast:()=>{}}}},4490:(a,b,c)=>{"use strict";c.d(b,{KronosysPackageVersionProvider:()=>e});var d=c(7943);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call KronosysPackageVersionProvider() from the server but KronosysPackageVersionProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/feelx/code/projects/business/nightkatana/project-kronosys/components/KronosysPackageVersionProvider.tsx","KronosysPackageVersionProvider");(0,d.registerClientReference)(function(){throw Error("Attempted to call useKronosysPackageVersion() from the server but useKronosysPackageVersion is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/feelx/code/projects/business/nightkatana/project-kronosys/components/KronosysPackageVersionProvider.tsx","useKronosysPackageVersion")},4682:(a,b,c)=>{"use strict";c.d(b,{KronosysPayloadProvider:()=>i,y:()=>j});var d=c(8249),e=c(7484),f=c(9099),g=c(3912);let h=(0,e.createContext)(null);function i({children:a}){let b=(0,f.useRouter)(),[c,j]=(0,e.useState)(null),[k,l]=(0,e.useState)(null),m=(0,e.useRef)(!0),n=(0,e.useRef)(null),o=(0,e.useCallback)(async a=>{try{let c=await (0,g.e)("dashboard");if("updateData"===c.type&&c.payload){let a=c.payload;n.current=a,j(a),l(null)}return m.current=!0,a?.routerInvalidate===!0&&b.refresh(),!0}catch(a){return m.current=!1,l(a instanceof Error?a.message:String(a)),!1}},[b]),p=(0,e.useCallback)(()=>n.current,[]),q=(0,e.useMemo)(()=>({payload:c,error:k,refresh:o,getLatestPayload:p}),[c,k,o,p]);return(0,d.jsx)(h.Provider,{value:q,children:a})}function j(){let a=(0,e.useContext)(h);if(!a)throw Error("useKronosysPayload doit \xeatre utilis\xe9 sous KronosysPayloadProvider.");return a}},5126:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,1921,23))},5516:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,1921,23)),Promise.resolve().then(c.t.bind(c,440,23)),Promise.resolve().then(c.t.bind(c,4342,23)),Promise.resolve().then(c.t.bind(c,2265,23)),Promise.resolve().then(c.t.bind(c,5421,23)),Promise.resolve().then(c.t.bind(c,1335,23)),Promise.resolve().then(c.t.bind(c,664,23)),Promise.resolve().then(c.bind(c,4661))},5582:(a,b,c)=>{"use strict";c.d(b,{F:()=>e});var d=c(7484);function e(a,b){let c=Math.max(0,Math.floor(a)),[e,f]=(0,d.useState)(c);return b?e:c}},5761:(a,b,c)=>{"use strict";c.d(b,{c:()=>e});var d=c(7484);function e(a,b,c){let[e,f]=(0,d.useState)(null);return"running"===b&&"number"==typeof c&&Number.isFinite(c)?e??Math.max(0,Math.floor(a)):Math.max(0,Math.floor(a))}},5876:(a,b,c)=>{"use strict";c.d(b,{PwaRegister:()=>d});let d=(0,c(7943).registerClientReference)(function(){throw Error("Attempted to call PwaRegister() from the server but PwaRegister is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/feelx/code/projects/business/nightkatana/project-kronosys/components/PwaRegister.tsx","PwaRegister")},6487:()=>{},6721:(a,b,c)=>{"use strict";c.d(b,{$U:()=>t,BW:()=>w,Bf:()=>A,CH:()=>z,Ds:()=>j,G:()=>u,H_:()=>p,SN:()=>i,T8:()=>h,Td:()=>D,Uw:()=>C,ZW:()=>q,a3:()=>B,ax:()=>v,hk:()=>x,jM:()=>m,jN:()=>r,nI:()=>s,qu:()=>l,yC:()=>y});let d=/(?:^|\s)#([^\s#]+)|(?<=[^\s#])#([^\s#]+)/g,e=/(?:^|\s)@([^\s@]+)|(?<=[^\s@])@([^\s@]+)/g,f=/(?:^|\s)@([^\s@#]+)#([^\s#]+)/g;function g(a){let b,c=[],d=new Set;return{core:a.replace(f,(a,e,f)=>{let g=(e||"").trim(),h=(f||"").trim();if(!g||!h)return"";b||(b=g);let i=`${g}#${h}`,j=i.toLowerCase();return d.has(j)||(d.add(j),c.push(i)),""}).replace(/\s+/g," ").trim(),scopedTags:c,scopedProjectHint:b}}function h(a){let b=a.trim(),c=b.indexOf("#");if(c<=0||c>=b.length-1)return null;let d=b.slice(0,c).trim(),e=b.slice(c+1).trim();return!d||!e||e.includes("#")?null:{projectKey:d,localTag:e}}function i(a){return null!==h(a)}function j(a,b){let c=b?.trim();return c?a.filter(a=>(function(a,b){let c=h(a);if(!c)return!0;let d=b?.trim();return!!d&&c.projectKey.toLowerCase()===l(d).toLowerCase()})(a,c)):a.filter(a=>!i(a))}function k(a){let b,{core:c,scopedTags:d,scopedProjectHint:f}=g(a),{core:h,project:i}={core:c.replace(e,(a,c,d)=>{let e=(c||d||"").trim();return!e||e.includes("#")||b||(b=l(e)),""}).replace(/\s+/g," ").trim(),project:b};return{core:h,project:i??f,scopedTags:d}}function l(a){return a.replace(/^@+/,"").trim()}function m(a){if(!/@/.test(a))return;let{project:b}=k(a);return b??null}function n(a,b){let c=new Set,d=[],e=a=>{let b=t(a).trim();if(!b)return;let e=b.toLowerCase();c.has(e)||(c.add(e),d.push(b))};for(let b of a)e(b);for(let a of b)e(a);return d}function o(a){let{core:b,scopedTags:c}=g(a),e=[],f=new Set;for(let a of function(a){let b,c=RegExp(d.source,"g"),e=[],f=0;for(;null!==(b=c.exec(a));){if(b.index>f){let c=a.slice(f,b.index);c.length>0&&e.push({kind:"text",value:c})}let c=(b[1]||b[2]||"").trim();c.length>0&&e.push({kind:"tag",value:`#${c}`}),f=b.index+b[0].length}if(f<a.length){let b=a.slice(f);b.length>0&&e.push({kind:"text",value:b})}return 0===e.length&&a.trim().length>0&&e.push({kind:"text",value:a}),e}(b)){if("tag"!==a.kind)continue;let b=a.value.replace(/^#/,"").trim();if(0===b.length)continue;let c=b.toLowerCase();f.has(c)||(f.add(c),e.push(b))}return n(c,e)}function p(a){let b,{core:c,project:e,scopedTags:f}=k(a),{name:g,tags:h}=(b=o(c),{name:c.replace(RegExp(d.source,"g"),"").replace(/\s+/g," ").trim(),tags:b});return{name:g,tags:j(n(f,h),e??null),project:e}}function q(a){let{name:b,tags:c}=p(a),d=b.trim();return d.length>0?d:c.length>0?"—":a.trim()||"—"}function r(a){let{name:b,tags:c}=p(a),d=b.trim();return d.length>0?d:c.length>0?"":a.trim()}function s(a,b,c){let d=a.trim(),e=p(d),f=x(d,b),g=void 0===c?e.project:c.trim()?c:void 0,h=j(f,g??null);return{name:e.name.trim()||(h.length>0?h[0]:"")||d||(g?l(g):""),tags:h,...g?{project:g}:{}}}function t(a){return a.replace(/^#/,"")}let u="default";function v(a){let b=a&&"object"==typeof a&&!Array.isArray(a)?a:void 0;return!b||!1!==b.taskDefaultTagBucketEnabled}function w(a){let b=a.trim();return""===b||t(b).toLowerCase()===u}function x(a,b){let c=o(a),d=new Set,e=[],f=a=>{let b=t(a),c=b.toLowerCase();!b||d.has(c)||(d.add(c),e.push(b))};for(let a of c)f(a);for(let a of b??[])f(a);return e}function y(a){let b=a.trim();if(!b)return b;let c=h(b.replace(/^#/,""));if(c)return`@${c.projectKey}#${c.localTag}`;let d=b.replace(/^#/,"");return b.startsWith("#")?b:`#${d}`}function z(a,b){let c=t(String(a)).trim();return c?c.toLowerCase()===u&&b?.trim()?b.trim():y(a):""}function A(a){let b=a.trim();return b?b.startsWith("@")?b:`@${l(b)}`:b}function B(a){let b=Math.max(0,a);if(0===b)return"0 min";let c=Math.round(60*b);if(0===c)return"1 s";let d=Math.floor(c/3600),e=c%3600,f=Math.floor(e/60),g=e%60;return d>0?f>0&&g>0?`${d}h ${f}m ${g} s`:f>0?`${d}h ${f}m`:g>0?`${d}h ${g} s`:`${d}h`:f>0?g>0?`${f} min ${g} s`:`${f} min`:`${g} s`}function C(a){let b=Math.floor(Math.max(0,a)/1e3);if(0===b)return"0 s";let c=Math.floor(b/3600),d=b%3600,e=Math.floor(d/60),f=d%60;return c>0?`${c}h ${e}m ${f} s`:e>0?`${e} min ${f} s`:`${f} s`}function D(a){let b=Math.max(0,Math.floor(a)),c=Math.floor(b/36e5),d=b%36e5,e=Math.floor(d/6e4),f=d%6e4,g=Math.floor(f/1e3),h=Math.floor(f%1e3/10),i=a=>String(a).padStart(2,"0");return c>0?`${c}:${i(e)}:${i(g)}.${i(h)}`:`${e}:${i(g)}.${i(h)}`}},7178:(a,b,c)=>{"use strict";c.d(b,{AppShellLiveSessionDrawer:()=>x});var d=c(8249),e=c(2116),f=c.n(e),g=c(7484),h=c(9099),i=c(2742),j=c(3740),k=c(5368),l=c(9794),m=c(5007),n=c(4919),o=c(4682),p=c(5582),q=c(5761),r=c(9899),s=c(6721),t=c(1355);function u(a){let b=Math.max(0,Math.floor(a)),c=Math.floor(b/3600),d=Math.floor(b%3600/60);return`${String(c).padStart(2,"0")}:${String(d).padStart(2,"0")}:${String(b%60).padStart(2,"0")}`}function v({sub:a,isTracking:b}){let c="string"==typeof a.title?a.title.trim():"",e=Math.max(0,Math.floor(Number(a.durationMs)||0)),f=(0,p.F)(e,b),g=(0,s.Td)(f),h=!0===a.done;return(0,d.jsxs)("li",{className:"flex min-w-0 items-baseline justify-between gap-1.5 py-0.5",children:[(0,d.jsxs)("span",{className:"flex min-w-0 items-center gap-1",children:[h?(0,d.jsx)(i.A,{className:"size-3 shrink-0 text-emerald-600 dark:text-emerald-400",strokeWidth:2.5,"aria-hidden":!0}):(0,d.jsx)(j.A,{className:`size-2.5 shrink-0 ${b?"text-emerald-600 dark:text-emerald-400":"text-zinc-400 dark:text-zinc-500"}`,strokeWidth:2,"aria-hidden":!0}),(0,d.jsx)("span",{className:`min-w-0 truncate ${h?"text-zinc-500 line-through dark:text-zinc-500":"text-zinc-700 dark:text-zinc-300"}`,children:c||"—"})]}),(0,d.jsx)("span",{className:`shrink-0 font-mono tabular-nums tracking-tight ${b?"font-semibold text-emerald-700 dark:text-emerald-400":"text-zinc-500 dark:text-zinc-400"}`,children:g})]})}function w({task:a,subtaskTrackingLabel:b,dashboardT:c}){let e=(0,s.ZW)("string"==typeof a.name?a.name:""),f=String(a.activeSubtaskTimerId??"").trim(),g=f?function(a,b){let c=a.subtasks;if(!Array.isArray(c))return;let d=c.find(a=>String(a.id)===b),e=d?.title;return"string"==typeof e&&""!==e.trim()?e.trim():void 0}(a,f):void 0,h=Math.max(0,Math.floor(Number(a.durationMs)||0)),i=""===f,j=(0,p.F)(h,i),k=(0,s.Td)(j),l=Array.isArray(a.subtasks)?a.subtasks:[],m=l.length>0;return(0,d.jsxs)("li",{className:"min-w-0 text-xs leading-snug",children:[(0,d.jsxs)("div",{className:"flex min-w-0 items-baseline justify-between gap-2",children:[(0,d.jsx)("span",{className:"min-w-0 truncate font-medium text-zinc-800 dark:text-zinc-200",children:e}),(0,d.jsx)("span",{className:`shrink-0 font-mono text-xs tabular-nums tracking-tight ${i?"font-semibold text-emerald-700 dark:text-emerald-400":"text-zinc-600 dark:text-zinc-400"}`,"aria-live":i?"polite":"off",children:k})]}),m?(0,d.jsx)("ul",{className:"mt-1.5 space-y-0.5 border-l border-zinc-200 pl-2 dark:border-zinc-600","aria-label":c.subtasksHeading,children:l.map(a=>{let b=String(a.id??"").trim();return(0,d.jsx)(v,{sub:a,isTracking:""!==f&&f===b},b||String(a.title))})}):g?(0,d.jsxs)("span",{className:"mt-1 block truncate border-l border-zinc-200 pl-2 text-zinc-500 dark:border-zinc-600 dark:text-zinc-400",children:[b,": ",g]}):null]})}function x(){var a;let b,c=(0,h.usePathname)(),{payload:e}=(0,o.y)(),[i,j]=(0,g.useState)(!1),v=e?.current,x=v?.language==="fr"?"fr":"en",y=(0,r.z)(x),z="string"==typeof v?.sessionId?v.sessionId.trim():"",A=""!==z&&v?.archived!==!0,B="/"!==c&&!!e&&A,C=v?.sessionDurationMinutes??0,D=(0,g.useMemo)(()=>Math.max(0,Math.floor(6e4*C)),[C]),E="string"==typeof v?.endAt&&""!==v.endAt.trim(),F=""!==z&&v?.archived!==!0&&!E&&v?.isPaused!==!0,G=(0,p.F)(D,F),H=(0,g.useMemo)(()=>v?(Array.isArray(v.activeTasks)&&v.activeTasks.length>0?v.activeTasks:v.activeTask?[v.activeTask]:[]).filter(a=>a&&!a.isDone&&!a.manualTaskTimerPaused):[],[v]),I=v?.kronoFocus,J=(0,q.c)(I?.timeLeftSeconds??0,I?.status??"idle",I?.kronoFocusDeadlineAtMs),K=I?.status==="running"||I?.status==="paused",L="string"==typeof I?.linkedTaskName&&""!==I.linkedTaskName.trim()?I.linkedTaskName.trim():"",M=H.length>0||v?.isPaused===!0||K;if(!B)return null;let N=(0,t.c)("/",z),O="string"==typeof v?.sessionName&&""!==v.sessionName.trim()?v.sessionName.trim():z.slice(0,8),P=(0,s.Uw)(G);return(0,d.jsxs)("aside",{"data-kronosys-live-drawer":"",className:`fixed right-0 bottom-0 z-40 flex min-h-0 flex-col overflow-hidden rounded-l-xl border-l border-zinc-200 bg-white/95 shadow-[-6px_0_20px_-4px_rgba(0,0,0,0.08)] backdrop-blur-sm transition-[width] duration-200 dark:border-zinc-700 dark:bg-zinc-900/95 dark:shadow-[-6px_0_24px_-4px_rgba(0,0,0,0.35)] ${i?"w-11":"w-72 max-w-[min(18rem,100vw)]"} top-36 sm:top-32`,"aria-label":y.appShellLiveDrawerAria,children:[(0,d.jsxs)("div",{className:"flex shrink-0 items-center gap-1 border-b border-zinc-200 px-1 py-1.5 dark:border-zinc-700",children:[(0,d.jsx)("button",{type:"button",className:"inline-flex size-8 shrink-0 items-center justify-center rounded-md border border-zinc-200 text-zinc-600 hover:bg-zinc-100 dark:border-zinc-600 dark:text-zinc-300 dark:hover:bg-zinc-800/80",onClick:()=>j(a=>!a),title:i?y.appShellLiveDrawerExpand:y.appShellLiveDrawerCollapse,"aria-expanded":!1===i,"aria-label":i?y.appShellLiveDrawerExpand:y.appShellLiveDrawerCollapse,children:i?(0,d.jsx)(k.A,{size:18,strokeWidth:2,className:"shrink-0","aria-hidden":!0}):(0,d.jsx)(l.A,{size:18,strokeWidth:2,className:"shrink-0","aria-hidden":!0})}),i?null:(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate text-xs font-semibold uppercase tracking-wide text-zinc-500 dark:text-zinc-400",children:y.appShellLiveDrawerTitle}),M?(0,d.jsx)("span",{className:"mr-1 inline-flex size-2 shrink-0 rounded-full bg-emerald-500 shadow-[0_0_8px_rgba(16,185,129,0.7)]","aria-hidden":!0}):null]}),i&&K?(0,d.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col items-center gap-1 border-t border-zinc-200 px-0.5 py-2 dark:border-zinc-700","aria-label":y.kronoFocusTitle,children:[(0,d.jsx)(m.A,{className:"shrink-0 text-violet-600 dark:text-violet-400",size:16,strokeWidth:2,"aria-hidden":!0}),(0,d.jsx)("span",{className:"w-full max-w-[2.75rem] break-all text-center font-mono text-[0.58rem] font-semibold leading-tight tracking-tight text-violet-800 tabular-nums dark:text-violet-200","aria-live":"polite",children:u(J)})]}):null,i?null:(0,d.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col gap-3 overflow-y-auto px-3 py-3 text-sm text-zinc-800 dark:text-zinc-100",children:[K?(0,d.jsxs)("section",{className:"rounded-lg border border-violet-400/55 bg-violet-50/90 p-3 shadow-sm dark:border-violet-600/45 dark:bg-violet-950/35","aria-label":y.kronoFocusTitle,children:[(0,d.jsx)("p",{className:"text-[0.65rem] font-semibold uppercase tracking-wide text-violet-800 dark:text-violet-300",children:y.kronoFocusTitle}),(0,d.jsx)("p",{className:"mt-0.5 text-xs font-medium text-zinc-800 dark:text-zinc-200",children:"break"===(a=I?.mode)?y.breakMode:"longBreak"===a?y.longBreakMode:y.appShellLiveDrawerKronoFocusPhaseWork}),(0,d.jsx)("p",{className:"mt-1 text-xs text-zinc-600 dark:text-zinc-400",children:I?.status==="running"?y.appShellLiveDrawerKronoFocusRunning:y.appShellLiveDrawerKronoFocusPaused}),(0,d.jsx)("p",{className:"mt-1.5 font-mono text-lg font-semibold tracking-tight text-violet-950 tabular-nums dark:text-violet-100","aria-live":"polite",children:u(J)}),L?(0,d.jsxs)("p",{className:"mt-1.5 min-w-0 text-[0.65rem] leading-snug text-zinc-600 dark:text-zinc-400",children:[(0,d.jsx)("span",{className:"font-medium text-zinc-500 dark:text-zinc-500",children:y.kronoFocusLinkedTaskIntro})," ",(0,d.jsx)("span",{className:"break-words",children:(b=L.trim()).length<=120?b:`${b.slice(0,119)}…`})]}):null]}):null,(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsx)("p",{className:"truncate font-medium text-zinc-900 dark:text-zinc-50",children:O}),(0,d.jsxs)("p",{className:"mt-1 text-xs text-zinc-600 dark:text-zinc-400",children:[(0,d.jsx)("span",{className:"font-medium text-zinc-500 dark:text-zinc-500",children:y.appShellLiveDrawerWallClock})," \xb7 ",(0,d.jsx)("span",{className:`tabular-nums ${F?"font-mono font-semibold text-emerald-700 dark:text-emerald-400":"text-zinc-600 dark:text-zinc-400"}`,"aria-live":F?"polite":"off",children:P})]}),v?.isPaused===!0?(0,d.jsx)("p",{className:"mt-1 text-xs font-medium text-amber-700 dark:text-amber-300",children:y.appShellLiveDrawerSessionPaused}):null]}),(0,d.jsxs)("div",{className:"min-w-0",children:[(0,d.jsx)("p",{className:"text-[0.65rem] font-semibold uppercase tracking-wide text-zinc-500 dark:text-zinc-500",children:y.appShellLiveDrawerTasksHeading}),0===H.length?(0,d.jsx)("p",{className:"mt-1 text-xs text-zinc-500 dark:text-zinc-500",children:y.appShellLiveDrawerNoRunningTasks}):(0,d.jsx)("ul",{className:"mt-1.5 space-y-2",children:H.map(a=>{let b="string"==typeof a.id?a.id:"",c=(0,s.ZW)("string"==typeof a.name?a.name:"");return(0,d.jsx)(w,{task:a,subtaskTrackingLabel:y.appShellLiveDrawerSubtaskTracking,dashboardT:y},b||c)})})]}),(0,d.jsxs)(f(),{href:N,className:"mt-auto inline-flex items-center justify-center gap-2 rounded-lg border border-violet-400/60 bg-violet-50 px-3 py-2 text-xs font-medium text-violet-950 hover:bg-violet-100/90 dark:border-violet-600/50 dark:bg-violet-950/40 dark:text-violet-100 dark:hover:bg-violet-900/50",children:[(0,d.jsx)(n.A,{size:16,strokeWidth:2,className:"shrink-0","aria-hidden":!0}),y.appShellLiveDrawerOpenDashboard]})]})]})}},7667:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>e});var d=c(8868);let e=async a=>[{type:"image/png",sizes:"180x180",url:(0,d.fillMetadataSegment)(".",await a.params,"apple-icon.png",!0)+"?287aede602afeff8"}]},7843:(a,b,c)=>{"use strict";c.d(b,{ThemeProvider:()=>e});var d=c(7943);let e=(0,d.registerClientReference)(function(){throw Error("Attempted to call ThemeProvider() from the server but ThemeProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/feelx/code/projects/business/nightkatana/project-kronosys/components/ThemeProvider.tsx","ThemeProvider");(0,d.registerClientReference)(function(){throw Error("Attempted to call useKronosysTheme() from the server but useKronosysTheme is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/feelx/code/projects/business/nightkatana/project-kronosys/components/ThemeProvider.tsx","useKronosysTheme")},8032:(a,b,c)=>{"use strict";c.d(b,{Z:()=>f});var d=c(3024),e=c(6760);function f(){let a=e.join(process.cwd(),"package.json"),b=JSON.parse(d.readFileSync(a,"utf8")).version;return"string"==typeof b&&b.trim().length>0?b.trim():"0.0.0"}},8335:()=>{},8528:(a,b,c)=>{"use strict";c.d(b,{AppShellLiveSessionDrawer:()=>d});let d=(0,c(7943).registerClientReference)(function(){throw Error("Attempted to call AppShellLiveSessionDrawer() from the server but AppShellLiveSessionDrawer is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/feelx/code/projects/business/nightkatana/project-kronosys/components/dashboard/AppShellLiveSessionDrawer.tsx","AppShellLiveSessionDrawer")},8782:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,5547,23))},9436:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,5547,23)),Promise.resolve().then(c.t.bind(c,5098,23)),Promise.resolve().then(c.t.bind(c,7644,23)),Promise.resolve().then(c.t.bind(c,3859,23)),Promise.resolve().then(c.t.bind(c,8099,23)),Promise.resolve().then(c.t.bind(c,6237,23)),Promise.resolve().then(c.t.bind(c,8562,23)),Promise.resolve().then(c.t.bind(c,6675,23))},9806:(a,b,c)=>{"use strict";function d(){return null}c.d(b,{PwaRegister:()=>d}),c(7484)},9899:(a,b,c)=>{"use strict";c.d(b,{r:()=>g,z:()=>f});let d={kronoFocusTitle:"KronoFocus",workMode:"KronoFocus",breakMode:"Short break",longBreakMode:"Long break",kronoFocusStart:"Start",kronoFocusPause:"Pause",kronoFocusReset:"Reset",kronoFocusStandaloneSubtitle:"KronoFocus is Kronosys’s attention rhythm: one work segment at a time (duration you set), short pauses between segments, and a longer pause after several cycles. The counters and phases belong to Kronosys—they are not a Pomodoro timer clone.",kronoFocusAutoRefreshNote:"",kronoFocusPanelHelpAriaLabel:"KronoFocus panel help",kronoFocusLiveWhileViewingArchive:"While you browse an archived session, this still shows KronoFocus for the active live session (if any).",kronoFocusLinkedTaskIntro:"Started from:",kronoFocusEditDurationTitle:"Configure KronoFocus rhythm (timer not started)",kronoFocusDurationPickerLabel:"Duration (hours : minutes : seconds)",kronoFocusApplyDuration:"Apply",kronoFocusCancelDurationEdit:"Cancel",kronoFocusDurationHelpAriaLabel:"Duration help",kronoFocusDurationHelpBody:"Enter the work segment length as hours, minutes, and seconds (elapsed time, e.g. 00:25:00 or 01:30:00 — not a time of day). You may omit seconds (e.g. 0:25). Range: 1 minute to 8 hours. Short and long breaks are set in whole minutes in the same dialog. Set everything before starting KronoFocus.",kronoFocusDurationInputPlaceholder:"00:25:00",kronoFocusDefaultWorkDuration:"Default — 00:25:00",kronoFocusDurationHistoryLabel:"Recent custom durations",kronoFocusDurationHistoryPickAria:"Select duration {time}",kronoFocusDurationHistoryClear:"Clear",kronoFocusDurationHistoryClearTitle:"Clear all saved custom durations",kronoFocusRhythmPresetsHeading:"Quick presets (work / short / long break)",kronoFocusRhythmPresetLabels:["25 / 5","50 / 10","45 / 15","52 / 17"],kronoFocusRhythmPresetTitles:["25 min work, 5 min short break, 15 min long break after every 4 work segments","50 min work, 10 min short break, 20 min long break after every 4 work segments","45 min work, 15 min short break, 15 min long break after every 4 work segments","52 min work, 17 min short break, 30 min long break after every 4 work segments"],kronoFocusShortBreakMinutesLabel:"Short break (minutes)",kronoFocusLongBreakMinutesLabel:"Long break (minutes)",kronoFocusRhythmBreaksMinutesHint:"Whole minutes, 1–480 each. Long break runs after every 4 completed work segments.",startTaskWithKronoFocus:"Also start the KronoFocus timer",startTaskWithKronoFocusToggleAriaOff:"Also start KronoFocus when tracking begins — off. Press to turn on.",startTaskWithKronoFocusToggleAriaOn:"Also start KronoFocus when tracking begins — on. Press to turn off.",startKronoFocusFromActiveTask:"Start KronoFocus",startKronoFocusFromTaskConfirm:"KronoFocus is already running or paused. Reset the timer and start a new work segment?",launcherTitle:"Tasks",taskTrackerTitle:"In focus",taskPlaceholder:"What are you working on?",taskPlaceholderPast:"What did you work on?",archiveAddTaskIntro:"Past entry: set start and end. Tags and @project work as usual; timers and detail items do not apply — live or archived session.",archiveAddTaskIntroHelpAria:"Help: past entry",taskEntryModeRealtime:"Real-time",taskEntryModePast:"Past",taskEntryModeGroupAria:"Entry mode",archiveTaskStartLabel:"Start",archiveTaskEndLabel:"End",taskTimingDurationLabel:"Duration",taskStartTimeSaveAria:"Save corrected task start time",sessionStartTimeSaveAria:"Save corrected session start time",taskEndTimeSaveAria:"Save corrected task end time",sessionEndTimeSaveAria:"Save corrected session end time",sessionEndTimeEditSectionTitle:"Session end",sessionStartTimeEditSectionTitle:"Session start",taskPastDatetimePlaceholder:"yy-mm-dd --:--:--",taskPastDatetimeTimeLabel:"Time",taskPastDatetimeHourAria:"Hour (24-hour clock)",taskPastDatetimeMinuteAria:"Minutes",taskPastDatetimeTodayBtn:"Today",taskPastDatetimeNowBtn:"Now",archiveAddTaskBtn:"Add to session",archiveTaskDatetimeRangeInvalid:"Enter a valid start and end; the end must be after the start (local date and time).",activeTaskTitleEditHint:"Click to edit title; type #tags in the field or use the row below",activeTaskTitleInputAria:"Edit title; optional #tags or @project in the field, pills below for existing tags",startTaskBtn:"Start tracking",finishTaskBtn:"Finish",finishTaskOpenSubtasksWarnTitle:"Finish task?",finishTaskOpenSubtasksWarnBody:"This task still has open detail items. They will all be marked done when you finish the task.",taskDeleteBtn:"Delete",taskDeleteConfirm:"Delete this entry? Recorded time will be lost. This cannot be undone.",taskConcurrentTrackingConflictTitle:"Tracking already active",taskConcurrentTrackingConflictMessage:"One or more tasks already have a running timer. Choose what to do with them before starting this task: finish them (moved to completed), pause them (resume later from the paused list), or keep them running and start this task in parallel.",taskConcurrentTrackingConflictPauseBtn:"Pause active tasks",taskConcurrentTrackingConflictFinishBtn:"Finish active tasks",taskConcurrentTrackingConflictParallelBtn:"Start in parallel (keep timers running)",taskConcurrentTrackingDontShowAgain:"Remember this choice and don’t show this dialog again (the same action will run automatically next time).",commitOnFinishShort:"Git commit",commitOnFinishHint:"Build Git commit message when finishing",commitOnFinishToggleAriaOff:"Offer a Git commit message when finishing — off. Press to turn on.",commitOnFinishToggleAriaOn:"Offer a Git commit message when finishing — on. Press to turn off.",tasksPausedHeading:"Paused",tasksCompletedHeading:"Completed",tasksRunningHeading:"Running now",hideTaskList:"Hide list",showAllTasks:"Show full list",importGitIssue:"Import issue from Git",pauseTaskBtn:"Pause — moves to the paused list",resumeTaskBtn:"Resume tracking",taskTimerPausedManual:"Timer paused (manual).",pausedNote:"Session is paused because you are inspecting history.",viewingHistoryBannerTitle:"You are viewing a past session.",resumeBtn:"Resume active session",inspectingLabel:"Viewing session:",historyInspectBannerAria:"Past session view",autoTagsDetected:"Tags detected",autoProjectDetected:"Project",tagsHelpAriaLabel:"Tag help",tagSyntaxHelp:"#tag after a space or at the start, or glued (word#tag). @project uses the same placement; the first @ wins. Tokens: letters, numbers, -, _ (no spaces).",tagSuggestionsHelp:"Next to this (?), the small field applies a line like #tag, @project, or a plain tag name when you press Enter. Typing #tag in the title is separate.",tagsHelpWorkflowSummary:"Read-only labels above list every tag on the task; the project line shows its project. Edit the title or use the quick field (Enter). @Project#code is optional.",taskAppliedTagsHelpHeading:"Tags on this task",taskAppliedTagsHelpHint:"Everything merged from the title, the new-task field, and the quick line under each task. Type #tag, @project, or a tag name and press Enter; @ alone clears the project.",taskTagsExtraHelpAria:"Help: tags and project applied to this task",taskTagsOrphanProjectHelpBody:"From the title, not in your saved list. Pin under Tags & projects or change the title.",taskTagProjectQuickAddPlaceholder:"#tag, @project or label… Enter (@ alone clears project)",taskTagProjectQuickAddAria:"Quick add: type #tag, @project, or a tag name, then Enter",taskTagProjectMultiGroupTags:"Saved tags",taskTagProjectMultiGroupProjects:"Saved projects",taskTagProjectMultiOptionClearProject:"Clear project (same as @ alone)",taskTagProjectMultiSelectAria:"Multi-select saved tags and projects, then use Add selection",taskTagDefaultBucket:"default",taskTagProjectMultiHint:"Ctrl or ⌘-click to select several rows, then add.",taskTagProjectApplySelectionBtn:"Add selection",tagsUserGuideIntro:"This guide explains how task titles, saved shortcuts, and optional @project#code labels work together. You can ignore advanced features and keep only #tags plus one @project if you prefer.",tagsUserGuideBasicsTitle:"Basics: title tokens",tagsUserGuideBasicsBody:"In the task title you can mix plain text with:\n• #name — a global tag (letters, numbers, hyphen, underscore).\n• @Project — assigns the task to a project (first @ in the title wins).\nTokens can appear after a space or glued to a word (word#tag). The dashboard shows merged tags under the task.",tagsUserGuideShortcutsTitle:"Quick field on each task",tagsUserGuideShortcutsBody:"In Settings → Tags & saved projects (or the Tags column on the right), you pin tags and projects you reuse. On a task, the narrow field next to the tag help (?) suggests those values; press Enter to apply a line (#tag, @project, plain name, or @ alone to clear the project). This does not rewrite the title unless you edit it yourself.",tagsUserGuideScopedTitle:"Optional: @project#code (project-scoped labels)",tagsUserGuideScopedBody:"Syntax @Client#invoice in the title stores a label tied to that project (shown as Client#invoice). Useful when the same local label means different things per client, or for stricter reporting. If you never need that, use #tag + @project only — the product supports both styles.",tagsUserGuideUseCasesTitle:"Use cases",tagsUserGuideUseCasesBody:"• Solo dev, one project: type My feature @acme and #frontend — no saved list required.\n• Many tickets: pin #triage, #bugfix, @sprint-42 in Tags & projects; use the quick field per task instead of retyping.\n• Client work: use @ClientA#retainer vs @ClientB#retainer in titles to keep namespaces separate; filter by project in reporting.\n• Retro entry: same # and @ rules in the past-task form; the quick field still accepts the same syntax.",tagsUserGuideFooterNote:"Descriptions on tags/projects (hover for a few seconds on a chip that has one) are optional notes for your team — they do not change how Kronosys filters data.",subtasksHeading:"Detail items",addSubtaskPlaceholder:"New item…",addSubtaskBtn:"Add",subtaskMarkDone:"Mark this item done",subtaskMarkUndone:"Mark this item not done",subtaskDelete:"Remove this item",subtaskDragReorderHandle:"Drag to reorder",subtaskMoveUp:"Move this item up",subtaskMoveDown:"Move this item down",subtaskTimerStart:"Track time on this item",subtaskTimerStop:"Stop tracking time on this item",subtaskDurationNotMeasured:"Not measured",subtaskDurationNotRecorded:"Not recorded",subtaskDurationNotShown:"Not shown",subtaskDurationTooltipNotMeasured:"No time has been accumulated on this item yet. Use the play control to start tracking.",subtaskDurationTooltipNotRecorded:"This snapshot does not include a duration for this item (not tracked here or missing from the saved snapshot).",subtaskDurationTooltipNotShown:"No duration is shown for completed items without recorded time in this archived view.",noData:"No data yet.",selectIssue:"Search a GitLab issue",issuePickerSearchPlaceholder:"Title, description, or internal issue number (e.g. 12 or #12)…",issuePickerSearchMinHint:"Use at least 2 letters for a text search on GitLab. For an internal issue number only, one digit is enough (e.g. 7 or #7).",issuePickerLoading:"Searching…",issuePickerNoResults:"No issues match. Try a few letters from the title or description, or search by internal number only (e.g. 42).",issuePickerCloseAria:"Close",issuePickerDashboardRequestTimeout:"Timed out waiting for the dashboard server (GitLab search). Check that the server is running, your instance URL, then try again.",noIssuesFound:"No open issues or CLI not configured.",sessionsColumnTitle:"Sessions",sessionsColumnHelpAria:"Help: Sessions column",sessionsColumnHelpBody:"Your saved sessions and the live session appear here while tracking is on.\n\nOpen the active session to edit tracking in real time.",dashboardColSessionTeaser:"Pick the session you’re in (or start one). The rest of the dashboard follows that choice.",dashboardColSessionFlowHint:"Next → Tasks in the middle",dashboardColTasksTeaser:"Log tasks, timers, and KronoFocus — all tied to the session on the left.",dashboardColTasksFlowHint:"Then → Tags & projects on the right",dashboardColTagsTeaser:"Add #tags, @projects, and shortcuts so history and reports stay clear.",dashboardColTagsFlowHint:"Optional, but your future self will notice.",dashboardColumnHintsPanelTitle:"How the three columns work",dashboardColumnHintsExpandAria:"Show how the three dashboard columns work",dashboardColumnHintsCollapseAria:"Hide the column guide",dashboardColumnHintsDismissTitle:"Hide this guide permanently",sessionsListAriaLabel:"Sessions",sessionLiveBadge:"Live",sessionListWallDurationTitle:"Wall-clock session duration: saved minutes when available, otherwise the span from session start to end.",sessionListWallDurationAlertTooltip:"At or past the alert threshold ({hours} h) — adjust under Settings → Web dashboard.",sessionListStartedPrefix:"Start:",sessionListEndedPrefix:"End:",sessionEndLiveTitle:"End session — save to history without starting a new one (tracking can stay on)",sessionEndLiveAria:"End current session",sessionEndLiveConfirmTitle:"End this session?",sessionEndLiveConfirmIntro:"There is still open work in this session. Ending saves a snapshot to history: timers and item tracking will no longer run for this session, but you can still edit names, tags, and projects when you open the archived session.",sessionEndLiveConfirmIntroCalm:"Ending saves a snapshot to history with the current end time. Timers and item tracking will no longer run for this session, but you can still edit names, tags, and projects when you open the archived session.",sessionEndLiveWarnActiveTask:"Something is currently being tracked (in progress).",sessionEndLiveWarnPausedTasks:"One or more entries are paused or not finished.",sessionEndLiveWarnIncompleteSubtasks:"One or more items are not marked done.",sessionEndLiveConfirmBtn:"End session",sessionEndLiveSidebarBtn:"End this session",sessionEndReasonModalHint:"Optional: record why you are closing the session (reports, timesheets, retrospectives).",sessionEndReasonFieldsetLegend:"Closure reason",sessionEndReasonSkip:"Do not save a category",sessionEndReasonPlanned:"Ended as planned (time or scope)",sessionEndReasonEarly:"Ended early (before planned time or deadline)",sessionEndReasonOverrun:"Overrun relative to plan",sessionEndReasonOther:"Other",sessionEndReasonNotePlaceholder:"Optional detail…",sessionEndReasonNoteAria:"Optional free-text detail for how this session ended",selectedSessionEndReasonTitle:"Closure",sessionEndReasonEditHint:"Update the saved closure category or detail for this session.",sessionEndReasonSaveBtn:"Save closure",sessionEndReasonSaveAria:"Save closure reason",sessionEndReasonSaving:"Saving…",beforeUnloadLiveSessionMessage:"A Kronosys session is open in this dashboard. Closing this tab does not end the session. Use “End this session” in the left column to close it here, or leave this tab — the session keeps running in the background.",openSessionInNewTab:"Open this session in a new tab",detachedSessionUrlHint:"This tab is driven by the URL. Inspecting an archive here only updates this tab — it does not change your live session or which session is selected in other open tabs.",detachedSessionUrlHintDismiss:"Hide this note",detachedSessionInvalidUrl:"No session matches this URL parameter.",tasksInSessionSingular:"item",tasksInSessionPlural:"items",rightColumnTitle:"Tasks",tagsProjectsColumnTitle:"Tags & projects",tagsProjectsColumnIntro:"Pin shortcuts, descriptions, and hide chips — same as in Settings, here while you work. Use the two tabs to switch between global tags and projects.",tagsProjectsColumnHelpAria:"Help: tags & projects column",tagsProjectsColumnHelpBody:"Global tags apply to any task. Project-linked tags use Project#code and only appear when that task’s @project matches.\n\nIn this column, the Global tags tab lists shortcuts, hidden tags, and descriptions; the Projects & linked tags tab lists saved projects and per-project codes.\n\nThis column mirrors the Tags & saved projects section in Settings; changes sync immediately.\n\nUse the (?) next to task tags on a card for the full help and use cases.",tasksColumnSubtitle:"In progress, paused, and completed for the selected session.",tasksColumnSubtitleHelpAria:"Help: what this column shows",taskFocusNoSessionTitle:"No active session",taskFocusNoSessionBody:"Start a session from the Sessions column on the left to track tasks here.",taskStartAutoSessionToast:"No active session — starting one now so your task can be tracked in this session.",selectedSessionSidebarTitle:"Selected session",selectedSessionIdleHint:"No session is active. Start one to record time, tracking, and metrics.",statsMetricSessionDurationHelpAria:"Help: session duration",statsMetricSessionDurationHelpBody:"Wall-clock time from the first activity event recorded in this session until now (live session) or until the snapshot was saved (archived). Separate from active time, coding time, and tracking or item timers.",statsMetricCodingTimeHelpAria:"Help: coding time",statsMetricCodingTimeHelpBody:"Time accumulated while a productive (non-excluded) file is in the coding context: opened, saved, active editor change, or edits. Stops growing after about one minute without such signals. Independent of the tracking timer.",statsMetricActiveTimeHelpAria:"Help: active time",statsMetricActiveTimeHelpBody:"Time accumulated from workstation activity: edits, file open, selection changes, active editor changes, and window focus. Gaps longer than about three minutes are not counted. Often between coding time and session wall-clock.",statsMetricTasksHelpAria:"Help: task counts by status",statsMetricTasksHelpBody:"For the selected session: tasks with the tracking timer running (“Running now”), tasks not marked done in the task list (“Paused”), and completed tasks. Matches the three sections in the Tasks column.",statsTasksRowRunning:"Running (timer)",statsTasksRowPausedList:"Not done (list)",statsTasksRowCompleted:"Completed",gitRepoCardTitle:"Workspace Git repository",gitRepoNotARepo:"The first workspace folder is not a Git checkout (or Git is unavailable).",gitRepoCardHelpAria:"Help: workspace Git overview",gitRepoCardHelpBody:"Summary of the Git repository at the first workspace root: branch counts, commit counts, a short `git log --graph --all` view, and a sorted sample of tracked paths from `git ls-files`. Updated when the dashboard refreshes from the server.",gitRepoCurrentBranchLabel:"Current branch",gitRepoBranchesLocalLabel:"Local branches",gitRepoBranchesLocalHelpAria:"Help: local branches",gitRepoBranchesLocalHelpBody:"Number of local branch refs (`git branch --list`).",gitRepoBranchesRemoteLabel:"Remote branches",gitRepoBranchesRemoteHelpAria:"Help: remote branches",gitRepoBranchesRemoteHelpBody:"Number of remote-tracking branches (`git branch -r`), excluding the symbolic `*/HEAD` alias.",gitRepoCommitsHeadLabel:"Commits (HEAD)",gitRepoCommitsHeadHelpAria:"Help: commits on current branch",gitRepoCommitsHeadHelpBody:"Count of commits reachable from HEAD (`git rev-list --count HEAD`), i.e. the current branch history.",gitRepoCommitsAllLabel:"Commits (all refs)",gitRepoCommitsAllHelpAria:"Help: commits all refs",gitRepoCommitsAllHelpBody:"Count across all refs (`git rev-list --all --count`). Can be slower on huge repositories; shown as — if the command fails.",gitRepoStashesLabel:"Stashes",gitRepoStashesHelpAria:"Help: stash list",gitRepoStashesHelpBody:"Number of entries in `git stash list`.",gitRepoGraphTitle:"Recent graph",gitRepoGraphHelpAria:"Help: commit graph",gitRepoGraphHelpBody:"ASCII graph from `git log --graph --decorate --all` (last 40 commits). Useful to see how branches relate.",gitRepoGraphEmpty:"No graph lines returned.",gitRepoGraphPreviewNote:"Partial preview — last 40 commits only in this box.",gitRepoGraphOpenFullAria:"Open full commit graph in a new tab",gitRepoGraphOpenFullTitle:"Open full commit graph in a new browser tab",gitRepoGraphDetailDocTitle:"Git commit graph — Kronosys",gitRepoTreeTitle:"Tracked files (sample)",gitRepoTreeHelpAria:"Help: tracked paths sample",gitRepoTreeHelpBody:"Alphabetically sorted sample of paths from `git ls-files` (up to 300). Not the full tree; large repos may omit paths beyond the buffer limit.",gitRepoTreeEmpty:"No tracked paths in the sample.",gitRepoTreePreviewNote:"Partial preview — sample of up to 300 tracked paths.",gitRepoTreeOpenFullAria:"Open full tracked paths list in a new tab",gitRepoTreeOpenFullTitle:"Open full tracked paths list in a new browser tab",gitRepoTreeDetailDocTitle:"Tracked files — Kronosys",statsLocSectionTitle:"Lines & languages",statsLinesWrittenTotal:"Lines written",statsLinesWrittenHuman:"Human (est.)",statsLinesWrittenAi:"AI (est.)",statsLocByLanguageHeading:"Lines by language",statsCodingSignalsHeading:"Coding signals by language",statsMetricLinesWrittenHelpAria:"Help: lines written",statsMetricLinesWrittenHelpBody:"Net lines added from tracked edits (estimated from newlines in diffs). Single large inserts are partially capped. “Human” vs “AI” is a heuristic per edit: multi-range changes, more than ~6 net lines, or a single chunk with many characters and a newline often count as AI-style (agent or paste)—not exact attribution.",statsMetricLocByLanguageHelpAria:"Help: lines by language",statsMetricLocByLanguageHelpBody:"How many net lines were attributed to each language id in this session (same basis as “Lines written”).",statsMetricCodingSignalsHelpAria:"Help: coding signals",statsMetricCodingSignalsHelpBody:"Count of coding-context signals per language (file open, save, edit, active editor change, and heartbeats while recently editing).",sessionNameReadOnly:"Session name (read-only for this archive)",sessionArchiveBtn:"Archive",sessionArchiveTitle:"Hide this session from the list (restorable from Archives)",sessionRestoreBtn:"Restore",sessionDeleteBtn:"Delete",sessionDeleteTitle:"Delete session",sessionDeleteIntro:"This removes the session from your history. Choose what to do with its items.",sessionDeleteDiscardTasks:"Delete items with the session (discard them)",sessionDeleteMoveTasks:"Move items to another session first",sessionDeleteTargetLabel:"Target session",sessionDeleteTargetPlaceholder:"Select a session…",sessionDeleteConfirmBtn:"Delete session",sessionDeleteCancelBtn:"Cancel",archivesModalTitle:"Archived sessions",archivesEmpty:"No archived sessions.",archivesCloseBtn:"Close",archivedBadge:"Archived",sessionArchiveConfirm:"Archive this session?\n\n• Hidden from the list until you restore it from Archives.\n• Reporting omits unfinished entries and any entry with an unchecked item (totals, charts, time by project, linked KronoFocus).",sessionArchiveDontShowAgain:"Don’t show this warning again",storageBadgeLabelSqlite:"SQLite",storageBadgeTooltipSqlite:"Session history is stored in SQLite in your Kronosys data directory (local persistence driver in Settings).",storageBadgeLabelJson:"JSON",storageBadgeTooltipJson:"Session history uses JSON partition files (legacy local driver). You can switch to SQLite in Kronosys settings.",storageBadgeLabelMongo:"MongoDB",storageBadgeTooltipMongo:"MongoDB mirror is enabled and connected. You can push sessions from the list; local sessions still follow your persistence driver.",workspaceFoldersLabel:"Workspace roots",workspaceFoldersEmpty:"No workspace root is configured for this dashboard.",headerDisplayRegionTitle:"Display time zone {timeZone}; clock {clock}.",headerClockFormat24Short:"24 h",headerClockFormat12Short:"12 h (AM/PM)",gitIdentityBannerAria:"Git author not configured",gitIdentityBannerBody:"Set the Git author (name, email, optional forge username) for the line under the dashboard title. Use Set up here to enter them in a quick dialog — values stay local; you can change them anytime under Settings → Git identity.",gitIdentityBannerConfigure:"Set up here",gitIdentityBannerDismiss:"Hide this reminder",gitIdentityModalTitle:"Git author (quick setup)",gitIdentityModalIntro:"Enter at least one of the fields below. Nothing is sent to the cloud from this dialog — data stays in your local Kronosys store, like in Settings.\n\nYou can change or complete these values anytime under Settings → Git identity.",gitIdentityModalNeedOneField:"Fill at least one field (name, email, or forge username) before saving.",gitIdentityModalSaveError:"Could not save. Check the connection and try again.",gitIdentityModalFooter:"GitLab tokens, auto sync, and other advanced options remain under Settings in the Git identity section when you need them.",mongoSyncLocalLabel:"Local JSON",mongoSyncMongoLabel:"MongoDB",mongoSyncStatusAligned:"In sync",mongoSyncStatusUnknown:"Mongo count unavailable",mongoSyncStatusLocalAhead:"Drift — fewer documents in Mongo",mongoSyncStatusMongoAhead:"Drift — more documents in Mongo",mongoSyncHelpAriaLabel:"Help: MongoDB mirror vs local sessions",mongoSyncHelpBody:"Local JSON is the source of truth. Counts are unique sessions in your history files (including archived). MongoDB is updated only when you push a session or use Resync in settings — not on every save. Count mismatches usually mean some sessions were never pushed or extra documents exist in Mongo. The live session is counted locally after it is written to disk.",sessionMongoPushAriaLabel:"Push this session to MongoDB",sessionMongoPushSyncedTitle:"Up to date on MongoDB for this snapshot",sessionMongoPushDirtyTitle:"Session changed since last Mongo push — click to update",sessionMongoPushNeverTitle:"Not yet pushed to MongoDB — click to send",sessionMongoPushBusy:"Pushing…",sessionMongoPushFailedDisabled:"MongoDB is not enabled in settings.",sessionMongoPushFailedNotFound:"Session not found.",sessionMongoPushFailedMongo:"MongoDB rejected the write. Check the connection and logs.",sessionMongoPushFailedUri:"MongoDB connection is incomplete (URI or password).",dashboardLoadingAriaLabel:"Loading dashboard, please wait",dashboardLoadingMessage:"Fetching session data from the Kronosys server…",dataSearchTrigger:"Search data…",dataSearchPlaceholder:"Filter sessions, tasks, projects, tags, dates, or duration (e.g. 12:55 <, 0:10 >)…",dataSearchPaletteAriaLabel:"Quick search",dataSearchTypePrompt:"Type to filter sessions, tasks, projects, and tags in this workspace. You can also use a calendar day or a full timestamp (e.g. 2026-01-15 14:30:00) or a recorded duration condition: minutes:seconds (or h:m:s) with < or >, e.g. 45:00 > or 1:0:0 <.",dataSearchEmpty:"No matching sessions or tasks.",dataSearchFooter:"↑↓ to move \xb7 Enter to open \xb7 Esc to close",dataSearchKindSession:"Session",dataSearchKindTask:"Task",dataSearchTaskDistinguishId:"ID: {id}",dataSearchTaskStopwatchLabel:"Timer",dataSearchTaskRecordedTimeLabel:"Logged",dataSearchSessionWallLabel:"Wall time",commandNewSession:"New session",commandRefresh:"Refresh dashboard",commandOpenReporting:"Open reporting",commandOpenSettings:"Open settings",commandOpenUserGuide:"Open user guide",commandFocusSessions:"Focus sessions column",commandFocusTasks:"Focus tasks column",commandFocusTags:"Focus tags & projects column",commandToggleTheme:"Toggle light / dark theme",commandToggleLang:"Switch interface language (EN / FR)",commandEndLiveSession:"End live session",shortcutsModalTitle:"Keyboard shortcuts",shortcutsModalCloseAriaLabel:"Close keyboard shortcuts",shortcutsModalIntro:"Click \xab Change \xbb, then press the new shortcut (must include Ctrl, Alt, Shift, or Meta). Escape cancels recording. Ctrl+K / ⌘K is reserved for quick data search (not editable here).",shortcutsTableAction:"Action",shortcutsTableShortcut:"Shortcut",shortcutsTableAssign:"Assign",shortcutsChangeBtn:"Change…",shortcutsRecordPrompt:"Press keys…",shortcutsResetAll:"Reset all to defaults",shortcutsPaletteRow:"Quick data search — Ctrl+K or ⌘K (fixed)",tourProgressLabel:"Step {n} of {total}",tourStep1Title:"Welcome to the Kronosys dashboard",tourStep1Body:"This dashboard loads live session data from this web app (Next.js API routes and local SQLite) — not a static snapshot.",tourStep2Title:"Three-column guide (above the board)",tourStep2Body:"This strip sits just under the header and explains how **Sessions**, **Tasks**, and **Tags & projects** fit together — left to right on a wide screen, stacked on a narrow one, with arrows between the ideas.\n\nOpen or fold it with the chevron; each cell is a short teaser before you dive into the real columns below. **Use the X** to dismiss the whole strip for this browser; turn it back on under **Settings → Dashboard & API → Three-column guide**. Folded and dismissed states are remembered separately.",tourStep3Title:"Sessions (left column)",tourStep3Body:"Browse your session history, start a new session, and inspect the selected session’s duration, coding time, and stats.\n\nWhen a live session is open, you can end it from here; archived sessions open in read-only mode.\n\nFor advanced timing, open Settings (gear): under Dashboard & API, set the **session duration alert** (when a long wall-clock session is highlighted in this column). The **Work schedule** section starts and stops tracking on your weekday hours, and **Specific planned sessions** define recurring blocks that override the general schedule during their time window.",tourStep4Title:"Tasks & focus (center)",tourStep4Body:"Track what you are working on, finish tasks, and use subtasks or Git-linked options when you need them.\n\nThis column follows the session you select in the Sessions column — the rest of the header aligns with that choice.\n\nYou only track one work stream at a time on other parents: starting subtask time on a task also runs that parent’s main stopwatch, and it stops time on other tasks (their segments are saved). If you pause the main stopwatch, any subtask segment in progress on the same task stops and records time. Resuming a parent’s main stopwatch anywhere ends subtask timers on the other tasks and pauses their main stopwatches.\n\nDetail items are optional. The task’s total time is always at least the sum of time on those items; the rest is work recorded on the task without a per-item breakdown.",tourStep5Title:"Tags & projects (right)",tourStep5Body:"Pin tags, manage saved projects, and add descriptions — the same controls as in Settings, available while you work. Two tabs separate global tags from projects and project-linked tags.\n\nIn task titles you can use @project and #tags (including @project#code) to organise work across projects.\n\nReporting (charts) depends heavily on these objects: consistent tags and projects make breakdowns, filters, and trends in Reporting far more meaningful.",tourStep6Title:"Top toolbar: every icon",tourStep6Body:"From left to right in this cluster: quick data search / command palette (same as Ctrl+K or ⌘K), the keyboard icon for shortcut help and custom bindings, navigation icons to Reporting (charts) and Settings (gear), the light/dark theme toggle, refresh data from the API without reloading the whole browser tab, and the language menu (FR / EN).\n\nEach icon has a tooltip on hover; Reporting and Settings open other pages while keeping the same Kronosys shell.",tourStep7Title:"Your Git identity & storage badge",tourStep7Body:"This area shows your Git author line and forge account when they are configured in Settings → Git identity, the workspace roots detected for metrics, and a small badge for how session data is stored here: SQLite (default), JSON driver, or MongoDB mirror when enabled.\n\nSQLite keeps the dashboard payload on this machine under your Kronosys data directory; this page reads and writes it through the local API.",tourStep8Title:"What is KronoFocus?",tourStep8Body:"**KronoFocus** paces your session with a configurable work segment, short breaks, then a long break after several cycles. It is built into Kronosys (counts, phases, how it ties to the session) and is not limited to a fixed Pomodoro-style recipe.\n\nShowing it here or next to task actions is configured under Settings → Dashboard & API (KronoFocus).",tourStep8LearnMoreUrl:"https://en.wikipedia.org/wiki/Time_management",tourStep8LearnMoreLabel:"Further reading — time management (new tab)",tourStep8LearnMoreAriaLabel:"Opens the English Wikipedia article on time management in a new tab",tourStep9Title:"Git identity: your first follow-up after the tour",tourStep9Body:"This panel appears when your Git name, email, or forge account is still empty. Use Set up here to fill a short form without leaving the dashboard — that is the recommended first action once you finish the tour. You can use Hide this reminder if you prefer to postpone.",tourSkipBtn:"Skip tour",tourBackBtn:"Back",tourNextBtn:"Next",tourDoneBtn:"Done",settingsTourProgressLabel:"Step {n} of {total}",settingsTourStep1Title:"Settings & Options",settingsTourStep1Body:"Some advanced options are only available here in the settings, not on the dashboard. This tour highlights key configurations for your workspace.",settingsTourStep2Title:"Usage Profile",settingsTourStep2Body:"Switch between 'Manager' and 'Developer' modes to adjust the level of detail in the dashboard and the frequency of notifications.",settingsTourStep3Title:"Persistence & Drivers",settingsTourStep3Body:"Choose between SQLite (recommended) and legacy JSON for your local history storage. You can also configure a MongoDB mirror for cloud backup.",settingsTourStep4Title:"Git & GitLab Integration",settingsTourStep4Body:"Configure your Git identity and GitLab API token to enable issue importing and commit message generation.",settingsTourStep5Title:"Reporting & Exclusions",settingsTourStep5Body:"Define which directories and file patterns should be excluded from line counting and time tracking to keep your reports clean.",settingsTourStep6Title:"Schedules & Automation",settingsTourStep6Body:"Set up recurring work hours and planned sessions to automatically start tracking or transfer tasks at specific times.",settingsTourSkipBtn:"Skip tour",settingsTourBackBtn:"Back",settingsTourNextBtn:"Next",settingsTourDoneBtn:"Done",tourUndismissBtn:"Relaunch tour",reportingTourProgressLabel:"Reporting tour — step {n} of {total}",reportingTourStep1Title:"Welcome to Kronosys Reporting",reportingTourStep1Body:"This page aggregates your Kronosys history from the local API. Use it to review sessions, recorded task time, KronoFocus usage, and — when filters allow — per-tag and per-project splits.",reportingTourStep2Title:"Filters",reportingTourStep2Body:"Pick a date range (or use Day / Week / Month / Year presets), optionally narrow by #tags, then reset when you want the full picture again. Green badges warn when live data or unfinished tasks still affect the totals.",reportingTourStep3Title:"Summary KPIs",reportingTourStep3Body:"These cards condense the same window as the charts: session counts, task rows, KronoFocus stats, and recorded minutes. The (?) icons open short metric definitions without cluttering the layout.",reportingTourStep4Title:"Daily charts",reportingTourStep4Body:"Bar views show sessions, tasks by status, recorded task time, and session wall-clock by calendar day. When several weeks exist, use the week strip to align charts and tag calendars.",reportingTourStep5Title:"Time by tag and by project",reportingTourStep5Body:"Review recorded task minutes grouped by #tags (including the untagged bucket when it applies) and by @project, with weekly grids when data spans multiple days.",reportingTourStep6Title:"Outline and two-column layout",reportingTourStep6Body:"This block is the main Reporting layout: your content on the left and, on wide screens, a sticky jump list on the right. On phones, the same anchors appear as chips above the filters.",newSessionModalTitle:"New session — scope",newSessionModalHelpAria:"Help: session scope (duration, dates, weekdays)",newSessionModalHelpBody:"These options set expectations for this session only. They do not stop Kronosys automatically: you get reminders from the collector (heartbeat) and a banner here when you are close to or outside the limits.\n\n• Maximum wall-clock duration — counted from the first tracked event in the session.\n\n• Calendar period — local dates inclusive (start and/or end).\n\n• Weekdays — restrict to selected days; you can add a daily time window (local 24 h). Overnight windows are supported (e.g. 22:00–06:00).",newSessionModeNone:"No limit",newSessionModeMax:"Maximum wall-clock duration",newSessionModeCalendar:"Calendar period (dates)",newSessionModeWeekly:"Weekdays (optional daily hours)",newSessionMaxHoursLabel:"Max duration (hours)",newSessionDateFromLabel:"From (date)",newSessionDateToLabel:"To (date)",newSessionTodayBtn:"Today",newSessionWeekdaysLegend:"Active weekdays",newSessionTimeFromLabel:"Daily from",newSessionTimeToLabel:"Daily to",newSessionNowBtn:"Now",newSessionUseTimeWindow:"Restrict to a daily time window on those days",newSessionErrorMax:"Enter a maximum duration between 0.1 and 8760 hours.",newSessionErrorCalendar:"Choose at least one date (from and/or to).",newSessionErrorWeekly:"Select at least one weekday.",newSessionStartBtn:"Start session",newSessionCancelBtn:"Cancel",sessionScopeNoticeAria:"Session scope reminder",appShellRouteNavAria:"Main sections",appShellLiveDrawerAria:"Live session activity",appShellLiveDrawerTitle:"In progress",appShellLiveDrawerOpenDashboard:"Open dashboard",appShellLiveDrawerSessionPaused:"Session paused",appShellLiveDrawerWallClock:"Wall time",appShellLiveDrawerTasksHeading:"Timers",appShellLiveDrawerKronoFocusRunning:"Running",appShellLiveDrawerKronoFocusPaused:"Paused",appShellLiveDrawerKronoFocusPhaseWork:"Work",appShellLiveDrawerSubtaskTracking:"Subtask",appShellLiveDrawerExpand:"Expand panel",appShellLiveDrawerCollapse:"Collapse panel",appShellLiveDrawerNoRunningTasks:"No task timers running.",brandTagline:"The relativity of productive time",appVersionAriaLabel:"Kronosys dashboard package version {version}.",dialogOkBtn:"OK",dialogCancelBtn:"Cancel",dialogConfirmBtn:"Confirm",pageRefreshTitle:"Refresh data",pageRefreshAriaLabel:"Reload data for this page without a full browser refresh",pageRefreshProgressLabel:"Syncing with the Kronosys server…",pageRefreshDoneToast:"Data reloaded from the Kronosys server.",pageRefreshFailedToast:"Could not reload data. Check that the Kronosys server is running and try again."},e={kronoFocusTitle:"KronoFocus",workMode:"KronoFocus",breakMode:"Pause courte",longBreakMode:"Pause longue",kronoFocusStart:"D\xe9marrer",kronoFocusPause:"Pause",kronoFocusReset:"R\xe9initialiser",kronoFocusStandaloneSubtitle:"KronoFocus est le rythme d’attention int\xe9gr\xe9 \xe0 Kronosys : un segment de travail \xe0 la fois (dur\xe9e au choix), des pauses courtes entre segments, puis une pause longue apr\xe8s plusieurs cycles. Les compteurs et phases sont propres \xe0 Kronosys — ce n’est pas un clone de minuteur Pomodoro.",kronoFocusAutoRefreshNote:"",kronoFocusPanelHelpAriaLabel:"Aide sur le panneau KronoFocus",kronoFocusLiveWhileViewingArchive:"Pendant la consultation d’une session archiv\xe9e, ce panneau affiche encore KronoFocus pour la session en cours (s’il y en a une).",kronoFocusLinkedTaskIntro:"Lanc\xe9 depuis :",kronoFocusEditDurationTitle:"Configurer le rythme KronoFocus (minuteur non d\xe9marr\xe9)",kronoFocusDurationPickerLabel:"Dur\xe9e (heures : minutes : secondes)",kronoFocusApplyDuration:"Appliquer",kronoFocusCancelDurationEdit:"Annuler",kronoFocusDurationHelpAriaLabel:"Aide sur la dur\xe9e",kronoFocusDurationHelpBody:"Indiquez la dur\xe9e du segment de travail en heures, minutes et secondes (temps \xe9coul\xe9, ex. 00:25:00 ou 01:30:00 — pas une heure du jour). Vous pouvez omettre les secondes (ex. 0:25). Plage : 1 min \xe0 8 h. Les pauses courte et longue se r\xe8glent en minutes enti\xe8res dans la m\xeame bo\xeete. R\xe9glez tout avant de d\xe9marrer KronoFocus.",kronoFocusDurationInputPlaceholder:"00:25:00",kronoFocusDefaultWorkDuration:"D\xe9faut — 00:25:00",kronoFocusDurationHistoryLabel:"Dur\xe9es r\xe9centes",kronoFocusDurationHistoryPickAria:"Choisir la dur\xe9e {time}",kronoFocusDurationHistoryClear:"Effacer",kronoFocusDurationHistoryClearTitle:"Effacer toutes les dur\xe9es personnalis\xe9es enregistr\xe9es",kronoFocusRhythmPresetsHeading:"Pr\xe9r\xe9glages (travail / pause courte / pause longue)",kronoFocusRhythmPresetLabels:["25 / 5","50 / 10","45 / 15","52 / 17"],kronoFocusRhythmPresetTitles:["25 min de travail, 5 min de pause courte, 15 min de pause longue apr\xe8s chaque 4e segment de travail","50 min de travail, 10 min de pause courte, 20 min de pause longue apr\xe8s chaque 4e segment de travail","45 min de travail, 15 min de pause courte, 15 min de pause longue apr\xe8s chaque 4e segment de travail","52 min de travail, 17 min de pause courte, 30 min de pause longue apr\xe8s chaque 4e segment de travail"],kronoFocusShortBreakMinutesLabel:"Pause courte (minutes)",kronoFocusLongBreakMinutesLabel:"Pause longue (minutes)",kronoFocusRhythmBreaksMinutesHint:"Minutes enti\xe8res, 1 \xe0 480 chacune. La pause longue suit chaque 4e segment de travail termin\xe9.",startTaskWithKronoFocus:"Lancer aussi KronoFocus",startTaskWithKronoFocusToggleAriaOff:"Lancer aussi KronoFocus au d\xe9marrage — d\xe9sactiv\xe9. Appuyer pour activer.",startTaskWithKronoFocusToggleAriaOn:"Lancer aussi KronoFocus au d\xe9marrage — activ\xe9. Appuyer pour d\xe9sactiver.",startKronoFocusFromActiveTask:"D\xe9marrer KronoFocus",startKronoFocusFromTaskConfirm:"KronoFocus est d\xe9j\xe0 en cours ou en pause. R\xe9initialiser le minuteur et d\xe9marrer un nouveau segment de travail ?",launcherTitle:"T\xe2ches",taskTrackerTitle:"En cours",taskPlaceholder:"Sur quoi travaillez-vous ?",taskPlaceholderPast:"Sur quoi avez-vous travaill\xe9 ?",archiveAddTaskIntro:"Entr\xe9e pass\xe9e : indiquez le d\xe9but et la fin. Les \xe9tiquettes et le @projet suivent les m\xeames r\xe8gles ; minuteurs et points de d\xe9tail ne s’appliquent pas — session en cours ou archiv\xe9e.",archiveAddTaskIntroHelpAria:"Aide : saisie d’une entr\xe9e pass\xe9e",taskEntryModeRealtime:"Temps r\xe9el",taskEntryModePast:"Pass\xe9",taskEntryModeGroupAria:"Mode de saisie",archiveTaskStartLabel:"D\xe9but",archiveTaskEndLabel:"Fin",taskTimingDurationLabel:"Dur\xe9e",taskStartTimeSaveAria:"Enregistrer l'heure de d\xe9but corrig\xe9e de la t\xe2che",sessionStartTimeSaveAria:"Enregistrer l'heure de d\xe9but corrig\xe9e de la session",taskEndTimeSaveAria:"Enregistrer l'heure de fin corrig\xe9e de la t\xe2che",sessionEndTimeSaveAria:"Enregistrer l'heure de fin corrig\xe9e de la session",sessionEndTimeEditSectionTitle:"Fin de session",sessionStartTimeEditSectionTitle:"D\xe9but de session",taskPastDatetimePlaceholder:"yy-mm-dd --:--:--",taskPastDatetimeTimeLabel:"Heure",taskPastDatetimeHourAria:"Heure (format 24 h)",taskPastDatetimeMinuteAria:"Minutes",taskPastDatetimeTodayBtn:"Aujourd’hui",taskPastDatetimeNowBtn:"Maintenant",archiveAddTaskBtn:"Ajouter \xe0 la session",archiveTaskDatetimeRangeInvalid:"Indiquez un d\xe9but et une fin valides ; la fin doit \xeatre post\xe9rieure au d\xe9but (date et heure locales).",activeTaskTitleEditHint:"Cliquer pour modifier le titre ; saisir #\xe9tiquettes dans le champ ou utiliser la ligne du bas",activeTaskTitleInputAria:"Modifier le titre ; #\xe9tiquettes ou @projet optionnels dans le champ, pastilles en dessous pour l’existant",startTaskBtn:"D\xe9marrer le suivi",finishTaskBtn:"Terminer",finishTaskOpenSubtasksWarnTitle:"Terminer la t\xe2che ?",finishTaskOpenSubtasksWarnBody:"Il reste des points de d\xe9tail non coch\xe9s. Ils seront tous marqu\xe9s comme termin\xe9s lorsque vous terminez la t\xe2che.",taskDeleteBtn:"Supprimer",taskDeleteConfirm:"Supprimer cette entr\xe9e ? Le temps enregistr\xe9 sera perdu. Cette action est irr\xe9versible.",taskConcurrentTrackingConflictTitle:"Suivi d\xe9j\xe0 actif",taskConcurrentTrackingConflictMessage:"Au moins une t\xe2che a d\xe9j\xe0 un minuteur actif. Indiquez ce que vous en faites avant de lancer celle-ci : les terminer (elles passent dans \xab termin\xe9es \xbb), les mettre en pause (reprise plus tard dans \xab en pause \xbb), ou les laisser tourner et d\xe9marrer la nouvelle t\xe2che en parall\xe8le.",taskConcurrentTrackingConflictPauseBtn:"Mettre les t\xe2ches actives en pause",taskConcurrentTrackingConflictFinishBtn:"Terminer les t\xe2ches actives",taskConcurrentTrackingConflictParallelBtn:"D\xe9marrer en parall\xe8le (garder les minuteurs)",taskConcurrentTrackingDontShowAgain:"M\xe9moriser ce choix et ne plus afficher cette bo\xeete (la m\xeame action sera appliqu\xe9e automatiquement la prochaine fois).",commitOnFinishShort:"Message Git",commitOnFinishHint:"Construire le message Git \xe0 la fin",commitOnFinishToggleAriaOff:"Proposer un message Git \xe0 la fin — d\xe9sactiv\xe9. Appuyer pour activer.",commitOnFinishToggleAriaOn:"Proposer un message Git \xe0 la fin — activ\xe9. Appuyer pour d\xe9sactiver.",tasksPausedHeading:"En pause",tasksCompletedHeading:"Termin\xe9es",tasksRunningHeading:"En cours (minuteur)",hideTaskList:"Masquer la liste",showAllTasks:"Afficher toute la liste",importGitIssue:"Importer une issue Git",pauseTaskBtn:"Pause — affichage dans la liste des pauses",resumeTaskBtn:"Reprendre le suivi",taskTimerPausedManual:"Minuteur en pause (manuel).",pausedNote:"La session est en pause pendant la consultation de l’historique.",viewingHistoryBannerTitle:"Vous consultez une session pass\xe9e.",resumeBtn:"Reprendre la session active",inspectingLabel:"Consultation :",historyInspectBannerAria:"Consultation d’une session pass\xe9e",autoTagsDetected:"\xc9tiquettes d\xe9tect\xe9es",autoProjectDetected:"Projet",tagsHelpAriaLabel:"Aide sur les \xe9tiquettes",tagSyntaxHelp:"#mot apr\xe8s un espace ou en d\xe9but, ou coll\xe9 (mot#nom). @projet : m\xeames r\xe8gles ; le premier @ compte. Jetons : lettres, chiffres, tiret, soulign\xe9 (sans espaces).",tagSuggestionsHelp:"\xc0 c\xf4t\xe9 du (?), le petit champ applique une ligne du type #mot, @projet ou un nom d’\xe9tiquette lorsque vous appuyez sur Entr\xe9e. Taper #mot dans le titre est \xe0 part.",tagsHelpWorkflowSummary:"Au-dessus, les \xe9tiquettes en lecture seule listent tout ce qui est sur la t\xe2che ; la ligne projet affiche son projet. Modifiez le titre ou utilisez le champ rapide (Entr\xe9e). @Projet#code reste optionnel.",taskAppliedTagsHelpHeading:"\xc9tiquettes sur cette t\xe2che",taskAppliedTagsHelpHint:"Tout est fusionn\xe9 : titre, champ de nouvelle t\xe2che et ligne rapide sous chaque t\xe2che. Saisissez #\xe9tiquette, @projet ou un nom puis Entr\xe9e ; @ seul retire le projet.",taskTagsExtraHelpAria:"Aide : \xe9tiquettes et projet appliqu\xe9s \xe0 cette t\xe2che",taskTagsOrphanProjectHelpBody:"Issu du titre, absent de la liste enregistr\xe9e. \xc9pinglez sous \xc9tiquettes et projets ou modifiez le titre.",taskTagProjectQuickAddPlaceholder:"#\xe9tiquette, @projet ou nom… Entr\xe9e (@ seul retire le projet)",taskTagProjectQuickAddAria:"Ajout rapide : saisir #\xe9tiquette, @projet ou un nom d’\xe9tiquette, puis Entr\xe9e",taskTagProjectMultiGroupTags:"\xc9tiquettes enregistr\xe9es",taskTagProjectMultiGroupProjects:"Projets enregistr\xe9s",taskTagProjectMultiOptionClearProject:"Retirer le projet (\xe9quivaut \xe0 @ seul)",taskTagProjectMultiSelectAria:"S\xe9lection multiple d’\xe9tiquettes et de projets enregistr\xe9s, puis bouton Ajouter la s\xe9lection",taskTagDefaultBucket:"d\xe9faut",taskTagProjectMultiHint:"Ctrl ou ⌘ + clic pour s\xe9lectionner plusieurs lignes, puis ajoutez.",taskTagProjectApplySelectionBtn:"Ajouter la s\xe9lection",tagsUserGuideIntro:"Ce guide explique comment le titre de t\xe2che, les raccourcis enregistr\xe9s et l’option @projet#code s’articulent. Vous pouvez ignorer les fonctions avanc\xe9es et n’utiliser que des #\xe9tiquettes et un seul @projet.",tagsUserGuideBasicsTitle:"Bases : jetons dans le titre",tagsUserGuideBasicsBody:"Dans le titre d’une t\xe2che, vous pouvez m\xealer du texte libre \xe0 :\n• #nom — \xe9tiquette globale (lettres, chiffres, tiret, soulign\xe9).\n• @Projet — affecte la t\xe2che \xe0 un projet (le premier @ du titre l’emporte).\nLes jetons peuvent suivre un espace ou \xeatre coll\xe9s au mot pr\xe9c\xe9dent (mot#tag). Le tableau de bord fusionne tout sous la t\xe2che.",tagsUserGuideShortcutsTitle:"Champ rapide sur chaque t\xe2che",tagsUserGuideShortcutsBody:"Dans Param\xe8tres → \xc9tiquettes et projets enregistr\xe9s (ou la colonne \xc9tiquettes \xe0 droite), vous \xe9pinglez \xe9tiquettes et projets que vous r\xe9utilisez. Sur une t\xe2che, l’\xe9troit champ \xe0 c\xf4t\xe9 de l’aide (?) propose ces valeurs ; appuyez sur Entr\xe9e pour appliquer une ligne (#\xe9tiquette, @projet, nom seul, ou @ seul pour retirer le projet). Cela ne r\xe9\xe9crit pas le titre tant que vous ne le modifiez pas vous-m\xeame.",tagsUserGuideScopedTitle:"Optionnel : @projet#code (\xe9tiquettes li\xe9es au projet)",tagsUserGuideScopedBody:"La syntaxe @Client#facture dans le titre enregistre une \xe9tiquette rattach\xe9e \xe0 ce projet (affich\xe9e Client#facture). Utile quand le m\xeame libell\xe9 local change selon le client, ou pour un filtrage plus strict. Si vous n’en avez pas besoin, restez sur #\xe9tiquette + @projet — les deux styles coexistent.",tagsUserGuideUseCasesTitle:"Cas d’usage",tagsUserGuideUseCasesBody:"• D\xe9veloppeur solo, un projet : tapez Ma fonctionnalit\xe9 @acme #frontend — sans liste enregistr\xe9e.\n• Beaucoup de tickets : \xe9pinglez #triage, #bugfix, @sprint-42 ; utilisez le champ rapide par t\xe2che au lieu de retaper.\n• Travail client : @ClientA#abonnement vs @ClientB#abonnement dans les titres pour s\xe9parer les espaces de noms ; filtrez par projet dans les rapports.\n• Saisie r\xe9troactive : m\xeames r\xe8gles # et @ dans le formulaire pass\xe9 ; le champ rapide accepte la m\xeame syntaxe.",tagsUserGuideFooterNote:"Les descriptions sur les \xe9tiquettes ou projets (survol long sur une pastille qui en a une) sont des notes pour l’\xe9quipe — elles ne changent pas le filtrage des donn\xe9es dans Kronosys.",subtasksHeading:"Points de d\xe9tail",addSubtaskPlaceholder:"Nouveau point…",addSubtaskBtn:"Ajouter",subtaskMarkDone:"Marquer ce point comme fait",subtaskMarkUndone:"Marquer ce point comme non fait",subtaskDelete:"Supprimer ce point",subtaskDragReorderHandle:"Glisser pour r\xe9ordonner",subtaskMoveUp:"Monter ce point dans la liste",subtaskMoveDown:"Descendre ce point dans la liste",subtaskTimerStart:"Suivre le temps sur ce point",subtaskTimerStop:"Arr\xeater le suivi sur ce point",subtaskDurationNotMeasured:"Pas mesur\xe9e",subtaskDurationNotRecorded:"Pas enregistr\xe9e",subtaskDurationNotShown:"Pas affich\xe9e",subtaskDurationTooltipNotMeasured:"Aucune dur\xe9e accumul\xe9e sur ce point pour l’instant. Utilisez la lecture pour d\xe9marrer le suivi.",subtaskDurationTooltipNotRecorded:"Cet instantan\xe9 ne contient pas de dur\xe9e pour ce point (non suivie ici ou absente de l’instantan\xe9 enregistr\xe9).",subtaskDurationTooltipNotShown:"Aucune dur\xe9e n’est affich\xe9e pour ce point termin\xe9 sans temps enregistr\xe9 dans cette vue archiv\xe9e.",noData:"Pas encore de donn\xe9es.",selectIssue:"Rechercher une issue GitLab",issuePickerSearchPlaceholder:"Titre, description ou num\xe9ro d’issue interne (ex. 12 ou #12)…",issuePickerSearchMinHint:"Pour une recherche par mots sur GitLab, au moins 2 caract\xe8res. Pour un num\xe9ro d’issue seul, un chiffre suffit (ex. 7 ou #7).",issuePickerLoading:"Recherche en cours…",issuePickerNoResults:"Aucun r\xe9sultat. Essayez quelques lettres du titre ou de la description, ou uniquement le num\xe9ro interne (ex. 42).",issuePickerCloseAria:"Fermer",issuePickerDashboardRequestTimeout:"D\xe9lai d\xe9pass\xe9 en attendant le serveur du tableau de bord (recherche GitLab). V\xe9rifiez que le serveur tourne, l’URL d’instance, puis r\xe9essayez.",noIssuesFound:"Aucune issue ou CLI non configur\xe9e.",sessionsColumnTitle:"Sessions",sessionsColumnHelpAria:"Aide : colonne Sessions",sessionsColumnHelpBody:"Vos sessions enregistr\xe9es et la session en cours s’affichent ici lorsque le suivi est actif.\n\nOuvrez la session active pour modifier le suivi en direct.",dashboardColSessionTeaser:"Choisis la session en cours (ou d\xe9marre-en une). Tout le tableau de bord s’aligne sur ce choix.",dashboardColSessionFlowHint:"Ensuite → T\xe2ches au centre",dashboardColTasksTeaser:"Inscris le travail r\xe9el : t\xe2ches, minuteurs, KronoFocus — li\xe9 \xe0 la session \xe0 gauche.",dashboardColTasksFlowHint:"Puis → \xc9tiquettes & projets \xe0 droite",dashboardColTagsTeaser:"Ajoute #\xe9tiquettes, @projets et raccourcis pour garder l’historique et les rapports lisibles.",dashboardColTagsFlowHint:"Facultatif, mais le futur-toi remercie.",dashboardColumnHintsPanelTitle:"Comment lire les trois colonnes",dashboardColumnHintsExpandAria:"Afficher l’aide sur les trois colonnes du tableau de bord",dashboardColumnHintsCollapseAria:"Masquer l’aide sur les colonnes",dashboardColumnHintsDismissTitle:"Masquer d\xe9finitivement ce rappel",sessionsListAriaLabel:"Sessions",sessionLiveBadge:"En cours",sessionListWallDurationTitle:"Dur\xe9e murale de la session : minutes enregistr\xe9es si disponibles, sinon \xe9cart entre le d\xe9but et la fin.",sessionListWallDurationAlertTooltip:"Au seuil d’alerte ou au-del\xe0 ({hours} h) — modifiable dans Param\xe8tres → Tableau de bord web.",sessionListStartedPrefix:"D\xe9but :",sessionListEndedPrefix:"Fin :",sessionEndLiveTitle:"Terminer la session — enregistrer dans l’historique sans en d\xe9marrer une nouvelle (le suivi peut rester actif)",sessionEndLiveAria:"Terminer la session en cours",sessionEndLiveConfirmTitle:"Terminer cette session ?",sessionEndLiveConfirmIntro:"Il reste du travail ouvert dans cette session. En la terminant, un instantan\xe9 est enregistr\xe9 dans l’historique : les minuteurs et le suivi par points ne s’appliquent plus \xe0 cette session, mais vous pourrez encore modifier les noms, les \xe9tiquettes et les projets en ouvrant la session archiv\xe9e.",sessionEndLiveConfirmIntroCalm:"En terminant la session, un instantan\xe9 est enregistr\xe9 dans l’historique avec l’heure de fin actuelle. Les minuteurs et le suivi par points ne s’appliquent plus \xe0 cette session, mais vous pourrez encore modifier les noms, les \xe9tiquettes et les projets en ouvrant la session archiv\xe9e.",sessionEndLiveWarnActiveTask:"Un suivi est actuellement actif (en cours).",sessionEndLiveWarnPausedTasks:"Au moins une entr\xe9e est en pause ou non termin\xe9e.",sessionEndLiveWarnIncompleteSubtasks:"Au moins un point n’est pas marqu\xe9 comme termin\xe9.",sessionEndLiveConfirmBtn:"Terminer la session",sessionEndLiveSidebarBtn:"Terminer cette session",sessionEndReasonModalHint:"Facultatif : indiquez pourquoi vous cl\xf4turez la session (bilans, feuilles de temps, r\xe9trospectives).",sessionEndReasonFieldsetLegend:"Raison de cl\xf4ture",sessionEndReasonSkip:"Ne pas enregistrer de cat\xe9gorie",sessionEndReasonPlanned:"Fin conforme au temps ou au p\xe9rim\xe8tre pr\xe9vu",sessionEndReasonEarly:"Fin anticip\xe9e (avant le temps ou l’\xe9ch\xe9ance pr\xe9vus)",sessionEndReasonOverrun:"Prolongation ou d\xe9passement par rapport au pr\xe9vu",sessionEndReasonOther:"Autre",sessionEndReasonNotePlaceholder:"Pr\xe9cision (facultatif)…",sessionEndReasonNoteAria:"Pr\xe9cision libre sur la fa\xe7on dont cette session se termine",selectedSessionEndReasonTitle:"Cl\xf4ture",sessionEndReasonEditHint:"Modifiez la cat\xe9gorie ou la pr\xe9cision enregistr\xe9e pour la cl\xf4ture de cette session.",sessionEndReasonSaveBtn:"Enregistrer la cl\xf4ture",sessionEndReasonSaveAria:"Enregistrer la raison de cl\xf4ture",sessionEndReasonSaving:"Enregistrement…",beforeUnloadLiveSessionMessage:"Une session Kronosys est ouverte dans ce tableau de bord. Fermer cet onglet ne met pas fin \xe0 la session. Utilisez \xab Terminer cette session \xbb dans la colonne de gauche pour la cl\xf4turer ici, ou quittez cet onglet — la session reste active en arri\xe8re-plan.",openSessionInNewTab:"Ouvrir cette session dans un nouvel onglet",detachedSessionUrlHint:"Cet onglet suit l’URL. Consulter une archive ici ne modifie que cet onglet — pas la session en cours ni la session s\xe9lectionn\xe9e dans les autres onglets ouverts.",detachedSessionUrlHintDismiss:"Masquer ce message",detachedSessionInvalidUrl:"Aucune session ne correspond \xe0 ce param\xe8tre d’URL.",tasksInSessionSingular:"\xe9l\xe9ment",tasksInSessionPlural:"\xe9l\xe9ments",rightColumnTitle:"T\xe2ches",tagsProjectsColumnTitle:"\xc9tiquettes et projets",tagsProjectsColumnIntro:"\xc9pinglage, descriptions et masquage des pastilles — comme dans les param\xe8tres, ici \xe0 c\xf4t\xe9 du flux de travail. Deux onglets permettent de basculer entre les \xe9tiquettes globales et les projets.",tagsProjectsColumnHelpAria:"Aide : colonne \xe9tiquettes et projets",tagsProjectsColumnHelpBody:"Les \xe9tiquettes globales s’appliquent \xe0 toute t\xe2che. Les \xe9tiquettes li\xe9es utilisent Projet#code et ne s’affichent en suggestion que si le @projet de la t\xe2che correspond.\n\nDans cette colonne, l’onglet \xc9tiquettes globales regroupe raccourcis, masqu\xe9es et descriptions ; l’onglet Projets et \xe9tiquettes li\xe9es regroupe les projets enregistr\xe9s et les codes par projet.\n\nCette colonne reprend la section \xab \xc9tiquettes et projets enregistr\xe9s \xbb des param\xe8tres ; les changements sont imm\xe9diats.\n\nL’aide compl\xe8te et les cas d’usage sont dans le \xab ? \xbb \xe0 c\xf4t\xe9 des \xe9tiquettes sur une carte t\xe2che.",tasksColumnSubtitle:"En cours, en pause et termin\xe9es pour la session s\xe9lectionn\xe9e.",tasksColumnSubtitleHelpAria:"Aide : contenu de cette colonne",taskFocusNoSessionTitle:"Aucune session active",taskFocusNoSessionBody:"D\xe9marrez une session depuis la colonne Sessions \xe0 gauche pour enregistrer des t\xe2ches ici.",taskStartAutoSessionToast:"Aucune session en cours — d\xe9marrage d’une session pour y rattacher cette t\xe2che.",selectedSessionSidebarTitle:"Session s\xe9lectionn\xe9e",selectedSessionIdleHint:"Aucune session en cours. D\xe9marrez-en une pour enregistrer le temps, le suivi et les m\xe9triques.",statsMetricSessionDurationHelpAria:"Aide : dur\xe9e de session",statsMetricSessionDurationHelpBody:"Temps \xe9coul\xe9 (horloge murale) depuis le premier \xe9v\xe9nement d’activit\xe9 enregistr\xe9 dans cette session jusqu’\xe0 maintenant (session en cours) ou jusqu’\xe0 l’enregistrement de l’instantan\xe9 (archive). Distinct du temps actif, du temps de codage et des minuteurs de suivi ou de point.",statsMetricCodingTimeHelpAria:"Aide : temps de codage",statsMetricCodingTimeHelpBody:"Temps cumul\xe9 lorsqu’un fichier productif (hors langages exclus) est au centre du contexte de codage : ouverture, enregistrement, changement d’\xe9diteur actif ou modifications. Cesse d’augmenter apr\xe8s environ une minute sans signal de ce type. Ind\xe9pendant du minuteur de suivi.",statsMetricActiveTimeHelpAria:"Aide : temps actif",statsMetricActiveTimeHelpBody:"Temps cumul\xe9 \xe0 partir de signaux d’activit\xe9 sur le poste : modifications, ouverture de fichier, changements de s\xe9lection, \xe9diteur actif et focus de fen\xeatre. Les intervalles de plus d’environ trois minutes ne comptent pas. Souvent entre le temps de codage et la dur\xe9e de session.",statsMetricTasksHelpAria:"Aide : t\xe2ches par statut",statsMetricTasksHelpBody:"Pour la session affich\xe9e : t\xe2ches avec le minuteur de suivi actif (\xab En cours (minuteur) \xbb), t\xe2ches non termin\xe9es dans la liste (section \xab En pause \xbb), et t\xe2ches marqu\xe9es termin\xe9es. Reprend les trois blocs de la colonne T\xe2ches.",statsTasksRowRunning:"En cours (minuteur)",statsTasksRowPausedList:"En liste (non termin\xe9es)",statsTasksRowCompleted:"Termin\xe9es",gitRepoCardTitle:"D\xe9p\xf4t Git du workspace",gitRepoNotARepo:"Le premier dossier du workspace n’est pas un d\xe9p\xf4t Git (ou Git n’est pas disponible).",gitRepoCardHelpAria:"Aide : aper\xe7u Git du workspace",gitRepoCardHelpBody:"R\xe9sum\xe9 du d\xe9p\xf4t Git \xe0 la racine du premier dossier du workspace : nombre de branches, de commits, extrait de `git log --graph --all`, et \xe9chantillon tri\xe9 des chemins suivis via `git ls-files`. Mis \xe0 jour lors du rafra\xeechissement du tableau de bord depuis le serveur.",gitRepoCurrentBranchLabel:"Branche courante",gitRepoBranchesLocalLabel:"Branches locales",gitRepoBranchesLocalHelpAria:"Aide : branches locales",gitRepoBranchesLocalHelpBody:"Nombre de branches locales (`git branch --list`).",gitRepoBranchesRemoteLabel:"Branches distantes",gitRepoBranchesRemoteHelpAria:"Aide : branches distantes",gitRepoBranchesRemoteHelpBody:"Nombre de branches de suivi distant (`git branch -r`), hors l’alias symbolique `*/HEAD`.",gitRepoCommitsHeadLabel:"Commits (HEAD)",gitRepoCommitsHeadHelpAria:"Aide : commits sur la branche courante",gitRepoCommitsHeadHelpBody:"Nombre de commits atteignables depuis HEAD (`git rev-list --count HEAD`), soit l’historique de la branche actuelle.",gitRepoCommitsAllLabel:"Commits (toutes refs)",gitRepoCommitsAllHelpAria:"Aide : commits toutes r\xe9f\xe9rences",gitRepoCommitsAllHelpBody:"Nombre sur toutes les r\xe9f\xe9rences (`git rev-list --all --count`). Peut \xeatre co\xfbteux sur les tr\xe8s gros d\xe9p\xf4ts ; affich\xe9 en — si la commande \xe9choue.",gitRepoStashesLabel:"Stashes",gitRepoStashesHelpAria:"Aide : liste des stashes",gitRepoStashesHelpBody:"Nombre d’entr\xe9es dans `git stash list`.",gitRepoGraphTitle:"Graphe r\xe9cent",gitRepoGraphHelpAria:"Aide : graphe de commits",gitRepoGraphHelpBody:"Graphe ASCII produit par `git log --graph --decorate --all` (40 derniers commits). Utile pour voir la relation entre branches.",gitRepoGraphEmpty:"Aucune ligne de graphe.",gitRepoGraphPreviewNote:"Aper\xe7u partiel — seulement les 40 derniers commits dans cette zone.",gitRepoGraphOpenFullAria:"Ouvrir le graphe de commits complet dans un nouvel onglet",gitRepoGraphOpenFullTitle:"Ouvrir le graphe de commits complet dans un nouvel onglet du navigateur",gitRepoGraphDetailDocTitle:"Graphe Git — Kronosys",gitRepoTreeTitle:"Fichiers suivis (extrait)",gitRepoTreeHelpAria:"Aide : extrait des chemins suivis",gitRepoTreeHelpBody:"\xc9chantillon tri\xe9 alphab\xe9tiquement des chemins de `git ls-files` (jusqu’\xe0 300). Ce n’est pas l’arborescence compl\xe8te ; sur les gros d\xe9p\xf4ts, des chemins peuvent manquer selon les limites de m\xe9moire.",gitRepoTreeEmpty:"Aucun chemin dans l’extrait.",gitRepoTreePreviewNote:"Aper\xe7u partiel — \xe9chantillon d’au plus 300 chemins suivis.",gitRepoTreeOpenFullAria:"Ouvrir la liste compl\xe8te des chemins suivis dans un nouvel onglet",gitRepoTreeOpenFullTitle:"Ouvrir la liste compl\xe8te des chemins suivis dans un nouvel onglet du navigateur",gitRepoTreeDetailDocTitle:"Fichiers suivis — Kronosys",statsLocSectionTitle:"Lignes et langages",statsLinesWrittenTotal:"Lignes \xe9crites",statsLinesWrittenHuman:"Humain (estim.)",statsLinesWrittenAi:"IA (estim.)",statsLocByLanguageHeading:"Lignes par langage",statsCodingSignalsHeading:"Signaux de codage par langage",statsMetricLinesWrittenHelpAria:"Aide : lignes \xe9crites",statsMetricLinesWrittenHelpBody:"Lignes nettes ajout\xe9es \xe0 partir des modifications suivies (estimation via les retours \xe0 la ligne dans les diffs). Les insertions tr\xe8s massives sont partiellement plafonn\xe9es. \xab Humain \xbb / \xab IA \xbb est une heuristique par transaction : plusieurs plages de modification, plus d’environ 6 lignes nettes, ou un bloc unique long avec saut de ligne ressemblent souvent \xe0 une insertion agent ou collage — ce n’est pas une attribution exacte.",statsMetricLocByLanguageHelpAria:"Aide : lignes par langage",statsMetricLocByLanguageHelpBody:"R\xe9partition des lignes nettes par identifiant de langage pour cette session (m\xeame base que \xab Lignes \xe9crites \xbb).",statsMetricCodingSignalsHelpAria:"Aide : signaux de codage",statsMetricCodingSignalsHelpBody:"Nombre de signaux de contexte de codage par langage (ouverture, enregistrement, \xe9dition, changement d’\xe9diteur actif, et signaux p\xe9riodiques lorsqu’une \xe9dition r\xe9cente a eu lieu).",sessionNameReadOnly:"Nom de la session (lecture seule pour cette archive)",sessionArchiveBtn:"Archiver",sessionArchiveTitle:"Masquer cette session de la liste (r\xe9cup\xe9rable dans Archives)",sessionRestoreBtn:"Restaurer",sessionDeleteBtn:"Supprimer",sessionDeleteTitle:"Supprimer la session",sessionDeleteIntro:"La session sera retir\xe9e de votre historique. Choisissez le sort des \xe9l\xe9ments associ\xe9s.",sessionDeleteDiscardTasks:"Supprimer les \xe9l\xe9ments avec la session (les abandonner)",sessionDeleteMoveTasks:"D\xe9placer les \xe9l\xe9ments vers une autre session",sessionDeleteTargetLabel:"Session cible",sessionDeleteTargetPlaceholder:"Choisir une session…",sessionDeleteConfirmBtn:"Supprimer la session",sessionDeleteCancelBtn:"Annuler",archivesModalTitle:"Sessions archiv\xe9es",archivesEmpty:"Aucune session archiv\xe9e.",archivesCloseBtn:"Fermer",archivedBadge:"Archiv\xe9e",sessionArchiveConfirm:"Archiver cette session ?\n\n• Masqu\xe9e de la liste jusqu’\xe0 restauration (Archives).\n• Rapports : exclues les entr\xe9es non termin\xe9es et celles dont un point reste ouvert (totaux, graphiques, temps par projet, KronoFocus li\xe9).",sessionArchiveDontShowAgain:"Ne plus afficher cet avertissement",storageBadgeLabelSqlite:"SQLite",storageBadgeTooltipSqlite:"L’historique des sessions est stock\xe9 en SQLite dans le r\xe9pertoire de donn\xe9es Kronosys (pilote de persistance locale dans les param\xe8tres).",storageBadgeLabelJson:"JSON",storageBadgeTooltipJson:"L’historique des sessions utilise des fichiers JSON partitionn\xe9s (pilote local h\xe9rit\xe9). Vous pouvez passer \xe0 SQLite dans les param\xe8tres Kronosys",storageBadgeLabelMongo:"MongoDB",storageBadgeTooltipMongo:"Le miroir MongoDB est activ\xe9 et connect\xe9. Vous pouvez envoyer les sessions depuis la liste ; les sessions locales suivent toujours votre pilote de persistance.",workspaceFoldersLabel:"Racines du workspace",workspaceFoldersEmpty:"Aucune racine de workspace n’est configur\xe9e pour ce tableau de bord.",headerDisplayRegionTitle:"Fuseau d’affichage {timeZone} ; format d’horloge {clock}.",headerClockFormat24Short:"24 h",headerClockFormat12Short:"12 h (AM/PM)",gitIdentityBannerAria:"Auteur Git non configur\xe9",gitIdentityBannerBody:"Indiquez l’auteur Git (nom, courriel, identifiant de forge optionnel) pour la ligne sous le titre du tableau de bord. Utilisez Configurer ici pour un formulaire rapide — tout reste local et modifiable plus tard dans Param\xe8tres → Identit\xe9 Git.",gitIdentityBannerConfigure:"Configurer ici",gitIdentityBannerDismiss:"Masquer ce rappel",gitIdentityModalTitle:"Auteur Git (saisie rapide)",gitIdentityModalIntro:"Renseignez au moins un des champs ci-dessous. Les valeurs sont enregistr\xe9es localement avec vos donn\xe9es Kronosys — rien n’est envoy\xe9 au nuage depuis cette bo\xeete de dialogue.\n\nVous pourrez les modifier ou les compl\xe9ter \xe0 tout moment dans Param\xe8tres → Identit\xe9 Git.",gitIdentityModalNeedOneField:"Renseignez au moins un champ (nom, courriel ou identifiant sur la forge) avant d’enregistrer.",gitIdentityModalSaveError:"Enregistrement impossible. V\xe9rifiez la connexion et r\xe9essayez.",gitIdentityModalFooter:"Jeton GitLab, synchronisation Git automatique et autres options avanc\xe9es restent accessibles dans Param\xe8tres, section Identit\xe9 Git, lorsque vous en avez besoin.",mongoSyncLocalLabel:"JSON local",mongoSyncMongoLabel:"MongoDB",mongoSyncStatusAligned:"Align\xe9",mongoSyncStatusUnknown:"Nombre Mongo indisponible",mongoSyncStatusLocalAhead:"D\xe9calage — moins de documents dans Mongo",mongoSyncStatusMongoAhead:"D\xe9calage — plus de documents dans Mongo",mongoSyncHelpAriaLabel:"Aide : miroir MongoDB et sessions locales",mongoSyncHelpBody:"Les fichiers JSON locaux font foi. Les totaux comptent les sessions uniques dans l’historique (y compris archiv\xe9es). MongoDB n’est mis \xe0 jour que lorsque vous envoyez une session ou via Resynchroniser dans les param\xe8tres — pas \xe0 chaque sauvegarde locale. Un \xe9cart de totaux indique souvent des sessions jamais envoy\xe9es ou des documents suppl\xe9mentaires dans Mongo. La session en cours n’appara\xeet dans le d\xe9compte local qu’apr\xe8s \xe9criture sur disque.",sessionMongoPushAriaLabel:"Envoyer cette session vers MongoDB",sessionMongoPushSyncedTitle:"\xc0 jour sur MongoDB pour cet instantan\xe9",sessionMongoPushDirtyTitle:"Session modifi\xe9e depuis le dernier envoi — cliquer pour mettre \xe0 jour",sessionMongoPushNeverTitle:"Pas encore envoy\xe9e vers MongoDB — cliquer pour envoyer",sessionMongoPushBusy:"Envoi…",sessionMongoPushFailedDisabled:"MongoDB n’est pas activ\xe9 dans les param\xe8tres.",sessionMongoPushFailedNotFound:"Session introuvable.",sessionMongoPushFailedMongo:"MongoDB a refus\xe9 l’\xe9criture. V\xe9rifiez la connexion et les journaux.",sessionMongoPushFailedUri:"Connexion MongoDB incompl\xe8te (URI ou mot de passe).",dashboardLoadingAriaLabel:"Chargement du tableau de bord, veuillez patienter",dashboardLoadingMessage:"R\xe9cup\xe9ration des donn\xe9es de session depuis le serveur Kronosys…",dataSearchTrigger:"Rechercher dans les donn\xe9es…",dataSearchPlaceholder:"Filtrer sessions, t\xe2ches, projets, \xe9tiquettes, dates, ou dur\xe9e (ex. 12:55 <, 0:10 >)…",dataSearchPaletteAriaLabel:"Recherche rapide",dataSearchTypePrompt:"Saisissez du texte pour filtrer les sessions, les t\xe2ches, les projets et les \xe9tiquettes. Vous pouvez aussi saisir une date, une heure, ou une condition sur la dur\xe9e enregistr\xe9e : m:s (ou h:m:s) suivi (ou pr\xe9c\xe9d\xe9) de < ou >, p. ex. 45:00 > ou 1:0:0 <.",dataSearchEmpty:"Aucune session ni t\xe2che ne correspond.",dataSearchFooter:"↑↓ pour se d\xe9placer \xb7 Entr\xe9e pour ouvrir \xb7 \xc9chap pour fermer",dataSearchKindSession:"Session",dataSearchKindTask:"T\xe2che",dataSearchTaskDistinguishId:"ID : {id}",dataSearchTaskStopwatchLabel:"Minuterie",dataSearchTaskRecordedTimeLabel:"Temps enregistr\xe9",dataSearchSessionWallLabel:"Dur\xe9e (session)",commandNewSession:"Nouvelle session",commandRefresh:"Actualiser le tableau de bord",commandOpenReporting:"Ouvrir les rapports",commandOpenSettings:"Ouvrir les param\xe8tres",commandOpenUserGuide:"Ouvrir le guide d’utilisation",commandFocusSessions:"Aller \xe0 la colonne Sessions",commandFocusTasks:"Aller \xe0 la colonne T\xe2ches",commandFocusTags:"Aller \xe0 la colonne \xc9tiquettes et projets",commandToggleTheme:"Basculer th\xe8me clair / sombre",commandToggleLang:"Changer la langue de l’interface (FR / EN)",commandEndLiveSession:"Terminer la session en cours",shortcutsModalTitle:"Raccourcis clavier",shortcutsModalCloseAriaLabel:"Fermer la fen\xeatre des raccourcis clavier",shortcutsModalIntro:"Cliquez sur \xab Modifier \xbb, puis enregistrez la nouvelle combinaison (au moins une touche Ctrl, Alt, Maj ou Meta). \xc9chap annule l’enregistrement. Ctrl+K / ⌘K est r\xe9serv\xe9 \xe0 la recherche rapide dans les donn\xe9es (non modifiable ici).",shortcutsTableAction:"Action",shortcutsTableShortcut:"Raccourci",shortcutsTableAssign:"Personnaliser",shortcutsChangeBtn:"Modifier…",shortcutsRecordPrompt:"Enregistrement…",shortcutsResetAll:"Tout r\xe9tablir aux valeurs par d\xe9faut",shortcutsPaletteRow:"Recherche rapide (donn\xe9es) — Ctrl+K ou ⌘K (fixe)",tourProgressLabel:"\xc9tape {n} sur {total}",tourStep1Title:"Bienvenue dans le tableau de bord Kronosys",tourStep1Body:"Ce tableau de bord charge les donn\xe9es de session en direct depuis cette application web (routes API Next.js et SQLite local) — ce n’est pas un instantan\xe9 fig\xe9.",tourStep2Title:"Guide des trois colonnes (au-dessus du tableau)",tourStep2Body:"Cette bande se place juste sous l’en-t\xeate et r\xe9sume comment s’articulent **Sessions**, **T\xe2ches** et **\xc9tiquettes et projets** — de gauche \xe0 droite sur grand \xe9cran, empil\xe9es sur petit \xe9cran, avec des fl\xe8ches entre les blocs.\n\nD\xe9ployez-la ou repliez-la avec le chevron ; chaque encadr\xe9 est un court rappel avant les vraies colonnes plus bas. **Le bouton X** \xe0 droite masque tout le bandeau pour ce navigateur ; r\xe9activez-le sous **Param\xe8tres → Tableau de bord et API → Aide trois colonnes**. Le repli au chevron et le masquage complet sont m\xe9moris\xe9s s\xe9par\xe9ment.",tourStep3Title:"Sessions (colonne de gauche)",tourStep3Body:"Parcourez l’historique des sessions, d\xe9marrez une nouvelle session et consultez la dur\xe9e, le temps de codage et les statistiques de la session s\xe9lectionn\xe9e.\n\nLorsqu’une session en cours est ouverte, vous pouvez la terminer d’ici ; les sessions archiv\xe9es s’affichent en lecture seule.\n\nPour des options d’horaire plus pouss\xe9es, ouvrez Param\xe8tres (engrenage) : sous **Tableau de bord et API**, l’**alerte de dur\xe9e de session** met en \xe9vidence une session trop longue dans cette colonne ; les sections **Horaire de travail** et **Sessions sp\xe9cifiques planifi\xe9es** r\xe8glent le suivi automatique sur la semaine et des cr\xe9neaux r\xe9currents pr\xe9cis qui priment sur l’horaire g\xe9n\xe9ral pendant leur plage horaire.",tourStep4Title:"T\xe2ches et suivi (centre)",tourStep4Body:"Suivez ce sur quoi vous travaillez, terminez des t\xe2ches et utilisez les sous-t\xe2ches ou les options li\xe9es \xe0 Git au besoin.\n\nCette colonne suit la session choisie dans la colonne Sessions — le reste de l’en-t\xeate s’aligne sur ce choix.\n\nSur les autres t\xe2ches parentes, un seul flux de suivi : lancer le suivi d’une sous-t\xe2che lance aussi le minuteur de la t\xe2che parente et interrompt le suivi sur les autres t\xe2ches (le segment est enregistr\xe9). Mettre la t\xe2che parente en pause met en pause le suivi d’une sous-t\xe2che active sur la m\xeame t\xe2che. Reprendre le minuteur d’une t\xe2che ailleurs met fin aux suivi de sous-t\xe2ches sur les autres t\xe2ches et met en pause leur minuteur principal.\n\nLes points de d\xe9tail sont facultatifs. Le total sur la t\xe2che est toujours au moins la somme du temps enregistr\xe9 sur ces points ; l’\xe9cart correspond au suivi sur la t\xe2che sans d\xe9tail par point.",tourStep5Title:"\xc9tiquettes et projets (droite)",tourStep5Body:"\xc9pinglez des \xe9tiquettes, g\xe9rez les projets enregistr\xe9s et r\xe9digez des descriptions — les m\xeames r\xe9glages que dans les param\xe8tres, accessibles pendant le travail. Deux onglets s\xe9parent les \xe9tiquettes globales des projets et des \xe9tiquettes li\xe9es.\n\nDans les titres de t\xe2ches, utilisez @projet et #\xe9tiquettes (y compris @projet#code) pour structurer le travail par projet.\n\nLes rapports (graphiques) s’appuient fortement sur ces objets : des \xe9tiquettes et des projets coh\xe9rents rendent les ventilations, filtres et tendances dans Rapports beaucoup plus utiles.",tourStep6Title:"Barre du haut : toutes les ic\xf4nes",tourStep6Body:"Dans ce groupe, de gauche \xe0 droite : la recherche rapide / palette de commandes (\xe9quivalent \xe0 Ctrl+K ou ⌘K), l’ic\xf4ne clavier pour l’aide aux raccourcis et leur personnalisation, les liens vers Rapports (graphiques) et Param\xe8tres (engrenage), le basculement th\xe8me clair / sombre, le bouton qui actualise les donn\xe9es sans recharger tout l’onglet du navigateur, et le menu de langue (FR / EN).\n\nChaque contr\xf4le a une infobulle au survol ; Rapports et Param\xe8tres ouvrent d’autres pages dans le m\xeame habillage Kronosys.",tourStep7Title:"Identit\xe9 Git et pastille de stockage",tourStep7Body:"Ici s’affichent la ligne d’auteur Git et le compte forge lorsqu’ils sont renseign\xe9s dans Param\xe8tres → Identit\xe9 Git, les racines de workspace d\xe9tect\xe9es pour les m\xe9triques, et une pastille indiquant comment les sessions sont enregistr\xe9es ici : SQLite (par d\xe9faut), pilote JSON ou miroir MongoDB si activ\xe9.\n\nSQLite conserve la charge utile du tableau de bord sur cette machine dans le r\xe9pertoire de donn\xe9es Kronosys ; cette page lit et \xe9crit via l’API locale.",tourStep8Title:"Qu’est-ce que KronoFocus ?",tourStep8Body:"**KronoFocus** cadence votre session : un segment de travail dont vous choisissez la dur\xe9e, des pauses courtes, puis une pause longue apr\xe8s plusieurs cycles. Ce dispositif est int\xe9gr\xe9 \xe0 Kronosys (compteurs, phases, lien \xe0 la session) ; il ne se r\xe9sume pas \xe0 une m\xe9thode Pomodoro fig\xe9e.\n\nL’affichage dans l’en-t\xeate ou \xe0 c\xf4t\xe9 des actions de t\xe2che se r\xe8gle dans Param\xe8tres → Tableau de bord et API (section KronoFocus).",tourStep8LearnMoreUrl:"https://fr.wikipedia.org/wiki/Gestion_du_temps",tourStep8LearnMoreLabel:"Pour aller plus loin — gestion du temps (nouvel onglet)",tourStep8LearnMoreAriaLabel:"Ouvre l’article Wikip\xe9dia sur la gestion du temps dans un nouvel onglet",tourStep9Title:"Identit\xe9 Git : la premi\xe8re chose apr\xe8s la visite",tourStep9Body:"Ce panneau s’affiche tant que le nom, le courriel ou le compte forge ne sont pas renseign\xe9s. Utilisez Configurer ici pour remplir un court formulaire sans quitter le tableau de bord — c’est l’action recommand\xe9e juste apr\xe8s la visite. Vous pouvez choisir Masquer ce rappel si vous pr\xe9f\xe9rez le faire plus tard.",tourSkipBtn:"Passer la visite",tourBackBtn:"Pr\xe9c\xe9dent",tourNextBtn:"Suivant",tourDoneBtn:"Terminer",settingsTourProgressLabel:"\xc9tape {n} sur {total}",settingsTourStep1Title:"Param\xe8tres et options",settingsTourStep1Body:"Certaines options avanc\xe9es ne sont pr\xe9sentes que dans les param\xe8tres et non sur le tableau de bord. Cette visite souligne les configurations cl\xe9s de votre espace de travail.",settingsTourStep2Title:"Profil d’usage",settingsTourStep2Body:"Basculez entre les modes 'Manager' et 'D\xe9veloppeur' pour ajuster le niveau de d\xe9tail du tableau de bord et la fr\xe9quence des rappels.",settingsTourStep3Title:"Persistance et pilotes",settingsTourStep3Body:"Choisissez entre SQLite (recommand\xe9) et l’ancien format JSON pour votre historique local. Vous pouvez aussi configurer un miroir MongoDB.",settingsTourStep4Title:"Int\xe9gration Git et GitLab",settingsTourStep4Body:"Configurez votre identit\xe9 Git et votre jeton d’API GitLab pour activer l’import d’issues et la g\xe9n\xe9ration de messages de commit.",settingsTourStep5Title:"Rapports et exclusions",settingsTourStep5Body:"D\xe9finissez les r\xe9pertoires et motifs de fichiers \xe0 exclure du d\xe9compte de lignes et du suivi de temps pour garder vos rapports propres.",settingsTourStep6Title:"Horaires et automatisation",settingsTourStep6Body:"Configurez vos heures de travail r\xe9currentes et vos sessions planifi\xe9es pour automatiser le d\xe9marrage du suivi ou le transfert de t\xe2ches.",settingsTourSkipBtn:"Passer la visite",settingsTourBackBtn:"Pr\xe9c\xe9dent",settingsTourNextBtn:"Suivant",settingsTourDoneBtn:"Terminer",tourUndismissBtn:"Relancer la visite",reportingTourProgressLabel:"Visite Rapports — \xe9tape {n} sur {total}",reportingTourStep1Title:"Bienvenue dans Rapports Kronosys",reportingTourStep1Body:"Cette page agr\xe8ge l’historique Kronosys via l’API locale. Elle sert \xe0 revoir les sessions, le temps enregistr\xe9 sur les t\xe2ches, l’usage KronoFocus et, selon les filtres, les r\xe9partitions par #\xe9tiquette et par @projet.",reportingTourStep2Title:"Filtres",reportingTourStep2Body:"Choisissez une plage de dates (ou les raccourcis Jour / Semaine / Mois / Ann\xe9e), affinez \xe9ventuellement par #\xe9tiquettes, puis r\xe9initialisez pour tout r\xe9afficher. Les pastilles vertes signalent des donn\xe9es encore mouvantes (session ou t\xe2ches non termin\xe9es).",reportingTourStep3Title:"Indicateurs r\xe9capitulatifs",reportingTourStep3Body:"Ces cartes condensent la m\xeame fen\xeatre que les graphiques : sessions, lignes de t\xe2ches, KronoFocus et minutes enregistr\xe9es. Les ic\xf4nes (?) ouvrent une courte d\xe9finition sans encombrer la page.",reportingTourStep4Title:"Graphiques par jour",reportingTourStep4Body:"Les barres montrent les sessions, les t\xe2ches par \xe9tat, le temps enregistr\xe9 sur les t\xe2ches et la dur\xe9e murale des sessions par jour calendaire. Quand plusieurs semaines existent, la bande de navigation aligne graphiques et calendriers par \xe9tiquette.",reportingTourStep5Title:"Temps par \xe9tiquette et par projet",reportingTourStep5Body:"Consultez les minutes enregistr\xe9es sur les t\xe2ches regroup\xe9es par #\xe9tiquettes (y compris le compartiment sans \xe9tiquette explicite le cas \xe9ch\xe9ant) et par @projet, avec des grilles hebdomadaires lorsque les donn\xe9es couvrent plusieurs jours.",reportingTourStep6Title:"Sommaire et mise en page \xe0 deux colonnes",reportingTourStep6Body:"Ce bloc correspond \xe0 la disposition principale de Rapports : le contenu \xe0 gauche et, sur grand \xe9cran, le sommaire fixe \xe0 droite. Sur t\xe9l\xe9phone, les m\xeames ancres sont propos\xe9es en pastilles au-dessus des filtres.",newSessionModalTitle:"Nouvelle session — port\xe9e",newSessionModalHelpAria:"Aide : port\xe9e de session (dur\xe9e, dates, jours)",newSessionModalHelpBody:"Ces options fixent le cadre attendu pour cette session seulement. Elles n’arr\xeatent pas Kronosys automatiquement : des rappels viennent de la collecte (battement de cœur) et une banni\xe8re ici lorsque vous approchez ou sortez des limites.\n\n• Dur\xe9e murale maximale — compt\xe9e depuis le premier \xe9v\xe9nement trac\xe9 dans la session.\n\n• P\xe9riode calendaire — dates locales inclusives (d\xe9but et/ou fin).\n\n• Jours de la semaine — limite aux jours choisis ; vous pouvez ajouter une plage horaire quotidienne (24 h locale). Les plages qui passent minuit sont prises en charge (ex. 22:00–06:00).",newSessionModeNone:"Aucune limite",newSessionModeMax:"Dur\xe9e murale maximale",newSessionModeCalendar:"P\xe9riode calendaire (dates)",newSessionModeWeekly:"Jours de la semaine (horaire optionnel)",newSessionMaxHoursLabel:"Dur\xe9e max (heures)",newSessionDateFromLabel:"Du (date)",newSessionDateToLabel:"Au (date)",newSessionTodayBtn:"Aujourd’hui",newSessionWeekdaysLegend:"Jours actifs",newSessionTimeFromLabel:"Quotidiennement de",newSessionTimeToLabel:"\xe0",newSessionNowBtn:"Maintenant",newSessionUseTimeWindow:"Limiter \xe0 une plage horaire chaque jour s\xe9lectionn\xe9",newSessionErrorMax:"Indiquez une dur\xe9e maximale entre 0,1 et 8760 heures.",newSessionErrorCalendar:"Choisissez au moins une date (du et/ou au).",newSessionErrorWeekly:"S\xe9lectionnez au moins un jour de la semaine.",newSessionStartBtn:"D\xe9marrer la session",newSessionCancelBtn:"Annuler",sessionScopeNoticeAria:"Rappel de port\xe9e de session",appShellRouteNavAria:"Sections principales",appShellLiveDrawerAria:"Activit\xe9 de la session en cours",appShellLiveDrawerTitle:"En cours",appShellLiveDrawerOpenDashboard:"Ouvrir le tableau de bord",appShellLiveDrawerSessionPaused:"Session en pause",appShellLiveDrawerWallClock:"Temps mural",appShellLiveDrawerTasksHeading:"Minuteurs",appShellLiveDrawerKronoFocusRunning:"En marche",appShellLiveDrawerKronoFocusPaused:"En pause",appShellLiveDrawerKronoFocusPhaseWork:"Travail",appShellLiveDrawerSubtaskTracking:"Sous-t\xe2che",appShellLiveDrawerExpand:"D\xe9ployer le panneau",appShellLiveDrawerCollapse:"Replier le panneau",appShellLiveDrawerNoRunningTasks:"Aucune t\xe2che au minuteur.",brandTagline:"La relativit\xe9 du temps productif",appVersionAriaLabel:"Version du paquet du tableau de bord Kronosys : {version}.",dialogOkBtn:"OK",dialogCancelBtn:"Annuler",dialogConfirmBtn:"Confirmer",pageRefreshTitle:"Rafra\xeechir les donn\xe9es",pageRefreshAriaLabel:"Actualiser les donn\xe9es de cette page sans recharger tout le navigateur",pageRefreshProgressLabel:"Synchronisation avec le serveur Kronosys…",pageRefreshDoneToast:"Donn\xe9es recharg\xe9es depuis le serveur Kronosys",pageRefreshFailedToast:"Impossible de recharger les donn\xe9es. V\xe9rifiez que le serveur Kronosys tourne et r\xe9essayez."};function f(a){return"fr"===a?e:d}function g(a,b,c){return"fr"===c?a>1?b.tasksInSessionPlural:b.tasksInSessionSingular:1===a?b.tasksInSessionSingular:b.tasksInSessionPlural}}};