canot 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. canot-0.1.0/.gitignore +13 -0
  2. canot-0.1.0/LICENSE +12 -0
  3. canot-0.1.0/PKG-INFO +93 -0
  4. canot-0.1.0/README.md +59 -0
  5. canot-0.1.0/docs/assets/banner-dark.svg +24 -0
  6. canot-0.1.0/docs/assets/banner-light.svg +24 -0
  7. canot-0.1.0/docs/assets/demo.svg +12 -0
  8. canot-0.1.0/docs/assets/report-preview.png +0 -0
  9. canot-0.1.0/docs/assets/social-preview.png +0 -0
  10. canot-0.1.0/docs/cibles-ue.md +28 -0
  11. canot-0.1.0/docs/landing-brief.md +62 -0
  12. canot-0.1.0/docs/livrables.md +72 -0
  13. canot-0.1.0/examples/bigquery-thelook/evidence.jsonl +21 -0
  14. canot-0.1.0/examples/bigquery-thelook/evidence.pub +3 -0
  15. canot-0.1.0/examples/bigquery-thelook/evidence.sig +1 -0
  16. canot-0.1.0/examples/bigquery-thelook/report.html +31 -0
  17. canot-0.1.0/examples/bigquery-thelook/report.json +272 -0
  18. canot-0.1.0/examples/bigquery-thelook/requetes.sql +12 -0
  19. canot-0.1.0/examples/distributeur-fictif/evidence.jsonl +15 -0
  20. canot-0.1.0/examples/distributeur-fictif/evidence.pub +3 -0
  21. canot-0.1.0/examples/distributeur-fictif/evidence.sig +1 -0
  22. canot-0.1.0/examples/distributeur-fictif/report.html +32 -0
  23. canot-0.1.0/examples/distributeur-fictif/report.json +204 -0
  24. canot-0.1.0/examples/distributeur-fictif/requetes.sql +14 -0
  25. canot-0.1.0/examples/distributeur-fictif/scan.json +67 -0
  26. canot-0.1.0/infra/scaleway/.terraform.lock.hcl +23 -0
  27. canot-0.1.0/infra/scaleway/README.md +11 -0
  28. canot-0.1.0/infra/scaleway/cloud-init.yaml +25 -0
  29. canot-0.1.0/infra/scaleway/main.tf +93 -0
  30. canot-0.1.0/pyproject.toml +50 -0
  31. canot-0.1.0/site/README.md +9 -0
  32. canot-0.1.0/site/_headers +7 -0
  33. canot-0.1.0/site/app.js +89 -0
  34. canot-0.1.0/site/assets/canot-logo.svg +5 -0
  35. canot-0.1.0/site/assets/canot-symbole.png +0 -0
  36. canot-0.1.0/site/assets/canot-symbole.svg +5 -0
  37. canot-0.1.0/site/assets/fonts/Fredoka-variable.ttf +0 -0
  38. canot-0.1.0/site/assets/fonts/OFL.txt +93 -0
  39. canot-0.1.0/site/favicon.svg +5 -0
  40. canot-0.1.0/site/functions/api/contact.js +35 -0
  41. canot-0.1.0/site/index.html +222 -0
  42. canot-0.1.0/site/mentions-legales.html +40 -0
  43. canot-0.1.0/site/methode.html +77 -0
  44. canot-0.1.0/site/offres.html +55 -0
  45. canot-0.1.0/site/rapport.html +45 -0
  46. canot-0.1.0/site/robots.txt +2 -0
  47. canot-0.1.0/site/schema.sql +6 -0
  48. canot-0.1.0/site/style.css +248 -0
  49. canot-0.1.0/site/wrangler.toml.example +10 -0
  50. canot-0.1.0/src/canot/__init__.py +1 -0
  51. canot-0.1.0/src/canot/cli.py +195 -0
  52. canot-0.1.0/src/canot/convert.py +97 -0
  53. canot-0.1.0/src/canot/copy.py +68 -0
  54. canot-0.1.0/src/canot/demo.py +98 -0
  55. canot-0.1.0/src/canot/drill.py +103 -0
  56. canot-0.1.0/src/canot/evidence.py +72 -0
  57. canot-0.1.0/src/canot/model.py +36 -0
  58. canot-0.1.0/src/canot/report.py +109 -0
  59. canot-0.1.0/src/canot/scan.py +48 -0
  60. canot-0.1.0/src/canot/source_loader.py +7 -0
  61. canot-0.1.0/src/canot/sources/__init__.py +24 -0
  62. canot-0.1.0/src/canot/sources/base.py +44 -0
  63. canot-0.1.0/src/canot/sources/bigquery_src.py +155 -0
  64. canot-0.1.0/src/canot/sources/databricks_src.py +85 -0
  65. canot-0.1.0/src/canot/sources/duckdb_src.py +69 -0
  66. canot-0.1.0/src/canot/sources/snowflake_src.py +170 -0
  67. canot-0.1.0/src/canot/target.py +116 -0
  68. canot-0.1.0/src/canot/tolerances.py +59 -0
  69. canot-0.1.0/src/canot/verify.py +220 -0
  70. canot-0.1.0/tests/test_bigquery.py +48 -0
  71. canot-0.1.0/tests/test_drill.py +142 -0
  72. canot-0.1.0/tools/build_site.py +21 -0
  73. canot-0.1.0/tools/index.template.html +178 -0
  74. canot-0.1.0/tools/make_readme_assets.py +99 -0
  75. canot-0.1.0/tools/make_seals.py +59 -0
  76. canot-0.1.0/tools/methode.template.html +77 -0
  77. canot-0.1.0/tools/offres.template.html +55 -0
  78. canot-0.1.0/tools/render_png.mjs +14 -0
  79. canot-0.1.0/tools/social.html +4 -0
canot-0.1.0/.gitignore ADDED
@@ -0,0 +1,13 @@
1
+ .venv/
2
+ __pycache__/
3
+ *.egg-info/
4
+ canot-out/
5
+ *.key
6
+ .terraform/
7
+ *.tfstate*
8
+ *.tfvars
9
+ private/
10
+ .DS_Store
11
+ dist/
12
+ .wrangler/
13
+ site/wrangler.toml
canot-0.1.0/LICENSE ADDED
@@ -0,0 +1,12 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use
6
+ this software except in compliance with the License. You may obtain a copy of
7
+ the License at http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software distributed
10
+ under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
11
+ CONDITIONS OF ANY KIND, either express or implied. See the License for the
12
+ specific language governing permissions and limitations under the License.
canot-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,93 @@
1
+ Metadata-Version: 2.5
2
+ Name: canot
3
+ Version: 0.1.0
4
+ Summary: Prouvez que vous pouvez partir : exercice de sortie Snowflake/Databricks vers Apache Iceberg, avec dossier de preuve.
5
+ Project-URL: Homepage, https://canot.io
6
+ Project-URL: Source, https://github.com/chiptuned/canot
7
+ Project-URL: Issues, https://github.com/chiptuned/canot/issues
8
+ Author: Vincent Fraillon
9
+ License-Expression: Apache-2.0
10
+ License-File: LICENSE
11
+ Keywords: DORA,bigquery,data,data-act,databricks,iceberg,migration,reversibility,snowflake,sovereign-cloud
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: Information Technology
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Topic :: Database
18
+ Classifier: Topic :: System :: Archiving :: Backup
19
+ Requires-Python: >=3.11
20
+ Requires-Dist: cryptography>=42
21
+ Requires-Dist: duckdb>=1.1
22
+ Requires-Dist: pyarrow>=16
23
+ Requires-Dist: pyiceberg[sql-sqlite]>=0.8
24
+ Requires-Dist: sqlglot>=25
25
+ Provides-Extra: bigquery
26
+ Requires-Dist: google-cloud-bigquery[bqstorage]>=3.25; extra == 'bigquery'
27
+ Provides-Extra: databricks
28
+ Requires-Dist: databricks-sql-connector>=3.5; extra == 'databricks'
29
+ Provides-Extra: dev
30
+ Requires-Dist: pytest>=8; extra == 'dev'
31
+ Provides-Extra: snowflake
32
+ Requires-Dist: snowflake-connector-python[pandas]>=3.12; extra == 'snowflake'
33
+ Description-Content-Type: text/markdown
34
+
35
+ <p align="center">
36
+ <picture>
37
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/chiptuned/canot/main/docs/assets/banner-dark.svg">
38
+ <img src="https://raw.githubusercontent.com/chiptuned/canot/main/docs/assets/banner-light.svg" alt="Canot : prouvez que vous pouvez partir" width="100%">
39
+ </picture>
40
+ </p>
41
+
42
+ <p align="center">
43
+ <b>Prouvez que vous pouvez partir.</b> · <i>Prove you can leave.</i><br>
44
+ Un exercice de sortie de votre plateforme de données, dans vos comptes.
45
+ </p>
46
+
47
+ <p align="center">
48
+ <img alt="licence Apache-2.0" src="https://img.shields.io/badge/licence-Apache--2.0-1F3A5F?style=flat-square">
49
+ <img alt="python 3.11+" src="https://img.shields.io/badge/python-3.11%2B-1F3A5F?style=flat-square">
50
+ <img alt="aucune télémétrie" src="https://img.shields.io/badge/télémétrie-aucune-2F7A4B?style=flat-square">
51
+ <img alt="Snowflake, BigQuery, Databricks" src="https://img.shields.io/badge/Snowflake%20·%20BigQuery%20·%20Databricks-1F3A5F?style=flat-square">
52
+ </p>
53
+
54
+ <p align="center">
55
+ <a href="https://canot.io"><b>canot.io</b></a> ·
56
+ <a href="#-essayer">Essayer</a> ·
57
+ <a href="#-pourquoi">Pourquoi</a>
58
+ </p>
59
+
60
+ ---
61
+
62
+ ## ▶ Essayer
63
+
64
+ Trente secondes, sans compte ni données. Un distributeur fictif, un exercice de sortie complet, et le dossier de preuve s'ouvre dans votre navigateur.
65
+
66
+ ```bash
67
+ uvx canot demo
68
+ ```
69
+
70
+ <p align="center">
71
+ <img src="https://raw.githubusercontent.com/chiptuned/canot/main/docs/assets/demo.svg" alt="canot copie des tables BigQuery, compare tout, et signale une requête qui diverge" width="860">
72
+ </p>
73
+
74
+ Sur un jeu public BigQuery : 7 tables identiques ligne par ligne, 3 requêtes sur 4 qui rendent le même résultat. La 4<sup>e</sup> rend une date chez BigQuery et une date avec heure ailleurs. C'est le genre d'écart qu'on veut découvrir **avant** de partir.
75
+
76
+ ## 🧭 Pourquoi
77
+
78
+ | | | |
79
+ |---|---|---|
80
+ | **Le déséquilibre** | **La pression** | **Le risque caché** |
81
+ | Snowflake et Databricks offrent des outils gratuits pour *entrer*. Personne n'offre l'outil qui vérifie la *sortie*. | DORA demande un plan de sortie **testé** aux entités financières. Le Data Act supprime les frais de changement de cloud le **12 janvier 2027**. | Un plan de sortie sur papier n'a jamais été exécuté : sa durée, son coût et ses écarts sont inconnus. |
82
+
83
+ Canot fait la répétition de départ. Vous restez chez votre fournisseur.
84
+
85
+ ## ▶ À vous
86
+
87
+ ```bash
88
+ uvx canot demo
89
+ ```
90
+
91
+ Puis sur vos données, en lecture seule : `canot scan --from "bigquery://MON-PROJET/mon_dataset?location=EU"`. Le site, [canot.io](https://canot.io), explique le reste.
92
+
93
+ <sub>Apache-2.0 · Aucun pisteur, aucune télémétrie · [q4o](https://q4o.com)</sub>
canot-0.1.0/README.md ADDED
@@ -0,0 +1,59 @@
1
+ <p align="center">
2
+ <picture>
3
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/chiptuned/canot/main/docs/assets/banner-dark.svg">
4
+ <img src="https://raw.githubusercontent.com/chiptuned/canot/main/docs/assets/banner-light.svg" alt="Canot : prouvez que vous pouvez partir" width="100%">
5
+ </picture>
6
+ </p>
7
+
8
+ <p align="center">
9
+ <b>Prouvez que vous pouvez partir.</b> · <i>Prove you can leave.</i><br>
10
+ Un exercice de sortie de votre plateforme de données, dans vos comptes.
11
+ </p>
12
+
13
+ <p align="center">
14
+ <img alt="licence Apache-2.0" src="https://img.shields.io/badge/licence-Apache--2.0-1F3A5F?style=flat-square">
15
+ <img alt="python 3.11+" src="https://img.shields.io/badge/python-3.11%2B-1F3A5F?style=flat-square">
16
+ <img alt="aucune télémétrie" src="https://img.shields.io/badge/télémétrie-aucune-2F7A4B?style=flat-square">
17
+ <img alt="Snowflake, BigQuery, Databricks" src="https://img.shields.io/badge/Snowflake%20·%20BigQuery%20·%20Databricks-1F3A5F?style=flat-square">
18
+ </p>
19
+
20
+ <p align="center">
21
+ <a href="https://canot.io"><b>canot.io</b></a> ·
22
+ <a href="#-essayer">Essayer</a> ·
23
+ <a href="#-pourquoi">Pourquoi</a>
24
+ </p>
25
+
26
+ ---
27
+
28
+ ## ▶ Essayer
29
+
30
+ Trente secondes, sans compte ni données. Un distributeur fictif, un exercice de sortie complet, et le dossier de preuve s'ouvre dans votre navigateur.
31
+
32
+ ```bash
33
+ uvx canot demo
34
+ ```
35
+
36
+ <p align="center">
37
+ <img src="https://raw.githubusercontent.com/chiptuned/canot/main/docs/assets/demo.svg" alt="canot copie des tables BigQuery, compare tout, et signale une requête qui diverge" width="860">
38
+ </p>
39
+
40
+ Sur un jeu public BigQuery : 7 tables identiques ligne par ligne, 3 requêtes sur 4 qui rendent le même résultat. La 4<sup>e</sup> rend une date chez BigQuery et une date avec heure ailleurs. C'est le genre d'écart qu'on veut découvrir **avant** de partir.
41
+
42
+ ## 🧭 Pourquoi
43
+
44
+ | | | |
45
+ |---|---|---|
46
+ | **Le déséquilibre** | **La pression** | **Le risque caché** |
47
+ | Snowflake et Databricks offrent des outils gratuits pour *entrer*. Personne n'offre l'outil qui vérifie la *sortie*. | DORA demande un plan de sortie **testé** aux entités financières. Le Data Act supprime les frais de changement de cloud le **12 janvier 2027**. | Un plan de sortie sur papier n'a jamais été exécuté : sa durée, son coût et ses écarts sont inconnus. |
48
+
49
+ Canot fait la répétition de départ. Vous restez chez votre fournisseur.
50
+
51
+ ## ▶ À vous
52
+
53
+ ```bash
54
+ uvx canot demo
55
+ ```
56
+
57
+ Puis sur vos données, en lecture seule : `canot scan --from "bigquery://MON-PROJET/mon_dataset?location=EU"`. Le site, [canot.io](https://canot.io), explique le reste.
58
+
59
+ <sub>Apache-2.0 · Aucun pisteur, aucune télémétrie · [q4o](https://q4o.com)</sub>
@@ -0,0 +1,24 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 300" width="1280" height="300" role="img" aria-label="Canot : prouvez que vous pouvez partir">
2
+ <style>
3
+ @keyframes houle{0%,100%{transform:translateY(0) rotate(-.6deg)}50%{transform:translateY(-7px) rotate(.6deg)}}
4
+ @keyframes vague{from{transform:translateX(0)}to{transform:translateX(-1440px)}}
5
+ @keyframes entre{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
6
+ .boat{transform-box:fill-box;transform-origin:50% 85%;animation:houle 9s ease-in-out infinite}
7
+ .w1{animation:vague 40s linear infinite}.w2{animation:vague 26s linear infinite reverse}
8
+ .t1{animation:entre .8s .2s both}
9
+ text{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif}
10
+ @media (prefers-reduced-motion:reduce){.boat,.w1,.w2,.t1{animation:none}}
11
+ </style>
12
+ <g transform="translate(0 110)"><g class="w1"><path d="M0 102 Q180 80 360 102 Q540 124 720 102 Q900 80 1080 102 Q1260 124 1440 102 Q1620 80 1800 102 Q1980 124 2160 102 Q2340 80 2520 102 Q2700 124 2880 102 V290 H0 Z" fill="#14304B"/></g></g>
13
+ <g transform="translate(249 52)"><g class="boat"><svg x="0" y="0" width="360" height="167" viewBox="239 361 776 362" preserveAspectRatio="xMidYMid meet" overflow="hidden" xmlns="http://www.w3.org/2000/svg"><path xmlns="http://www.w3.org/2000/svg" d="M0 0 C5.95 3.28 10.89 7.94 15.88 12.5 C59.5 52.37 125.33 53.74 181.14 57.08 C181.66 57.11 181.66 57.11 184.28 57.27 C216.93 59.22 249.51 59.66 282.2 59.64 C282.71 59.64 282.71 59.64 285.26 59.64 C317.13 59.64 348.94 59.37 380.76 57.62 C383.68 57.46 386.59 57.3 389.5 57.15 C481.48 52.22 481.48 52.22 523.64 37.46 C524.31 37.23 524.98 36.99 525.67 36.76 C544.99 29.92 561.05 18.53 576.64 5.46 C584.31 -0.82 589.44 -3.29 599.58 -2.92 C604.74 -2.29 607.58 -0.83 611.13 3.12 C615.5 9.12 616.06 15.9 615.39 23.16 C614.94 25.95 614.38 28.7 613.77 31.46 C613.54 32.48 613.32 33.51 613.08 34.57 C605.54 67.38 591.85 98.89 569.64 124.46 C569.23 124.94 569.23 124.94 567.13 127.37 C542.14 155.8 507.2 171.67 469.64 174.46 C464.16 174.71 458.67 174.85 453.18 174.98 C452.37 175 451.56 175.03 450.72 175.05 C428.63 175.6 406.54 175.8 384.45 175.99 C380.95 176.02 377.46 176.05 373.96 176.08 C314.93 176.61 255.93 176.57 196.9 176.05 C193.38 176.02 189.87 175.99 186.35 175.96 C144.21 175.6 144.21 175.6 124.68 175 C124.08 174.98 124.08 174.98 121.07 174.89 C90.4 173.82 60.76 164.99 36.64 145.46 C36.05 144.99 35.46 144.51 34.86 144.03 C-1.35 114.74 -24.93 67.53 -30.36 21.46 C-30.67 14.34 -29.41 8.88 -25.11 3.14 C-17.62 -4.18 -9.04 -3.93 0 0 Z " fill="#FF6B16" transform="translate(334.359375,518.54296875)" />
14
+ <path xmlns="http://www.w3.org/2000/svg" d="M0 0 C0.86 -0.01 1.72 -0.01 2.6 -0.02 C3.53 -0.02 4.47 -0.03 5.43 -0.03 C6.42 -0.04 7.4 -0.04 8.42 -0.05 C11.7 -0.07 14.97 -0.08 18.25 -0.09 C19.37 -0.1 20.49 -0.1 21.64 -0.1 C27.57 -0.12 33.5 -0.14 39.43 -0.15 C45.55 -0.16 51.66 -0.19 57.77 -0.23 C62.48 -0.26 67.2 -0.27 71.91 -0.27 C74.16 -0.28 76.41 -0.29 78.67 -0.31 C81.83 -0.33 84.99 -0.33 88.15 -0.32 C89.07 -0.34 89.99 -0.35 90.94 -0.36 C100.17 -0.29 108.11 2.58 114.68 9.15 C121.5 17.53 122.12 27.26 122.08 37.66 C122.09 38.87 122.09 40.08 122.1 41.33 C122.12 44.62 122.12 47.91 122.11 51.2 C122.11 53.96 122.11 56.72 122.12 59.47 C122.13 65.97 122.13 72.48 122.12 78.98 C122.11 85.67 122.12 92.37 122.15 99.06 C122.17 104.83 122.18 110.59 122.17 116.36 C122.17 119.8 122.17 123.23 122.19 126.67 C122.21 130.5 122.19 134.32 122.18 138.15 C122.18 138.72 122.18 138.72 122.21 141.58 C122.15 147.72 121.89 151.54 117.68 156.15 C84.98 174.69 35.39 174.56 -1.32 177.15 C-1.97 177.2 -1.97 177.2 -5.22 177.44 C-6.49 177.53 -7.75 177.63 -9.06 177.72 C-10.17 177.8 -11.28 177.89 -12.43 177.97 C-15.82 178.12 -19.17 178.16 -22.57 178.16 C-23.11 178.16 -23.11 178.16 -25.84 178.15 C-26.66 178.15 -27.48 178.15 -28.32 178.15 C-28.42 158.39 -28.49 138.63 -28.53 118.87 C-28.55 109.7 -28.58 100.52 -28.63 91.35 C-28.67 83.35 -28.69 75.34 -28.7 67.34 C-28.71 63.11 -28.72 58.88 -28.75 54.65 C-28.77 50.65 -28.78 46.66 -28.78 42.67 C-28.78 41.21 -28.79 39.75 -28.8 38.3 C-28.92 26.66 -27.62 16.58 -19.32 7.87 C-13.66 2.99 -7.5 0.04 0 0 Z " fill="#7FB0FF" transform="translate(740.3240051269531,385.8528289794922)" />
15
+ <path xmlns="http://www.w3.org/2000/svg" d="M0 0 C0.87 -0.01 1.74 -0.01 2.64 -0.02 C5.48 -0.03 8.33 -0.03 11.18 -0.03 C13.18 -0.03 15.18 -0.03 17.17 -0.04 C21.35 -0.05 25.53 -0.05 29.71 -0.04 C35.04 -0.04 40.37 -0.05 45.7 -0.08 C49.83 -0.09 53.95 -0.09 58.08 -0.09 C60.04 -0.09 62.01 -0.09 63.97 -0.1 C92.09 -0.23 92.09 -0.23 101.62 9.03 C108.67 16.5 110.27 23.55 110.16 33.55 C110.16 34.54 110.16 35.54 110.16 36.56 C110.16 39.83 110.13 43.1 110.11 46.37 C110.1 48.64 110.1 50.92 110.1 53.19 C110.08 59.17 110.05 65.14 110.02 71.11 C109.99 77.21 109.98 83.31 109.96 89.41 C109.93 101.36 109.88 113.32 109.82 125.27 C101.98 125.87 94.16 126.42 86.31 126.59 C85.47 126.61 84.64 126.63 83.77 126.65 C81.08 126.72 78.38 126.78 75.69 126.84 C74.75 126.86 73.81 126.88 72.84 126.9 C46.3 127.48 19.8 127.41 -6.75 126.84 C-7.69 126.82 -8.64 126.8 -9.61 126.78 C-12.33 126.72 -15.04 126.66 -17.75 126.59 C-18.54 126.57 -19.33 126.56 -20.15 126.54 C-26.19 126.38 -32.17 125.88 -38.18 125.27 C-38.28 112.56 -38.35 99.84 -38.39 87.12 C-38.41 81.21 -38.44 75.31 -38.49 69.4 C-38.53 63.7 -38.55 57.99 -38.56 52.28 C-38.57 50.11 -38.59 47.94 -38.61 45.77 C-38.86 19.06 -38.86 19.06 -28.32 8.15 C-20.38 1.18 -10.22 -0.03 0 0 Z " fill="#7FB0FF" transform="translate(586.184814453125,439.725341796875)" />
16
+ <path xmlns="http://www.w3.org/2000/svg" d="M0 0 C1.74 0 3.47 -0 5.21 -0 C8.83 -0 12.45 0.01 16.07 0.03 C20.69 0.05 25.31 0.05 29.94 0.04 C33.52 0.04 37.09 0.05 40.67 0.06 C42.38 0.06 44.08 0.06 45.79 0.06 C48.17 0.06 50.56 0.07 52.94 0.09 C53.29 0.09 53.29 0.09 55.04 0.08 C63.94 0.18 72.63 2.61 79.42 8.62 C86.65 16.96 87.77 26.04 87.51 36.66 C87.5 37.97 87.49 39.29 87.49 40.64 C87.46 44.1 87.4 47.55 87.34 51 C87.28 54.54 87.25 58.08 87.22 61.62 C87.15 68.54 87.05 75.45 86.93 82.36 C75.53 82.54 64.29 82.06 52.93 81.11 C52.11 81.05 51.29 80.98 50.45 80.91 C-32.26 74.13 -32.26 74.13 -43.7 62.75 C-45.57 59.5 -45.5 56.54 -45.47 52.89 C-45.48 52.16 -45.48 51.44 -45.48 50.69 C-45.48 49.15 -45.48 47.62 -45.47 46.08 C-45.45 43.77 -45.47 41.45 -45.48 39.13 C-45.5 27.3 -44.51 17.3 -36.07 8.36 C-26.37 -0.98 -12.55 -0.07 0 0 Z " fill="#7FB0FF" transform="translate(445.07421875,481.63671875)" />
17
+ <g fill="#7FB0FF" transform="translate(256.4990 915.3131) scale(0.283366 -0.283366)"><path d="M288.25 -13.25Q243.75 -13.25 198.25 3.375Q152.75 20 114.5 52.25Q76.25 84.5 53.125 132.125Q30 179.75 30 242Q30 303.5 53.125 350.75Q76.25 398 114.0 430.0Q151.75 462 197.125 478.625Q242.5 495.25 286.25 495.25Q323 495.25 352.625 486.375Q382.25 477.5 402.75 465.75Q423.25 454 432.25 444.5Q449 432.25 462.125 419.125Q475.25 406 474 385Q472.5 373.5 466.875 362.375Q461.25 351.25 451.5 338.5Q421.5 297.25 391.75 300.75Q377.25 304.25 364.75 311.125Q352.25 318 340.625 325.25Q329 332.5 316.125 337.75Q303.25 343 286.25 343Q257.25 343 234.0 329.75Q210.75 316.5 197.5 293.75Q184.25 271 184.25 241.25Q184.25 211.75 197.5 188.625Q210.75 165.5 233.5 152.25Q256.25 139 284.25 139Q300.5 139 313.375 142.75Q326.25 146.5 335.25 152.0Q344.25 157.5 348.75 161.25Q361.25 169 372.0 175.375Q382.75 181.75 394.5 181.75Q408.75 181.75 423.625 171.25Q438.5 160.75 456.5 137.75Q473.25 117.25 475.375 99.0Q477.5 80.75 466.625 64.625Q455.75 48.5 432.75 33.75Q425.25 27 404.75 15.875Q384.25 4.75 354.625 -4.25Q325 -13.25 288.25 -13.25Z" transform="translate(0 0)"/><path d="M449 -7.75Q411.75 -7.75 394.125 5.25Q376.5 18.25 376.75 37.25L387.25 54Q380.75 44 364.0 29.5Q347.25 15 319.875 3.5Q292.5 -8 253 -8Q207 -8 165.5 12.0Q124 32 91.875 67.25Q59.75 102.5 41.125 147.5Q22.5 192.5 22.5 242.75Q22.5 291.75 41.125 336.125Q59.75 380.5 92.375 415.25Q125 450 166.125 470.0Q207.25 490 253 490Q290.25 490 316.25 479.5Q342.25 469 359.5 454.75Q376.75 440.5 385.75 427.5L377.5 441.75Q376.75 465.5 394.5 478.125Q412.25 490.75 450 490.75Q486.25 490.75 501.5 479.75Q516.75 468.75 520.375 451.0Q524 433.25 524 413.25V68Q524 48.5 520.375 30.875Q516.75 13.25 501.375 2.75Q486 -7.75 449 -7.75ZM274.5 140.75Q300.75 140.75 322.125 154.375Q343.5 168 356.375 190.875Q369.25 213.75 369.25 241.5Q369.25 270.75 356.125 293.25Q343 315.75 321.125 329.125Q299.25 342.5 272.5 342.5Q243.75 342.5 221.125 328.75Q198.5 315 185.25 292.0Q172 269 172 240.25Q172 212.75 185.625 190.25Q199.25 167.75 222.5 154.25Q245.75 140.75 274.5 140.75Z" transform="translate(505 0)"/><path d="M115.5 -8.5Q79.25 -8.5 63.5 2.375Q47.75 13.25 44.5 30.625Q41.25 48 41.25 67.25V419Q41.25 438 44.875 454.375Q48.5 470.75 64.375 480.75Q80.25 490.75 116.5 490.75Q149 490.75 164.125 482.5Q179.25 474.25 183.75 462.25Q188.25 450.25 188.25 439.625Q188.25 429 189.75 425L183.75 405.75Q186.25 421.25 199.625 436.375Q213 451.5 233.25 464.0Q253.5 476.5 277.0 483.875Q300.5 491.25 323.5 491.25Q371.75 491.25 409.375 473.375Q447 455.5 472.875 422.75Q498.75 390 512.25 345.625Q525.75 301.25 525.75 248V66.25Q525.75 47 522.125 29.625Q518.5 12.25 503.125 1.875Q487.75 -8.5 450.5 -8.5Q413.25 -8.5 397.375 2.375Q381.5 13.25 377.875 30.625Q374.25 48 374.25 67.25V248.25Q374.25 277.75 363.875 298.75Q353.5 319.75 333.875 331.125Q314.25 342.5 284.75 342.5Q256.25 342.5 235.125 330.75Q214 319 202.5 298.0Q191 277 191 248.25V66.25Q191 47 187.375 29.625Q183.75 12.25 168.25 1.875Q152.75 -8.5 115.5 -8.5Z" transform="translate(1068 0)"/><path d="M280.75 -17.25Q233.75 -17.25 187.5 1.375Q141.25 20 103.25 54.125Q65.25 88.25 42.875 135.625Q20.5 183 20.5 240.5Q20.5 294.5 40.875 341.375Q61.25 388.25 97.0 424.0Q132.75 459.75 179.25 480.125Q225.75 500.5 278.75 500.5Q351 500.5 409.5 466.0Q468 431.5 503.0 372.875Q538 314.25 538 241.5Q538 181.25 515.375 133.5Q492.75 85.75 455.375 52.0Q418 18.25 372.375 0.5Q326.75 -17.25 280.75 -17.25ZM278.75 133.5Q302.75 133.5 327.75 145.5Q352.75 157.5 369.75 181.875Q386.75 206.25 386.75 242.75Q386.75 275 372.875 299.0Q359 323 334.375 336.375Q309.75 349.75 277.75 349.75Q248.25 349.75 224.375 335.75Q200.5 321.75 186.125 297.375Q171.75 273 171.75 241.75Q171.75 205.75 188.375 181.5Q205 157.25 229.75 145.375Q254.5 133.5 278.75 133.5Z" transform="translate(1631 0)"/><path d="M298.25 -9.5Q247.25 -9.5 210.375 1.5Q173.5 12.5 149.625 35.5Q125.75 58.5 114.375 94.125Q103 129.75 103 178.5V584.5Q103 604.75 106.625 621.0Q110.25 637.25 126.0 647.375Q141.75 657.5 178 657.5Q213.75 657.5 229.625 646.75Q245.5 636 249.25 618.75Q253 601.5 253 582.25V184.75Q253 168.75 255.5 158.5Q258 148.25 263.125 143.0Q268.25 137.75 277.0 135.625Q285.75 133.5 298.75 133.5Q321.25 133.5 338.25 129.875Q355.25 126.25 364.625 112.0Q374 97.75 374 65Q374 28.5 362.75 12.75Q351.5 -3 334.125 -6.25Q316.75 -9.5 298.25 -9.5ZM71.75 483 181.75 482.5 320 486.75Q339.25 486.75 356.25 483.125Q373.25 479.5 384.125 463.75Q395 448 395 411Q395 376.75 384.25 360.875Q373.5 345 356.625 340.625Q339.75 336.25 319.75 336.25L189.25 339L68.25 338.5Q38.75 340 27.5 356.625Q16.25 373.25 16.25 411.75Q16.25 447.75 30.0 465.375Q43.75 483 71.75 483Z" transform="translate(2190 0)"/></g></svg></g></g>
18
+ <g transform="translate(0 146)"><g class="w2"><path d="M0 82 Q180 70 360 82 Q540 94 720 82 Q900 70 1080 82 Q1260 94 1440 82 Q1620 70 1800 82 Q1980 94 2160 82 Q2340 70 2520 82 Q2700 94 2880 82 V250 H0 Z" fill="#1B4468"/></g></g>
19
+ <g transform="translate(659 85)"><g class="t1"><svg x="0" y="0" width="372" height="102" viewBox="255 722 745 205" preserveAspectRatio="xMidYMid meet" overflow="hidden" xmlns="http://www.w3.org/2000/svg"><path xmlns="http://www.w3.org/2000/svg" d="M0 0 C5.95 3.28 10.89 7.94 15.88 12.5 C59.5 52.37 125.33 53.74 181.14 57.08 C181.66 57.11 181.66 57.11 184.28 57.27 C216.93 59.22 249.51 59.66 282.2 59.64 C282.71 59.64 282.71 59.64 285.26 59.64 C317.13 59.64 348.94 59.37 380.76 57.62 C383.68 57.46 386.59 57.3 389.5 57.15 C481.48 52.22 481.48 52.22 523.64 37.46 C524.31 37.23 524.98 36.99 525.67 36.76 C544.99 29.92 561.05 18.53 576.64 5.46 C584.31 -0.82 589.44 -3.29 599.58 -2.92 C604.74 -2.29 607.58 -0.83 611.13 3.12 C615.5 9.12 616.06 15.9 615.39 23.16 C614.94 25.95 614.38 28.7 613.77 31.46 C613.54 32.48 613.32 33.51 613.08 34.57 C605.54 67.38 591.85 98.89 569.64 124.46 C569.23 124.94 569.23 124.94 567.13 127.37 C542.14 155.8 507.2 171.67 469.64 174.46 C464.16 174.71 458.67 174.85 453.18 174.98 C452.37 175 451.56 175.03 450.72 175.05 C428.63 175.6 406.54 175.8 384.45 175.99 C380.95 176.02 377.46 176.05 373.96 176.08 C314.93 176.61 255.93 176.57 196.9 176.05 C193.38 176.02 189.87 175.99 186.35 175.96 C144.21 175.6 144.21 175.6 124.68 175 C124.08 174.98 124.08 174.98 121.07 174.89 C90.4 173.82 60.76 164.99 36.64 145.46 C36.05 144.99 35.46 144.51 34.86 144.03 C-1.35 114.74 -24.93 67.53 -30.36 21.46 C-30.67 14.34 -29.41 8.88 -25.11 3.14 C-17.62 -4.18 -9.04 -3.93 0 0 Z " fill="#FF6B16" transform="translate(334.359375,518.54296875)" />
20
+ <path xmlns="http://www.w3.org/2000/svg" d="M0 0 C0.86 -0.01 1.72 -0.01 2.6 -0.02 C3.53 -0.02 4.47 -0.03 5.43 -0.03 C6.42 -0.04 7.4 -0.04 8.42 -0.05 C11.7 -0.07 14.97 -0.08 18.25 -0.09 C19.37 -0.1 20.49 -0.1 21.64 -0.1 C27.57 -0.12 33.5 -0.14 39.43 -0.15 C45.55 -0.16 51.66 -0.19 57.77 -0.23 C62.48 -0.26 67.2 -0.27 71.91 -0.27 C74.16 -0.28 76.41 -0.29 78.67 -0.31 C81.83 -0.33 84.99 -0.33 88.15 -0.32 C89.07 -0.34 89.99 -0.35 90.94 -0.36 C100.17 -0.29 108.11 2.58 114.68 9.15 C121.5 17.53 122.12 27.26 122.08 37.66 C122.09 38.87 122.09 40.08 122.1 41.33 C122.12 44.62 122.12 47.91 122.11 51.2 C122.11 53.96 122.11 56.72 122.12 59.47 C122.13 65.97 122.13 72.48 122.12 78.98 C122.11 85.67 122.12 92.37 122.15 99.06 C122.17 104.83 122.18 110.59 122.17 116.36 C122.17 119.8 122.17 123.23 122.19 126.67 C122.21 130.5 122.19 134.32 122.18 138.15 C122.18 138.72 122.18 138.72 122.21 141.58 C122.15 147.72 121.89 151.54 117.68 156.15 C84.98 174.69 35.39 174.56 -1.32 177.15 C-1.97 177.2 -1.97 177.2 -5.22 177.44 C-6.49 177.53 -7.75 177.63 -9.06 177.72 C-10.17 177.8 -11.28 177.89 -12.43 177.97 C-15.82 178.12 -19.17 178.16 -22.57 178.16 C-23.11 178.16 -23.11 178.16 -25.84 178.15 C-26.66 178.15 -27.48 178.15 -28.32 178.15 C-28.42 158.39 -28.49 138.63 -28.53 118.87 C-28.55 109.7 -28.58 100.52 -28.63 91.35 C-28.67 83.35 -28.69 75.34 -28.7 67.34 C-28.71 63.11 -28.72 58.88 -28.75 54.65 C-28.77 50.65 -28.78 46.66 -28.78 42.67 C-28.78 41.21 -28.79 39.75 -28.8 38.3 C-28.92 26.66 -27.62 16.58 -19.32 7.87 C-13.66 2.99 -7.5 0.04 0 0 Z " fill="#EAF1F8" transform="translate(740.3240051269531,385.8528289794922)" />
21
+ <path xmlns="http://www.w3.org/2000/svg" d="M0 0 C0.87 -0.01 1.74 -0.01 2.64 -0.02 C5.48 -0.03 8.33 -0.03 11.18 -0.03 C13.18 -0.03 15.18 -0.03 17.17 -0.04 C21.35 -0.05 25.53 -0.05 29.71 -0.04 C35.04 -0.04 40.37 -0.05 45.7 -0.08 C49.83 -0.09 53.95 -0.09 58.08 -0.09 C60.04 -0.09 62.01 -0.09 63.97 -0.1 C92.09 -0.23 92.09 -0.23 101.62 9.03 C108.67 16.5 110.27 23.55 110.16 33.55 C110.16 34.54 110.16 35.54 110.16 36.56 C110.16 39.83 110.13 43.1 110.11 46.37 C110.1 48.64 110.1 50.92 110.1 53.19 C110.08 59.17 110.05 65.14 110.02 71.11 C109.99 77.21 109.98 83.31 109.96 89.41 C109.93 101.36 109.88 113.32 109.82 125.27 C101.98 125.87 94.16 126.42 86.31 126.59 C85.47 126.61 84.64 126.63 83.77 126.65 C81.08 126.72 78.38 126.78 75.69 126.84 C74.75 126.86 73.81 126.88 72.84 126.9 C46.3 127.48 19.8 127.41 -6.75 126.84 C-7.69 126.82 -8.64 126.8 -9.61 126.78 C-12.33 126.72 -15.04 126.66 -17.75 126.59 C-18.54 126.57 -19.33 126.56 -20.15 126.54 C-26.19 126.38 -32.17 125.88 -38.18 125.27 C-38.28 112.56 -38.35 99.84 -38.39 87.12 C-38.41 81.21 -38.44 75.31 -38.49 69.4 C-38.53 63.7 -38.55 57.99 -38.56 52.28 C-38.57 50.11 -38.59 47.94 -38.61 45.77 C-38.86 19.06 -38.86 19.06 -28.32 8.15 C-20.38 1.18 -10.22 -0.03 0 0 Z " fill="#EAF1F8" transform="translate(586.184814453125,439.725341796875)" />
22
+ <path xmlns="http://www.w3.org/2000/svg" d="M0 0 C1.74 0 3.47 -0 5.21 -0 C8.83 -0 12.45 0.01 16.07 0.03 C20.69 0.05 25.31 0.05 29.94 0.04 C33.52 0.04 37.09 0.05 40.67 0.06 C42.38 0.06 44.08 0.06 45.79 0.06 C48.17 0.06 50.56 0.07 52.94 0.09 C53.29 0.09 53.29 0.09 55.04 0.08 C63.94 0.18 72.63 2.61 79.42 8.62 C86.65 16.96 87.77 26.04 87.51 36.66 C87.5 37.97 87.49 39.29 87.49 40.64 C87.46 44.1 87.4 47.55 87.34 51 C87.28 54.54 87.25 58.08 87.22 61.62 C87.15 68.54 87.05 75.45 86.93 82.36 C75.53 82.54 64.29 82.06 52.93 81.11 C52.11 81.05 51.29 80.98 50.45 80.91 C-32.26 74.13 -32.26 74.13 -43.7 62.75 C-45.57 59.5 -45.5 56.54 -45.47 52.89 C-45.48 52.16 -45.48 51.44 -45.48 50.69 C-45.48 49.15 -45.48 47.62 -45.47 46.08 C-45.45 43.77 -45.47 41.45 -45.48 39.13 C-45.5 27.3 -44.51 17.3 -36.07 8.36 C-26.37 -0.98 -12.55 -0.07 0 0 Z " fill="#EAF1F8" transform="translate(445.07421875,481.63671875)" />
23
+ <g fill="#EAF1F8" transform="translate(256.4990 915.3131) scale(0.283366 -0.283366)"><path d="M288.25 -13.25Q243.75 -13.25 198.25 3.375Q152.75 20 114.5 52.25Q76.25 84.5 53.125 132.125Q30 179.75 30 242Q30 303.5 53.125 350.75Q76.25 398 114.0 430.0Q151.75 462 197.125 478.625Q242.5 495.25 286.25 495.25Q323 495.25 352.625 486.375Q382.25 477.5 402.75 465.75Q423.25 454 432.25 444.5Q449 432.25 462.125 419.125Q475.25 406 474 385Q472.5 373.5 466.875 362.375Q461.25 351.25 451.5 338.5Q421.5 297.25 391.75 300.75Q377.25 304.25 364.75 311.125Q352.25 318 340.625 325.25Q329 332.5 316.125 337.75Q303.25 343 286.25 343Q257.25 343 234.0 329.75Q210.75 316.5 197.5 293.75Q184.25 271 184.25 241.25Q184.25 211.75 197.5 188.625Q210.75 165.5 233.5 152.25Q256.25 139 284.25 139Q300.5 139 313.375 142.75Q326.25 146.5 335.25 152.0Q344.25 157.5 348.75 161.25Q361.25 169 372.0 175.375Q382.75 181.75 394.5 181.75Q408.75 181.75 423.625 171.25Q438.5 160.75 456.5 137.75Q473.25 117.25 475.375 99.0Q477.5 80.75 466.625 64.625Q455.75 48.5 432.75 33.75Q425.25 27 404.75 15.875Q384.25 4.75 354.625 -4.25Q325 -13.25 288.25 -13.25Z" transform="translate(0 0)"/><path d="M449 -7.75Q411.75 -7.75 394.125 5.25Q376.5 18.25 376.75 37.25L387.25 54Q380.75 44 364.0 29.5Q347.25 15 319.875 3.5Q292.5 -8 253 -8Q207 -8 165.5 12.0Q124 32 91.875 67.25Q59.75 102.5 41.125 147.5Q22.5 192.5 22.5 242.75Q22.5 291.75 41.125 336.125Q59.75 380.5 92.375 415.25Q125 450 166.125 470.0Q207.25 490 253 490Q290.25 490 316.25 479.5Q342.25 469 359.5 454.75Q376.75 440.5 385.75 427.5L377.5 441.75Q376.75 465.5 394.5 478.125Q412.25 490.75 450 490.75Q486.25 490.75 501.5 479.75Q516.75 468.75 520.375 451.0Q524 433.25 524 413.25V68Q524 48.5 520.375 30.875Q516.75 13.25 501.375 2.75Q486 -7.75 449 -7.75ZM274.5 140.75Q300.75 140.75 322.125 154.375Q343.5 168 356.375 190.875Q369.25 213.75 369.25 241.5Q369.25 270.75 356.125 293.25Q343 315.75 321.125 329.125Q299.25 342.5 272.5 342.5Q243.75 342.5 221.125 328.75Q198.5 315 185.25 292.0Q172 269 172 240.25Q172 212.75 185.625 190.25Q199.25 167.75 222.5 154.25Q245.75 140.75 274.5 140.75Z" transform="translate(505 0)"/><path d="M115.5 -8.5Q79.25 -8.5 63.5 2.375Q47.75 13.25 44.5 30.625Q41.25 48 41.25 67.25V419Q41.25 438 44.875 454.375Q48.5 470.75 64.375 480.75Q80.25 490.75 116.5 490.75Q149 490.75 164.125 482.5Q179.25 474.25 183.75 462.25Q188.25 450.25 188.25 439.625Q188.25 429 189.75 425L183.75 405.75Q186.25 421.25 199.625 436.375Q213 451.5 233.25 464.0Q253.5 476.5 277.0 483.875Q300.5 491.25 323.5 491.25Q371.75 491.25 409.375 473.375Q447 455.5 472.875 422.75Q498.75 390 512.25 345.625Q525.75 301.25 525.75 248V66.25Q525.75 47 522.125 29.625Q518.5 12.25 503.125 1.875Q487.75 -8.5 450.5 -8.5Q413.25 -8.5 397.375 2.375Q381.5 13.25 377.875 30.625Q374.25 48 374.25 67.25V248.25Q374.25 277.75 363.875 298.75Q353.5 319.75 333.875 331.125Q314.25 342.5 284.75 342.5Q256.25 342.5 235.125 330.75Q214 319 202.5 298.0Q191 277 191 248.25V66.25Q191 47 187.375 29.625Q183.75 12.25 168.25 1.875Q152.75 -8.5 115.5 -8.5Z" transform="translate(1068 0)"/><path d="M280.75 -17.25Q233.75 -17.25 187.5 1.375Q141.25 20 103.25 54.125Q65.25 88.25 42.875 135.625Q20.5 183 20.5 240.5Q20.5 294.5 40.875 341.375Q61.25 388.25 97.0 424.0Q132.75 459.75 179.25 480.125Q225.75 500.5 278.75 500.5Q351 500.5 409.5 466.0Q468 431.5 503.0 372.875Q538 314.25 538 241.5Q538 181.25 515.375 133.5Q492.75 85.75 455.375 52.0Q418 18.25 372.375 0.5Q326.75 -17.25 280.75 -17.25ZM278.75 133.5Q302.75 133.5 327.75 145.5Q352.75 157.5 369.75 181.875Q386.75 206.25 386.75 242.75Q386.75 275 372.875 299.0Q359 323 334.375 336.375Q309.75 349.75 277.75 349.75Q248.25 349.75 224.375 335.75Q200.5 321.75 186.125 297.375Q171.75 273 171.75 241.75Q171.75 205.75 188.375 181.5Q205 157.25 229.75 145.375Q254.5 133.5 278.75 133.5Z" transform="translate(1631 0)"/><path d="M298.25 -9.5Q247.25 -9.5 210.375 1.5Q173.5 12.5 149.625 35.5Q125.75 58.5 114.375 94.125Q103 129.75 103 178.5V584.5Q103 604.75 106.625 621.0Q110.25 637.25 126.0 647.375Q141.75 657.5 178 657.5Q213.75 657.5 229.625 646.75Q245.5 636 249.25 618.75Q253 601.5 253 582.25V184.75Q253 168.75 255.5 158.5Q258 148.25 263.125 143.0Q268.25 137.75 277.0 135.625Q285.75 133.5 298.75 133.5Q321.25 133.5 338.25 129.875Q355.25 126.25 364.625 112.0Q374 97.75 374 65Q374 28.5 362.75 12.75Q351.5 -3 334.125 -6.25Q316.75 -9.5 298.25 -9.5ZM71.75 483 181.75 482.5 320 486.75Q339.25 486.75 356.25 483.125Q373.25 479.5 384.125 463.75Q395 448 395 411Q395 376.75 384.25 360.875Q373.5 345 356.625 340.625Q339.75 336.25 319.75 336.25L189.25 339L68.25 338.5Q38.75 340 27.5 356.625Q16.25 373.25 16.25 411.75Q16.25 447.75 30.0 465.375Q43.75 483 71.75 483Z" transform="translate(2190 0)"/></g></svg></g></g>
24
+ </svg>
@@ -0,0 +1,24 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 300" width="1280" height="300" role="img" aria-label="Canot : prouvez que vous pouvez partir">
2
+ <style>
3
+ @keyframes houle{0%,100%{transform:translateY(0) rotate(-.6deg)}50%{transform:translateY(-7px) rotate(.6deg)}}
4
+ @keyframes vague{from{transform:translateX(0)}to{transform:translateX(-1440px)}}
5
+ @keyframes entre{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
6
+ .boat{transform-box:fill-box;transform-origin:50% 85%;animation:houle 9s ease-in-out infinite}
7
+ .w1{animation:vague 40s linear infinite}.w2{animation:vague 26s linear infinite reverse}
8
+ .t1{animation:entre .8s .2s both}
9
+ text{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif}
10
+ @media (prefers-reduced-motion:reduce){.boat,.w1,.w2,.t1{animation:none}}
11
+ </style>
12
+ <g transform="translate(0 110)"><g class="w1"><path d="M0 102 Q180 80 360 102 Q540 124 720 102 Q900 80 1080 102 Q1260 124 1440 102 Q1620 80 1800 102 Q1980 124 2160 102 Q2340 80 2520 102 Q2700 124 2880 102 V290 H0 Z" fill="#E6ECF2"/></g></g>
13
+ <g transform="translate(249 52)"><g class="boat"><svg x="0" y="0" width="360" height="167" viewBox="239 361 776 362" preserveAspectRatio="xMidYMid meet" overflow="hidden" xmlns="http://www.w3.org/2000/svg"><path xmlns="http://www.w3.org/2000/svg" d="M0 0 C5.95 3.28 10.89 7.94 15.88 12.5 C59.5 52.37 125.33 53.74 181.14 57.08 C181.66 57.11 181.66 57.11 184.28 57.27 C216.93 59.22 249.51 59.66 282.2 59.64 C282.71 59.64 282.71 59.64 285.26 59.64 C317.13 59.64 348.94 59.37 380.76 57.62 C383.68 57.46 386.59 57.3 389.5 57.15 C481.48 52.22 481.48 52.22 523.64 37.46 C524.31 37.23 524.98 36.99 525.67 36.76 C544.99 29.92 561.05 18.53 576.64 5.46 C584.31 -0.82 589.44 -3.29 599.58 -2.92 C604.74 -2.29 607.58 -0.83 611.13 3.12 C615.5 9.12 616.06 15.9 615.39 23.16 C614.94 25.95 614.38 28.7 613.77 31.46 C613.54 32.48 613.32 33.51 613.08 34.57 C605.54 67.38 591.85 98.89 569.64 124.46 C569.23 124.94 569.23 124.94 567.13 127.37 C542.14 155.8 507.2 171.67 469.64 174.46 C464.16 174.71 458.67 174.85 453.18 174.98 C452.37 175 451.56 175.03 450.72 175.05 C428.63 175.6 406.54 175.8 384.45 175.99 C380.95 176.02 377.46 176.05 373.96 176.08 C314.93 176.61 255.93 176.57 196.9 176.05 C193.38 176.02 189.87 175.99 186.35 175.96 C144.21 175.6 144.21 175.6 124.68 175 C124.08 174.98 124.08 174.98 121.07 174.89 C90.4 173.82 60.76 164.99 36.64 145.46 C36.05 144.99 35.46 144.51 34.86 144.03 C-1.35 114.74 -24.93 67.53 -30.36 21.46 C-30.67 14.34 -29.41 8.88 -25.11 3.14 C-17.62 -4.18 -9.04 -3.93 0 0 Z " fill="#FF6B16" transform="translate(334.359375,518.54296875)" />
14
+ <path xmlns="http://www.w3.org/2000/svg" d="M0 0 C0.86 -0.01 1.72 -0.01 2.6 -0.02 C3.53 -0.02 4.47 -0.03 5.43 -0.03 C6.42 -0.04 7.4 -0.04 8.42 -0.05 C11.7 -0.07 14.97 -0.08 18.25 -0.09 C19.37 -0.1 20.49 -0.1 21.64 -0.1 C27.57 -0.12 33.5 -0.14 39.43 -0.15 C45.55 -0.16 51.66 -0.19 57.77 -0.23 C62.48 -0.26 67.2 -0.27 71.91 -0.27 C74.16 -0.28 76.41 -0.29 78.67 -0.31 C81.83 -0.33 84.99 -0.33 88.15 -0.32 C89.07 -0.34 89.99 -0.35 90.94 -0.36 C100.17 -0.29 108.11 2.58 114.68 9.15 C121.5 17.53 122.12 27.26 122.08 37.66 C122.09 38.87 122.09 40.08 122.1 41.33 C122.12 44.62 122.12 47.91 122.11 51.2 C122.11 53.96 122.11 56.72 122.12 59.47 C122.13 65.97 122.13 72.48 122.12 78.98 C122.11 85.67 122.12 92.37 122.15 99.06 C122.17 104.83 122.18 110.59 122.17 116.36 C122.17 119.8 122.17 123.23 122.19 126.67 C122.21 130.5 122.19 134.32 122.18 138.15 C122.18 138.72 122.18 138.72 122.21 141.58 C122.15 147.72 121.89 151.54 117.68 156.15 C84.98 174.69 35.39 174.56 -1.32 177.15 C-1.97 177.2 -1.97 177.2 -5.22 177.44 C-6.49 177.53 -7.75 177.63 -9.06 177.72 C-10.17 177.8 -11.28 177.89 -12.43 177.97 C-15.82 178.12 -19.17 178.16 -22.57 178.16 C-23.11 178.16 -23.11 178.16 -25.84 178.15 C-26.66 178.15 -27.48 178.15 -28.32 178.15 C-28.42 158.39 -28.49 138.63 -28.53 118.87 C-28.55 109.7 -28.58 100.52 -28.63 91.35 C-28.67 83.35 -28.69 75.34 -28.7 67.34 C-28.71 63.11 -28.72 58.88 -28.75 54.65 C-28.77 50.65 -28.78 46.66 -28.78 42.67 C-28.78 41.21 -28.79 39.75 -28.8 38.3 C-28.92 26.66 -27.62 16.58 -19.32 7.87 C-13.66 2.99 -7.5 0.04 0 0 Z " fill="#062E60" transform="translate(740.3240051269531,385.8528289794922)" />
15
+ <path xmlns="http://www.w3.org/2000/svg" d="M0 0 C0.87 -0.01 1.74 -0.01 2.64 -0.02 C5.48 -0.03 8.33 -0.03 11.18 -0.03 C13.18 -0.03 15.18 -0.03 17.17 -0.04 C21.35 -0.05 25.53 -0.05 29.71 -0.04 C35.04 -0.04 40.37 -0.05 45.7 -0.08 C49.83 -0.09 53.95 -0.09 58.08 -0.09 C60.04 -0.09 62.01 -0.09 63.97 -0.1 C92.09 -0.23 92.09 -0.23 101.62 9.03 C108.67 16.5 110.27 23.55 110.16 33.55 C110.16 34.54 110.16 35.54 110.16 36.56 C110.16 39.83 110.13 43.1 110.11 46.37 C110.1 48.64 110.1 50.92 110.1 53.19 C110.08 59.17 110.05 65.14 110.02 71.11 C109.99 77.21 109.98 83.31 109.96 89.41 C109.93 101.36 109.88 113.32 109.82 125.27 C101.98 125.87 94.16 126.42 86.31 126.59 C85.47 126.61 84.64 126.63 83.77 126.65 C81.08 126.72 78.38 126.78 75.69 126.84 C74.75 126.86 73.81 126.88 72.84 126.9 C46.3 127.48 19.8 127.41 -6.75 126.84 C-7.69 126.82 -8.64 126.8 -9.61 126.78 C-12.33 126.72 -15.04 126.66 -17.75 126.59 C-18.54 126.57 -19.33 126.56 -20.15 126.54 C-26.19 126.38 -32.17 125.88 -38.18 125.27 C-38.28 112.56 -38.35 99.84 -38.39 87.12 C-38.41 81.21 -38.44 75.31 -38.49 69.4 C-38.53 63.7 -38.55 57.99 -38.56 52.28 C-38.57 50.11 -38.59 47.94 -38.61 45.77 C-38.86 19.06 -38.86 19.06 -28.32 8.15 C-20.38 1.18 -10.22 -0.03 0 0 Z " fill="#062E60" transform="translate(586.184814453125,439.725341796875)" />
16
+ <path xmlns="http://www.w3.org/2000/svg" d="M0 0 C1.74 0 3.47 -0 5.21 -0 C8.83 -0 12.45 0.01 16.07 0.03 C20.69 0.05 25.31 0.05 29.94 0.04 C33.52 0.04 37.09 0.05 40.67 0.06 C42.38 0.06 44.08 0.06 45.79 0.06 C48.17 0.06 50.56 0.07 52.94 0.09 C53.29 0.09 53.29 0.09 55.04 0.08 C63.94 0.18 72.63 2.61 79.42 8.62 C86.65 16.96 87.77 26.04 87.51 36.66 C87.5 37.97 87.49 39.29 87.49 40.64 C87.46 44.1 87.4 47.55 87.34 51 C87.28 54.54 87.25 58.08 87.22 61.62 C87.15 68.54 87.05 75.45 86.93 82.36 C75.53 82.54 64.29 82.06 52.93 81.11 C52.11 81.05 51.29 80.98 50.45 80.91 C-32.26 74.13 -32.26 74.13 -43.7 62.75 C-45.57 59.5 -45.5 56.54 -45.47 52.89 C-45.48 52.16 -45.48 51.44 -45.48 50.69 C-45.48 49.15 -45.48 47.62 -45.47 46.08 C-45.45 43.77 -45.47 41.45 -45.48 39.13 C-45.5 27.3 -44.51 17.3 -36.07 8.36 C-26.37 -0.98 -12.55 -0.07 0 0 Z " fill="#062E60" transform="translate(445.07421875,481.63671875)" />
17
+ <g fill="#062E60" transform="translate(256.4990 915.3131) scale(0.283366 -0.283366)"><path d="M288.25 -13.25Q243.75 -13.25 198.25 3.375Q152.75 20 114.5 52.25Q76.25 84.5 53.125 132.125Q30 179.75 30 242Q30 303.5 53.125 350.75Q76.25 398 114.0 430.0Q151.75 462 197.125 478.625Q242.5 495.25 286.25 495.25Q323 495.25 352.625 486.375Q382.25 477.5 402.75 465.75Q423.25 454 432.25 444.5Q449 432.25 462.125 419.125Q475.25 406 474 385Q472.5 373.5 466.875 362.375Q461.25 351.25 451.5 338.5Q421.5 297.25 391.75 300.75Q377.25 304.25 364.75 311.125Q352.25 318 340.625 325.25Q329 332.5 316.125 337.75Q303.25 343 286.25 343Q257.25 343 234.0 329.75Q210.75 316.5 197.5 293.75Q184.25 271 184.25 241.25Q184.25 211.75 197.5 188.625Q210.75 165.5 233.5 152.25Q256.25 139 284.25 139Q300.5 139 313.375 142.75Q326.25 146.5 335.25 152.0Q344.25 157.5 348.75 161.25Q361.25 169 372.0 175.375Q382.75 181.75 394.5 181.75Q408.75 181.75 423.625 171.25Q438.5 160.75 456.5 137.75Q473.25 117.25 475.375 99.0Q477.5 80.75 466.625 64.625Q455.75 48.5 432.75 33.75Q425.25 27 404.75 15.875Q384.25 4.75 354.625 -4.25Q325 -13.25 288.25 -13.25Z" transform="translate(0 0)"/><path d="M449 -7.75Q411.75 -7.75 394.125 5.25Q376.5 18.25 376.75 37.25L387.25 54Q380.75 44 364.0 29.5Q347.25 15 319.875 3.5Q292.5 -8 253 -8Q207 -8 165.5 12.0Q124 32 91.875 67.25Q59.75 102.5 41.125 147.5Q22.5 192.5 22.5 242.75Q22.5 291.75 41.125 336.125Q59.75 380.5 92.375 415.25Q125 450 166.125 470.0Q207.25 490 253 490Q290.25 490 316.25 479.5Q342.25 469 359.5 454.75Q376.75 440.5 385.75 427.5L377.5 441.75Q376.75 465.5 394.5 478.125Q412.25 490.75 450 490.75Q486.25 490.75 501.5 479.75Q516.75 468.75 520.375 451.0Q524 433.25 524 413.25V68Q524 48.5 520.375 30.875Q516.75 13.25 501.375 2.75Q486 -7.75 449 -7.75ZM274.5 140.75Q300.75 140.75 322.125 154.375Q343.5 168 356.375 190.875Q369.25 213.75 369.25 241.5Q369.25 270.75 356.125 293.25Q343 315.75 321.125 329.125Q299.25 342.5 272.5 342.5Q243.75 342.5 221.125 328.75Q198.5 315 185.25 292.0Q172 269 172 240.25Q172 212.75 185.625 190.25Q199.25 167.75 222.5 154.25Q245.75 140.75 274.5 140.75Z" transform="translate(505 0)"/><path d="M115.5 -8.5Q79.25 -8.5 63.5 2.375Q47.75 13.25 44.5 30.625Q41.25 48 41.25 67.25V419Q41.25 438 44.875 454.375Q48.5 470.75 64.375 480.75Q80.25 490.75 116.5 490.75Q149 490.75 164.125 482.5Q179.25 474.25 183.75 462.25Q188.25 450.25 188.25 439.625Q188.25 429 189.75 425L183.75 405.75Q186.25 421.25 199.625 436.375Q213 451.5 233.25 464.0Q253.5 476.5 277.0 483.875Q300.5 491.25 323.5 491.25Q371.75 491.25 409.375 473.375Q447 455.5 472.875 422.75Q498.75 390 512.25 345.625Q525.75 301.25 525.75 248V66.25Q525.75 47 522.125 29.625Q518.5 12.25 503.125 1.875Q487.75 -8.5 450.5 -8.5Q413.25 -8.5 397.375 2.375Q381.5 13.25 377.875 30.625Q374.25 48 374.25 67.25V248.25Q374.25 277.75 363.875 298.75Q353.5 319.75 333.875 331.125Q314.25 342.5 284.75 342.5Q256.25 342.5 235.125 330.75Q214 319 202.5 298.0Q191 277 191 248.25V66.25Q191 47 187.375 29.625Q183.75 12.25 168.25 1.875Q152.75 -8.5 115.5 -8.5Z" transform="translate(1068 0)"/><path d="M280.75 -17.25Q233.75 -17.25 187.5 1.375Q141.25 20 103.25 54.125Q65.25 88.25 42.875 135.625Q20.5 183 20.5 240.5Q20.5 294.5 40.875 341.375Q61.25 388.25 97.0 424.0Q132.75 459.75 179.25 480.125Q225.75 500.5 278.75 500.5Q351 500.5 409.5 466.0Q468 431.5 503.0 372.875Q538 314.25 538 241.5Q538 181.25 515.375 133.5Q492.75 85.75 455.375 52.0Q418 18.25 372.375 0.5Q326.75 -17.25 280.75 -17.25ZM278.75 133.5Q302.75 133.5 327.75 145.5Q352.75 157.5 369.75 181.875Q386.75 206.25 386.75 242.75Q386.75 275 372.875 299.0Q359 323 334.375 336.375Q309.75 349.75 277.75 349.75Q248.25 349.75 224.375 335.75Q200.5 321.75 186.125 297.375Q171.75 273 171.75 241.75Q171.75 205.75 188.375 181.5Q205 157.25 229.75 145.375Q254.5 133.5 278.75 133.5Z" transform="translate(1631 0)"/><path d="M298.25 -9.5Q247.25 -9.5 210.375 1.5Q173.5 12.5 149.625 35.5Q125.75 58.5 114.375 94.125Q103 129.75 103 178.5V584.5Q103 604.75 106.625 621.0Q110.25 637.25 126.0 647.375Q141.75 657.5 178 657.5Q213.75 657.5 229.625 646.75Q245.5 636 249.25 618.75Q253 601.5 253 582.25V184.75Q253 168.75 255.5 158.5Q258 148.25 263.125 143.0Q268.25 137.75 277.0 135.625Q285.75 133.5 298.75 133.5Q321.25 133.5 338.25 129.875Q355.25 126.25 364.625 112.0Q374 97.75 374 65Q374 28.5 362.75 12.75Q351.5 -3 334.125 -6.25Q316.75 -9.5 298.25 -9.5ZM71.75 483 181.75 482.5 320 486.75Q339.25 486.75 356.25 483.125Q373.25 479.5 384.125 463.75Q395 448 395 411Q395 376.75 384.25 360.875Q373.5 345 356.625 340.625Q339.75 336.25 319.75 336.25L189.25 339L68.25 338.5Q38.75 340 27.5 356.625Q16.25 373.25 16.25 411.75Q16.25 447.75 30.0 465.375Q43.75 483 71.75 483Z" transform="translate(2190 0)"/></g></svg></g></g>
18
+ <g transform="translate(0 146)"><g class="w2"><path d="M0 82 Q180 70 360 82 Q540 94 720 82 Q900 70 1080 82 Q1260 94 1440 82 Q1620 70 1800 82 Q1980 94 2160 82 Q2340 70 2520 82 Q2700 94 2880 82 V250 H0 Z" fill="#D3DEE8"/></g></g>
19
+ <g transform="translate(659 85)"><g class="t1"><svg x="0" y="0" width="372" height="102" viewBox="255 722 745 205" preserveAspectRatio="xMidYMid meet" overflow="hidden" xmlns="http://www.w3.org/2000/svg"><path xmlns="http://www.w3.org/2000/svg" d="M0 0 C5.95 3.28 10.89 7.94 15.88 12.5 C59.5 52.37 125.33 53.74 181.14 57.08 C181.66 57.11 181.66 57.11 184.28 57.27 C216.93 59.22 249.51 59.66 282.2 59.64 C282.71 59.64 282.71 59.64 285.26 59.64 C317.13 59.64 348.94 59.37 380.76 57.62 C383.68 57.46 386.59 57.3 389.5 57.15 C481.48 52.22 481.48 52.22 523.64 37.46 C524.31 37.23 524.98 36.99 525.67 36.76 C544.99 29.92 561.05 18.53 576.64 5.46 C584.31 -0.82 589.44 -3.29 599.58 -2.92 C604.74 -2.29 607.58 -0.83 611.13 3.12 C615.5 9.12 616.06 15.9 615.39 23.16 C614.94 25.95 614.38 28.7 613.77 31.46 C613.54 32.48 613.32 33.51 613.08 34.57 C605.54 67.38 591.85 98.89 569.64 124.46 C569.23 124.94 569.23 124.94 567.13 127.37 C542.14 155.8 507.2 171.67 469.64 174.46 C464.16 174.71 458.67 174.85 453.18 174.98 C452.37 175 451.56 175.03 450.72 175.05 C428.63 175.6 406.54 175.8 384.45 175.99 C380.95 176.02 377.46 176.05 373.96 176.08 C314.93 176.61 255.93 176.57 196.9 176.05 C193.38 176.02 189.87 175.99 186.35 175.96 C144.21 175.6 144.21 175.6 124.68 175 C124.08 174.98 124.08 174.98 121.07 174.89 C90.4 173.82 60.76 164.99 36.64 145.46 C36.05 144.99 35.46 144.51 34.86 144.03 C-1.35 114.74 -24.93 67.53 -30.36 21.46 C-30.67 14.34 -29.41 8.88 -25.11 3.14 C-17.62 -4.18 -9.04 -3.93 0 0 Z " fill="#FF6B16" transform="translate(334.359375,518.54296875)" />
20
+ <path xmlns="http://www.w3.org/2000/svg" d="M0 0 C0.86 -0.01 1.72 -0.01 2.6 -0.02 C3.53 -0.02 4.47 -0.03 5.43 -0.03 C6.42 -0.04 7.4 -0.04 8.42 -0.05 C11.7 -0.07 14.97 -0.08 18.25 -0.09 C19.37 -0.1 20.49 -0.1 21.64 -0.1 C27.57 -0.12 33.5 -0.14 39.43 -0.15 C45.55 -0.16 51.66 -0.19 57.77 -0.23 C62.48 -0.26 67.2 -0.27 71.91 -0.27 C74.16 -0.28 76.41 -0.29 78.67 -0.31 C81.83 -0.33 84.99 -0.33 88.15 -0.32 C89.07 -0.34 89.99 -0.35 90.94 -0.36 C100.17 -0.29 108.11 2.58 114.68 9.15 C121.5 17.53 122.12 27.26 122.08 37.66 C122.09 38.87 122.09 40.08 122.1 41.33 C122.12 44.62 122.12 47.91 122.11 51.2 C122.11 53.96 122.11 56.72 122.12 59.47 C122.13 65.97 122.13 72.48 122.12 78.98 C122.11 85.67 122.12 92.37 122.15 99.06 C122.17 104.83 122.18 110.59 122.17 116.36 C122.17 119.8 122.17 123.23 122.19 126.67 C122.21 130.5 122.19 134.32 122.18 138.15 C122.18 138.72 122.18 138.72 122.21 141.58 C122.15 147.72 121.89 151.54 117.68 156.15 C84.98 174.69 35.39 174.56 -1.32 177.15 C-1.97 177.2 -1.97 177.2 -5.22 177.44 C-6.49 177.53 -7.75 177.63 -9.06 177.72 C-10.17 177.8 -11.28 177.89 -12.43 177.97 C-15.82 178.12 -19.17 178.16 -22.57 178.16 C-23.11 178.16 -23.11 178.16 -25.84 178.15 C-26.66 178.15 -27.48 178.15 -28.32 178.15 C-28.42 158.39 -28.49 138.63 -28.53 118.87 C-28.55 109.7 -28.58 100.52 -28.63 91.35 C-28.67 83.35 -28.69 75.34 -28.7 67.34 C-28.71 63.11 -28.72 58.88 -28.75 54.65 C-28.77 50.65 -28.78 46.66 -28.78 42.67 C-28.78 41.21 -28.79 39.75 -28.8 38.3 C-28.92 26.66 -27.62 16.58 -19.32 7.87 C-13.66 2.99 -7.5 0.04 0 0 Z " fill="#062E60" transform="translate(740.3240051269531,385.8528289794922)" />
21
+ <path xmlns="http://www.w3.org/2000/svg" d="M0 0 C0.87 -0.01 1.74 -0.01 2.64 -0.02 C5.48 -0.03 8.33 -0.03 11.18 -0.03 C13.18 -0.03 15.18 -0.03 17.17 -0.04 C21.35 -0.05 25.53 -0.05 29.71 -0.04 C35.04 -0.04 40.37 -0.05 45.7 -0.08 C49.83 -0.09 53.95 -0.09 58.08 -0.09 C60.04 -0.09 62.01 -0.09 63.97 -0.1 C92.09 -0.23 92.09 -0.23 101.62 9.03 C108.67 16.5 110.27 23.55 110.16 33.55 C110.16 34.54 110.16 35.54 110.16 36.56 C110.16 39.83 110.13 43.1 110.11 46.37 C110.1 48.64 110.1 50.92 110.1 53.19 C110.08 59.17 110.05 65.14 110.02 71.11 C109.99 77.21 109.98 83.31 109.96 89.41 C109.93 101.36 109.88 113.32 109.82 125.27 C101.98 125.87 94.16 126.42 86.31 126.59 C85.47 126.61 84.64 126.63 83.77 126.65 C81.08 126.72 78.38 126.78 75.69 126.84 C74.75 126.86 73.81 126.88 72.84 126.9 C46.3 127.48 19.8 127.41 -6.75 126.84 C-7.69 126.82 -8.64 126.8 -9.61 126.78 C-12.33 126.72 -15.04 126.66 -17.75 126.59 C-18.54 126.57 -19.33 126.56 -20.15 126.54 C-26.19 126.38 -32.17 125.88 -38.18 125.27 C-38.28 112.56 -38.35 99.84 -38.39 87.12 C-38.41 81.21 -38.44 75.31 -38.49 69.4 C-38.53 63.7 -38.55 57.99 -38.56 52.28 C-38.57 50.11 -38.59 47.94 -38.61 45.77 C-38.86 19.06 -38.86 19.06 -28.32 8.15 C-20.38 1.18 -10.22 -0.03 0 0 Z " fill="#062E60" transform="translate(586.184814453125,439.725341796875)" />
22
+ <path xmlns="http://www.w3.org/2000/svg" d="M0 0 C1.74 0 3.47 -0 5.21 -0 C8.83 -0 12.45 0.01 16.07 0.03 C20.69 0.05 25.31 0.05 29.94 0.04 C33.52 0.04 37.09 0.05 40.67 0.06 C42.38 0.06 44.08 0.06 45.79 0.06 C48.17 0.06 50.56 0.07 52.94 0.09 C53.29 0.09 53.29 0.09 55.04 0.08 C63.94 0.18 72.63 2.61 79.42 8.62 C86.65 16.96 87.77 26.04 87.51 36.66 C87.5 37.97 87.49 39.29 87.49 40.64 C87.46 44.1 87.4 47.55 87.34 51 C87.28 54.54 87.25 58.08 87.22 61.62 C87.15 68.54 87.05 75.45 86.93 82.36 C75.53 82.54 64.29 82.06 52.93 81.11 C52.11 81.05 51.29 80.98 50.45 80.91 C-32.26 74.13 -32.26 74.13 -43.7 62.75 C-45.57 59.5 -45.5 56.54 -45.47 52.89 C-45.48 52.16 -45.48 51.44 -45.48 50.69 C-45.48 49.15 -45.48 47.62 -45.47 46.08 C-45.45 43.77 -45.47 41.45 -45.48 39.13 C-45.5 27.3 -44.51 17.3 -36.07 8.36 C-26.37 -0.98 -12.55 -0.07 0 0 Z " fill="#062E60" transform="translate(445.07421875,481.63671875)" />
23
+ <g fill="#062E60" transform="translate(256.4990 915.3131) scale(0.283366 -0.283366)"><path d="M288.25 -13.25Q243.75 -13.25 198.25 3.375Q152.75 20 114.5 52.25Q76.25 84.5 53.125 132.125Q30 179.75 30 242Q30 303.5 53.125 350.75Q76.25 398 114.0 430.0Q151.75 462 197.125 478.625Q242.5 495.25 286.25 495.25Q323 495.25 352.625 486.375Q382.25 477.5 402.75 465.75Q423.25 454 432.25 444.5Q449 432.25 462.125 419.125Q475.25 406 474 385Q472.5 373.5 466.875 362.375Q461.25 351.25 451.5 338.5Q421.5 297.25 391.75 300.75Q377.25 304.25 364.75 311.125Q352.25 318 340.625 325.25Q329 332.5 316.125 337.75Q303.25 343 286.25 343Q257.25 343 234.0 329.75Q210.75 316.5 197.5 293.75Q184.25 271 184.25 241.25Q184.25 211.75 197.5 188.625Q210.75 165.5 233.5 152.25Q256.25 139 284.25 139Q300.5 139 313.375 142.75Q326.25 146.5 335.25 152.0Q344.25 157.5 348.75 161.25Q361.25 169 372.0 175.375Q382.75 181.75 394.5 181.75Q408.75 181.75 423.625 171.25Q438.5 160.75 456.5 137.75Q473.25 117.25 475.375 99.0Q477.5 80.75 466.625 64.625Q455.75 48.5 432.75 33.75Q425.25 27 404.75 15.875Q384.25 4.75 354.625 -4.25Q325 -13.25 288.25 -13.25Z" transform="translate(0 0)"/><path d="M449 -7.75Q411.75 -7.75 394.125 5.25Q376.5 18.25 376.75 37.25L387.25 54Q380.75 44 364.0 29.5Q347.25 15 319.875 3.5Q292.5 -8 253 -8Q207 -8 165.5 12.0Q124 32 91.875 67.25Q59.75 102.5 41.125 147.5Q22.5 192.5 22.5 242.75Q22.5 291.75 41.125 336.125Q59.75 380.5 92.375 415.25Q125 450 166.125 470.0Q207.25 490 253 490Q290.25 490 316.25 479.5Q342.25 469 359.5 454.75Q376.75 440.5 385.75 427.5L377.5 441.75Q376.75 465.5 394.5 478.125Q412.25 490.75 450 490.75Q486.25 490.75 501.5 479.75Q516.75 468.75 520.375 451.0Q524 433.25 524 413.25V68Q524 48.5 520.375 30.875Q516.75 13.25 501.375 2.75Q486 -7.75 449 -7.75ZM274.5 140.75Q300.75 140.75 322.125 154.375Q343.5 168 356.375 190.875Q369.25 213.75 369.25 241.5Q369.25 270.75 356.125 293.25Q343 315.75 321.125 329.125Q299.25 342.5 272.5 342.5Q243.75 342.5 221.125 328.75Q198.5 315 185.25 292.0Q172 269 172 240.25Q172 212.75 185.625 190.25Q199.25 167.75 222.5 154.25Q245.75 140.75 274.5 140.75Z" transform="translate(505 0)"/><path d="M115.5 -8.5Q79.25 -8.5 63.5 2.375Q47.75 13.25 44.5 30.625Q41.25 48 41.25 67.25V419Q41.25 438 44.875 454.375Q48.5 470.75 64.375 480.75Q80.25 490.75 116.5 490.75Q149 490.75 164.125 482.5Q179.25 474.25 183.75 462.25Q188.25 450.25 188.25 439.625Q188.25 429 189.75 425L183.75 405.75Q186.25 421.25 199.625 436.375Q213 451.5 233.25 464.0Q253.5 476.5 277.0 483.875Q300.5 491.25 323.5 491.25Q371.75 491.25 409.375 473.375Q447 455.5 472.875 422.75Q498.75 390 512.25 345.625Q525.75 301.25 525.75 248V66.25Q525.75 47 522.125 29.625Q518.5 12.25 503.125 1.875Q487.75 -8.5 450.5 -8.5Q413.25 -8.5 397.375 2.375Q381.5 13.25 377.875 30.625Q374.25 48 374.25 67.25V248.25Q374.25 277.75 363.875 298.75Q353.5 319.75 333.875 331.125Q314.25 342.5 284.75 342.5Q256.25 342.5 235.125 330.75Q214 319 202.5 298.0Q191 277 191 248.25V66.25Q191 47 187.375 29.625Q183.75 12.25 168.25 1.875Q152.75 -8.5 115.5 -8.5Z" transform="translate(1068 0)"/><path d="M280.75 -17.25Q233.75 -17.25 187.5 1.375Q141.25 20 103.25 54.125Q65.25 88.25 42.875 135.625Q20.5 183 20.5 240.5Q20.5 294.5 40.875 341.375Q61.25 388.25 97.0 424.0Q132.75 459.75 179.25 480.125Q225.75 500.5 278.75 500.5Q351 500.5 409.5 466.0Q468 431.5 503.0 372.875Q538 314.25 538 241.5Q538 181.25 515.375 133.5Q492.75 85.75 455.375 52.0Q418 18.25 372.375 0.5Q326.75 -17.25 280.75 -17.25ZM278.75 133.5Q302.75 133.5 327.75 145.5Q352.75 157.5 369.75 181.875Q386.75 206.25 386.75 242.75Q386.75 275 372.875 299.0Q359 323 334.375 336.375Q309.75 349.75 277.75 349.75Q248.25 349.75 224.375 335.75Q200.5 321.75 186.125 297.375Q171.75 273 171.75 241.75Q171.75 205.75 188.375 181.5Q205 157.25 229.75 145.375Q254.5 133.5 278.75 133.5Z" transform="translate(1631 0)"/><path d="M298.25 -9.5Q247.25 -9.5 210.375 1.5Q173.5 12.5 149.625 35.5Q125.75 58.5 114.375 94.125Q103 129.75 103 178.5V584.5Q103 604.75 106.625 621.0Q110.25 637.25 126.0 647.375Q141.75 657.5 178 657.5Q213.75 657.5 229.625 646.75Q245.5 636 249.25 618.75Q253 601.5 253 582.25V184.75Q253 168.75 255.5 158.5Q258 148.25 263.125 143.0Q268.25 137.75 277.0 135.625Q285.75 133.5 298.75 133.5Q321.25 133.5 338.25 129.875Q355.25 126.25 364.625 112.0Q374 97.75 374 65Q374 28.5 362.75 12.75Q351.5 -3 334.125 -6.25Q316.75 -9.5 298.25 -9.5ZM71.75 483 181.75 482.5 320 486.75Q339.25 486.75 356.25 483.125Q373.25 479.5 384.125 463.75Q395 448 395 411Q395 376.75 384.25 360.875Q373.5 345 356.625 340.625Q339.75 336.25 319.75 336.25L189.25 339L68.25 338.5Q38.75 340 27.5 356.625Q16.25 373.25 16.25 411.75Q16.25 447.75 30.0 465.375Q43.75 483 71.75 483Z" transform="translate(2190 0)"/></g></svg></g></g>
24
+ </svg>
@@ -0,0 +1,12 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 940 486" width="940" height="486" role="img" aria-label="Démonstration : canot drill copie 7 tables BigQuery vers Iceberg, compare tout et signale une requête qui diverge">
2
+ <style>
3
+ text{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;font-size:15px}
4
+ @keyframes l0{0%,1.82%{opacity:0}2.42%,93.0%{opacity:1}100%{opacity:0}}.l0{animation:l0 22.0s infinite}@keyframes l1{0%,7.05%{opacity:0}7.65%,93.0%{opacity:1}100%{opacity:0}}.l1{animation:l1 22.0s infinite}@keyframes l2{0%,11.36%{opacity:0}11.96%,93.0%{opacity:1}100%{opacity:0}}.l2{animation:l2 22.0s infinite}@keyframes l3{0%,15.68%{opacity:0}16.28%,93.0%{opacity:1}100%{opacity:0}}.l3{animation:l3 22.0s infinite}@keyframes l4{0%,20.00%{opacity:0}20.60%,93.0%{opacity:1}100%{opacity:0}}.l4{animation:l4 22.0s infinite}@keyframes l5{0%,24.32%{opacity:0}24.92%,93.0%{opacity:1}100%{opacity:0}}.l5{animation:l5 22.0s infinite}@keyframes l6{0%,28.64%{opacity:0}29.24%,93.0%{opacity:1}100%{opacity:0}}.l6{animation:l6 22.0s infinite}@keyframes l7{0%,32.95%{opacity:0}33.55%,93.0%{opacity:1}100%{opacity:0}}.l7{animation:l7 22.0s infinite}@keyframes l8{0%,37.27%{opacity:0}37.87%,93.0%{opacity:1}100%{opacity:0}}.l8{animation:l8 22.0s infinite}@keyframes l9{0%,41.59%{opacity:0}42.19%,93.0%{opacity:1}100%{opacity:0}}.l9{animation:l9 22.0s infinite}@keyframes l10{0%,45.91%{opacity:0}46.51%,93.0%{opacity:1}100%{opacity:0}}.l10{animation:l10 22.0s infinite}@keyframes l11{0%,50.23%{opacity:0}50.83%,93.0%{opacity:1}100%{opacity:0}}.l11{animation:l11 22.0s infinite}@keyframes l12{0%,54.55%{opacity:0}55.15%,93.0%{opacity:1}100%{opacity:0}}.l12{animation:l12 22.0s infinite}@keyframes l13{0%,58.86%{opacity:0}59.46%,93.0%{opacity:1}100%{opacity:0}}.l13{animation:l13 22.0s infinite}@keyframes l14{0%,63.18%{opacity:0}63.78%,93.0%{opacity:1}100%{opacity:0}}.l14{animation:l14 22.0s infinite}@keyframes l15{0%,67.50%{opacity:0}68.10%,93.0%{opacity:1}100%{opacity:0}}.l15{animation:l15 22.0s infinite}
5
+ @media (prefers-reduced-motion:reduce){.l0,.l1,.l2,.l3,.l4,.l5,.l6,.l7,.l8,.l9,.l10,.l11,.l12,.l13,.l14,.l15{animation:none;opacity:1}}
6
+ </style>
7
+ <rect x="1" y="1" width="938" height="484" rx="12" fill="#0D1B2A" stroke="#223A4B" stroke-width="2"/>
8
+ <path d="M1 13a12 12 0 0 1 12-12h914a12 12 0 0 1 12 12v32H1z" fill="#13273B"/>
9
+ <circle cx="26" cy="26" r="6.5" fill="#FF5F57"/><circle cx="48" cy="26" r="6.5" fill="#FEBC2E"/><circle cx="70" cy="26" r="6.5" fill="#28C840"/>
10
+ <text x="470.0" y="31" text-anchor="middle" fill="#7D8FA3" style="font-size:13px">canot : exercice de sortie</text>
11
+ <text class="l0" x="28" y="86" fill="#E6EDF3" font-weight="700" xml:space="preserve">$ canot drill --from &quot;bigquery://MON-PROJET/thelook_ecommerce?location=US&quot; --to ./lac</text><text class="l1" x="28" y="111" fill="#7D8FA3" xml:space="preserve">→ inventaire</text><text class="l2" x="28" y="136" fill="#7D8FA3" xml:space="preserve">→ copie de 7 table(s) vers local:./lac</text><text class="l3" x="28" y="161" fill="#B9C6D3" xml:space="preserve"> events 2 423 210 lignes 437,7 Mo 7,2 s</text><text class="l4" x="28" y="186" fill="#B9C6D3" xml:space="preserve"> inventory_items 488 835 lignes 88,5 Mo 3,5 s</text><text class="l5" x="28" y="211" fill="#B9C6D3" xml:space="preserve"> order_items 181 071 lignes 16,8 Mo 3,3 s</text><text class="l6" x="28" y="236" fill="#7D8FA3" xml:space="preserve">→ comparaison des tables</text><text class="l7" x="28" y="261" fill="#56D364" xml:space="preserve"> events OK orders OK users OK</text><text class="l8" x="28" y="286" fill="#56D364" xml:space="preserve"> inventory_items OK order_items OK products OK</text><text class="l9" x="28" y="311" fill="#7D8FA3" xml:space="preserve">→ rejeu de 4 requêtes des deux côtés</text><text class="l10" x="28" y="336" fill="#56D364" xml:space="preserve"> <tspan fill="#56D364">[match]</tspan> select status, count(*) as n from orders …</text><text class="l11" x="28" y="361" fill="#56D364" xml:space="preserve"> <tspan fill="#56D364">[match]</tspan> select p.category, round(sum(oi.sale_price), 2) …</text><text class="l12" x="28" y="386" fill="#FF9A55" xml:space="preserve"> <tspan fill="#FF9A55">[mismatch]</tspan> select date_trunc(date(created_at), month) …</text><text class="l13" x="28" y="411" fill="#56D364" xml:space="preserve"> <tspan fill="#56D364">[match]</tspan> select country, count(*) as users, avg(age) …</text><text class="l14" x="28" y="436" fill="#FFFFFF" font-weight="700" xml:space="preserve">Parité : écarts — 7/7 tables, 3/4 requêtes</text><text class="l15" x="28" y="461" fill="#7D8FA3" xml:space="preserve">Dossier : canot-out/report.html (journal signé, vérifiable)</text>
12
+ </svg>
@@ -0,0 +1,28 @@
1
+ # Cibles : hébergeurs souverains et pays
2
+
3
+ Canot écrit sur tout stockage compatible S3. Raccourcis intégrés (`--to <hébergeur>:<région> --bucket <nom>`).
4
+ **Vérifiez chaque point de terminaison dans la console de l'hébergeur avant usage : ils sont à confirmer.**
5
+
6
+ | Raccourci | Hébergeur | Pays | Remarque |
7
+ |---|---|---|---|
8
+ | `scaleway:fr-par` (aussi `nl-ams`, `pl-waw`) | Scaleway | FR, NL, PL | pas qualifié SecNumCloud (à vérifier) |
9
+ | `ovh:gra` | OVHcloud | FR | offre SNC qualifiée SecNumCloud (à vérifier sur la liste ANSSI) |
10
+ | `outscale:eu-west-2` | Outscale | FR | qualification à renouveler fin 2026 (à vérifier) |
11
+ | `ionos:eu-central-1` | IONOS | DE | |
12
+ | `stackit:eu01` | STACKIT (groupe Schwarz) | DE | |
13
+ | `aws:eu-west-3` | AWS | FR | pas un cloud souverain ; AWS European Sovereign Cloud existe aussi |
14
+
15
+ ## Le même principe dans d'autres pays de l'UE
16
+
17
+ Le Data Act s'applique dans toute l'UE : mêmes règles de changement de fournisseur (art. 23 à 31), mêmes frais à zéro à partir du 12 janvier 2027.
18
+ Ce qui change d'un pays : le superviseur financier qui applique DORA, l'autorité qui contrôle le Data Act, et les exigences nationales de souveraineté.
19
+
20
+ | Pays | Pourquoi c'est intéressant | Hébergeurs locaux |
21
+ |---|---|---|
22
+ | Allemagne | plus gros marché ; BaFin applique DORA ; forte culture souveraineté | STACKIT, IONOS, Open Telekom Cloud |
23
+ | Pays-Bas | place financière, beaucoup de scale-ups sur Snowflake | Leaseweb |
24
+ | Italie | banques et assurances nombreuses | Aruba, Seeweb |
25
+ | Espagne | banques ; Data Act via la CNMC | IONOS, Arsys |
26
+ | Pologne, pays nordiques | fort usage du cloud, hébergeurs locaux | Scaleway Varsovie, UpCloud |
27
+
28
+ À confirmer avant de vendre : l'autorité compétente désignée dans chaque pays et les listes de qualification nationales (équivalents de SecNumCloud : C5 en Allemagne, ACN en Italie, ENS en Espagne).
@@ -0,0 +1,62 @@
1
+ # Brief : landing page de Canot (pour l'agent de design)
2
+
3
+ Ce document donne la matière, pas la mise en page. Le design est libre, dans les limites de la dernière section.
4
+
5
+ ## 1. Le produit en une phrase
6
+ Canot fait un **exercice de sortie** de Snowflake, BigQuery ou Databricks : il copie les données vers un format ouvert (Apache Iceberg) sur un cloud que le client contrôle, compare tout ligne par ligne, rejoue ses requêtes clés des deux côtés, et signe un **dossier de preuve**. Une commande, dans les comptes du client, aucune donnée ne passe par nous.
7
+
8
+ ## 2. À qui parle la page (trois lecteurs, dans cet ordre)
9
+ 1. **Le responsable des risques ou de la conformité** d'une banque, assurance ou société de gestion : il doit prouver que le plan de sortie de son prestataire cloud est réaliste et testé (DORA).
10
+ 2. **Le DSI ou directeur data** d'une entreprise de taille intermédiaire qui renouvelle bientôt son contrat de plateforme de données : il veut un coût de sortie mesuré pour négocier.
11
+ 3. **L'ingénieur data** qui lit le dépôt GitHub : il veut voir la commande, le code, le format du rapport, et savoir ce qui est testé ou non.
12
+
13
+ Un même visiteur doit pouvoir aller du « pourquoi » à `uvx canot scan` en moins d'une minute.
14
+
15
+ ## 3. Le message
16
+ - **Titre candidat :** « Prouvez que vous pouvez partir. » (EN : *Prove you can leave.*)
17
+ - **Sous-titre candidat :** « Une répétition de départ de Snowflake, BigQuery ou Databricks, dans vos propres comptes, avec un dossier de preuve signé. »
18
+ - **Accroche d'actualité (bandeau, pas titre) :** « Le 12 janvier 2027, les frais de changement de cloud disparaissent en Europe (Data Act). Le travail de sortie, lui, reste. »
19
+ - **Alternatives de titre à tester :** « Votre plan de sortie, exécuté et mesuré. » · « Combien coûterait vraiment votre sortie ? » · « Ce que vos contrats cloud ne vous disent pas : si vous pouvez partir. »
20
+
21
+ ## 4. Structure proposée
22
+ 1. **Hero** : titre, sous-titre, la commande copiable, deux boutons (« Lancer un scan gratuit » vers GitHub, « Parler à q4o »). Visuel : voir §5.
23
+ 2. **Le problème en trois lignes** : les fournisseurs offrent des outils gratuits pour entrer, personne n'offre celui qui vérifie la sortie ; DORA et le Data Act demandent de pouvoir partir ; un plan de sortie sur papier n'a jamais été exécuté.
24
+ 3. **Comment ça marche** : cinq étapes (installer, copier, rejouer, comparer, signer) sur un schéma où le **périmètre du client** est une frontière dessinée, avec « q4o n'envoie rien » à l'extérieur.
25
+ 4. **Le dossier de preuve** : une capture réelle du rapport (voir `examples/bigquery-thelook/report.html`), avec trois annotations : parité par table, requête qui diverge, journal signé.
26
+ 5. **Preuve par l'exemple** : « 3,3 millions de lignes, 7 tables identiques, 20 secondes. Et une requête qui diverge : `DATE_TRUNC` rend une `DATE` chez BigQuery, un horodatage ailleurs. C'est exactement ce que vous voulez savoir avant de partir. »
27
+ 6. **Pour qui, et pourquoi maintenant** : trois cartes (risques / DSI / ingénieur) avec une phrase chacune, et une frise courte : 17 janv. 2025 DORA, 12 sept. 2025 Data Act, **12 janv. 2027** fin des frais de changement.
28
+ 7. **Cibles souveraines** : Scaleway, OVHcloud, Outscale, IONOS, STACKIT, AWS ; bandeau « France, Allemagne, Pays-Bas, Italie, Espagne ». Ne pas écrire « qualifié SecNumCloud » sans la mention « selon l'hébergeur choisi ».
29
+ 8. **Offres** : outil gratuit (Apache-2.0) · diagnostic de réversibilité 22 k€ HT, 3 semaines · test de sortie DORA à partir de 25 k€ · abonnement Canot Vigie 15 k€/an. Une ligne de livrables par offre (voir `docs/livrables.md`).
30
+ 9. **Honnêteté** : un tableau d'état du projet (testé, écrit mais non testé). C'est un argument de confiance, pas un défaut à cacher.
31
+ 10. **FAQ / objections** : « Si l'outil est gratuit, pourquoi payer ? » · « Que voyez-vous de nos données ? (rien) » · « Est-ce une certification ? (non) » · « Pouvez-vous lire nos contrats ? (non, c'est un travail d'avocat, nous travaillons avec un cabinet) » · « Que faire si on ne veut pas partir ? (l'exercice ne vous fait pas partir) ».
32
+ 11. **Appel final** : la commande, le lien GitHub, un formulaire court (nom, société, plateforme actuelle, date de renouvellement).
33
+
34
+ ## 5. Idées visuelles
35
+ - **Métaphore du canot de sauvetage**, discrète : un tracé de canot ou une bouée, jamais un clip-art. On répète un départ, on ne le subit pas. Le mot « exercice » (un exercice d'évacuation) porte l'idée.
36
+ - **Le périmètre** : le schéma central est une frontière en pointillés autour des comptes du client, avec les flèches de la source vers la cible à l'intérieur. C'est l'image qui rassure un RSSI.
37
+ - **Le rapport comme héros** : le vrai rapport, lisible, plutôt qu'un mockup abstrait. Le dossier de preuve est le produit.
38
+ - **Le terminal** : la commande dans un bloc sombre copiable, avec une vraie sortie (les lignes `OK`, `[match]`, `[mismatch]`).
39
+ - **Ton graphique** : sobre et technique, plutôt institutionnel que « startup ». Palette de départ : marine profond, un orange de sécurité (couleur d'un gilet de sauvetage) comme seul accent, des gris bleutés. Chiffres en police à chasse fixe.
40
+ - **À éviter** : dégradés violet-bleu, illustrations de nuage, cadenas partout, captures de dashboards inventés, statistiques sans source.
41
+
42
+ ## 6. Ton et vocabulaire
43
+ - Français d'abord, anglais ensuite (page jumelle). Tutoiement exclu, vouvoiement sobre.
44
+ - Phrases courtes, concrètes, chiffrées. Pas de « révolutionnaire », « seamless », « 100 % sécurisé ».
45
+ - Mots à utiliser : exercice de sortie, dossier de preuve, parité, dans vos comptes, réversibilité.
46
+ - Mots à ne jamais utiliser : « conforme DORA », « certifié », « garanti », « gratuit » à propos du départ (l'outil est gratuit, partir ne l'est pas), « clone ».
47
+
48
+ ## 7. Contraintes à respecter (juridiques et de confiance)
49
+ - Dire « rien ne quitte vos comptes », jamais « aucune donnée ne sort » (les données sont copiées, chez le client).
50
+ - Ne citer aucun client. Aucun logo de tiers hors des hébergeurs en liste de compatibilité, sous forme de texte.
51
+ - Chaque chiffre de marché porte sa source en note (voir `docs/livrables.md` et le briefing). Les prix sont des « à partir de ».
52
+ - Le nom **Canot** est provisoire (marque non vérifiée) : prévoir de le changer facilement, ne pas le dessiner dans un logo figé.
53
+ - Aucun formulaire ne collecte de données personnelles au-delà du nécessaire ; pas de pisteur tiers (cohérent avec « aucune télémétrie »).
54
+
55
+ ## 8. Matériaux fournis
56
+ - Dépôt : `~/repos/canot` (GitHub : chiptuned/canot).
57
+ - `README.md` : version courte de la page. `docs/livrables.md` : ce que le client reçoit. `docs/cibles-ue.md` : hébergeurs et pays.
58
+ - `examples/bigquery-thelook/report.html` et `examples/distributeur-fictif/report.html` : deux vrais rapports.
59
+ - Briefing interne (contexte, vocabulaire, argumentaire) : `docs/briefing.html`.
60
+
61
+ ## 9. Mesure de réussite
62
+ Le nombre de visiteurs qui lancent `canot scan` (clic sur la commande copiée) et le nombre de demandes de rendez-vous qualifiées (plateforme actuelle + date de renouvellement renseignées). Pas les pages vues.
@@ -0,0 +1,72 @@
1
+ # Livrables : ce que le client reçoit, offre par offre
2
+
3
+ Chaque livrable a un format, un critère de recette (comment le client dit « c'est bon ») et ce qu'il doit nous fournir.
4
+ Les jours et les prix sont des estimations à valider avec les premiers clients. L'exemple chiffré est dans
5
+ [`examples/distributeur-fictif/`](../examples/distributeur-fictif/) (données inventées d'un distributeur fictif).
6
+
7
+ ## 1. Diagnostic technique de réversibilité (22 k€ HT, 3 semaines, environ 15 jours de travail)
8
+
9
+ Question à laquelle il répond : « si nous voulions quitter cette plateforme de données, que faudrait-il faire, combien de temps, combien ça coûterait, et pouvons-nous le prouver ? »
10
+
11
+ | # | Livrable | Format | Critère de recette |
12
+ |---|---|---|---|
13
+ | D1 | **Radiographie** : tables, volumes, colonnes à type propre à la plateforme, consommation sur 90 jours, requêtes les plus coûteuses | `scan.json` + synthèse d'une page | le référent data confirme que l'inventaire correspond à son périmètre |
14
+ | D2 | **Exercice de sortie** sur un périmètre convenu (un domaine, 5 à 20 tables) | `report.html` + `report.json` | parité complète, ou chaque écart expliqué et classé (erreur de copie, règle de conversion, différence de moteur) |
15
+ | D3 | **Dossier de preuve signé** | `evidence.jsonl`, `.sig`, `.pub` | `canot verify-evidence` passe ; le client le versionne dans son propre archivage |
16
+ | D4 | **Scénarios de coût de sortie** (trois : minimal, nominal, prudent) | tableur + 2 pages | les hypothèses sont nommées, chaque ligne a sa source (mesure, tarif du client, ou « est. ») |
17
+ | D5 | **Registre de ce qui ne part pas tel quel** : modèles ML, fonctions et procédures, requêtes planifiées, vues autorisées, politiques de sécurité par ligne et par colonne, vues matérialisées, réservations de capacité | tableur : objet, effort (S/M/L), remplaçant proposé | le référent confirme qu'aucun objet important n'est oublié |
18
+ | D6 | **Relevé factuel du contrat** : mode de facturation, dates de fin d'engagement, préavis, support souscrit, localisation des données | 1 page de faits, sans qualification juridique | validé par les achats ; l'analyse juridique reste celle de l'avocat du client |
19
+ | D7 | **Marche à suivre de sortie** (runbook) : étapes, ordre, durée, rôles, points de contrôle | document de 5 à 10 pages | relu par l'équipe qui l'exécuterait |
20
+ | D8 | **Dossier de renouvellement** : coût de sortie mesuré, comparaison des scénarios, ce que le client peut demander à son fournisseur | 2 pages pour la direction | présenté et pris en main par le DSI ou les achats |
21
+ | D9 | **Restitution** | atelier de 2 h + support | questions tracées, actions décidées |
22
+
23
+ À fournir par le client : accès en lecture seule (rôles listés dans la doc de chaque source), un référent data (environ une demi-journée), un administrateur (environ une heure), la liste des 10 à 20 rapports ou requêtes qui comptent, le tarif réellement payé, la date de renouvellement.
24
+ Hors périmètre : réécriture des applications, conseil juridique, déplacement réel des données de production, choix de la plateforme cible.
25
+
26
+ ### Postes à chiffrer pour une sortie de BigQuery (D4)
27
+
28
+ Aucun montant n'est fourni ici : les tarifs Google changent et dépendent du contrat. Chaque poste se remplit avec le tarif du client.
29
+
30
+ 1. Lecture ou export des données (API Storage Read par Tio lu, ou export vers Cloud Storage).
31
+ 2. Sortie réseau depuis Google Cloud. Google propose un programme de sortie qui peut la créditer sous conditions (liste de produits éligibles, résiliation du contrat, fenêtre de migration) : voir cloud.google.com/exit-cloud, à confirmer produit par produit.
32
+ 3. Stockage chez le nouvel hébergeur, par mois.
33
+ 4. Période de double exploitation (BigQuery et la cible en même temps).
34
+ 5. Calcul sur la cible.
35
+ 6. Temps d'ingénierie : traduction des requêtes et routines (dialecte BigQuery), validation, reconnexion des outils de reporting.
36
+
37
+ ## 2. Test de sortie DORA (25 à 60 k€, puis re-test 10 à 30 k€/an)
38
+
39
+ Pour une entité financière. Question : « notre plan de sortie pour ce prestataire est-il réaliste, et l'a-t-on testé ? »
40
+
41
+ | # | Livrable | Critère de recette |
42
+ |---|---|---|
43
+ | T1 | Scénarios de test (sortie planifiée, défaillance du prestataire, perte de service) rattachés à l'art. 10 du règlement délégué 2024/1773 | validés par le responsable des risques |
44
+ | T2 | Exécution sur un périmètre critique, avec les mesures (durée, parité, coût) | dossier de preuve signé (D3) |
45
+ | T3 | Fiche de test : date, périmètre, résultat, écarts, actions | acceptée par le contrôle interne |
46
+ | T4 | Éléments de registre : existence d'un plan, prestataires alternatifs identifiés | relus par la conformité |
47
+ | T5 | Synthèse d'une page pour le comité | présentée |
48
+
49
+ Ce n'est pas une attestation de conformité DORA. Un re-test récurrent peut faire de q4o un prestataire informatique de l'entité (clauses de l'art. 30) : contractualiser en missions ponctuelles d'abord.
50
+
51
+ ## 3. Canot Vigie (abonnement, 15 k€/an par compte source)
52
+
53
+ Refaire l'exercice chaque trimestre. Livrables : dossier signé par trimestre, comparaison avec le précédent (dérive), alerte quand un nouvel objet non portable apparaît, modèles réglementaires à jour, support avec délai de réponse écrit. Critère de recette : le trimestre se déroule sans intervention de q4o autre que la lecture du rapport.
54
+
55
+ ## 4. Pilote de parité SAS (45 k€ fixe, 6 semaines)
56
+
57
+ | # | Livrable | Critère de recette |
58
+ |---|---|---|
59
+ | S1 | Carte des dépendances et du code mort d'une chaîne | validée par l'équipe propriétaire |
60
+ | S2 | 40 programmes convertis et prouvés identiques sur les données du client | rapport de parité par programme, tolérances signées avant |
61
+ | S3 | Devis ferme de la suite, par domaine | accepté ou refusé par écrit |
62
+ | S4 | Note d'appui au renouvellement de licence | remise |
63
+
64
+ Condition : travail sur la licence SAS du client, jamais sur une version Learning ou Academic.
65
+
66
+ ## 5. Kit export pour éditeur SaaS (10 à 40 k€, 3 à 6 semaines)
67
+
68
+ Une fonction d'export documentée (OpenAPI), le contenu du registre exigé par l'art. 26 du Data Act, un jeu de tests d'export, la marche à suivre. Recette : un client test exporte ses données seul en suivant la documentation.
69
+
70
+ ## 6. Ce que nous ne livrons jamais
71
+
72
+ Un avis juridique, une certification, une garantie de gratuité du départ, un accès permanent à l'environnement du client.
@@ -0,0 +1,21 @@
1
+ {"data": {"env": {"canot": "0.1.0", "duckdb": "1.5.6", "pyarrow": "26.0.0", "pyiceberg": "0.12.0", "sqlglot": "30.22.0"}, "source": "bigquery:canot-511503/thelook_ecommerce", "target": "local:/private/tmp/bq1/lac", "tolerances": {"columns": {}, "decimal_abs": 0.0, "float_rel": 1e-09}}, "event": "start", "hash": "f6b09d29686e8339fd0c03a83dc58231d5ed53577738333ad0483c754a609032", "prev": "0000000000000000000000000000000000000000000000000000000000000000", "seq": 0, "ts": "2026-10-13T04:07:34+00:00"}
2
+ {"data": {"objects": {"external_tables": 0, "materialized_views": 0, "ml_models": 0, "routines": 0, "row_access_policies": 0, "views": 0}, "totals": {"bytes": 510257954, "gb": 0.51, "rows": 3347193, "tables": 7}}, "event": "scan", "hash": "be659ce73e260de07230cebf884b568e00466b1152509fa234461cf8e6f1dd89", "prev": "f6b09d29686e8339fd0c03a83dc58231d5ed53577738333ad0483c754a609032", "seq": 1, "ts": "2026-10-13T04:07:47+00:00"}
3
+ {"data": {"bytes": 691, "error": null, "fingerprint": {"12": [1, 165932846], "17": [1, 618007511], "2": [1, 728885166], "25": [1, 738600032], "39": [1, 835853969], "44": [1, 823321806], "45": [1, 78699575], "54": [1, 541390992], "58": [1, 4472345], "9": [1, 442004842]}, "rows": 10, "seconds": 2.526, "table": "thelook_ecommerce.distribution_centers"}, "event": "copy", "hash": "b74eb82403fc6d31fb3fbf8a2d6fd5526568b720ac81637c9027a3e1761aeca9", "prev": "be659ce73e260de07230cebf884b568e00466b1152509fa234461cf8e6f1dd89", "seq": 2, "ts": "2026-10-13T04:07:55+00:00"}
4
+ {"data": {"bytes": 437666584, "error": null, "fingerprint": {"0": [37958, 18974150532584], "1": [38045, 19120964587858], "10": [37856, 19011373423832], "11": [37942, 18974542498924], "12": [37844, 18847759353538], "13": [38139, 19010785865412], "14": [37975, 18946860700000], "15": [38073, 19091991905928], "16": [38243, 19121636938824], "17": [37892, 19074677892791], "18": [38062, 19015262944489], "19": [37697, 18902174409359], "2": [37846, 18892430050418], "20": [37785, 18810402143900], "21": [37949, 18842655995034], "22": [37690, 18842645070680], "23": [37683, 18786969023017], "24": [38112, 19032287430222], "25": [37732, 18845735086935], "26": [37939, 19041005698763], "27": [37859, 18945989280554], "28": [37946, 18909924368979], "29": [37634, 18858123316704], "3": [37614, 18942887946827], "30": [37955, 19077965477718], "31": [37756, 18931955896244], "32": [37918, 19005940901489], "33": [37633, 18777876324624], "34": [37967, 19003131702357], "35": [37885, 18834288073964], "36": [37739, 18892004348215], "37": [37999, 18983313418233], "38": [37845, 18855384173610], "39": [38167, 18982680540556], "4": [37871, 18922672468832], "40": [38193, 19186550018739], "41": [38008, 19039564691577], "42": [37683, 18824045404311], "43": [37566, 18879487186053], "44": [37698, 18824341072165], "45": [37737, 18904667828101], "46": [37663, 18834044039453], "47": [37913, 18911931135689], "48": [37663, 18839608990030], "49": [38183, 19035994957374], "5": [38136, 19114876942109], "50": [37448, 18730186948522], "51": [37572, 18759785640513], "52": [37856, 18901215864898], "53": [37720, 18931059505593], "54": [37816, 18813866722867], "55": [37850, 18949806211935], "56": [37844, 18980915246898], "57": [37793, 18961854443385], "58": [37785, 18798816271797], "59": [37661, 18721428584536], "6": [37705, 18891760750244], "60": [38290, 19031103039577], "61": [37507, 18697245156677], "62": [37659, 18751675062558], "63": [37874, 18922798136853], "7": [38299, 19238847398137], "8": [37754, 18787861542654], "9": [38084, 18979990261114]}, "rows": 2423210, "seconds": 7.521, "table": "thelook_ecommerce.events"}, "event": "copy", "hash": "8687e8c09255ca4b6aa5cee6574f781de739f533ab27ec32829ae59932c07ed6", "prev": "b74eb82403fc6d31fb3fbf8a2d6fd5526568b720ac81637c9027a3e1761aeca9", "seq": 3, "ts": "2026-10-13T04:08:02+00:00"}
5
+ {"data": {"bytes": 88452625, "error": null, "fingerprint": {"0": [7618, 3781138965634], "1": [7634, 3801143995313], "10": [7654, 3855597430153], "11": [7575, 3796285122052], "12": [7796, 3932189873732], "13": [7699, 3819601752504], "14": [7713, 3872707413840], "15": [7526, 3709009962583], "16": [7599, 3811744414020], "17": [7640, 3834822640676], "18": [7554, 3738052980965], "19": [7691, 3847734288690], "2": [7696, 3822007807510], "20": [7723, 3871852569663], "21": [7661, 3852279838159], "22": [7662, 3882120455487], "23": [7608, 3821210427849], "24": [7593, 3816795875700], "25": [7608, 3794540366539], "26": [7591, 3764739441334], "27": [7627, 3802623656056], "28": [7628, 3774101386422], "29": [7474, 3720558561832], "3": [7408, 3730383963658], "30": [7727, 3907457565359], "31": [7497, 3750895655559], "32": [7715, 3832555632327], "33": [7617, 3791286575452], "34": [7689, 3840771787555], "35": [7584, 3794410155464], "36": [7715, 3846303934051], "37": [7574, 3824238138878], "38": [7607, 3820475488461], "39": [7695, 3842300290965], "4": [7626, 3823329714485], "40": [7663, 3850502537116], "41": [7593, 3805303106417], "42": [7770, 3887706264921], "43": [7645, 3835062523704], "44": [7581, 3779255296214], "45": [7627, 3771325918107], "46": [7564, 3746292409612], "47": [7627, 3803519146895], "48": [7693, 3843082569194], "49": [7591, 3757208310183], "5": [7640, 3813755300609], "50": [7822, 3943550643021], "51": [7523, 3802897836145], "52": [7696, 3853512335390], "53": [7675, 3905097011158], "54": [7714, 3882709183375], "55": [7684, 3800604146489], "56": [7747, 3863838922073], "57": [7719, 3845478975394], "58": [7544, 3772424051704], "59": [7463, 3715301836533], "6": [7632, 3813804437450], "60": [7587, 3816437271743], "61": [7584, 3811013603550], "62": [7775, 3891852958113], "63": [7658, 3821628480291], "7": [7817, 3949850545389], "8": [7555, 3762587159566], "9": [7622, 3848715561022]}, "rows": 488835, "seconds": 3.735, "table": "thelook_ecommerce.inventory_items"}, "event": "copy", "hash": "0f05eff4422768ee89bea3349dbff12eb8ddd5838edf215fb2b6018645ab809d", "prev": "8687e8c09255ca4b6aa5cee6574f781de739f533ab27ec32829ae59932c07ed6", "seq": 4, "ts": "2026-10-13T04:08:06+00:00"}
6
+ {"data": {"bytes": 16771449, "error": null, "fingerprint": {"0": [2842, 1420336536512], "1": [2865, 1417768435287], "10": [2896, 1438947825887], "11": [2871, 1414532755884], "12": [2784, 1408661647211], "13": [2789, 1395062813800], "14": [2933, 1461592577345], "15": [2756, 1373200526634], "16": [2830, 1419623577266], "17": [2729, 1366848209763], "18": [2829, 1437770749879], "19": [2901, 1457874916164], "2": [2824, 1408130450045], "20": [2783, 1408299126180], "21": [2892, 1454065104802], "22": [2926, 1466241800095], "23": [2722, 1354588963945], "24": [2826, 1418306941375], "25": [2876, 1427733724513], "26": [2902, 1440744357132], "27": [2946, 1496738473348], "28": [2730, 1370009473028], "29": [2781, 1391996029305], "3": [2898, 1434977547499], "30": [2795, 1396966712132], "31": [2788, 1364993207509], "32": [2872, 1425211113524], "33": [2850, 1414846408598], "34": [2788, 1415993667988], "35": [2850, 1425212537804], "36": [2792, 1391710584407], "37": [2852, 1445853994654], "38": [2842, 1423027245603], "39": [2793, 1419085201768], "4": [2782, 1368997737937], "40": [2867, 1443897645215], "41": [2775, 1393106917923], "42": [2869, 1437100248350], "43": [2828, 1410789080068], "44": [2750, 1378145443354], "45": [2853, 1425746575071], "46": [2778, 1417028966953], "47": [2808, 1393717398006], "48": [2864, 1463154219882], "49": [2803, 1387937678509], "5": [2813, 1420766352596], "50": [2876, 1429901577171], "51": [2853, 1452251453490], "52": [2944, 1467598710245], "53": [2697, 1324263017787], "54": [2890, 1482472700067], "55": [2824, 1432275560108], "56": [2739, 1359681321786], "57": [2793, 1414922182554], "58": [2801, 1404017269036], "59": [2743, 1382504696772], "6": [2798, 1408544257373], "60": [2856, 1442600106212], "61": [2875, 1430508344839], "62": [2823, 1416491695660], "63": [2851, 1402269436830], "7": [2835, 1424914851127], "8": [2857, 1418380831168], "9": [2873, 1440175789572]}, "rows": 181071, "seconds": 2.982, "table": "thelook_ecommerce.order_items"}, "event": "copy", "hash": "9529bb083c773716489e6cbb7a624d52884ae295db7b926cd3041064841d0acb", "prev": "0f05eff4422768ee89bea3349dbff12eb8ddd5838edf215fb2b6018645ab809d", "seq": 5, "ts": "2026-10-13T04:08:09+00:00"}
7
+ {"data": {"bytes": 9185405, "error": null, "fingerprint": {"0": [2010, 989396714684], "1": [1884, 934181768204], "10": [1949, 992058857656], "11": [1863, 923801980080], "12": [1913, 979373770650], "13": [1990, 999006578047], "14": [1998, 989848753734], "15": [1963, 1001746526749], "16": [1955, 985368645084], "17": [1886, 954542979595], "18": [1928, 979895740832], "19": [1993, 1013633923563], "2": [1981, 981156441061], "20": [1917, 940177352588], "21": [1945, 984530879694], "22": [1922, 953203811366], "23": [1968, 994366410994], "24": [1949, 986635495857], "25": [1943, 981705936002], "26": [2049, 1028174652619], "27": [1949, 980925067951], "28": [1841, 928165946346], "29": [1935, 965672046929], "3": [2033, 990801655166], "30": [1923, 961483715574], "31": [1979, 989399697246], "32": [2012, 1000296466103], "33": [1899, 936152539917], "34": [1933, 956354170900], "35": [2026, 1004657884979], "36": [1970, 991530848553], "37": [1960, 961724580122], "38": [1954, 968254020917], "39": [2004, 1007822884440], "4": [1975, 966602519497], "40": [1947, 968315129251], "41": [2016, 992217034675], "42": [1832, 901568845567], "43": [1900, 937777783708], "44": [1963, 979436899409], "45": [1925, 961116257383], "46": [1983, 996233967326], "47": [1971, 991250489572], "48": [1967, 1009731043389], "49": [1839, 914147279652], "5": [1938, 976460319413], "50": [1949, 965657420302], "51": [1924, 967651381166], "52": [1985, 987234944569], "53": [1967, 992971290259], "54": [1898, 950754676227], "55": [1961, 959348119594], "56": [1924, 970675568449], "57": [2021, 984630790465], "58": [1970, 971561708143], "59": [1967, 974045666038], "6": [1949, 991765022236], "60": [1924, 973299646788], "61": [2013, 1029231342547], "62": [1984, 1002578706226], "63": [1934, 991090048608], "7": [1942, 974568754449], "8": [2013, 1027951285076], "9": [1942, 962939131859]}, "rows": 124947, "seconds": 3.28, "table": "thelook_ecommerce.orders"}, "event": "copy", "hash": "f5256ce8ff7077fb1650a31b36a45558e72e196f52e3dbd21972a514637a0754", "prev": "9529bb083c773716489e6cbb7a624d52884ae295db7b926cd3041064841d0acb", "seq": 6, "ts": "2026-10-13T04:08:12+00:00"}
8
+ {"data": {"bytes": 4578451, "error": null, "fingerprint": {"0": [419, 205909067119], "1": [462, 237619609550], "10": [459, 225044160250], "11": [441, 224621994934], "12": [480, 236344921545], "13": [457, 235956964449], "14": [479, 243011500142], "15": [464, 233662082120], "16": [461, 236904189263], "17": [440, 208452958693], "18": [478, 247279700324], "19": [474, 241400071125], "2": [471, 234154468158], "20": [436, 220575498511], "21": [446, 228401205190], "22": [467, 229075481635], "23": [465, 232354683194], "24": [454, 218413785390], "25": [485, 251595381519], "26": [468, 231630808691], "27": [463, 221972267018], "28": [472, 223633062185], "29": [424, 208913817484], "3": [450, 222504922993], "30": [484, 238415110254], "31": [447, 220129487852], "32": [439, 212574690857], "33": [421, 211134386301], "34": [464, 231483913593], "35": [443, 224219667990], "36": [458, 238889661813], "37": [440, 225286069541], "38": [466, 224004628969], "39": [425, 214121725016], "4": [445, 225416794492], "40": [490, 244800953229], "41": [434, 217581991918], "42": [448, 224051683996], "43": [502, 241562952674], "44": [445, 223615901530], "45": [424, 204058864553], "46": [498, 257506801916], "47": [443, 230310055078], "48": [448, 208067977541], "49": [480, 243687591235], "5": [425, 205116550644], "50": [443, 208423825354], "51": [465, 231292376201], "52": [444, 218230398994], "53": [449, 222551182429], "54": [459, 231285207240], "55": [405, 214474259060], "56": [446, 225576214511], "57": [459, 230775907541], "58": [479, 238507366115], "59": [451, 221862424603], "6": [479, 246416432616], "60": [441, 226721077606], "61": [480, 244261326831], "62": [482, 224351792876], "63": [455, 230759974528], "7": [438, 221086921956], "8": [448, 228865177193], "9": [413, 203350503977]}, "rows": 29120, "seconds": 2.869, "table": "thelook_ecommerce.products"}, "event": "copy", "hash": "7d50cb3abb5a3422e12e47397e2a0502f83a98a668ab3825c4b723f1198621fb", "prev": "f5256ce8ff7077fb1650a31b36a45558e72e196f52e3dbd21972a514637a0754", "seq": 7, "ts": "2026-10-13T04:08:15+00:00"}
9
+ {"data": {"bytes": 21257803, "error": null, "fingerprint": {"0": [1562, 794489758392], "1": [1582, 799257588269], "10": [1521, 772652079749], "11": [1570, 783306092138], "12": [1497, 759329676451], "13": [1553, 776573871363], "14": [1547, 780185684994], "15": [1574, 788547459810], "16": [1578, 800706400561], "17": [1533, 763978392387], "18": [1584, 789514964496], "19": [1550, 773007769558], "2": [1549, 762925848130], "20": [1566, 762108878423], "21": [1608, 816881366011], "22": [1590, 782115812786], "23": [1563, 783516561272], "24": [1540, 791666128970], "25": [1571, 794879653376], "26": [1537, 752772976903], "27": [1571, 767313125461], "28": [1582, 793434300169], "29": [1581, 801770458580], "3": [1557, 780788528639], "30": [1620, 796829069878], "31": [1572, 801689551994], "32": [1578, 803195425741], "33": [1512, 764163906995], "34": [1562, 775700295406], "35": [1501, 756673971000], "36": [1622, 816099183902], "37": [1607, 796773636826], "38": [1609, 815359507369], "39": [1491, 752032083739], "4": [1666, 828821242551], "40": [1533, 756849423129], "41": [1577, 767269874584], "42": [1541, 778800697065], "43": [1576, 767246775475], "44": [1499, 738967600425], "45": [1553, 791639675125], "46": [1603, 794513076977], "47": [1611, 780012846003], "48": [1586, 775395099191], "49": [1572, 788056705887], "5": [1509, 740853231455], "50": [1596, 810503424300], "51": [1635, 810554400691], "52": [1574, 780456248302], "53": [1480, 740670056222], "54": [1607, 821527850254], "55": [1547, 781774670439], "56": [1515, 757353205349], "57": [1554, 788695754621], "58": [1511, 757481207991], "59": [1579, 783371568126], "6": [1594, 788675207540], "60": [1550, 776729225133], "61": [1628, 821430903787], "62": [1477, 753146536921], "63": [1520, 765186651260], "7": [1536, 763667104617], "8": [1602, 816475769603], "9": [1529, 779979613179]}, "rows": 100000, "seconds": 3.352, "table": "thelook_ecommerce.users"}, "event": "copy", "hash": "6870ce5cd725c8c92cdf942524c514f2151ec63a0221decb4a62b1dbb71e4e55", "prev": "7d50cb3abb5a3422e12e47397e2a0502f83a98a668ab3825c4b723f1198621fb", "seq": 8, "ts": "2026-10-13T04:08:19+00:00"}
10
+ {"data": {"bad_buckets": [], "fingerprint_ok": true, "ok": true, "rows_source": 10, "rows_target": 10, "schema_ok": true, "stats_diffs": [], "stats_ok": true, "table": "thelook_ecommerce.distribution_centers"}, "event": "table_check", "hash": "a05e6fc115ff3bd890e4d2a768194f85bb8fe375c8a840f01fe41a693471afd4", "prev": "6870ce5cd725c8c92cdf942524c514f2151ec63a0221decb4a62b1dbb71e4e55", "seq": 9, "ts": "2026-10-13T04:08:21+00:00"}
11
+ {"data": {"bad_buckets": [], "fingerprint_ok": true, "ok": true, "rows_source": 2423210, "rows_target": 2423210, "schema_ok": true, "stats_diffs": [], "stats_ok": true, "table": "thelook_ecommerce.events"}, "event": "table_check", "hash": "2112a0b511e7cf8c78edd1ec5e71b62e266f07fbe565e64373d45d4ca241d9f7", "prev": "a05e6fc115ff3bd890e4d2a768194f85bb8fe375c8a840f01fe41a693471afd4", "seq": 10, "ts": "2026-10-13T04:08:24+00:00"}
12
+ {"data": {"bad_buckets": [], "fingerprint_ok": true, "ok": true, "rows_source": 488835, "rows_target": 488835, "schema_ok": true, "stats_diffs": [], "stats_ok": true, "table": "thelook_ecommerce.inventory_items"}, "event": "table_check", "hash": "4bea30c62d2065b6f2dd8bba75fc06eaa1597d1b8484f708c10c1d5f2fbff3b6", "prev": "2112a0b511e7cf8c78edd1ec5e71b62e266f07fbe565e64373d45d4ca241d9f7", "seq": 11, "ts": "2026-10-13T04:08:26+00:00"}
13
+ {"data": {"bad_buckets": [], "fingerprint_ok": true, "ok": true, "rows_source": 181071, "rows_target": 181071, "schema_ok": true, "stats_diffs": [], "stats_ok": true, "table": "thelook_ecommerce.order_items"}, "event": "table_check", "hash": "058ff05bd88de67c439a57fc6fad6b5bf33260061997e37df06e18ee95e33cbf", "prev": "4bea30c62d2065b6f2dd8bba75fc06eaa1597d1b8484f708c10c1d5f2fbff3b6", "seq": 12, "ts": "2026-10-13T04:08:29+00:00"}
14
+ {"data": {"bad_buckets": [], "fingerprint_ok": true, "ok": true, "rows_source": 124947, "rows_target": 124947, "schema_ok": true, "stats_diffs": [], "stats_ok": true, "table": "thelook_ecommerce.orders"}, "event": "table_check", "hash": "7ba0990b7517fcf9b2dde6c5f05455fd2a0ad59f74475990b2f51d35076b0e88", "prev": "058ff05bd88de67c439a57fc6fad6b5bf33260061997e37df06e18ee95e33cbf", "seq": 13, "ts": "2026-10-13T04:08:32+00:00"}
15
+ {"data": {"bad_buckets": [], "fingerprint_ok": true, "ok": true, "rows_source": 29120, "rows_target": 29120, "schema_ok": true, "stats_diffs": [], "stats_ok": true, "table": "thelook_ecommerce.products"}, "event": "table_check", "hash": "c0a63cf5a0e7f754601ee8df4fb9f44b191367abe48d823d59bffbedf6874883", "prev": "7ba0990b7517fcf9b2dde6c5f05455fd2a0ad59f74475990b2f51d35076b0e88", "seq": 14, "ts": "2026-10-13T04:08:35+00:00"}
16
+ {"data": {"bad_buckets": [], "fingerprint_ok": true, "ok": true, "rows_source": 100000, "rows_target": 100000, "schema_ok": true, "stats_diffs": [], "stats_ok": true, "table": "thelook_ecommerce.users"}, "event": "table_check", "hash": "f3fd9997e71d02e5a97dc82559fd6c83e2889c0d3ec22c11decff78fd059b7eb", "prev": "c0a63cf5a0e7f754601ee8df4fb9f44b191367abe48d823d59bffbedf6874883", "seq": 15, "ts": "2026-10-13T04:08:37+00:00"}
17
+ {"data": {"detail": "", "order_differs": false, "rows_source": 5, "rows_target": 5, "seconds_source": 2.4446649169985903, "seconds_target": 0.009682167001301423, "sql": "select status, count(*) as n from `bigquery-public-data.thelook_ecommerce.orders` group by status order by n desc", "status": "match", "translated": "SELECT status, COUNT(*) AS n FROM \"thelook_ecommerce\".\"orders\" GROUP BY status ORDER BY n DESC"}, "event": "query", "hash": "c40b0f526a2ddf6ae766232c7606aba5f2ca67927651fb78b9ba7dd72fc0eb6b", "prev": "f3fd9997e71d02e5a97dc82559fd6c83e2889c0d3ec22c11decff78fd059b7eb", "seq": 16, "ts": "2026-10-13T04:08:48+00:00"}
18
+ {"data": {"detail": "", "order_differs": false, "rows_source": 15, "rows_target": 15, "seconds_source": 2.559273833001498, "seconds_target": 0.023184874997241423, "sql": "select p.category, round(sum(oi.sale_price), 2) as revenue, count(*) as items\nfrom `bigquery-public-data.thelook_ecommerce.order_items` oi\njoin `bigquery-public-data.thelook_ecommerce.products` p on p.id = oi.product_id\ngroup by p.category order by revenue desc limit 15", "status": "match", "translated": "SELECT p.category, ROUND(SUM(oi.sale_price), 2) AS revenue, COUNT(*) AS items FROM \"thelook_ecommerce\".\"order_items\" AS oi JOIN \"thelook_ecommerce\".\"products\" AS p ON p.id = oi.product_id GROUP BY p.category ORDER BY revenue DESC LIMIT 15"}, "event": "query", "hash": "955cdee2894a359b175791726deb0acd6346364ae46371c8a963a7a1600f89b6", "prev": "c40b0f526a2ddf6ae766232c7606aba5f2ca67927651fb78b9ba7dd72fc0eb6b", "seq": 17, "ts": "2026-10-13T04:08:48+00:00"}
19
+ {"data": {"detail": "ligne tri\u00e9e 0, colonne 0 : datetime.date(2019, 1, 1) / datetime.datetime(2019, 1, 1, 0, 0)", "order_differs": false, "rows_source": 94, "rows_target": 94, "seconds_source": 2.814255332996254, "seconds_target": 0.03997966699535027, "sql": "select date_trunc(date(created_at), month) as m, count(*) as orders\nfrom `bigquery-public-data.thelook_ecommerce.orders` group by m order by m", "status": "mismatch", "translated": "SELECT DATE_TRUNC('MONTH', CAST(created_at AS DATE)) AS m, COUNT(*) AS orders FROM \"thelook_ecommerce\".\"orders\" GROUP BY m ORDER BY m NULLS FIRST"}, "event": "query", "hash": "baa0ea91112141d4e93a3151799066183a6ad1780212c9307b0b496552cd3da7", "prev": "955cdee2894a359b175791726deb0acd6346364ae46371c8a963a7a1600f89b6", "seq": 18, "ts": "2026-10-13T04:08:48+00:00"}
20
+ {"data": {"detail": "", "order_differs": true, "rows_source": 16, "rows_target": 16, "seconds_source": 2.4339297499973327, "seconds_target": 0.006564708004589193, "sql": "select country, count(*) as users, avg(age) as avg_age\nfrom `bigquery-public-data.thelook_ecommerce.users` group by country order by users desc", "status": "match", "translated": "SELECT country, COUNT(*) AS users, AVG(age) AS avg_age FROM \"thelook_ecommerce\".\"users\" GROUP BY country ORDER BY users DESC"}, "event": "query", "hash": "05c8f4b2c58a83c94d5404e56bc4545a03c52fbe967aad91daf8172e071171ff", "prev": "baa0ea91112141d4e93a3151799066183a6ad1780212c9307b0b496552cd3da7", "seq": 19, "ts": "2026-10-13T04:08:48+00:00"}
21
+ {"data": {"cost_usd_est": null, "duration_s": 74.0, "lossy_conversions": 0, "parity": "\u00e9carts", "queries_match": 3, "queries_mismatch": 1, "queries_order_differs": 1, "queries_total": 4, "queries_untranslatable": 0, "rto": {"basis": "d\u00e9bit mesur\u00e9 \u00b1, hors validation humaine et reprise des applications", "seconds": [16.2, 34.8]}, "tables_error": [], "tables_ok": 7, "tables_total": 7, "throughput_mb_s": 22.0, "warehouse_credits_used_est": null}, "event": "summary", "hash": "3d8f1e1d805f8ee63d191bb453fd295bb064caef4b056383f14946cf6afb8d7e", "prev": "05c8f4b2c58a83c94d5404e56bc4545a03c52fbe967aad91daf8172e071171ff", "seq": 20, "ts": "2026-10-13T04:08:48+00:00"}