ocearo-ui 0.1.14 → 0.1.16

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 (129) hide show
  1. package/404.html +1 -1
  2. package/README.fr.md +200 -0
  3. package/README.md +62 -155
  4. package/__next.__PAGE__.txt +9 -0
  5. package/__next._full.txt +19 -0
  6. package/__next._head.txt +6 -0
  7. package/__next._index.txt +5 -0
  8. package/__next._tree.txt +3 -0
  9. package/_next/static/1OAeSzdmDSHTKcCCWBdc_/_buildManifest.js +16 -0
  10. package/_next/static/1OAeSzdmDSHTKcCCWBdc_/_clientMiddlewareManifest.json +1 -0
  11. package/_next/static/chunks/026b02dd01b65e37.js +1 -0
  12. package/_next/static/chunks/045c83caa4d15373.js +1 -0
  13. package/_next/static/chunks/0c7febf3d9c056ee.js +243 -0
  14. package/_next/static/chunks/149eaabf92bb073c.js +1 -0
  15. package/_next/static/chunks/1823e19419b12ae6.js +1 -0
  16. package/_next/static/chunks/19d7af5c164315cb.js +1 -0
  17. package/_next/static/chunks/1a24eba0d892e1dc.js +1 -0
  18. package/_next/static/chunks/1a84975c7599d36f.js +1 -0
  19. package/_next/static/chunks/209be887a3cd714b.js +1 -0
  20. package/_next/static/chunks/2296899bc46a0855.js +1 -0
  21. package/_next/static/chunks/24276a9441b3a17c.js +38 -0
  22. package/_next/static/chunks/3abe6b32c7676e49.js +1 -0
  23. package/_next/static/chunks/46da3d80b0234973.js +1 -0
  24. package/_next/static/chunks/4701c1fd00af0aba.js +1 -0
  25. package/_next/static/chunks/50601e46aa311f4e.js +1 -0
  26. package/_next/static/chunks/530c5a9cb07bfe47.js +1 -0
  27. package/_next/static/chunks/55be29098903fc19.js +1 -0
  28. package/_next/static/chunks/587d36d3311aba3e.js +1 -0
  29. package/_next/static/chunks/5fa37bbc3bb4edcd.js +1 -0
  30. package/_next/static/chunks/611f819ef2b8cd4e.js +38 -0
  31. package/_next/static/chunks/67f54f77fd717350.js +783 -0
  32. package/_next/static/chunks/727710e55f003daf.js +36 -0
  33. package/_next/static/chunks/72d89c358c0d5483.js +1 -0
  34. package/_next/static/chunks/7c60d9d425c20d52.js +1 -0
  35. package/_next/static/chunks/7d74814a0cc0f1a8.js +1 -0
  36. package/_next/static/chunks/7f118b65b59f0bb1.js +1 -0
  37. package/_next/static/chunks/81ee481bed3ff827.js +1 -0
  38. package/_next/static/chunks/8eb23f0ac435428f.js +1 -0
  39. package/_next/static/chunks/921d3675605372b8.js +1 -0
  40. package/_next/static/chunks/9395de7f841f8cc6.js +1 -0
  41. package/_next/static/chunks/94128f7a9098814a.js +9 -0
  42. package/_next/static/chunks/a27836f0b1f77ddb.js +9 -0
  43. package/_next/static/chunks/a2dfb6fc5208ab9b.js +1 -0
  44. package/_next/static/chunks/a5243176ef1c1147.js +3 -0
  45. package/_next/static/chunks/a6dad97d9634a72d.js.map +1 -0
  46. package/_next/static/chunks/b7cd9a25676911d4.js +135 -0
  47. package/_next/static/chunks/b7d4903ad528d0c6.js +5 -0
  48. package/_next/static/chunks/b9d9a7e1cf2f6019.js +1 -0
  49. package/_next/static/chunks/ba6e6b346e330c1c.js +1 -0
  50. package/_next/static/chunks/c2ca71308a46ad5c.js +1 -0
  51. package/_next/static/chunks/c38ea03788f2be0c.js +135 -0
  52. package/_next/static/chunks/c3e7c45913a0a766.js +1 -0
  53. package/_next/static/chunks/c4793aebac6a4506.js +54 -0
  54. package/_next/static/chunks/c5ca29b672fb8724.js +1 -0
  55. package/_next/static/chunks/c8017b80fde2edc8.js +1 -0
  56. package/_next/static/chunks/c86a82a0ed86b6f2.js +1 -0
  57. package/_next/static/chunks/de921644e1dc2156.css +3 -0
  58. package/_next/static/chunks/eae6a84b628658b8.js +362 -0
  59. package/_next/static/chunks/ef44382534be9f84.js +1 -0
  60. package/_next/static/chunks/fba1dfce801bc8b9.js +1 -0
  61. package/_next/static/chunks/fe9ff98ffedd5a18.js +1 -0
  62. package/_next/static/chunks/ff1a16fafef87110.js +1 -0
  63. package/_next/static/chunks/ff5e78db2e2b69dd.js +1 -0
  64. package/_next/static/chunks/turbopack-67a2be08589a4d64.js +4 -0
  65. package/_not-found/__next._full.txt +14 -0
  66. package/_not-found/__next._head.txt +6 -0
  67. package/_not-found/__next._index.txt +5 -0
  68. package/_not-found/__next._not-found.__PAGE__.txt +5 -0
  69. package/_not-found/__next._not-found.txt +4 -0
  70. package/_not-found/__next._tree.txt +2 -0
  71. package/_not-found.html +1 -0
  72. package/_not-found.txt +14 -0
  73. package/index.html +1 -1
  74. package/index.txt +19 -7
  75. package/package.json +24 -18
  76. package/tides/larochelle/download_data.sh +1 -1
  77. package/_next/static/N96cZS9eZpTU4PbT3MlPa/_buildManifest.js +0 -1
  78. package/_next/static/chunks/0f8af13e.6652bd734d04208b.js +0 -158
  79. package/_next/static/chunks/117-35a8eb6f9457406b.js +0 -2
  80. package/_next/static/chunks/12.a4273af9b82657f2.js +0 -1
  81. package/_next/static/chunks/138.b9389f70773e44e6.js +0 -1
  82. package/_next/static/chunks/145.9caac3d586b84999.js +0 -1
  83. package/_next/static/chunks/154.4e0902ce8b0f7ad1.js +0 -1
  84. package/_next/static/chunks/188.1839b14fedef7718.js +0 -1
  85. package/_next/static/chunks/197.bcdd8d0debcb7089.js +0 -1
  86. package/_next/static/chunks/221.a545399d0aaf207f.js +0 -1
  87. package/_next/static/chunks/226.8e9a3229837caa21.js +0 -151
  88. package/_next/static/chunks/250.b26c37701919cf5c.js +0 -658
  89. package/_next/static/chunks/252.d7cc856ebccc7381.js +0 -1
  90. package/_next/static/chunks/268.8ed821c518bf7977.js +0 -1
  91. package/_next/static/chunks/274.f21dd1bea1190823.js +0 -1
  92. package/_next/static/chunks/353.c2bc481b7d81054f.js +0 -1
  93. package/_next/static/chunks/412.47bfcc49cfe552a4.js +0 -1
  94. package/_next/static/chunks/413.69878f8910eb07d8.js +0 -1
  95. package/_next/static/chunks/487.c2062e37ef29da57.js +0 -1
  96. package/_next/static/chunks/496.c440e137e5877fb7.js +0 -1
  97. package/_next/static/chunks/59.c2dfec0c5e965cb5.js +0 -1
  98. package/_next/static/chunks/610.44fac6b8e6928564.js +0 -1
  99. package/_next/static/chunks/677.b3c43a3f32b247f4.js +0 -1
  100. package/_next/static/chunks/687.798c6b33d9165736.js +0 -26
  101. package/_next/static/chunks/728.3987afab39b00f4e.js +0 -1
  102. package/_next/static/chunks/73.a6b96572b40c5751.js +0 -1
  103. package/_next/static/chunks/746-f1a5b23db9004a46.js +0 -1
  104. package/_next/static/chunks/751.a180d553d77914d3.js +0 -1
  105. package/_next/static/chunks/79.c90ea1de476d64c2.js +0 -1
  106. package/_next/static/chunks/870fdd6f.5b9af4fe6d08a9fb.js +0 -1
  107. package/_next/static/chunks/909.8d7e692d8852e057.js +0 -1
  108. package/_next/static/chunks/936.e779b5632883831e.js +0 -1
  109. package/_next/static/chunks/949.e273523eaad35cc5.js +0 -1
  110. package/_next/static/chunks/967.83ea5cd9e6c9bb4c.js +0 -1
  111. package/_next/static/chunks/975.8821fdf115b619c5.js +0 -1
  112. package/_next/static/chunks/app/_not-found/page-1beaea75cf9b93d1.js +0 -1
  113. package/_next/static/chunks/app/layout-5065440b6db19cf5.js +0 -1
  114. package/_next/static/chunks/app/page-32b46c3e73a86694.js +0 -1
  115. package/_next/static/chunks/b536a0f1.0563944ec53282b3.js +0 -197
  116. package/_next/static/chunks/bd904a5c-fce155daf9e9ba55.js +0 -36
  117. package/_next/static/chunks/fd9d1056-50d0a3499460e502.js +0 -1
  118. package/_next/static/chunks/framework-cf2d8f6f8d843863.js +0 -1
  119. package/_next/static/chunks/main-8dbe8bddfa3a978c.js +0 -1
  120. package/_next/static/chunks/main-app-ed02033afba81a43.js +0 -1
  121. package/_next/static/chunks/pages/_app-15e2daefa259f0b5.js +0 -1
  122. package/_next/static/chunks/pages/_error-28b803cb2479b966.js +0 -1
  123. package/_next/static/chunks/webpack-154ad04c6b65cdfa.js +0 -1
  124. package/_next/static/css/ac42e9cb9892c616.css +0 -3
  125. package/ocearo-ui-0.1.14.tgz +0 -0
  126. /package/_next/static/{N96cZS9eZpTU4PbT3MlPa → 1OAeSzdmDSHTKcCCWBdc_}/_ssgManifest.js +0 -0
  127. /package/_next/static/chunks/{polyfills-42372ed130431b0a.js → a6dad97d9634a72d.js} +0 -0
  128. /package/_next/static/media/{463dafcda517f24f-s.woff → GeistMonoVF-s.2cee7d16.woff} +0 -0
  129. /package/_next/static/media/{4473ecc91f70f139-s.woff → GeistVF-s.4c3c0b96.woff} +0 -0
package/404.html CHANGED
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><link rel="preconnect" href="/" crossorigin=""/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="stylesheet" href="/ocearo-ui/_next/static/css/ac42e9cb9892c616.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/ocearo-ui/_next/static/chunks/webpack-154ad04c6b65cdfa.js"/><script src="/ocearo-ui/_next/static/chunks/fd9d1056-50d0a3499460e502.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/117-35a8eb6f9457406b.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/main-app-ed02033afba81a43.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><meta name="theme-color" media="(prefers-color-scheme: light)" content="#4bbcd8"/><meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0a2e3d"/><title>Ocearo</title><meta name="description" content="Sailing made smarter"/><link rel="manifest" href="./manifest.json" crossorigin="use-credentials"/><meta name="format-detection" content="telephone=no"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-title" content="Ocearo"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><link rel="shortcut icon" href="./favicon.ico"/><link rel="icon" href="./favicon.ico" type="image/x-icon"/><link rel="icon" href="./favicon.svg" type="image/svg+xml" sizes="any"/><link rel="icon" href="./favicon-96x96.png" type="image/png" sizes="96x96"/><link rel="apple-touch-icon" href="./apple-touch-icon.png"/><meta name="next-size-adjust"/><script src="/ocearo-ui/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_d559d3 __variable_692ef5 antialiased"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/ocearo-ui/_next/static/chunks/webpack-154ad04c6b65cdfa.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HC[\"/\",\"\"]\n2:HL[\"/ocearo-ui/_next/static/css/ac42e9cb9892c616.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"3:I[12846,[],\"\"]\n5:I[4707,[],\"\"]\n6:I[36423,[],\"\"]\nc:I[61060,[],\"\"]\n7:{\"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\"}\n8:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n9:{\"display\":\"inline-block\"}\na:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\nd:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L3\",null,{\"buildId\":\"N96cZS9eZpTU4PbT3MlPa\",\"assetPrefix\":\"/ocearo-ui\",\"urlParts\":[\"\",\"_not-found\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L4\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/ocearo-ui/_next/static/css/ac42e9cb9892c616.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{}],[\"$\",\"body\",null,{\"className\":\"__variable_d559d3 __variable_692ef5 antialiased\",\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$7\",\"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\":\"$8\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$9\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$a\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$Lb\"],\"globalErrorComponent\":\"$c\",\"missingSlots\":\"$Wd\"}]\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\"}],[\"$\",\"meta\",\"1\",{\"name\":\"theme-color\",\"media\":\"(prefers-color-scheme: light)\",\"content\":\"#4bbcd8\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"media\":\"(prefers-color-scheme: dark)\",\"content\":\"#0a2e3d\"}],[\"$\",\"meta\",\"3\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"4\",{\"children\":\"Ocearo\"}],[\"$\",\"meta\",\"5\",{\"name\":\"description\",\"content\":\"Sailing made smarter\"}],[\"$\",\"link\",\"6\",{\"rel\":\"manifest\",\"href\":\"./manifest.json\",\"crossOrigin\":\"use-credentials\"}],[\"$\",\"meta\",\"7\",{\"name\":\"format-detection\",\"content\":\"telephone=no\"}],[\"$\",\"meta\",\"8\",{\"name\":\"apple-mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"9\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Ocearo\"}],[\"$\",\"meta\",\"10\",{\"name\":\"apple-mobile-web-app-status-bar-style\",\"content\":\"black-translucent\"}],[\"$\",\"link\",\"11\",{\"rel\":\"shortcut icon\",\"href\":\"./favicon.ico\"}],[\"$\",\"link\",\"12\",{\"rel\":\"icon\",\"href\":\"./favicon.ico\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"13\",{\"rel\":\"icon\",\"href\":\"./favicon.svg\",\"type\":\"image/svg+xml\",\"sizes\":\"any\"}],[\"$\",\"link\",\"14\",{\"rel\":\"icon\",\"href\":\"./favicon-96x96.png\",\"type\":\"image/png\",\"sizes\":\"96x96\"}],[\"$\",\"link\",\"15\",{\"rel\":\"apple-touch-icon\",\"href\":\"./apple-touch-icon.png\"}],[\"$\",\"meta\",\"16\",{\"name\":\"next-size-adjust\"}]]\n4:null\n"])</script></body></html>
1
+ <!DOCTYPE html><!--1OAeSzdmDSHTKcCCWBdc_--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="stylesheet" href="/ocearo-ui/_next/static/chunks/de921644e1dc2156.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/ocearo-ui/_next/static/chunks/530c5a9cb07bfe47.js"/><script src="/ocearo-ui/_next/static/chunks/b7d4903ad528d0c6.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/045c83caa4d15373.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/turbopack-67a2be08589a4d64.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><meta name="theme-color" media="(prefers-color-scheme: light)" content="#4bbcd8"/><meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0a2e3d"/><title>Ocearo</title><meta name="description" content="Sailing made smarter"/><link rel="manifest" href="./manifest.json"/><meta name="format-detection" content="telephone=no"/><meta name="mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-title" content="Ocearo"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><link rel="shortcut icon" href="./favicon.ico"/><link rel="icon" href="./favicon.ico" type="image/x-icon"/><link rel="icon" href="./favicon.svg" type="image/svg+xml" sizes="any"/><link rel="icon" href="./favicon-96x96.png" type="image/png" sizes="96x96"/><link rel="apple-touch-icon" href="./apple-touch-icon.png"/><script src="/ocearo-ui/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="geistsans_fce11f57-module__b_bU6G__variable geistmono_ed61a5f9-module__6fgesq__variable antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/ocearo-ui/_next/static/chunks/530c5a9cb07bfe47.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js\",\"/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js\"],\"default\"]\n3:I[37457,[\"/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js\",\"/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js\"],\"default\"]\n4:I[97367,[\"/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js\",\"/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[97367,[\"/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js\",\"/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js\"],\"ViewportBoundary\"]\n9:I[97367,[\"/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js\",\"/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js\"],\"MetadataBoundary\"]\nb:I[68027,[\"/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js\",\"/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js\"],\"default\"]\n:HL[\"/ocearo-ui/_next/static/chunks/de921644e1dc2156.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"1OAeSzdmDSHTKcCCWBdc_\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/ocearo-ui/_next/static/chunks/de921644e1dc2156.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{}],[\"$\",\"body\",null,{\"className\":\"geistsans_fce11f57-module__b_bU6G__variable geistmono_ed61a5f9-module__6fgesq__variable antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",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\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:style\",\"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\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"media\":\"(prefers-color-scheme: light)\",\"content\":\"#4bbcd8\"}],[\"$\",\"meta\",\"3\",{\"name\":\"theme-color\",\"media\":\"(prefers-color-scheme: dark)\",\"content\":\"#0a2e3d\"}]]\n"])</script><script>self.__next_f.push([1,"c:I[27201,[\"/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js\",\"/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js\"],\"IconMark\"]\n6:null\na:[[\"$\",\"title\",\"0\",{\"children\":\"Ocearo\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Sailing made smarter\"}],[\"$\",\"link\",\"2\",{\"rel\":\"manifest\",\"href\":\"./manifest.json\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"meta\",\"3\",{\"name\":\"format-detection\",\"content\":\"telephone=no\"}],[\"$\",\"meta\",\"4\",{\"name\":\"mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"5\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Ocearo\"}],[\"$\",\"meta\",\"6\",{\"name\":\"apple-mobile-web-app-status-bar-style\",\"content\":\"black-translucent\"}],[\"$\",\"link\",\"7\",{\"rel\":\"shortcut icon\",\"href\":\"./favicon.ico\"}],[\"$\",\"link\",\"8\",{\"rel\":\"icon\",\"href\":\"./favicon.ico\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"9\",{\"rel\":\"icon\",\"href\":\"./favicon.svg\",\"type\":\"image/svg+xml\",\"sizes\":\"any\"}],[\"$\",\"link\",\"10\",{\"rel\":\"icon\",\"href\":\"./favicon-96x96.png\",\"type\":\"image/png\",\"sizes\":\"96x96\"}],[\"$\",\"link\",\"11\",{\"rel\":\"apple-touch-icon\",\"href\":\"./apple-touch-icon.png\"}],[\"$\",\"$Lc\",\"12\",{}]]\n"])</script></body></html>
package/README.fr.md ADDED
@@ -0,0 +1,200 @@
1
+ [![GitHub Issues](https://img.shields.io/github/issues/laborima/ocearo-ui.svg)](https://github.com/laborima/ocearo-ui/issues)
2
+ [![Contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg)](CONTRIBUTING.md)
3
+ [![License](https://img.shields.io/badge/License-Apache%202.0-brightgreen.svg)](https://opensource.org/licenses/Apache-2.0)
4
+
5
+ [English 🇺🇸](README.md)
6
+
7
+ # Ocearo UI
8
+
9
+ **La navigation rendue plus intelligente**
10
+
11
+ **Ocean Robot** va transformer la navigation avec une interface utilisateur (UI) intuitive et visuellement attrayante conçue pour le projet OpenPlotter. Basé sur la plateforme **Signal K**, Ocean Robot collecte et stocke les données du bateau pour fournir des informations en temps réel.
12
+
13
+ Inspiré par l'interface de l'autopilote Tesla, ce système offre une expérience futuriste et épurée adaptée aux navigateurs.
14
+
15
+ ---
16
+
17
+ ## **Dernières mises à jour (v0.1.16)**
18
+
19
+ - **Physique 3D avancée et Voiles** : Foc/génois et grand-voile en 3D complète avec cambrure dynamique, vrillage et visualisation de l'étai.
20
+ - **Gréement dynamique et tensions** : Visualisation en temps réel des lignes de gréement (pataras, hale-bas, cunningham, bordure) avec des dégradés de couleurs basés sur la tension.
21
+ - **HUD de réglage des voiles** : Indicateurs en arc pour le chariot de GV et les chariots de foc (FP/FS) intégrés au compas 3D.
22
+ - **Autopilote et Navigation** : Vue Autopilote dédiée, widget de Route avec les routes/waypoints Signal K, et laylines 3D haute précision.
23
+ - **Tableau de bord intégré** : Panneau droit avec radar AIS, marées, météo et niveaux de réservoirs pour une vision consolidée.
24
+ - **Surveillance complète** : Nouvelles jauges moteur (temp, pression, carburant), gestion du journal de carburant et vue journal de bord.
25
+ - **Météo et Prévisions** : Contexte météo avec support de l'API de prévisions Signal K et repli sur données hors ligne.
26
+ - **Unités et Chemins configurables** : Support des unités personnalisées (kn, m/s, °C, etc.) et des chemins de données Signal K préférés pour le vent et le cap.
27
+ - **UI/UX améliorée** : Panneau AIS repensé, barres de jauge style Tesla, barres d'outils transparentes et ciel dynamique jour/nuit.
28
+ - **Outils de débogage** : Panneau de débogage dédié avec contrôles de forçage du vent et bascule des axes 3D.
29
+ - **Stack technique moderne** : Migration complète vers Next.js 16, React 19 et Tailwind CSS v4.
30
+
31
+ ---
32
+
33
+ ## **Caractéristiques Clés**
34
+
35
+ ### **Environnement 3D Dynamique**
36
+ - **Voiles Physiques** : Représentation 3D en temps réel de la grand-voile et du foc/génois avec cambrure, vrillage et prise de ris dynamiques selon le vent.
37
+ - **Gréement Interactif** : Visualisation des lignes de gréement (pataras, hale-bas, cunningham, bordure) avec dégradés de couleurs selon la tension.
38
+ - **Compas Intelligent** : **HUD de réglage** intégré affichant les positions recommandées des chariots pour une performance optimale.
39
+ - **Ciel Jour/Nuit** : Éclairage dynamique et environnement océanique synchronisés avec l'heure du navire.
40
+
41
+ ### **Navigation et Conscience Situationnelle**
42
+ - **Radar AIS** : Visualisation 3D des navires à proximité avec des panneaux d'informations détaillés.
43
+ - **Routes et Navigation** : Widget dédié pour les routes Signal K, les waypoints et les calculs de navigation en temps réel.
44
+ - **Contexte Environnemental** : Niveaux de marée, prévisions météo (API Signal K) et surveillance de la profondeur avec assiette du navire.
45
+ - **Laylines** : Visualisation haute précision des laylines en 3D pour l'aide à la navigation tactique.
46
+
47
+ ### **Systèmes du Navire**
48
+ - **Contrôle Autopilote** : Interface autopilote entièrement intégrée pour une gestion fluide du navire.
49
+ - **Surveillance Moteur** : Jauges complètes pour les températures, pressions et consommation de carburant avec suivi des pleins.
50
+ - **Indicateurs Style Tesla** : Barres modernes haute visibilité pour l'état des batteries et les niveaux de réservoirs.
51
+ - **Interface Personnalisable** : Support de 12 langues et unités configurables (métrique, impérial, nautique).
52
+
53
+ ---
54
+
55
+ ## **Vues Principales**
56
+
57
+ ### **Vue Croisière**
58
+ - **Visualisation 3D** : Fournit une vue 3D dynamique du navire, affichant des éléments critiques tels que :
59
+ - Direction du vent avec **laylines actives**
60
+ - Compas 3D de haute précision
61
+ - Niveau de profondeur et assiette du navire
62
+ - Navires à proximité représentés en 3D via les données AIS
63
+ - **HUD de réglage des voiles** : Indicateurs en arc en temps réel pour le chariot de GV et les chariots de foc au niveau du compas.
64
+ - Forme de voile basée sur la physique (cambrure et vrillage) reflétant les conditions de vent actuelles.
65
+
66
+ ![Vue Croisière](docs/cruising.png)
67
+
68
+ ### **Vue au Mouillage**
69
+ - Représentation 3D simplifiée du navire avec les données clés au mouillage :
70
+ - Position GPS
71
+ - Heure
72
+ - Niveaux de marée
73
+ - Profondeur
74
+ - État de la batterie
75
+
76
+ ![Vue au Mouillage](docs/anchored.png)
77
+
78
+ ### **Vue Aide au Stationnement**
79
+ - Utilise les données des caméras et capteurs pour simplifier l'accostage :
80
+ - Affichage des prédictions de trajectoire selon le vent et l'angle de barre
81
+ - Indications de vitesse et flux vidéo en direct de la caméra avant
82
+ - Mise en évidence des places de port disponibles
83
+
84
+ *En cours de développement.*
85
+
86
+ ![Vue Aide au Stationnement](docs/parking.png)
87
+
88
+ ### **Autres Vues**
89
+ Visuels additionnels améliorant les fonctionnalités du système :
90
+
91
+ ![Other Views](docs/ais.png)
92
+ ![Other Views](docs/ocean.png)
93
+ ![Other Views](docs/meteo.png)
94
+ ![Other Views](docs/navigation.png)
95
+ ![Other Views](docs/instruments.png)
96
+ ![Other Views](docs/webcam.png)
97
+ ![Other Views](docs/battery.png)
98
+ ![Other Views](docs/performances.png)
99
+ ![Other Views](docs/dashboard1.png)
100
+ ![Other Views](docs/dashboard2.png)
101
+ ![Other Views](docs/dashboard3.png)
102
+ ![Other Views](docs/engine.png)
103
+
104
+ ---
105
+
106
+ ## **Vision pour le Futur**
107
+ La feuille de route d'Ocean Robot inclut des fonctionnalités avancées visant à améliorer la sécurité et l'efficacité :
108
+
109
+ - **Détection d'objets par IA** pour les débris flottants et obstacles
110
+ - Intégration avec des systèmes de caméras avancés (ex: **see.ai**)
111
+ - **Améliorations futures** :
112
+ - Surveillance par caméra des penons pour des suggestions de réglage optimal
113
+ - Visualisation de la bathymétrie en 3D
114
+ - Visualisation des lignes de départ en 3D
115
+
116
+ ---
117
+
118
+ Démo en direct : https://laborima.github.io/ocearo-ui/
119
+
120
+ Ou installez-le dans Signal K via le paquet NPM : https://www.npmjs.com/package/ocearo-ui
121
+
122
+ ---
123
+
124
+ ## **Contribution**
125
+
126
+ Votre soutien rend Ocearo UI meilleur ! Voici comment vous pouvez contribuer :
127
+
128
+ - Signaler des bugs : Aidez-moi à corriger les problèmes en me signalant ce qui ne fonctionne pas.
129
+ - Suggérer des fonctionnalités : Partagez vos idées pour de nouvelles fonctionnalités.
130
+ - Contribuer au code : Soumettez des "pull requests" pour ajouter des fonctionnalités ou corriger des bugs.
131
+ - Soutenir le projet : Aidez à financer l'achat de webcams et de capteurs en m'offrant un café.
132
+
133
+ [![Buy Me A Coffee](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/laborima)
134
+
135
+ ---
136
+
137
+ ## **Développement et Déploiement**
138
+
139
+ ### Compilation
140
+
141
+ Cloner les sources :
142
+
143
+ ```bash
144
+ git clone https://github.com/laborima/ocearo-ui.git
145
+ cd ocearo-ui
146
+ ```
147
+
148
+ Installer les dépendances :
149
+
150
+ ```bash
151
+ npm install
152
+ ```
153
+
154
+ Démarrer le serveur de développement :
155
+
156
+ ```bash
157
+ npm run dev
158
+ ```
159
+
160
+ Accéder à l'interface sur [http://localhost:3000](http://localhost:3000).
161
+
162
+ ### Modèles de Bateaux
163
+ Tous les modèles 3D ont une longueur de flottaison de 10 mètres et sont positionnés à 0 sur l'axe Y. Utilisez Blender pour les ajustements.
164
+
165
+ ---
166
+
167
+ ### Configuration des Marées
168
+ Créez des fichiers JSON sous le chemin suivant :
169
+ `public/tides/${harbor}/${MM}_${yyyy}.json`
170
+
171
+ Un script d'exemple permet de télécharger les données pour La Rochelle.
172
+
173
+ ---
174
+
175
+ ## **Déploiement sur OpenPlotter**
176
+
177
+ La méthode recommandée est d'utiliser le paquet npm publié.
178
+ Pour déployer votre propre compilation :
179
+
180
+ ```bash
181
+ git clone https://github.com/laborima/ocearo-ui.git
182
+ cd ocearo-ui
183
+ npm install
184
+ NODE_ENV=production npm run build
185
+ scp -r ./out/* pi@openplotter.local:/home/pi/.signalk/node_modules/ocearo-ui
186
+ ```
187
+
188
+ ---
189
+
190
+ ⚠ Avertissement de Navigation
191
+
192
+ Utiliser avec précaution – Ne remplace pas les systèmes de navigation officiels.
193
+
194
+ Ocearo UI est conçu pour améliorer la conscience situationnelle et visualiser les données en temps réel. Cependant, ce logiciel n'est pas un système de navigation ou de sécurité certifié.
195
+
196
+ - Vérifiez toujours les données avec les cartes marines officielles et les appareils GPS.
197
+ - Gardez une conscience situationnelle et suivez les règles de sécurité maritime.
198
+ - Les développeurs d'Ocearo UI ne sont pas responsables des incidents ou erreurs de navigation liés à l'utilisation de ce logiciel.
199
+
200
+ En utilisant Ocearo UI, vous acceptez les risques inhérents à l'utilisation d'outils de navigation non certifiés. Naviguez de manière responsable !
package/README.md CHANGED
@@ -2,10 +2,10 @@
2
2
  [![Contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg)](CONTRIBUTING.md)
3
3
  [![License](https://img.shields.io/badge/License-Apache%202.0-brightgreen.svg)](https://opensource.org/licenses/Apache-2.0)
4
4
 
5
+ [Français 🇫🇷](README.fr.md)
5
6
 
6
7
  # Ocearo UI
7
8
 
8
-
9
9
  **Sailing Made Smarter**
10
10
 
11
11
  **Ocean Robot** is set to transform sailing with an intuitive and visually engaging user interface (UI) designed for the OpenPlotter boat project. Powered by the **Signal K** platform, Ocean Robot gathers and stores boat data to provide real-time insights.
@@ -14,16 +14,54 @@ Inspired by Tesla's autopilot UI, this system delivers a futuristic and streamli
14
14
 
15
15
  ---
16
16
 
17
+ ## **Latest Updates (v0.1.16)**
18
+
19
+ - **Advanced 3D Physics & Sails**: Full 3D jib/genoa and mainsail with dynamic camber, twist, and forestay visualization.
20
+ - **Dynamic Rigging & Tensions**: Real-time visualization of rigging lines (backstay, vang, cunningham, outhaul) with tension-based color gradients.
21
+ - **Sail Trim HUD**: Compass-style arc indicators for sail car positions (GV/Mainsail and Jib) integrated into the 3D compass.
22
+ - **Autopilot & Navigation**: Dedicated Autopilot view, Course widget with Signal K routes/waypoints, and high-precision 3D laylines.
23
+ - **Integrated Dashboard**: Right-pane dashboard featuring AIS radar, tide, weather, and tank levels for consolidated awareness.
24
+ - **Comprehensive Monitoring**: New engine monitoring gauges (temp, pressure, fuel), fuel log utilities, and logbook view.
25
+ - **Weather & Forecasts**: Weather context with Signal K forecast API support and offline data fallbacks.
26
+ - **Configurable Units & Paths**: Support for custom units (kn, m/s, °C, etc.) and preferred Signal K data paths for wind and heading.
27
+ - **Enhanced UI/UX**: Redesigned AIS panel, Tesla-style gauge bars, transparent toolbars, and dynamic day/night skybox.
28
+ - **Debug Tools**: Dedicated debug panel with wind override controls and 3D axes toggle.
29
+ - **Modern Tech Stack**: Fully migrated to Next.js 16, React 19, and Tailwind CSS v4.
30
+
31
+ ---
32
+
33
+ ## **Key Features**
34
+
35
+ ### **Dynamic 3D Environment**
36
+ - **Physically-based Sails**: Real-time 3D representation of mainsail and jib/genoa with dynamic camber, twist, and reefing based on wind conditions.
37
+ - **Interactive Rigging**: Visualization of rigging lines (backstay, vang, cunningham, outhaul) with tension-based color gradients.
38
+ - **Smart Compass**: Integrated **Sail Trim HUD** showing recommended car positions for optimal performance.
39
+ - **Day/Night Skybox**: Dynamic lighting and ocean environment that synchronizes with vessel time.
40
+
41
+ ### **Navigation & Awareness**
42
+ - **AIS Radar**: Real-time 3D visualization of nearby vessels with detailed information panels.
43
+ - **Course & Routing**: Dedicated widget for Signal K routes, waypoints, and real-time course calculations.
44
+ - **Environmental Context**: Integrated tide levels, weather forecasts (Signal K Weather API), and depth monitoring with vessel attitude.
45
+ - **Laylines**: High-precision 3D laylines to assist in tactical navigation.
46
+
47
+ ### **Vessel Systems**
48
+ - **Autopilot Control**: Fully integrated autopilot interface for seamless vessel management.
49
+ - **Engine Monitoring**: Comprehensive gauges for temperature, pressure, and fuel consumption with refill tracking.
50
+ - **Tesla-style Indicators**: Modern, high-visibility bars for battery status and tank levels.
51
+ - **Customizable UI**: Support for 12 languages and configurable units (metric, imperial, nautical).
52
+
53
+ ---
54
+
17
55
  ## **Core Views**
18
56
 
19
57
  ### **Cruising View**
20
58
  - **3D Visualization**: Provides a dynamic 3D view of the vessel, displaying critical elements such as:
21
- - Wind direction with laylines
22
- - Compass
23
- - Depth level
24
- - Nearby boats, represented in 3D using AIS data
25
- - Real-time sail adjustment recommendations based on wind conditions and sail positions
26
-
59
+ - Wind direction with **active laylines**
60
+ - High-precision 3D Compass
61
+ - Depth level & vessel attitude
62
+ - Nearby vessels represented in 3D using AIS data
63
+ - **Sail Trim HUD**: Real-time arc indicators for mainsail traveller and jib cars at compass level.
64
+ - Physically-based sail shape (camber & twist) reflecting current wind conditions.
27
65
 
28
66
  ![Cruising View](docs/cruising.png)
29
67
 
@@ -58,6 +96,10 @@ Additional visuals enhance the system's functionality:
58
96
  ![Other Views](docs/webcam.png)
59
97
  ![Other Views](docs/battery.png)
60
98
  ![Other Views](docs/performances.png)
99
+ ![Other Views](docs/dashboard1.png)
100
+ ![Other Views](docs/dashboard2.png)
101
+ ![Other Views](docs/dashboard3.png)
102
+ ![Other Views](docs/engine.png)
61
103
 
62
104
  ---
63
105
 
@@ -69,7 +111,6 @@ Ocean Robot's roadmap includes advanced features aimed at enhancing safety and e
69
111
  - **Future Enhancements**:
70
112
  - Camera-based monitoring of sail indicators (*penons*) for optimal sail trim suggestions
71
113
  - 3D Bathymetry visualization
72
- - 3D Laylines visualization
73
114
  - 3D Start lines visualization
74
115
 
75
116
  ---
@@ -84,10 +125,10 @@ Or install it in Signal K using the NPM package: https://www.npmjs.com/package/o
84
125
 
85
126
  Your support and involvement make Ocearo UI better! Here are some ways you can contribute:
86
127
 
87
- * Report bugs: Help me squash issues by letting me know when something isn't working as expected.
88
- * Suggest features: Share your ideas for new features or improvements your feedback shapes the project!
89
- * Contribute code: Submit pull requests to add features, fix bugs, or improve documentation.
90
- * Support the project: Help fund the purchase of webcams, and sensors by buying me a coffee.
128
+ - Report bugs: Help me squash issues by letting me know when something isn't working as expected.
129
+ - Suggest features: Share your ideas for new features or improvements your feedback shapes the project!
130
+ - Contribute code: Submit pull requests to add features, fix bugs, or improve documentation.
131
+ - Support the project: Help fund the purchase of webcams, and sensors by buying me a coffee.
91
132
 
92
133
  [![Buy Me A Coffee](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/laborima)
93
134
 
@@ -97,7 +138,6 @@ Your support and involvement make Ocearo UI better! Here are some ways you can c
97
138
 
98
139
  ### Building
99
140
 
100
-
101
141
  Clone sources:
102
142
 
103
143
  ```bash
@@ -108,7 +148,7 @@ cd ocearo-ui
108
148
  Install dependencies:
109
149
 
110
150
  ```bash
111
- npm install next react react-dom
151
+ npm install
112
152
  ```
113
153
 
114
154
  Start the development server:
@@ -125,163 +165,30 @@ Edit the page by modifying `app/page.js`. Changes update automatically as you sa
125
165
 
126
166
  All 3D boat models have a waterline length of 10 meters and are positioned at 0 on the Y-axis. Use Blender to make any adjustments.
127
167
 
128
-
129
168
  ---
130
169
  ### Setup Tides Data
131
170
 
132
171
  Create JSON files and stores tide data under the following path:
133
172
 
134
- ```
135
- public/tides/${harbor}/${MM}_${yyyy}.json
136
- ```
173
+ `public/tides/${harbor}/${MM}_${yyyy}.json`
137
174
 
138
175
  A sample script allows downloading tide data for La Rochelle.
139
176
 
140
- #### Example
141
-
142
- After downloading, the directory structure for La Rochelle will look like this:
143
-
144
- ```bash
145
- ls public/tides/larochelle/
146
- 01_2025.json 04_2025.json 07_2025.json 10_2025.json download_data.sh
147
- 02_2025.json 05_2025.json 08_2025.json 11_2025.json
148
- 03_2025.json 06_2025.json 09_2025.json 12_2025.json
149
- ```
150
-
151
- #### JSON Format
152
-
153
- Each JSON file contains tide data for a specific month. The structure follows this format:
154
-
155
- ```json
156
- {
157
- "2025-01-01": [
158
- [
159
- "tide.low",
160
- "11:38",
161
- "1.45m",
162
- "---"
163
- ],
164
- [
165
- "tide.high",
166
- "05:21",
167
- "5.95m",
168
- "80"
169
- ],
170
- [
171
- "tide.low",
172
- "23:56",
173
- "1.56m",
174
- "---"
175
- ],
176
- [
177
- "tide.high",
178
- "17:44",
179
- "5.7m",
180
- "81"
181
- ]
182
- ]
183
- }
184
- ```
185
-
186
- Each tide entry consists of:
187
- - **Type**: "tide.low" or "tide.high"
188
- - **Time**: The time of the tide event (HH:MM)
189
- - **Height**: Tide height in meters
190
- - **Coefficient**: If applicable, the coefficient value (otherwise "---")
191
-
192
- ### Setup SSL for PWA
193
-
194
- For complete documentation on setting up SSL, see:
195
-
196
- [doc/ssl.md](doc/ssl.md)
197
-
198
-
199
- ### Setup Polar Data
200
-
201
- The default POLAR file is based on the Dufour 310 (POL11111) from ORC-DATA.
202
-
203
- For improved polar data, you can download a more accurate dataset from:
204
-
205
- [ORC Data Repository](https://github.com/jieter/orc-data/blob/master/site/data/)
206
-
207
- Save the downloaded file under:
208
-
209
- ```
210
- /public/boats/default/polar/polar.json
211
- ```
212
-
213
- ### Setup Documentation
214
-
215
- Create an `index.json` file and place it under:
216
-
217
- ```
218
- /public/docs/index.json
219
- ```
220
-
221
- #### JSON Format
222
-
223
- ```json
224
- [
225
- {
226
- "file": "a, c, e Series MFD Notice d_installation 87247-1-FR.pdf",
227
- "title": "Installation Manual for a, c, e Series MFD"
228
- },
229
- {
230
- "file": "Manuel propriétaire Dufour 310 Grand Large_2019-06_FR.pdf",
231
- "title": "Owner's Manual for Dufour 310 Grand Large"
232
- },
233
- {
234
- "file": "p70 et p70R Notice d_installation et d_utilisation 81355-1-FR.pdf",
235
- "title": "Installation and User Guide for p70 and p70R"
236
- },
237
- {
238
- "file": "OpenCPN User Manual-4-8-6-Sept-18-18-medium-compressed.pdf",
239
- "title": "OpenCPN User Manual Version 4.8.6"
240
- }
241
- ]
242
- ```
177
+ ---
243
178
 
244
179
  ## **Deploying to OpenPlotter**
245
180
 
246
181
  The recommended way is to use the npm published package.
247
- If you want to deploy your own build, you can either adapt and run the provided `deploy.sh` script, or use the following manual steps:
182
+ If you want to deploy your own build:
248
183
 
249
184
  ```bash
250
185
  git clone https://github.com/laborima/ocearo-ui.git
251
186
  cd ocearo-ui
252
- npm install next react react-dom
187
+ npm install
253
188
  NODE_ENV=production npm run build
254
- scp -r -P 22./out/* pi@openplotter.local:/home/pi/.signalk/node_modules/ocearo-ui
189
+ scp -r ./out/* pi@openplotter.local:/home/pi/.signalk/node_modules/ocearo-ui
255
190
  ```
256
191
 
257
- ### Adding to OpenPlotter Startup
258
-
259
- Edit the LXDE startup configuration to launch the UI in kiosk mode:
260
-
261
- ```bash
262
- vi ~/.config/lxsession/LXDE-pi/autostart
263
- @chromium-browser --start-fullscreen --kiosk --disable-restore-session-state --app=https://localhost:3000/ocearo-ui
264
- ```
265
-
266
- - `--kiosk`: Launches Chromium in fullscreen mode, preventing exit via keyboard shortcuts.
267
- - `--disable-restore-session-state`: Prevents Chromium from restoring tabs after unexpected closures.
268
- - `--noerrdialogs`: Suppresses error dialogs.
269
-
270
- ---
271
-
272
- ## **Sample Boat Integration**
273
-
274
- ![Boat Integration](docs/cirrus_1.jpg)
275
- ![Boat Integration](docs/cirrus_2.jpg)
276
- ![Boat Integration](docs/cirrus_3.jpg)
277
-
278
- ---
279
-
280
- Thanks to OpenPlotter, Signal K, and the MacArthur Hat project for their foundational work. The system also integrates with additional tools such as Windy App, Kip Dashboard, and Freeboard-SK.
281
- Thanks to Apparent Wind Sail-Trim Simulator https://github.com/flyinggorilla/simulator.atterwind.info for is work on sail representation
282
- Thanks to https://jieter.github.io/orc-data/site/ for Polar data
283
- Special thanks to open-source 3D model contributors for enhancing the visual experience.
284
-
285
192
  ---
286
193
 
287
194
  ⚠ Navigation Disclaimer
@@ -290,8 +197,8 @@ Use with Caution – Not a Substitute for Official Navigation Systems
290
197
 
291
198
  Ocearo UI is designed to enhance sailing awareness and provide real-time data visualization. However, this software is not a certified navigation or safety system and should not be relied upon as the sole source of navigational information.
292
199
 
293
- * Always cross-check data with official marine charts, GPS devices, and other navigation aids.
294
- * Maintain situational awareness and follow maritime safety regulations.
295
- * The developers of Ocearo UI are not liable for any incidents, accidents, or navigation errors that may arise from using this software.
200
+ - Always cross-check data with official marine charts, GPS devices, and other navigation aids.
201
+ - Maintain situational awareness and follow maritime safety regulations.
202
+ - The developers of Ocearo UI are not liable for any incidents, accidents, or navigation errors that may arise from using this software.
296
203
 
297
204
  By using Ocearo UI, you acknowledge and accept the inherent risks of relying on non-certified navigation tools. Always navigate responsibly!
@@ -0,0 +1,9 @@
1
+ 1:"$Sreact.fragment"
2
+ 2:I[47257,["/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js","/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js"],"ClientPageRoot"]
3
+ 3:I[81694,["/ocearo-ui/_next/static/chunks/50601e46aa311f4e.js","/ocearo-ui/_next/static/chunks/7c60d9d425c20d52.js","/ocearo-ui/_next/static/chunks/c3e7c45913a0a766.js","/ocearo-ui/_next/static/chunks/727710e55f003daf.js","/ocearo-ui/_next/static/chunks/587d36d3311aba3e.js","/ocearo-ui/_next/static/chunks/8eb23f0ac435428f.js"],"default"]
4
+ 6:I[97367,["/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js","/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js"],"OutletBoundary"]
5
+ 7:"$Sreact.suspense"
6
+ 0:{"buildId":"1OAeSzdmDSHTKcCCWBdc_","rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/ocearo-ui/_next/static/chunks/50601e46aa311f4e.js","async":true}],["$","script","script-1",{"src":"/ocearo-ui/_next/static/chunks/7c60d9d425c20d52.js","async":true}],["$","script","script-2",{"src":"/ocearo-ui/_next/static/chunks/c3e7c45913a0a766.js","async":true}],["$","script","script-3",{"src":"/ocearo-ui/_next/static/chunks/727710e55f003daf.js","async":true}],["$","script","script-4",{"src":"/ocearo-ui/_next/static/chunks/587d36d3311aba3e.js","async":true}],["$","script","script-5",{"src":"/ocearo-ui/_next/static/chunks/8eb23f0ac435428f.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"loading":null,"isPartial":false}
7
+ 4:{}
8
+ 5:"$0:rsc:props:children:0:props:serverProvidedParams:params"
9
+ 8:null
@@ -0,0 +1,19 @@
1
+ 1:"$Sreact.fragment"
2
+ 2:I[39756,["/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js","/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js"],"default"]
3
+ 3:I[37457,["/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js","/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js"],"default"]
4
+ 4:I[47257,["/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js","/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js"],"ClientPageRoot"]
5
+ 5:I[81694,["/ocearo-ui/_next/static/chunks/50601e46aa311f4e.js","/ocearo-ui/_next/static/chunks/7c60d9d425c20d52.js","/ocearo-ui/_next/static/chunks/c3e7c45913a0a766.js","/ocearo-ui/_next/static/chunks/727710e55f003daf.js","/ocearo-ui/_next/static/chunks/587d36d3311aba3e.js","/ocearo-ui/_next/static/chunks/8eb23f0ac435428f.js"],"default"]
6
+ 8:I[97367,["/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js","/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js"],"OutletBoundary"]
7
+ 9:"$Sreact.suspense"
8
+ b:I[97367,["/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js","/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js"],"ViewportBoundary"]
9
+ d:I[97367,["/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js","/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js"],"MetadataBoundary"]
10
+ f:I[68027,["/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js","/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js"],"default"]
11
+ :HL["/ocearo-ui/_next/static/chunks/de921644e1dc2156.css","style"]
12
+ :HC["/",""]
13
+ 0:{"P":null,"b":"1OAeSzdmDSHTKcCCWBdc_","c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/ocearo-ui/_next/static/chunks/de921644e1dc2156.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":[["$","head",null,{}],["$","body",null,{"className":"geistsans_fce11f57-module__b_bU6G__variable geistmono_ed61a5f9-module__6fgesq__variable antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",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"}]}]]}]]}],{"children":[["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@6","$@7"]}}],[["$","script","script-0",{"src":"/ocearo-ui/_next/static/chunks/50601e46aa311f4e.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/ocearo-ui/_next/static/chunks/7c60d9d425c20d52.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/ocearo-ui/_next/static/chunks/c3e7c45913a0a766.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/ocearo-ui/_next/static/chunks/727710e55f003daf.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/ocearo-ui/_next/static/chunks/587d36d3311aba3e.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/ocearo-ui/_next/static/chunks/8eb23f0ac435428f.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$Le"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$f",[]],"S":true}
14
+ 6:{}
15
+ 7:"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params"
16
+ c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}],["$","meta","2",{"name":"theme-color","media":"(prefers-color-scheme: light)","content":"#4bbcd8"}],["$","meta","3",{"name":"theme-color","media":"(prefers-color-scheme: dark)","content":"#0a2e3d"}]]
17
+ 10:I[27201,["/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js","/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js"],"IconMark"]
18
+ a:null
19
+ e:[["$","title","0",{"children":"Ocearo"}],["$","meta","1",{"name":"description","content":"Sailing made smarter"}],["$","link","2",{"rel":"manifest","href":"./manifest.json","crossOrigin":"$undefined"}],["$","meta","3",{"name":"format-detection","content":"telephone=no"}],["$","meta","4",{"name":"mobile-web-app-capable","content":"yes"}],["$","meta","5",{"name":"apple-mobile-web-app-title","content":"Ocearo"}],["$","meta","6",{"name":"apple-mobile-web-app-status-bar-style","content":"black-translucent"}],["$","link","7",{"rel":"shortcut icon","href":"./favicon.ico"}],["$","link","8",{"rel":"icon","href":"./favicon.ico","type":"image/x-icon"}],["$","link","9",{"rel":"icon","href":"./favicon.svg","type":"image/svg+xml","sizes":"any"}],["$","link","10",{"rel":"icon","href":"./favicon-96x96.png","type":"image/png","sizes":"96x96"}],["$","link","11",{"rel":"apple-touch-icon","href":"./apple-touch-icon.png"}],["$","$L10","12",{}]]
@@ -0,0 +1,6 @@
1
+ 1:"$Sreact.fragment"
2
+ 2:I[97367,["/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js","/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js"],"ViewportBoundary"]
3
+ 3:I[97367,["/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js","/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js"],"MetadataBoundary"]
4
+ 4:"$Sreact.suspense"
5
+ 5:I[27201,["/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js","/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js"],"IconMark"]
6
+ 0:{"buildId":"1OAeSzdmDSHTKcCCWBdc_","rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}],["$","meta","2",{"name":"theme-color","media":"(prefers-color-scheme: light)","content":"#4bbcd8"}],["$","meta","3",{"name":"theme-color","media":"(prefers-color-scheme: dark)","content":"#0a2e3d"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Ocearo"}],["$","meta","1",{"name":"description","content":"Sailing made smarter"}],["$","link","2",{"rel":"manifest","href":"./manifest.json"}],["$","meta","3",{"name":"format-detection","content":"telephone=no"}],["$","meta","4",{"name":"mobile-web-app-capable","content":"yes"}],["$","meta","5",{"name":"apple-mobile-web-app-title","content":"Ocearo"}],["$","meta","6",{"name":"apple-mobile-web-app-status-bar-style","content":"black-translucent"}],["$","link","7",{"rel":"shortcut icon","href":"./favicon.ico"}],["$","link","8",{"rel":"icon","href":"./favicon.ico","type":"image/x-icon"}],["$","link","9",{"rel":"icon","href":"./favicon.svg","type":"image/svg+xml","sizes":"any"}],["$","link","10",{"rel":"icon","href":"./favicon-96x96.png","type":"image/png","sizes":"96x96"}],["$","link","11",{"rel":"apple-touch-icon","href":"./apple-touch-icon.png"}],["$","$L5","12",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"loading":null,"isPartial":false}
@@ -0,0 +1,5 @@
1
+ 1:"$Sreact.fragment"
2
+ 2:I[39756,["/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js","/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js"],"default"]
3
+ 3:I[37457,["/ocearo-ui/_next/static/chunks/ff1a16fafef87110.js","/ocearo-ui/_next/static/chunks/a2dfb6fc5208ab9b.js"],"default"]
4
+ :HL["/ocearo-ui/_next/static/chunks/de921644e1dc2156.css","style"]
5
+ 0:{"buildId":"1OAeSzdmDSHTKcCCWBdc_","rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/ocearo-ui/_next/static/chunks/de921644e1dc2156.css","precedence":"next"}]],["$","html",null,{"lang":"en","children":[["$","head",null,{}],["$","body",null,{"className":"geistsans_fce11f57-module__b_bU6G__variable geistmono_ed61a5f9-module__6fgesq__variable antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",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."}]}]]}]}]],[]]}]}]]}]]}],"loading":null,"isPartial":false}