ocearo-ui 0.1.22 → 2.0.0

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 (147) hide show
  1. package/404.html +1 -1
  2. package/README.fr.md +118 -158
  3. package/README.md +114 -158
  4. package/__next.__PAGE__.txt +19 -5
  5. package/__next._full.txt +11 -11
  6. package/__next._tree.txt +2 -2
  7. package/_next/static/chunks/0-c2-u5p6bxzo.js +1 -0
  8. package/_next/static/chunks/01atsfq_4opab.js +1 -0
  9. package/_next/static/chunks/0cx639tthxlz4.js +1 -0
  10. package/_next/static/chunks/0h2qsuyze9ds1.js +1 -0
  11. package/_next/static/chunks/0iqdztntvxh3c.js +119 -0
  12. package/_next/static/chunks/0iztd835j5p1n.js +700 -0
  13. package/_next/static/chunks/{2nxsyowmuwpjy.js → 0jfox92up1jvy.js} +1 -1
  14. package/_next/static/chunks/0jpa5m78l0ib0.js +1 -0
  15. package/_next/static/chunks/0kpstejrka-7k.js +1 -0
  16. package/_next/static/chunks/0n95joti2n2py.js +3 -0
  17. package/_next/static/chunks/0oaqe70syw_b5.js +1 -0
  18. package/_next/static/chunks/0ohleay4roayh.js +353 -0
  19. package/_next/static/chunks/0on1skx9l54-9.js +1 -0
  20. package/_next/static/chunks/0w_skktmh3e48.js +1 -0
  21. package/_next/static/chunks/0y-dctk-kmqss.js +1 -0
  22. package/_next/static/chunks/0yiqocv54ogoq.js +1 -0
  23. package/_next/static/chunks/0zlk2mlkvbtj1.js +1 -0
  24. package/_next/static/chunks/0zwc9m4qgtwle.js +1 -0
  25. package/_next/static/chunks/11awvgcou7v4r.js +1 -0
  26. package/_next/static/chunks/144mjqdrx42lq.js +1 -0
  27. package/_next/static/chunks/1d81m3g9jqkob.js +1 -0
  28. package/_next/static/chunks/1ed7ayfg19cjb.js +1 -0
  29. package/_next/static/chunks/1epya-yh2wvj2.js +1 -0
  30. package/_next/static/chunks/1exvcc71cgr4t.js +446 -0
  31. package/_next/static/chunks/1fzzb4jtgv5gg.js +9 -0
  32. package/_next/static/chunks/1g8fbzv0hu0i2.js +1 -0
  33. package/_next/static/chunks/1gaiqhzy_0d7s.js +1 -0
  34. package/_next/static/chunks/1gq4t2dyr7rq3.js +1 -0
  35. package/_next/static/chunks/1l-jew0-1-3eq.js +30 -0
  36. package/_next/static/chunks/1ptj3mv8b_tzs.js +1 -0
  37. package/_next/static/chunks/1w1xks0hp_tlr.js +346 -0
  38. package/_next/static/chunks/1xekc18cyi4sx.js +1 -0
  39. package/_next/static/chunks/1y35unwvy8p98.js +1 -0
  40. package/_next/static/chunks/2aq8orcir5h03.js +1 -0
  41. package/_next/static/chunks/2fdpvhx4oo81h.js +1 -0
  42. package/_next/static/chunks/2g-xpe7xnropn.js +409 -0
  43. package/_next/static/chunks/2kmptoy43h0mx.js +1 -0
  44. package/_next/static/chunks/2n86yq1wz1yx7.js +1 -0
  45. package/_next/static/chunks/2r_h93rt76vka.js +1 -0
  46. package/_next/static/chunks/2rebcvig176xk.js +564 -0
  47. package/_next/static/chunks/2w71oj1brox5z.js +1 -0
  48. package/_next/static/chunks/2wayx8t5r5fi9.js +1 -0
  49. package/_next/static/chunks/2y3d8zopa8r5r.css +3 -0
  50. package/_next/static/chunks/3--qzv1u6c7_7.js +1 -0
  51. package/_next/static/chunks/31lugryguappr.js +1 -0
  52. package/_next/static/chunks/32j_j396qs7be.js +1 -0
  53. package/_next/static/chunks/32yn_fc-es66m.js +22 -0
  54. package/_next/static/chunks/34_oyzp8_pi_m.js +1 -0
  55. package/_next/static/chunks/34wvn5zw0a69w.js +1 -0
  56. package/_next/static/chunks/37t6vg8fb1-z8.js +1 -0
  57. package/_next/static/chunks/3k5itcabq5oqs.js +9 -0
  58. package/_next/static/chunks/3ktj0iemsr1m-.js +1 -0
  59. package/_next/static/chunks/3nm7o0eq5abhg.js +1 -0
  60. package/_next/static/chunks/3s6nzrbk-8mnv.js +31 -0
  61. package/_next/static/chunks/3td9mnhvcj9cq.js +1 -0
  62. package/_next/static/chunks/3xjnsskh0tayo.js +1 -0
  63. package/_next/static/chunks/3zqx8h9yg5-ch.js +1 -0
  64. package/_next/static/chunks/turbopack-1h111qg8l92rw.js +1 -0
  65. package/_not-found/__next._full.txt +12 -12
  66. package/_not-found/__next._not-found.__PAGE__.txt +19 -2
  67. package/_not-found/__next._tree.txt +2 -2
  68. package/_not-found.html +1 -1
  69. package/_not-found.txt +12 -12
  70. package/boats/boats.json +40 -5
  71. package/index.html +1 -1
  72. package/index.txt +11 -11
  73. package/package.json +14 -14
  74. package/settings/__next._full.txt +14 -14
  75. package/settings/__next._tree.txt +2 -2
  76. package/settings/__next.settings.__PAGE__.txt +22 -5
  77. package/settings.html +1 -1
  78. package/settings.txt +14 -14
  79. package/__next._head.txt +0 -6
  80. package/__next._index.txt +0 -5
  81. package/_next/static/chunks/0-z15txb4-uhu.js +0 -409
  82. package/_next/static/chunks/009rlietvsaq2.js +0 -1
  83. package/_next/static/chunks/070stlm97b9a2.js +0 -1
  84. package/_next/static/chunks/0abo2oxxw3hpi.js +0 -1
  85. package/_next/static/chunks/0jzbiie0nzar2.js +0 -1
  86. package/_next/static/chunks/0kinaai2rvd43.js +0 -9
  87. package/_next/static/chunks/0l9s4rhr00adq.js +0 -1
  88. package/_next/static/chunks/0qj7yy4f6sk8y.js +0 -455
  89. package/_next/static/chunks/0ri_um14-5x7u.js +0 -1
  90. package/_next/static/chunks/0uvr7xkt_5uno.js +0 -1
  91. package/_next/static/chunks/0yf1ifg_o1bq6.js +0 -1
  92. package/_next/static/chunks/0zbzk2ob0li1n.js +0 -1
  93. package/_next/static/chunks/0zjxnzbxh76mt.js +0 -1
  94. package/_next/static/chunks/17ma1x64d-211.js +0 -1
  95. package/_next/static/chunks/19xb2y6sgfnza.js +0 -1
  96. package/_next/static/chunks/1bz0tcmhjmjgh.js +0 -1
  97. package/_next/static/chunks/1d4h-sglyo8ft.js +0 -1
  98. package/_next/static/chunks/1gizigk3w6q7j.js +0 -31
  99. package/_next/static/chunks/1ptwltjb3h6jf.js +0 -4
  100. package/_next/static/chunks/1q572rz5m8mb-.js +0 -1
  101. package/_next/static/chunks/1rkf8qtk5-48h.js +0 -1
  102. package/_next/static/chunks/1sq_733weprvs.js +0 -1
  103. package/_next/static/chunks/26e1o1as-77nq.js +0 -172
  104. package/_next/static/chunks/27hn45pv56pv7.js +0 -393
  105. package/_next/static/chunks/28y-j215vt42m.js +0 -1
  106. package/_next/static/chunks/2a0yjir_3mk1m.js +0 -1
  107. package/_next/static/chunks/2atijj_pkc4uc.js +0 -2
  108. package/_next/static/chunks/2ccpehidlaq88.js +0 -1
  109. package/_next/static/chunks/2fy4q1c5l3tpj.js +0 -1
  110. package/_next/static/chunks/2lvvt2f1l5sfu.js +0 -1
  111. package/_next/static/chunks/2lw7kypuhij1_.css +0 -3
  112. package/_next/static/chunks/2nd5amcst4lhp.js +0 -1
  113. package/_next/static/chunks/2pwmb4pkqygy_.js +0 -1
  114. package/_next/static/chunks/2q_83f24jeg0e.js +0 -1
  115. package/_next/static/chunks/2rsdqsatgq9ta.js +0 -1
  116. package/_next/static/chunks/2udirievybq_j.js +0 -1
  117. package/_next/static/chunks/2urimbxg5bqv3.js +0 -1
  118. package/_next/static/chunks/32cbrrsp-x35l.js +0 -1
  119. package/_next/static/chunks/36ra6xjie0dsv.js +0 -9
  120. package/_next/static/chunks/3iuz3f0429awx.js +0 -1
  121. package/_next/static/chunks/3jh1u-s3k0bkk.js +0 -1
  122. package/_next/static/chunks/3jupxlga7r_do.js +0 -1
  123. package/_next/static/chunks/3m57lnggu30tr.js +0 -243
  124. package/_next/static/chunks/3myql5zu0rstt.js +0 -425
  125. package/_next/static/chunks/3rhgquok36e79.js +0 -1
  126. package/_next/static/chunks/42dfiu6iby3fq.js +0 -1
  127. package/_next/static/chunks/43ps2cu5ahf8n.js +0 -3
  128. package/_next/static/chunks/turbopack-0pirmko-w-775.js +0 -1
  129. package/_not-found/__next._head.txt +0 -6
  130. package/_not-found/__next._index.txt +0 -5
  131. package/_not-found/__next._not-found.txt +0 -5
  132. package/boats/ais/ais-30.glb +0 -0
  133. package/boats/ais/ais-31.glb +0 -0
  134. package/boats/ais/ais-35.glb +0 -0
  135. package/boats/ais/ais-36.glb +0 -0
  136. package/boats/ais/ais-37.glb +0 -0
  137. package/boats/ais/ais-40.glb +0 -0
  138. package/boats/ais/ais-50.glb +0 -0
  139. package/boats/ais/ais-60.glb +0 -0
  140. package/boats/ais/ais-70.glb +0 -0
  141. package/boats/ais/ais-80.glb +0 -0
  142. package/settings/__next._head.txt +0 -6
  143. package/settings/__next._index.txt +0 -5
  144. package/settings/__next.settings.txt +0 -5
  145. /package/_next/static/{sct9rcMTcCyBLHTxQQ75- → baa0rBM5TIECz8JV_tLT6}/_buildManifest.js +0 -0
  146. /package/_next/static/{sct9rcMTcCyBLHTxQQ75- → baa0rBM5TIECz8JV_tLT6}/_clientMiddlewareManifest.js +0 -0
  147. /package/_next/static/{sct9rcMTcCyBLHTxQQ75- → baa0rBM5TIECz8JV_tLT6}/_ssgManifest.js +0 -0
package/404.html CHANGED
@@ -1 +1 @@
1
- <!DOCTYPE html><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/2lw7kypuhij1_.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/ocearo-ui/_next/static/chunks/1gizigk3w6q7j.js"/><script src="/ocearo-ui/_next/static/chunks/2lvvt2f1l5sfu.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/3jh1u-s3k0bkk.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/2atijj_pkc4uc.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/1ptwltjb3h6jf.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/turbopack-0pirmko-w-775.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><meta name="description" content="Sailing made smarter with Ocearo: touchscreen-first sailing dashboard with navigation, weather, and instrumentation."/><title>404: This page could not be found.</title><meta name="theme-color" content="#4bbcd8" media="(prefers-color-scheme: light)"/><meta name="theme-color" content="#0a2e3d" media="(prefers-color-scheme: dark)"/><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/0cz1d0mv5g_q7.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/1gizigk3w6q7j.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/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"default\"]\n3:I[37457,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"default\"]\n4:I[97367,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[97367,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"ViewportBoundary\"]\na:I[97367,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"MetadataBoundary\"]\nc:I[68027,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"default\",1]\n:HL[\"/ocearo-ui/_next/static/chunks/2lw7kypuhij1_.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/ocearo-ui/_next/static/chunks/2lw7kypuhij1_.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"meta\",null,{\"name\":\"description\",\"content\":\"Sailing made smarter with Ocearo: touchscreen-first sailing dashboard with navigation, weather, and instrumentation.\"}]}],[\"$\",\"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,null]},null,false,\"$@7\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/ocearo-ui/_next/static/chunks/2lw7kypuhij1_.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"sct9rcMTcCyBLHTxQQ75-\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"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\",\"content\":\"#4bbcd8\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"meta\",\"3\",{\"name\":\"theme-color\",\"content\":\"#0a2e3d\",\"media\":\"(prefers-color-scheme: dark)\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[27201,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"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\"}],[\"$\",\"$Le\",\"12\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><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/2y3d8zopa8r5r.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/ocearo-ui/_next/static/chunks/3s6nzrbk-8mnv.js"/><script src="/ocearo-ui/_next/static/chunks/0on1skx9l54-9.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/32yn_fc-es66m.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/34wvn5zw0a69w.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/0y-dctk-kmqss.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/turbopack-1h111qg8l92rw.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/0h2qsuyze9ds1.js" async=""></script><meta name="robots" content="noindex"/><meta name="theme-color" content="#4bbcd8" media="(prefers-color-scheme: light)"/><meta name="theme-color" content="#0a2e3d" media="(prefers-color-scheme: dark)"/><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"/><meta name="next-size-adjust" content=""/><meta name="description" content="Sailing made smarter with Ocearo: touchscreen-first sailing dashboard with navigation, weather, and instrumentation."/><title>404: This page could not be found.</title><script src="/ocearo-ui/_next/static/chunks/0cz1d0mv5g_q7.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/3s6nzrbk-8mnv.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/0h2qsuyze9ds1.js\"],\"default\"]\n3:I[37457,[\"/ocearo-ui/_next/static/chunks/0h2qsuyze9ds1.js\"],\"default\"]\n4:I[97367,[\"/ocearo-ui/_next/static/chunks/0h2qsuyze9ds1.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[97367,[\"/ocearo-ui/_next/static/chunks/0h2qsuyze9ds1.js\"],\"ViewportBoundary\"]\na:I[97367,[\"/ocearo-ui/_next/static/chunks/0h2qsuyze9ds1.js\"],\"MetadataBoundary\"]\nc:I[68027,[\"/ocearo-ui/_next/static/chunks/0h2qsuyze9ds1.js\"],\"default\",1]\n:HL[\"/ocearo-ui/_next/static/chunks/2y3d8zopa8r5r.css\",\"style\"]\n7:X\n0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/ocearo-ui/_next/static/chunks/2y3d8zopa8r5r.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/ocearo-ui/_next/static/chunks/0h2qsuyze9ds1.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"meta\",null,{\"name\":\"description\",\"content\":\"Sailing made smarter with Ocearo: touchscreen-first sailing dashboard with navigation, weather, and instrumentation.\"}]}],[\"$\",\"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,null]},null,false,\"$7\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/ocearo-ui/_next/static/chunks/2y3d8zopa8r5r.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"baa0rBM5TIECz8JV_tLT6\"}\n7:C\n9:[[\"$\",\"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\",\"content\":\"#4bbcd8\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"meta\",\"3\",{\"name\":\"theme-color\",\"content\":\"#0a2e3d\",\"media\":\"(prefers-color-scheme: dark)\"}]]\nd:I[27201,[\"/ocearo-ui/_next/static/chunks/0h2qsuyze9ds1.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"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\"}],[\"$\",\"$Ld\",\"12\",{}]]\n"])</script></body></html>
package/README.fr.md CHANGED
@@ -1,228 +1,188 @@
1
+ [![Licence](https://img.shields.io/badge/Licence-Apache%202.0-blue.svg)](LICENSE)
2
+ [![npm](https://img.shields.io/npm/v/ocearo-ui.svg)](https://www.npmjs.com/package/ocearo-ui)
3
+ [![Signal K](https://img.shields.io/badge/Signal%20K-webapp-0a7ea4.svg)](https://signalk.org)
1
4
  [![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
 
5
- [English 🇺🇸](README.md)
6
+ [English 🇬🇧](README.md)
6
7
 
7
8
  # Ocearo UI
8
9
 
9
- **La navigation rendue plus intelligente**
10
+ **L’affichage de navigation open source pour Signal K.** Une image 3D claire et en temps réel du bateau, de la mer et du trafic autour — réglage des voiles, règles de barre, homme à la mer, veille au mouillage, bathymétrie et météo — dans une interface sobre inspirée de la visualisation de conduite Tesla. Il tourne comme webapp Signal K sur le serveur du bord (un Raspberry Pi suffit) et dans n’importe quel navigateur à bord : écran de table à cartes, tablette de cockpit ou téléphone.
10
11
 
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
+ ![Sous spi à la sortie de La Rochelle : mer réaliste issue du vent réel, bandes de creux et penons, compas et marée](docs/screenshots/hero.jpg)
12
13
 
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
+ > Toutes les images de cette page sont des captures de l’application, alimentée par des données réelles de La Rochelle du 4 octobre 2026 : vent Open-Meteo, marée, bathymétrie SHOM 20 m et trafic AIS scénarisé.
14
15
 
15
16
  ---
16
17
 
17
- ## **Dernières mises à jour (v0.1.22)**
18
+ ## Sommaire
18
19
 
19
- - **Trace au mouillage** : la vue mouillage dessine le chemin réellement parcouru autour de l'ancre, avec le vrai rayon d'alarme, l'anneau de veille à 80 % et la ligne de mouillage. Un changement de veine de courant ou une ancre qui commence à déraper se lit à la forme de la trace bien avant que l'alarme ne parte. La trace est enregistrée côté serveur par ocearo-core, elle survit donc à un rechargement de l'interface.
20
- - **Compas style KIP** : l'onglet navigation du tableau de bord porte désormais une rose tournante à ligne de foi fixe, avec index de COG et de vent apparent, dessinée en SVG. Il remplace le widget bateau 3D, qui faisait tourner un rendu WebGL permanent pour afficher un cap.
21
- - **Onglet Raspberry Pi** : température, CPU, mémoire et disque de la machine qui héberge la pile, indicateurs de bridage du firmware et processus les plus gourmands — le moyen le plus rapide de voir pourquoi l'ordinateur de bord rame.
22
- - **Horloge GPS** : sans pile sur sa RTC, le Pi démarre à une date fausse après une coupure sans internet, ce qui vidait silencieusement le widget marées. L'interface prend maintenant son heure de `navigation.datetime` (GPS) dès que l'horloge système dérive de plus d'une minute.
23
- - **Fin des `NaN` sur le vent** : tous les convertisseurs d'unités rejettent désormais les valeurs non finies au lieu de propager `NaN` jusqu'au DOM, et les endroits qui avalaient un `NaN` en zéro silencieux ont disparu.
24
- - **Vrai CPA AIS** : le risque de collision est calculé à partir du cap et de la vitesse des deux navires et non plus de la seule distance ; un bateau amarré par le travers n'est plus signalé comme dangereux.
25
- - **Profondeur au journal de bord**, et saisies manuelles enregistrées dans les mêmes unités que les entrées automatiques.
26
-
27
- > ℹ️ Certaines fonctions ont besoin de plugins Signal K compagnons pour avoir des données à afficher — voir [Prérequis Signal K](#prérequis-signal-k).
20
+ - [Points forts](#points-forts)
21
+ - [La vue 3D](#la-vue-3d)
22
+ - [Trafic et règles de barre](#trafic-et-règles-de-barre)
23
+ - [Sécurité : homme à la mer et mouillage](#sécurité--homme-à-la-mer-et-mouillage)
24
+ - [Instruments et systèmes du bord](#instruments-et-systèmes-du-bord)
25
+ - [Hors-ligne en mer](#hors-ligne-en-mer)
26
+ - [Installation](#installation)
27
+ - [Configuration](#configuration)
28
+ - [Développement](#développement)
29
+ - [Sources de données et crédits](#sources-de-données-et-crédits)
30
+ - [Contribuer](#contribuer) · [Licence](#licence) · [Avertissement](#avertissement-de-navigation)
28
31
 
29
32
  ---
30
33
 
31
- ## **Prérequis Signal K**
34
+ ## Points forts
32
35
 
33
- L'interface lit des chemins Signal K standards ; quand un chemin n'est pas publié, l'affichage correspondant est vide plutôt que cassé. Sur un bateau NMEA2000 classique, ce sont ces plugins qui font exister les chemins :
34
-
35
- | Plugin | Fournit | Utilisé par |
36
- |--------|---------|-------------|
37
- | [`signalk-derived-data`](https://www.npmjs.com/package/signalk-derived-data) | Vent vrai et cap vrai à partir du vent apparent et de la vitesse surface (activer `heading`, `angleTrueWater`, `directionTrue`) | Affichages de vent, réglage de voiles, polaires, compas |
38
- | [`@meri-imperiumi/signalk-autostate`](https://www.npmjs.com/package/@meri-imperiumi/signalk-autostate) | `navigation.state` | Visibilité des voiles, hiérarchisation des alertes |
39
- | [`@signalk/set-system-time`](https://www.npmjs.com/package/@signalk/set-system-time) | Horloge système recalée sur l'heure GPS | Marées, rendu jour/nuit, tri du journal |
40
- | [`@signalk/signalk-autopilot`](https://www.npmjs.com/package/@signalk/signalk-autopilot) | API pilote automatique Signal K v2 | Vue pilote automatique (qui indique désormais explicitement l'absence de fournisseur au lieu d'afficher un panneau inerte) |
41
- | [`ocearo-core`](https://www.npmjs.com/package/ocearo-core) | Journal de bord, mouillage, métriques système, copilote IA | Journal, trace au mouillage, onglet Raspberry Pi |
36
+ - **Un bateau qu’on règle depuis l’écran.** Grand-voile, voiles d’avant et spi asymétrique dessinés d’après le vent (creux, vrillage, ris, changements de voile), avec bandes de creux, penons, chariot de grand-voile et chariots de foc à leur place.
37
+ - **La mer autour de vous, de cinq façons.** Une mer réaliste construite à partir du vent réel, la carte en direct avec le balisage, le fond en 3D, la prévision de vent, ou un sol épuré façon FSD pour la régate.
38
+ - **Un trafic lisible d’un coup d’œil.** Les cibles AIS dessinées selon leur type et leur taille réels, qui glissent entre deux messages, colorées selon qui doit manœuvrer d’après le RIPAM — avec la manœuvre à faire.
39
+ - **La tactique.** Laylines vers le waypoint, isochrones tirées de vos polaires (où vous serez dans 5, 10 et 15 minutes), conseil VMG et bateau fantôme à la vitesse polaire.
40
+ - **La sécurité d’abord.** Repère homme à la mer avec dérive estimée, veille au mouillage avec la vraie trace d’évitage, alerte de petits fonds selon votre tirant d’eau.
41
+ - **Tout le reste du bord.** Tableau de bord, moteur et entretien, énergie, réservoirs, journal de bord avec rejeu des sorties, pilote automatique, médias et documents — en 12 langues, unités métriques, impériales ou nautiques, thèmes jour, sombre et nuit rouge.
42
+ - **Pensé pour le bateau.** Fonctionne hors-ligne une fois la zone téléchargée, s’adapte au Raspberry Pi, ne lit que des chemins Signal K standard.
42
43
 
43
44
  ---
44
45
 
45
- ## **Mises à jour précédentes (v0.1.19)**
46
+ ## La vue 3D
46
47
 
47
- - **Plan de maintenance moteur** : Nouvel onglet maintenance avec les échéances constructeur (Volvo Penta D1/D2, Yanmar YM, diesel générique), suivi des dernières interventions et statuts en retard/à prévoir.
48
- - **Alarmes moteur** : Les 24 notifications moteur NMEA2000 (surchauffe, pression d'huile, niveau de liquide de refroidissement…) remontent désormais avec un bandeau d'alarme permanent et un badge d'onglet, plus des zones de température configurables levant des alertes sonores SignalK.
49
- - **Carte 3D à l'échelle du port** : Plan de carte à niveau de détail adaptatif — pontons visibles au ponton (OSM z19 + balisage OpenSeaMap), zone large en dézoomant, à l'échelle des cibles AIS.
50
- - **Vraie carte météo** : Le mode météo combine le fond de carte avec l'overlay vent Windy et le radar de pluie RainViewer en direct sur ~40 km.
51
- - **Océan et ciel vivants** : Houle géométrique fonction du vent (hauteur significative estimée), nuages et pluie pilotés par les prévisions, ciel océan partagé par tous les modes carte.
52
- - **Qualité de l'air via COV** : Tuile du tableau de bord pilotée par la résistance de gaz du BME680 (kΩ) avec échelle qualitative en l'absence de capteurs CO₂/PM2.5.
53
- - **Analyse carburant** : Estimation en plage (pire–moyenne conso), hypothèse plein complet après ravitaillement, heures moteur conservées moteur coupé, historique complet des pleins.
54
- - **Performances RPi5** : Les modes carte/météo utilisent un océan allégé sans passe de réflexion — la scène n'est plus rendue deux fois par image.
55
- - **Points forts précédents (v0.1.16)** : voiles 3D avec réglage physique, tensions de gréement, HUD de réglage, vue autopilote, tableau de bord, unités configurables, stack Next.js 16 / React 19 / Tailwind v4.
48
+ Le cœur d’Ocearo est une scène 3D en direct centrée sur votre bateau. Un bouton fait défiler cinq représentations du monde autour.
56
49
 
57
- ---
50
+ | | |
51
+ |---|---|
52
+ | ![Carte en direct avec balisage et AIS](docs/screenshots/chart.jpg) | ![Bathymétrie SHOM en grille de relevé](docs/screenshots/bathymetry.jpg) |
53
+ | **Carte.** OpenStreetMap avec le balisage et les feux OpenSeaMap, à l’échelle de votre bateau et des cibles AIS. Utilise un fournisseur de cartes Signal K (MBTiles) s’il est installé. | **Bathymétrie.** Le fond en grille de relevé : relief exagéré, isobathes, sondes à la marée du moment, ligne de sondeur depuis la quille, et l’eau trop peu profonde pour votre tirant d’eau hachurée en orange. Relevés SHOM de 5 à 20 m sur les côtes françaises, relief mondial ailleurs. |
54
+ | ![Calque de prévision de vent](docs/screenshots/weather.jpg) | ![Isochrones et laylines](docs/screenshots/polars.jpg) |
55
+ | **Météo.** La prévision de vent à 48 h autour du bateau (Open-Meteo) aux couleurs de Windy, avec un curseur de temps. | **Polaires et laylines.** Où les polaires vous mettent dans 5, 10 et 15 minutes à chaque cap, les laylines vers le waypoint et la VMG à suivre. |
58
56
 
59
- ## **Caractéristiques Clés**
57
+ La **mer** elle-même est générée à partir du vent réel : hauteur, longueur et direction d’une mer de vent côtière plus une houle, moutons à partir d’environ 7 nœuds, reflet du ciel et soleil à sa vraie place, et votre propre sillage qui suit la route réellement parcourue. Les voiles sont dessinées d’après le vent apparent avec leur réglage : bandes de creux avec la profondeur et la position du creux maximum, penons au guindant et à la chute, et chariots d’écoute sur leurs rails.
60
58
 
61
- ### **Environnement 3D Dynamique**
62
- - **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.
63
- - **Gréement Interactif** : Visualisation des lignes de gréement (pataras, hale-bas, cunningham, bordure) avec dégradés de couleurs selon la tension.
64
- - **Compas Intelligent** : **HUD de réglage** intégré affichant les positions recommandées des chariots pour une performance optimale.
65
- - **Ciel Jour/Nuit** : Éclairage dynamique et environnement océanique synchronisés avec l'heure du navire.
59
+ Bateaux : un racer de 10,8 m (par défaut), un catamaran de 14 m et des modèles plus simples, au choix dans les réglages.
66
60
 
67
- ### **Navigation et Conscience Situationnelle**
68
- - **Radar AIS** : Visualisation 3D des navires à proximité avec des panneaux d'informations détaillés.
69
- - **Routes et Navigation** : Widget dédié pour les routes Signal K, les waypoints et les calculs de navigation en temps réel.
70
- - **Contexte Environnemental** : Niveaux de marée, prévisions météo (API Signal K) et surveillance de la profondeur avec assiette du navire.
71
- - **Laylines** : Visualisation haute précision des laylines en 3D pour l'aide à la navigation tactique.
61
+ ---
72
62
 
73
- ### **Systèmes du Navire**
74
- - **Contrôle Autopilote** : Interface autopilote entièrement intégrée pour une gestion fluide du navire.
75
- - **Surveillance Moteur** : Jauges complètes pour les températures, pressions et consommation de carburant avec suivi des pleins.
76
- - **Indicateurs Style Tesla** : Barres modernes haute visibilité pour l'état des batteries et les niveaux de réservoirs.
77
- - **Interface Personnalisable** : Support de 12 langues et unités configurables (métrique, impérial, nautique).
63
+ ## Trafic et règles de barre
78
64
 
79
- ---
65
+ | | |
66
+ |---|---|
67
+ | ![À nous de laisser passer un chalutier en pêche](docs/screenshots/colregs.jpg) | ![Un voilier bâbord amures doit s’écarter](docs/screenshots/standon.jpg) |
68
+ | **À nous de manœuvrer.** Un navire en pêche croise devant : d’après la règle 18, le voilier s’en écarte. Le bateau et le bandeau passent en rouge orangé, le conseil nomme la règle et le changement de cap (« Éviter : 15° sur bâbord »). | **À lui de manœuvrer.** Un voilier bâbord amures qui arrive par tribord doit s’écarter (règle 12) : il passe en violet avec la manœuvre attendue de lui. S’il n’agit pas, le conseil de la règle 17 b) apparaît. |
80
69
 
81
- ## **Vues Principales**
82
-
83
- ### **Vue Croisière**
84
- - **Visualisation 3D** : Fournit une vue 3D dynamique du navire, affichant des éléments critiques tels que :
85
- - Direction du vent avec **laylines actives**
86
- - Compas 3D de haute précision
87
- - Niveau de profondeur et assiette du navire
88
- - Navires à proximité représentés en 3D via les données AIS
89
- - **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.
90
- - Forme de voile basée sur la physique (cambrure et vrillage) reflétant les conditions de vent actuelles.
91
-
92
- ![Vue Croisière](docs/cruising.png)
93
-
94
- ### **Vue au Mouillage**
95
- - Représentation 3D simplifiée du navire avec les données clés au mouillage :
96
- - Position GPS
97
- - Heure
98
- - Niveaux de marée
99
- - Profondeur
100
- - État de la batterie
101
- - Cercle d'alarme centré sur le point de mouillage enregistré, au rayon configuré, avec l'anneau de veille à 80 % et la ligne de mouillage
102
- - **Trace de swing** : le chemin parcouru autour de l'ancre, pour voir l'évitage, le bateau qui fait des bords au mouillage et les premiers mètres de dérapage avant toute alarme
103
-
104
- ![Vue au Mouillage](docs/anchored.png)
105
-
106
- ### **Vue Aide au Stationnement**
107
- - Utilise les données des caméras et capteurs pour simplifier l'accostage :
108
- - Affichage des prédictions de trajectoire selon le vent et l'angle de barre
109
- - Indications de vitesse et flux vidéo en direct de la caméra avant
110
- - Mise en évidence des places de port disponibles
111
-
112
- *En cours de développement.*
113
-
114
- ![Vue Aide au Stationnement](docs/parking.png)
115
-
116
- ### **Autres Vues**
117
- Visuels additionnels améliorant les fonctionnalités du système :
118
-
119
- ![Other Views](docs/ais.png)
120
- ![Other Views](docs/ocean.png)
121
- ![Other Views](docs/meteo.png)
122
- ![Other Views](docs/navigation.png)
123
- ![Other Views](docs/instruments.png)
124
- ![Other Views](docs/webcam.png)
125
- ![Other Views](docs/battery.png)
126
- ![Other Views](docs/performances.png)
127
- ![Other Views](docs/dashboard1.png)
128
- ![Other Views](docs/dashboard2.png)
129
- ![Other Views](docs/dashboard3.png)
130
- ![Other Views](docs/engine.png)
70
+ Les couleurs ont partout le même sens : **rouge** — risque de collision et c’est à nous de manœuvrer ; **violet** — risque de collision et c’est à lui ; **orange** — proche mais sans route de collision ; gris — rien à signaler. CPA et TCPA viennent du cap et de la vitesse des deux navires ; les seuils se règlent dans les réglages. Les cibles AIS sont dessinées par type et longueur (voiliers, catamarans, ferries, cargos, remorqueurs, chalutiers, vedettes SNSM…) et estimées entre deux messages, si bien qu’elles glissent au lieu de sauter.
131
71
 
132
72
  ---
133
73
 
134
- ## **Vision pour le Futur**
135
- La feuille de route d'Ocean Robot inclut des fonctionnalités avancées visant à améliorer la sécurité et l'efficacité :
74
+ ## Sécurité : homme à la mer et mouillage
136
75
 
137
- - **Détection d'objets par IA** pour les débris flottants et obstacles
138
- - Intégration avec des systèmes de caméras avancés (ex: **see.ai**)
139
- - **Améliorations futures** :
140
- - Surveillance par caméra des penons pour des suggestions de réglage optimal
141
- - Visualisation de la bathymétrie en 3D
142
- - Visualisation des lignes de départ en 3D
143
-
144
- ---
76
+ | | |
77
+ |---|---|
78
+ | ![Homme à la mer](docs/screenshots/mob.jpg) | ![Veille au mouillage](docs/screenshots/anchor.jpg) |
79
+ | **Homme à la mer.** Un bouton (ou toute notification MOB Signal K) déclenche l’alarme : point de chute, position estimée de la personne maintenant d’après courant et dérive, ligne de dérive, relèvement et distance à suivre. | **Veille au mouillage.** Rayon d’alarme et anneau de veille à 80 % centrés sur l’ancre, la ligne de mouillage, et la trace réellement décrite par le bateau : une renverse ou une ancre qui chasse se voient à sa forme bien avant l’alarme. Gardée par [ocearo-core](https://github.com/laborima/ocearo-core), elle survit à un rechargement. |
145
80
 
146
- Démo en direct : https://laborima.github.io/ocearo-ui/
81
+ ![Aide au port](docs/screenshots/parking.jpg)
147
82
 
148
- Ou installez-le dans Signal K via le paquet NPM : https://www.npmjs.com/package/ocearo-ui
83
+ **Aide au port.** Choisissez la place (cul à quai, pointe avant, à couple, coffre) et suivez la trajectoire prévue avec le vent et le courant.
149
84
 
150
85
  ---
151
86
 
152
- ## **Contribution**
87
+ ## Instruments et systèmes du bord
153
88
 
154
- Votre soutien rend Ocearo UI meilleur ! Voici comment vous pouvez contribuer :
89
+ | | |
90
+ |---|---|
91
+ | ![Tableau de bord](docs/screenshots/dashboard.jpg) | ![Tableau de bord, thème sombre](docs/screenshots/dashboard-dark.jpg) |
92
+ | **Tableau de bord.** Radar AIS, météo, route vers le waypoint, réservoirs… à côté de la vue 3D, en thème jour… | …et en thème sombre, dans l’esprit de l’affichage FSD de Tesla : anthracite, formes claires, accents lumineux. |
93
+ | ![Moteur](docs/screenshots/engine.jpg) | ![Énergie](docs/screenshots/energy.jpg) |
94
+ | **Moteur.** Régime, heures, températures, pressions, inverseur et alarmes (les 24 notifications moteur NMEA 2000), plus un calendrier d’entretien. | **Énergie.** Batteries, charge et consommation, solaire, et l’état du Raspberry Pi qui fait tourner l’ensemble. |
95
+ | ![Journal de bord](docs/screenshots/logbook.jpg) | ![Réglages](docs/screenshots/settings.jpg) |
96
+ | **Journal de bord.** Entrées automatiques et manuelles, chronologie, et sorties enregistrées à rejouer dans la vue 3D. | **Réglages.** Bateau, unités, langue, thèmes, qualité 3D (dont un profil Raspberry Pi), seuils d’alarme et données hors-ligne. |
155
97
 
156
- - Signaler des bugs : Aidez-moi à corriger les problèmes en me signalant ce qui ne fonctionne pas.
157
- - Suggérer des fonctionnalités : Partagez vos idées pour de nouvelles fonctionnalités.
158
- - Contribuer au code : Soumettez des "pull requests" pour ajouter des fonctionnalités ou corriger des bugs.
159
- - Soutenir le projet : Aidez à financer l'achat de webcams et de capteurs en m'offrant un café.
98
+ ![Thème nuit](docs/screenshots/dashboard-night.jpg)
160
99
 
161
- [![Buy Me A Coffee](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/laborima)
100
+ **Thème nuit.** Uniquement du rouge et du rouge orangé, pour préserver la vision de nuit, avec des valeurs plus lumineuses que les libellés pour rester facile à lire. Le thème peut changer tout seul avec le soleil.
162
101
 
163
102
  ---
164
103
 
165
- ## **Développement et Déploiement**
104
+ ## Hors-ligne en mer
166
105
 
167
- ### Compilation
106
+ En mer, internet est rare. Dès qu’il y en a (Wi-Fi du port, 4G), Ocearo garde ce dont il aura besoin :
168
107
 
169
- Cloner les sources :
108
+ - Les **tuiles de carte** déjà affichées, les **prévisions de vent** et la **bathymétrie** sont gardées dans le navigateur de l’écran ; *Réglages → Données hors-ligne* télécharge d’un coup la bathymétrie et la prévision sur 5, 10 ou 20 NM autour du bateau.
109
+ - Avec **[ocearo-core](https://github.com/laborima/ocearo-core)** sur le serveur, les **relevés SHOM** (modèles numériques de terrain de 5 à 20 m des côtes françaises, données ouvertes) sont téléchargés par le serveur lui-même et partagés avec tous les écrans du bord.
110
+ - Les serveurs de tuiles OpenStreetMap interdisent le téléchargement en masse : pour une carte complète hors-ligne, ajoutez des cartes MBTiles au serveur Signal K, qu’Ocearo utilise alors automatiquement.
170
111
 
171
- ```bash
172
- git clone https://github.com/laborima/ocearo-ui.git
173
- cd ocearo-ui
174
- ```
112
+ ---
175
113
 
176
- Installer les dépendances :
114
+ ## Installation
177
115
 
178
- ```bash
179
- npm install
180
- ```
116
+ Ocearo UI est une **webapp** Signal K.
181
117
 
182
- Démarrer le serveur de développement :
118
+ 1. Sur votre serveur Signal K (≥ 2.x), ouvrez **Appstore → Available**, cherchez **ocearo-ui** et installez-le (ou `npm install ocearo-ui` dans `~/.signalk`).
119
+ 2. Redémarrez le serveur et ouvrez `http://<serveur-signalk>:3000/ocearo-ui/` sur n’importe quel écran du bord.
120
+ 3. Recommandé : installez **[ocearo-core](https://www.npmjs.com/package/ocearo-core)** pour le journal de bord, la veille au mouillage, la bathymétrie SHOM, les métriques système et le copilote IA.
183
121
 
184
- ```bash
185
- npm run dev
186
- ```
122
+ Une démo en ligne avec des données simulées : <https://laborima.github.io/ocearo-ui/>
123
+
124
+ ### Prérequis Signal K
187
125
 
188
- Accéder à l'interface sur [http://localhost:3000](http://localhost:3000).
126
+ Ocearo lit des chemins Signal K standard ; quand un chemin manque, son affichage est vide plutôt que faux. Sur un bateau NMEA 2000 typique, ces plugins publient ce qu’il lui faut :
189
127
 
190
- ### Modèles de Bateaux
191
- 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.
128
+ | Plugin | Fournit | Utilisé par |
129
+ |--------|---------|-------------|
130
+ | [`signalk-derived-data`](https://www.npmjs.com/package/signalk-derived-data) | Vent réel et cap vrai (activer `heading`, `angleTrueWater`, `directionTrue`) | Vent, réglage des voiles, polaires, compas |
131
+ | [`@meri-imperiumi/signalk-autostate`](https://www.npmjs.com/package/@meri-imperiumi/signalk-autostate) | `navigation.state` | Affichage des voiles, priorité des alertes |
132
+ | [`@signalk/set-system-time`](https://www.npmjs.com/package/@signalk/set-system-time) | Horloge système depuis le GPS | Marées, jour/nuit, journal |
133
+ | [`@signalk/signalk-autopilot`](https://www.npmjs.com/package/@signalk/signalk-autopilot) | API pilote Signal K v2 | Vue pilote |
134
+ | [`ocearo-core`](https://www.npmjs.com/package/ocearo-core) | Journal, mouillage, bathymétrie, métriques système, copilote IA | Journal, veille au mouillage, bathymétrie, onglet Raspberry Pi |
135
+
136
+ Matériel : un Raspberry Pi 4 ou 5 fait tourner sans peine le serveur et un écran ; choisissez la qualité 3D *Raspberry Pi* sur l’écran du Pi. Tout navigateur récent sert d’écran déporté.
192
137
 
193
138
  ---
194
139
 
195
- ### Configuration des Marées
196
- Créez des fichiers JSON sous le chemin suivant :
197
- `public/tides/${harbor}/${MM}_${yyyy}.json`
140
+ ## Configuration
198
141
 
199
- Un script d'exemple permet de télécharger les données pour La Rochelle.
142
+ Tout se règle dans l’application (**Réglages**) : adresse et authentification du serveur Signal K, modèle de bateau, tirant d’eau et polaires, unités, langue, thème (manuel ou selon le soleil), qualité 3D, échelle AIS et seuils de collision (CPA, TCPA), et données hors-ligne. Les réglages sont propres à chaque écran.
200
143
 
201
- ---
144
+ Pour installer l’application en plein écran sur une tablette ou un téléphone (PWA), servez Signal K en HTTPS sur le réseau du bord : voir [docs/ssl.md](docs/ssl.md) (en anglais).
202
145
 
203
- ## **Déploiement sur OpenPlotter**
146
+ ---
204
147
 
205
- La méthode recommandée est d'utiliser le paquet npm publié.
206
- Pour déployer votre propre compilation :
148
+ ## Développement
207
149
 
208
150
  ```bash
209
151
  git clone https://github.com/laborima/ocearo-ui.git
210
152
  cd ocearo-ui
211
153
  npm install
212
- NODE_ENV=production npm run build
213
- scp -r ./out/* pi@openplotter.local:/home/pi/.signalk/node_modules/ocearo-ui
154
+ npm run dev # http://localhost:3000 — indiquez votre serveur Signal K dans les réglages
155
+ npm run lint
156
+ npm run build # export statique dans out/
214
157
  ```
215
158
 
159
+ Pour essayer un build sur un serveur Signal K, liez-le comme webapp : `npm run link` (lien symbolique de `out/` vers `~/.signalk/node_modules/ocearo-ui`), puis redémarrez le serveur.
160
+
161
+ Technologies : Next.js 16 (export statique), React 19, Three.js avec React Three Fiber, Tailwind CSS 4, i18next. Les bateaux, les voiles et la flotte AIS sont procéduraux (aucun modèle à télécharger) ; les conventions du projet sont dans [AGENTS.md](AGENTS.md).
162
+
163
+ Les tables de marée pour le hors-ligne sont dans `public/tides/<port>/<MM>_<aaaa>.json`.
164
+
216
165
  ---
217
166
 
218
- ⚠ Avertissement de Navigation
167
+ ## Sources de données et crédits
168
+
169
+ - Cartes © contributeurs [OpenStreetMap](https://www.openstreetmap.org/copyright) (ODbL) ; balisage © [OpenSeaMap](https://openseamap.org) (CC BY-SA).
170
+ - Bathymétrie : modèles numériques de terrain du [SHOM](https://data.shom.fr) (Licence Ouverte Etalab 2.0), servis par ocearo-core ; relief mondial issu des [tuiles Terrarium](https://registry.opendata.aws/terrain-tiles/) d’AWS Open Data (GEBCO, ETOPO, SRTM et autres).
171
+ - Prévision de vent : [Open-Meteo](https://open-meteo.com) (CC BY 4.0).
172
+ - Position du soleil : équations du calculateur solaire de la NOAA.
173
+
174
+ ---
175
+
176
+ ## Contribuer
177
+
178
+ Rapports de bugs, idées et pull requests sont bienvenus — voir les [issues](https://github.com/laborima/ocearo-ui/issues). Les changements sont listés dans le [CHANGELOG](CHANGELOG.md).
179
+
180
+ [![Buy Me A Coffee](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/laborima)
219
181
 
220
- Utiliser avec précaution – Ne remplace pas les systèmes de navigation officiels.
182
+ ## Licence
221
183
 
222
- 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é.
184
+ [Apache 2.0](LICENSE).
223
185
 
224
- - Vérifiez toujours les données avec les cartes marines officielles et les appareils GPS.
225
- - Gardez une conscience situationnelle et suivez les règles de sécurité maritime.
226
- - Les développeurs d'Ocearo UI ne sont pas responsables des incidents ou erreurs de navigation liés à l'utilisation de ce logiciel.
186
+ ## Avertissement de navigation
227
187
 
228
- En utilisant Ocearo UI, vous acceptez les risques inhérents à l'utilisation d'outils de navigation non certifiés. Naviguez de manière responsable !
188
+ Ocearo UI améliore la conscience de la situation ; ce **n’est pas un système de navigation ou de sécurité certifié** et il ne doit pas être la seule source d’information de navigation. Recoupez toujours avec les cartes et instruments officiels, veillez et appliquez les règles de barre. Les auteurs déclinent toute responsabilité en cas d’incident lié à son utilisation.