judu/ex-egopublic Fork
⑂ bb2bb6b
Commits
⬇ Clone ▾
git clone https://git.rickub.com/judu/ex-ego.git
git clone ssh://git@rickub.com/judu/ex-ego.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Download ZIP

docs(site): page Démarrage, traduction pt-br et captures régénéréesUnverified

La doc passe aux quatre langues de l'application : contenu pt-br (sans
captures à lui, repli sur l'anglais), shots-seed.sh pour préparer une base de
dev locale avant shots.mjs, captures fr/en/de refaites. La page Démarrage est
réécrite en français et retraduite en en/de/pt-br.
Julien Durillon committed 2026-08-19T18:39:40+02:00 Browse files
bb2bb6b parent: 273717f
modified docs/site-documentation/README.md +40 -15
@@ -1,18 +1,22 @@
11 # Site de documentation d'Ex Ego
22
33 Site statique **Zola** (≥ 0.23, qui a remplacé les shortcodes par les
4-composants Tera), trilingue français / anglais / allemand comme l'application,
5-publié sur `https://ex-ego.durillon.family/documentation`.
4+composants Tera), dans les quatre langues de l'application (français, anglais,
5+allemand, portugais du Brésil), publié sur
6+`https://ex-ego.durillon.family/documentation`.
67
78 ```
89 config.toml base_url avec le sous-chemin, langues, chaînes du gabarit
9-content/ une page par écran (ecrans/) + trois situations (cas/)
10- fr = fichier nu, en/de = suffixe .en.md / .de.md
10+content/ une page « Démarrage » à la racine + une page par écran
11+ (ecrans/) ; fr = fichier nu, les autres = suffixe
12+ .en.md / .de.md / .pt-br.md
1113 templates/ base + index/section/page + components.html
1214 static/doc.css tokens « Organic » repris de assets/style.css
1315 static/fonts/ Caprasimo + Figtree sous-ensemblés en woff2 (OFL)
14-static/img/<langue>/ captures, en JPEG XL et en PNG
15-shots.mjs produit les captures (3 langues)
16+static/img/<langue>/ captures, en JPEG XL et en PNG (dossier = code de langue
17+ de l'app, d'où pt-br ; pas encore peuplé pour celle-ci)
18+shots-seed.sh prépare une base de dev pour shots.mjs
19+shots.mjs produit les captures (4 langues)
1620 img.sh encode les .jxl à côté des .png
1721 ```
1822
@@ -25,33 +29,54 @@ mise exec zola@latest -- zola serve --port 1112 # aperçu local
2529 mise exec zola@latest -- zola check # liens internes et externes
2630 ```
2731
32+Le portugais n'a pas encore ses captures : les composants d'image retombent
33+sur le dossier `en` quand le PNG manque dans la langue de la page (repli écrit
34+en dur dans `templates/components.html`, un composant ne voyant ni `config` ni
35+le contexte de l'appelant). Une passe de `shots.mjs` en `pt-br` suffit à le
36+faire disparaître, et l'avertissement posé sur la page d'accueil portugaise
37+sera alors à retirer.
38+
2839 `zola serve` réécrit `base_url` tout seul : ne pas passer `--base-url`, il
2940 recolle le port et fabrique une URL invalide.
3041
3142 ## Refaire les captures
3243
3344 Les images sont versionnées : on ne les régénère que lorsque l'interface
34-bouge. Il faut un serveur exego branché sur la base **DEV** (jamais la prod),
35-seedé par `docs/slides/demo/seed.mjs`, et les dépendances node d'`a11y/`.
45+bouge. Il faut une base de développement (jamais la prod), un serveur exego
46+branché dessus, et les dépendances node d'`a11y/`.
3647
3748 ```bash
38-# 1. base DEV seedée (le seed pose les catégories, les temps, les tâches,
39-# le groupe « Temps avec Alix » et la catégorie archivée)
40-node ../slides/demo/seed.mjs | psql -X "$DATABASE_URL"
49+# 1. la base : table rase, puis les trois équipes et les trois comptes créés
50+# par le binaire (c'est lui qui hash les mots de passe), puis les
51+# catégories, deux mois de temps, les tâches et l'invitation en attente.
52+# DATABASE_URL par défaut : postgresql://exego:exego@localhost:5432/exego
53+./shots-seed.sh
4154
4255 # 2. serveur local sur cette base, port 8090
56+DATABASE_URL='postgresql://exego:exego@localhost:5432/exego' \
57+BISCUIT_PRIVATE_KEY=$(cargo run -- keygen | grep -o '[0-9a-f]\{64\}') \
58+PORT=8090 cargo run -- serve
4359
4460 # 3. captures : login, bascule de langue, 19 écrans et 10 extraits par langue
45-CHROME=/usr/host/bin/google-chrome-stable TT_USER=camille TT_PASS=… node shots.mjs
61+# (fr, en, de, pt-br)
62+CHROME=/usr/host/bin/google-chrome-stable TT_USER=camille TT_PASS=exego-demo node shots.mjs
4663
4764 # 4. JPEG XL à côté des PNG
4865 ./img.sh
4966 ```
5067
51-Le script bascule la langue du compte de démonstration entre chaque passe et
52-le remet en français à la fin. Les pages anonymes (connexion, erreurs) sont
68+`shots-seed.sh` efface tout ce que contient la base avant d'écrire : elle lui
69+appartient. Le tirage des temps est un hachage et non un PRNG, donc deux
70+exécutions le même jour donnent exactement la même base. Le script commence
71+par retirer `POSTGRESQL_ADDON_URI` de l'environnement : le binaire la lit
72+AVANT `DATABASE_URL`, et une variable héritée du shell suffirait à envoyer les
73+créations de comptes sur une base Clever pendant que psql travaille sur la
74+base locale.
75+
76+`shots.mjs` bascule la langue du compte de démonstration entre chaque passe
77+et le remet en français à la fin. Les pages anonymes (connexion, erreurs) sont
5378 toujours rendues dans la langue par défaut de l'instance : elles sont
54-capturées une fois et recopiées dans les trois dossiers, ce que le texte des
79+capturées une fois et recopiées dans les autres dossiers, ce que le texte des
5580 pages concernées mentionne explicitement.
5681
5782 ## Écrire
@@ -1,18 +1,22 @@
1 # Site de documentation d'Ex Ego1 # Site de documentation d'Ex Ego
2 2
3 Site statique **Zola** (≥ 0.23, qui a remplacé les shortcodes par les3 Site statique **Zola** (≥ 0.23, qui a remplacé les shortcodes par les
4-composants Tera), trilingue français / anglais / allemand comme l'application,4+composants Tera), dans les quatre langues de l'application (français, anglais,
5-publié sur `https://ex-ego.durillon.family/documentation`.5+allemand, portugais du Brésil), publié sur
6+`https://ex-ego.durillon.family/documentation`.
6 7
7 ```8 ```
8 config.toml base_url avec le sous-chemin, langues, chaînes du gabarit9 config.toml base_url avec le sous-chemin, langues, chaînes du gabarit
9-content/ une page par écran (ecrans/) + trois situations (cas/)10+content/ une page « Démarrage » à la racine + une page par écran
10- fr = fichier nu, en/de = suffixe .en.md / .de.md11+ (ecrans/) ; fr = fichier nu, les autres = suffixe
12+ .en.md / .de.md / .pt-br.md
11 templates/ base + index/section/page + components.html13 templates/ base + index/section/page + components.html
12 static/doc.css tokens « Organic » repris de assets/style.css14 static/doc.css tokens « Organic » repris de assets/style.css
13 static/fonts/ Caprasimo + Figtree sous-ensemblés en woff2 (OFL)15 static/fonts/ Caprasimo + Figtree sous-ensemblés en woff2 (OFL)
14-static/img/<langue>/ captures, en JPEG XL et en PNG16+static/img/<langue>/ captures, en JPEG XL et en PNG (dossier = code de langue
15-shots.mjs produit les captures (3 langues)17+ de l'app, d'où pt-br ; pas encore peuplé pour celle-ci)
18+shots-seed.sh prépare une base de dev pour shots.mjs
19+shots.mjs produit les captures (4 langues)
16 img.sh encode les .jxl à côté des .png20 img.sh encode les .jxl à côté des .png
17 ```21 ```
18 22
@@ -25,33 +29,54 @@ mise exec zola@latest -- zola serve --port 1112 # aperçu local
25 mise exec zola@latest -- zola check # liens internes et externes29 mise exec zola@latest -- zola check # liens internes et externes
26 ```30 ```
27 31
32+Le portugais n'a pas encore ses captures : les composants d'image retombent
33+sur le dossier `en` quand le PNG manque dans la langue de la page (repli écrit
34+en dur dans `templates/components.html`, un composant ne voyant ni `config` ni
35+le contexte de l'appelant). Une passe de `shots.mjs` en `pt-br` suffit à le
36+faire disparaître, et l'avertissement posé sur la page d'accueil portugaise
37+sera alors à retirer.
38+
28 `zola serve` réécrit `base_url` tout seul : ne pas passer `--base-url`, il39 `zola serve` réécrit `base_url` tout seul : ne pas passer `--base-url`, il
29 recolle le port et fabrique une URL invalide.40 recolle le port et fabrique une URL invalide.
30 41
31 ## Refaire les captures42 ## Refaire les captures
32 43
33 Les images sont versionnées : on ne les régénère que lorsque l'interface44 Les images sont versionnées : on ne les régénère que lorsque l'interface
34-bouge. Il faut un serveur exego branché sur la base **DEV** (jamais la prod),45+bouge. Il faut une base de développement (jamais la prod), un serveur exego
35-seedé par `docs/slides/demo/seed.mjs`, et les dépendances node d'`a11y/`.46+branché dessus, et les dépendances node d'`a11y/`.
36 47
37 ```bash48 ```bash
38-# 1. base DEV seedée (le seed pose les catégories, les temps, les tâches,49+# 1. la base : table rase, puis les trois équipes et les trois comptes créés
39-# le groupe « Temps avec Alix » et la catégorie archivée)50+# par le binaire (c'est lui qui hash les mots de passe), puis les
40-node ../slides/demo/seed.mjs | psql -X "$DATABASE_URL"51+# catégories, deux mois de temps, les tâches et l'invitation en attente.
52+# DATABASE_URL par défaut : postgresql://exego:exego@localhost:5432/exego
53+./shots-seed.sh
41 54
42 # 2. serveur local sur cette base, port 809055 # 2. serveur local sur cette base, port 8090
56+DATABASE_URL='postgresql://exego:exego@localhost:5432/exego' \
57+BISCUIT_PRIVATE_KEY=$(cargo run -- keygen | grep -o '[0-9a-f]\{64\}') \
58+PORT=8090 cargo run -- serve
43 59
44 # 3. captures : login, bascule de langue, 19 écrans et 10 extraits par langue60 # 3. captures : login, bascule de langue, 19 écrans et 10 extraits par langue
45-CHROME=/usr/host/bin/google-chrome-stable TT_USER=camille TT_PASS=… node shots.mjs61+# (fr, en, de, pt-br)
62+CHROME=/usr/host/bin/google-chrome-stable TT_USER=camille TT_PASS=exego-demo node shots.mjs
46 63
47 # 4. JPEG XL à côté des PNG64 # 4. JPEG XL à côté des PNG
48 ./img.sh65 ./img.sh
49 ```66 ```
50 67
51-Le script bascule la langue du compte de démonstration entre chaque passe et68+`shots-seed.sh` efface tout ce que contient la base avant d'écrire : elle lui
52-le remet en français à la fin. Les pages anonymes (connexion, erreurs) sont69+appartient. Le tirage des temps est un hachage et non un PRNG, donc deux
70+exécutions le même jour donnent exactement la même base. Le script commence
71+par retirer `POSTGRESQL_ADDON_URI` de l'environnement : le binaire la lit
72+AVANT `DATABASE_URL`, et une variable héritée du shell suffirait à envoyer les
73+créations de comptes sur une base Clever pendant que psql travaille sur la
74+base locale.
75+
76+`shots.mjs` bascule la langue du compte de démonstration entre chaque passe
77+et le remet en français à la fin. Les pages anonymes (connexion, erreurs) sont
53 toujours rendues dans la langue par défaut de l'instance : elles sont78 toujours rendues dans la langue par défaut de l'instance : elles sont
54-capturées une fois et recopiées dans les trois dossiers, ce que le texte des79+capturées une fois et recopiées dans les autres dossiers, ce que le texte des
55 pages concernées mentionne explicitement.80 pages concernées mentionne explicitement.
56 81
57 ## Écrire82 ## Écrire
modified docs/site-documentation/config.toml +26 -1
@@ -24,7 +24,7 @@ lazy_async_image = true
2424 [extra]
2525 app_url = "https://ex-ego.durillon.family/"
2626 repo_url = "https://github.com/judu/ex-ego"
27-langs = ["fr", "en", "de"]
27+langs = ["fr", "en", "de", "pt-br"]
2828
2929 # Chaîne d'interface du gabarit (le contenu, lui, vit dans content/).
3030 [translations]
@@ -33,6 +33,7 @@ languages = "Langue"
3333 lang_fr = "Français"
3434 lang_en = "English"
3535 lang_de = "Deutsch"
36+lang_pt-br = "Português"
3637 sections = "Sommaire du site"
3738 summary = "Sommaire"
3839 home = "Accueil"
@@ -54,6 +55,7 @@ languages = "Language"
5455 lang_fr = "Français"
5556 lang_en = "English"
5657 lang_de = "Deutsch"
58+lang_pt-br = "Português"
5759 sections = "Site contents"
5860 summary = "Contents"
5961 home = "Home"
@@ -75,6 +77,7 @@ languages = "Sprache"
7577 lang_fr = "Français"
7678 lang_en = "English"
7779 lang_de = "Deutsch"
80+lang_pt-br = "Português"
7881 sections = "Inhalt der Website"
7982 summary = "Inhalt"
8083 home = "Startseite"
@@ -83,3 +86,25 @@ prev = "Zurück"
8386 next = "Weiter"
8487 footer = "Ex Ego ist freie Software unter der Unlicense."
8588 open_app = "Zur Anwendung"
89+
90+[languages.pt-br]
91+title = "Documentação do Ex Ego"
92+description = "Contar o tempo que a gente gasta, em grupo, sem cobrar um do outro."
93+generate_feeds = false
94+build_search_index = false
95+
96+[languages.pt-br.translations]
97+skip = "Ir para o conteúdo"
98+languages = "Idioma"
99+lang_fr = "Français"
100+lang_en = "English"
101+lang_de = "Deutsch"
102+lang_pt-br = "Português"
103+sections = "Conteúdo do site"
104+summary = "Conteúdo"
105+home = "Início"
106+pager = "Página anterior e próxima"
107+prev = "Anterior"
108+next = "Próxima"
109+footer = "O Ex Ego é software livre, sob a licença Unlicense."
110+open_app = "Abrir o aplicativo"
@@ -24,7 +24,7 @@ lazy_async_image = true
24 [extra]24 [extra]
25 app_url = "https://ex-ego.durillon.family/"25 app_url = "https://ex-ego.durillon.family/"
26 repo_url = "https://github.com/judu/ex-ego"26 repo_url = "https://github.com/judu/ex-ego"
27-langs = ["fr", "en", "de"]27+langs = ["fr", "en", "de", "pt-br"]
28 28
29 # Chaîne d'interface du gabarit (le contenu, lui, vit dans content/).29 # Chaîne d'interface du gabarit (le contenu, lui, vit dans content/).
30 [translations]30 [translations]
@@ -33,6 +33,7 @@ languages = "Langue"
33 lang_fr = "Français"33 lang_fr = "Français"
34 lang_en = "English"34 lang_en = "English"
35 lang_de = "Deutsch"35 lang_de = "Deutsch"
36+lang_pt-br = "Português"
36 sections = "Sommaire du site"37 sections = "Sommaire du site"
37 summary = "Sommaire"38 summary = "Sommaire"
38 home = "Accueil"39 home = "Accueil"
@@ -54,6 +55,7 @@ languages = "Language"
54 lang_fr = "Français"55 lang_fr = "Français"
55 lang_en = "English"56 lang_en = "English"
56 lang_de = "Deutsch"57 lang_de = "Deutsch"
58+lang_pt-br = "Português"
57 sections = "Site contents"59 sections = "Site contents"
58 summary = "Contents"60 summary = "Contents"
59 home = "Home"61 home = "Home"
@@ -75,6 +77,7 @@ languages = "Sprache"
75 lang_fr = "Français"77 lang_fr = "Français"
76 lang_en = "English"78 lang_en = "English"
77 lang_de = "Deutsch"79 lang_de = "Deutsch"
80+lang_pt-br = "Português"
78 sections = "Inhalt der Website"81 sections = "Inhalt der Website"
79 summary = "Inhalt"82 summary = "Inhalt"
80 home = "Startseite"83 home = "Startseite"
@@ -83,3 +86,25 @@ prev = "Zurück"
83 next = "Weiter"86 next = "Weiter"
84 footer = "Ex Ego ist freie Software unter der Unlicense."87 footer = "Ex Ego ist freie Software unter der Unlicense."
85 open_app = "Zur Anwendung"88 open_app = "Zur Anwendung"
89+
90+[languages.pt-br]
91+title = "Documentação do Ex Ego"
92+description = "Contar o tempo que a gente gasta, em grupo, sem cobrar um do outro."
93+generate_feeds = false
94+build_search_index = false
95+
96+[languages.pt-br.translations]
97+skip = "Ir para o conteúdo"
98+languages = "Idioma"
99+lang_fr = "Français"
100+lang_en = "English"
101+lang_de = "Deutsch"
102+lang_pt-br = "Português"
103+sections = "Conteúdo do site"
104+summary = "Conteúdo"
105+home = "Início"
106+pager = "Página anterior e próxima"
107+prev = "Anterior"
108+next = "Próxima"
109+footer = "O Ex Ego é software livre, sob a licença Unlicense."
110+open_app = "Abrir o aplicativo"
added docs/site-documentation/content/_index.pt-br.md +41 -0
new file mode 100644
@@ -0,0 +1,41 @@
1++++
2+title = "Ex Ego"
3+description = "Contar o tempo que a gente gasta, em grupo, sem cobrar um do outro."
4+sort_by = "weight"
5+template = "index.html"
6++++
7+
8+O Ex Ego é um pequeno aplicativo web onde você anota o tempo que gasta nas
9+coisas, categoria por categoria, e depois olha o que isso dá na escala de um
10+grupo. Uma casa, uma associação, um condomínio: qualquer lugar onde várias
11+pessoas fazem coisas juntas sem que ninguém mande nas outras.
12+
13+Não existe papel de administrador. Todos os membros de uma equipe têm
14+exatamente os mesmos poderes: renomear a equipe, convidar alguém, criar uma
15+categoria, corrigir uma tarefa. A única coisa que é só sua são os seus
16+registros de tempo, que mais ninguém pode alterar.
17+
18+As capturas de tela desta documentação ainda estão em inglês. Os textos abaixo
19+usam os termos do aplicativo em português, que é o que você vai ver na tela.
20+
21+## Cinco palavras para conhecer
22+
23+Uma **equipe** reúne pessoas e tudo o que elas contam juntas. Você pode fazer
24+parte de várias equipes e trocar de uma para a outra: a interface inteira
25+acompanha a equipe ativa, inclusive as cores.
26+
27+Uma **categoria** é aquilo em que se conta tempo, por exemplo Cozinha, Compras
28+ou Reuniões. Ela pertence à equipe, não a você, e qualquer pessoa pode criar
29+uma. Quando uma categoria não serve mais, a gente arquiva: ela sai das listas
30+de registro, mas os tempos já anotados continuam nas estatísticas.
31+
32+Um **tempo** é uma duração em minutos, presa a uma categoria e a uma data. Não
33+tem hora de início nem de fim, e não tem teto. Um tempo é seu: só você pode
34+corrigir ou excluir.
35+
36+Um **grupo** separa certas categorias. O tempo delas sai das estatísticas da
37+equipe e aparece num painel só dele. Serve para um assunto que você quer
38+acompanhar sem que ele esmague todo o resto.
39+
40+Uma **tarefa** é algo a fazer, com data, presa a uma categoria. Você pega, você
41+termina, e aí o aplicativo propõe reprogramá-la no ritmo que observou.
new file mode 100644
@@ -0,0 +1,41 @@
1++++
2+title = "Ex Ego"
3+description = "Contar o tempo que a gente gasta, em grupo, sem cobrar um do outro."
4+sort_by = "weight"
5+template = "index.html"
6++++
7+
8+O Ex Ego é um pequeno aplicativo web onde você anota o tempo que gasta nas
9+coisas, categoria por categoria, e depois olha o que isso dá na escala de um
10+grupo. Uma casa, uma associação, um condomínio: qualquer lugar onde várias
11+pessoas fazem coisas juntas sem que ninguém mande nas outras.
12+
13+Não existe papel de administrador. Todos os membros de uma equipe têm
14+exatamente os mesmos poderes: renomear a equipe, convidar alguém, criar uma
15+categoria, corrigir uma tarefa. A única coisa que é só sua são os seus
16+registros de tempo, que mais ninguém pode alterar.
17+
18+As capturas de tela desta documentação ainda estão em inglês. Os textos abaixo
19+usam os termos do aplicativo em português, que é o que você vai ver na tela.
20+
21+## Cinco palavras para conhecer
22+
23+Uma **equipe** reúne pessoas e tudo o que elas contam juntas. Você pode fazer
24+parte de várias equipes e trocar de uma para a outra: a interface inteira
25+acompanha a equipe ativa, inclusive as cores.
26+
27+Uma **categoria** é aquilo em que se conta tempo, por exemplo Cozinha, Compras
28+ou Reuniões. Ela pertence à equipe, não a você, e qualquer pessoa pode criar
29+uma. Quando uma categoria não serve mais, a gente arquiva: ela sai das listas
30+de registro, mas os tempos já anotados continuam nas estatísticas.
31+
32+Um **tempo** é uma duração em minutos, presa a uma categoria e a uma data. Não
33+tem hora de início nem de fim, e não tem teto. Um tempo é seu: só você pode
34+corrigir ou excluir.
35+
36+Um **grupo** separa certas categorias. O tempo delas sai das estatísticas da
37+equipe e aparece num painel só dele. Serve para um assunto que você quer
38+acompanhar sem que ele esmague todo o resto.
39+
40+Uma **tarefa** é algo a fazer, com data, presa a uma categoria. Você pega, você
41+termina, e aí o aplicativo propõe reprogramá-la no ritmo que observou.
added docs/site-documentation/content/demarrage.de.md +100 -0
new file mode 100644
@@ -0,0 +1,100 @@
1++++
2+title = "Erste Schritte"
3+description = "Die ersten Handgriffe in einem Team, das noch nichts enthält."
4+weight = 1
5++++
6+
7+Ein frisch angelegtes Team ist leer: keine Kategorie, keine Zeit, keine
8+Aufgabe. Der Hinzufügen-Reiter sagt das sofort, denn er hat nichts anzubieten,
9+solange keine Kategorie existiert. Man füllt es in der Reihenfolge dieser
10+Seite, erst die Kategorien, dann die Zeiten, bis zu dem Moment, in dem die
11+Statistik etwas zu sagen beginnt.
12+
13+Wenn du über einen Einladungslink ins Team gekommen bist, läuft es
14+wahrscheinlich schon und die Kategorien sind da: geh direkt zu [den ersten
15+Zeiten](#die-ersten-zeiten).
16+
17+## Drei oder vier Kategorien anlegen
18+
19+{{<shot name="categories" alt="Kategorien-Bildschirm: Hinweis, dass die Kategorien dem Team gehören, Eingabefeld, dann die Liste der Kategorien mit ihren Farben." lang={lang} legende="Oben ein Feld, darunter die Liste, die sich füllt." />}}
20+
21+Der Link „Kategorien verwalten“ im Hinzufügen-Reiter führt zum Anlegen.
22+
23+Keine Kategorie ist vorgegeben, das Team legt sie selbst an. Manche mögen sehr
24+genaue Kategorien, andere lieber weiter gefasste. Weitere kommen dazu, wenn der
25+Bedarf auftaucht, und was ungenutzt bleibt, wird
26+[archiviert](@/ecrans/categories.de.md), ohne die schon gezählte Zeit zu
27+verlieren.
28+
29+Die Farbe wählt man nicht: Sie ergibt sich aus der Reihenfolge, in der die
30+Kategorien angelegt wurden, und alle sehen damit dieselbe.
31+
32+## Die ersten Zeiten
33+
34+{{<shot name="ajouter-duree" alt="Schritt zwei: die gewählte Kategorie, ein Minutenzähler mit Minus und Plus, Kurzwahlen für 5, 15, 30, 45 Minuten und 1 Std., ein Datumsfeld, die Schaltfläche Zeit hinzufügen." lang={lang} legende="Die Dauer, das Datum, und es ist erfasst." />}}
35+
36+Zurück im Hinzufügen-Reiter fragt „Zeit hinzufügen“ nach der Kategorie, danach
37+nach [Dauer und Datum](@/ecrans/duree.de.md).
38+
39+„Plus“ und „Minus“ gehen in Fünf-Minuten-Schritten, die Kurzwahlen setzen eine
40+runde Dauer, und die Zahl in der Mitte tippt man direkt, wenn man sie kennt.
41+Bei der Datumswahl geht der linke Pfeil einen Tag zurück, was vor allem dem
42+Nachtragen von gestern dient.
43+
44+Jede Erfassung führt zurück zum Bildschirm „Hinzufügen“, um gleich die nächste
45+einzutragen oder eine Stoppuhr zu starten.
46+
47+## Die Stoppuhr starten
48+
49+Die andere Karte im Hinzufügen-Reiter startet [eine
50+Messung](@/ecrans/minuteur.de.md), ohne etwas zu fragen: keine Kategorie, keine
51+Notiz. Sie bleibt in ihrem Band oben auf jedem Bildschirm sichtbar, und man
52+bewegt sich weiter durch die Anwendung, während sie läuft.
53+
54+Einsortiert wird die Messung erst beim Anhalten: Man wählt die Kategorie, dann öffnet
55+sich der Schritt mit der Dauer, die gemessenen Minuten schon eingetragen und
56+weiterhin änderbar. Geschrieben wird nichts, bevor die Erfassung bestätigt ist.
57+
58+## Die Statistik nach ein paar Tagen
59+
60+{{<shot name="stats" alt="Statistik-Bildschirm: Link „Meine Einträge“, die Pillen Maison und Temps avec Alix, dann das Wochendiagramm mit einer Säule pro Tag." lang={lang} legende="Es braucht eine Woche Einträge, damit der Bildschirm so aussieht." />}}
61+
62+Am ersten Abend tragen [die sechs Diagramme](@/ecrans/stats.de.md) erst zwei
63+oder drei Segmente. Nach einer Woche wird die Verteilung sichtbar, und ein Tipp
64+auf ein Segment öffnet die Einzelheiten: wer, welche Kategorie, wie lange,
65+welcher Anteil.
66+
67+## Die anderen dazuholen
68+
69+{{<extrait name="x-invitation" alt="Einladungskarte: „noa lädt dich in das Team Copropriété ein“, mit den Schaltflächen Annehmen und Ablehnen." lang={lang} legende="Die Einladung wartet oben in den Einstellungen der eingeladenen Person." />}}
70+
71+In [den Einstellungen](@/ecrans/parametres.de.md) nimmt das Einladungsfeld den
72+Benutzernamen von jemandem, der schon ein Konto hat. Die Karte erscheint oben
73+in dessen eigenen Einstellungen, und Annehmen wechselt gleich ins Team.
74+
75+Für jemanden ohne Konto erzeugt die Schaltfläche „Link erzeugen“ einen
76+Einladungslink, eine Stunde gültig, den man verschickt, wie man mag. Er führt
77+direkt zur Anmeldung in diesem Team.
78+
79+Bei den Rechten gibt es nichts einzustellen: jedes Mitglied kann das Team
80+umbenennen, Kategorien anlegen, einladen, Aufgaben korrigieren. Nur die
81+Zeiteinträge gehören denen, die sie geschrieben haben.
82+
83+## Aufgaben
84+
85+[Aufgaben](@/ecrans/taches.de.md) zählen keine Zeit. Sie sind die einzige
86+weitere Funktion der Anwendung: eine sehr einfache geteilte Aufgabenliste, mit
87+Aktivierungsdatum und Zuweisung.
88+
89+## Die Anzeige einstellen
90+
91+Ebenfalls in den Einstellungen drei Wahlmöglichkeiten, die zum Konto gehören
92+und nicht zum Gerät: die Sprache der Oberfläche, das Aussehen zwischen Organic
93+und Hoher Kontrast, und die Form der Diagramme zwischen Spalten und Zeilen. Sie
94+folgen dem Konto von einem Telefon zum nächsten, und zwei Mitglieder desselben
95+Teams dürfen sie verschieden einstellen.
96+
97+## Derselbe Weg als Video
98+
99+Diese Schritte gibt es auch als Film, am Stück auf einem leeren Team gespielt:
100+[die Ex-Ego-Demonstration](https://files.judu.bzh/ex-ego-readme-demo.mp4).
new file mode 100644
@@ -0,0 +1,100 @@
1++++
2+title = "Erste Schritte"
3+description = "Die ersten Handgriffe in einem Team, das noch nichts enthält."
4+weight = 1
5++++
6+
7+Ein frisch angelegtes Team ist leer: keine Kategorie, keine Zeit, keine
8+Aufgabe. Der Hinzufügen-Reiter sagt das sofort, denn er hat nichts anzubieten,
9+solange keine Kategorie existiert. Man füllt es in der Reihenfolge dieser
10+Seite, erst die Kategorien, dann die Zeiten, bis zu dem Moment, in dem die
11+Statistik etwas zu sagen beginnt.
12+
13+Wenn du über einen Einladungslink ins Team gekommen bist, läuft es
14+wahrscheinlich schon und die Kategorien sind da: geh direkt zu [den ersten
15+Zeiten](#die-ersten-zeiten).
16+
17+## Drei oder vier Kategorien anlegen
18+
19+{{<shot name="categories" alt="Kategorien-Bildschirm: Hinweis, dass die Kategorien dem Team gehören, Eingabefeld, dann die Liste der Kategorien mit ihren Farben." lang={lang} legende="Oben ein Feld, darunter die Liste, die sich füllt." />}}
20+
21+Der Link „Kategorien verwalten“ im Hinzufügen-Reiter führt zum Anlegen.
22+
23+Keine Kategorie ist vorgegeben, das Team legt sie selbst an. Manche mögen sehr
24+genaue Kategorien, andere lieber weiter gefasste. Weitere kommen dazu, wenn der
25+Bedarf auftaucht, und was ungenutzt bleibt, wird
26+[archiviert](@/ecrans/categories.de.md), ohne die schon gezählte Zeit zu
27+verlieren.
28+
29+Die Farbe wählt man nicht: Sie ergibt sich aus der Reihenfolge, in der die
30+Kategorien angelegt wurden, und alle sehen damit dieselbe.
31+
32+## Die ersten Zeiten
33+
34+{{<shot name="ajouter-duree" alt="Schritt zwei: die gewählte Kategorie, ein Minutenzähler mit Minus und Plus, Kurzwahlen für 5, 15, 30, 45 Minuten und 1 Std., ein Datumsfeld, die Schaltfläche Zeit hinzufügen." lang={lang} legende="Die Dauer, das Datum, und es ist erfasst." />}}
35+
36+Zurück im Hinzufügen-Reiter fragt „Zeit hinzufügen“ nach der Kategorie, danach
37+nach [Dauer und Datum](@/ecrans/duree.de.md).
38+
39+„Plus“ und „Minus“ gehen in Fünf-Minuten-Schritten, die Kurzwahlen setzen eine
40+runde Dauer, und die Zahl in der Mitte tippt man direkt, wenn man sie kennt.
41+Bei der Datumswahl geht der linke Pfeil einen Tag zurück, was vor allem dem
42+Nachtragen von gestern dient.
43+
44+Jede Erfassung führt zurück zum Bildschirm „Hinzufügen“, um gleich die nächste
45+einzutragen oder eine Stoppuhr zu starten.
46+
47+## Die Stoppuhr starten
48+
49+Die andere Karte im Hinzufügen-Reiter startet [eine
50+Messung](@/ecrans/minuteur.de.md), ohne etwas zu fragen: keine Kategorie, keine
51+Notiz. Sie bleibt in ihrem Band oben auf jedem Bildschirm sichtbar, und man
52+bewegt sich weiter durch die Anwendung, während sie läuft.
53+
54+Einsortiert wird die Messung erst beim Anhalten: Man wählt die Kategorie, dann öffnet
55+sich der Schritt mit der Dauer, die gemessenen Minuten schon eingetragen und
56+weiterhin änderbar. Geschrieben wird nichts, bevor die Erfassung bestätigt ist.
57+
58+## Die Statistik nach ein paar Tagen
59+
60+{{<shot name="stats" alt="Statistik-Bildschirm: Link „Meine Einträge“, die Pillen Maison und Temps avec Alix, dann das Wochendiagramm mit einer Säule pro Tag." lang={lang} legende="Es braucht eine Woche Einträge, damit der Bildschirm so aussieht." />}}
61+
62+Am ersten Abend tragen [die sechs Diagramme](@/ecrans/stats.de.md) erst zwei
63+oder drei Segmente. Nach einer Woche wird die Verteilung sichtbar, und ein Tipp
64+auf ein Segment öffnet die Einzelheiten: wer, welche Kategorie, wie lange,
65+welcher Anteil.
66+
67+## Die anderen dazuholen
68+
69+{{<extrait name="x-invitation" alt="Einladungskarte: „noa lädt dich in das Team Copropriété ein“, mit den Schaltflächen Annehmen und Ablehnen." lang={lang} legende="Die Einladung wartet oben in den Einstellungen der eingeladenen Person." />}}
70+
71+In [den Einstellungen](@/ecrans/parametres.de.md) nimmt das Einladungsfeld den
72+Benutzernamen von jemandem, der schon ein Konto hat. Die Karte erscheint oben
73+in dessen eigenen Einstellungen, und Annehmen wechselt gleich ins Team.
74+
75+Für jemanden ohne Konto erzeugt die Schaltfläche „Link erzeugen“ einen
76+Einladungslink, eine Stunde gültig, den man verschickt, wie man mag. Er führt
77+direkt zur Anmeldung in diesem Team.
78+
79+Bei den Rechten gibt es nichts einzustellen: jedes Mitglied kann das Team
80+umbenennen, Kategorien anlegen, einladen, Aufgaben korrigieren. Nur die
81+Zeiteinträge gehören denen, die sie geschrieben haben.
82+
83+## Aufgaben
84+
85+[Aufgaben](@/ecrans/taches.de.md) zählen keine Zeit. Sie sind die einzige
86+weitere Funktion der Anwendung: eine sehr einfache geteilte Aufgabenliste, mit
87+Aktivierungsdatum und Zuweisung.
88+
89+## Die Anzeige einstellen
90+
91+Ebenfalls in den Einstellungen drei Wahlmöglichkeiten, die zum Konto gehören
92+und nicht zum Gerät: die Sprache der Oberfläche, das Aussehen zwischen Organic
93+und Hoher Kontrast, und die Form der Diagramme zwischen Spalten und Zeilen. Sie
94+folgen dem Konto von einem Telefon zum nächsten, und zwei Mitglieder desselben
95+Teams dürfen sie verschieden einstellen.
96+
97+## Derselbe Weg als Video
98+
99+Diese Schritte gibt es auch als Film, am Stück auf einem leeren Team gespielt:
100+[die Ex-Ego-Demonstration](https://files.judu.bzh/ex-ego-readme-demo.mp4).
added docs/site-documentation/content/demarrage.en.md +96 -0
new file mode 100644
@@ -0,0 +1,96 @@
1++++
2+title = "Getting started"
3+description = "The first moves in a team that holds nothing yet."
4+weight = 1
5++++
6+
7+A brand new team is empty: no category, no time entry, no task. The Add tab
8+says so right away, since it has nothing to offer until a category exists. You
9+fill it in the order of this page, categories first, then entries, up to the
10+moment the statistics start saying something.
11+
12+If you joined the team through an invitation link, it is probably running
13+already and the categories are there: go straight to [the first
14+entries](#the-first-entries).
15+
16+## Create three or four categories
17+
18+{{<shot name="categories" alt="Categories screen: a reminder that categories belong to the team, an add field, then the list of categories with their colours." lang={lang} legende="A field at the top, the list filling up below." />}}
19+
20+The “Manage categories” link, on the Add tab, leads to the creation screen.
21+
22+No category is imposed: it is up to the team to create them. Some people will
23+prefer very precise categories, others broader ones. You add more as the need
24+shows up, and you [archive](@/ecrans/categories.en.md) the ones that go unused
25+without losing the time already counted on them.
26+
27+The colour is not a choice: it follows the order in which the categories were
28+created, so everyone sees the same one.
29+
30+## The first entries
31+
32+{{<shot name="ajouter-duree" alt="Step two: the chosen category, a minute counter with minus and plus buttons, shortcuts for 5, 15, 30, 45 minutes and 1 h, a date picker, and the Add time button." lang={lang} legende="The duration, the date, and it is recorded." />}}
33+
34+Back on the Add tab, “Add time” asks for the category, then for [a duration and
35+a date](@/ecrans/duree.en.md).
36+
37+The “plus” and “minus” buttons move by five minutes, the shortcuts set a round
38+duration, and the number in the middle can be typed straight in when you know
39+it. On the date picker, the left arrow steps back one day, which mostly serves
40+to catch up on something forgotten yesterday.
41+
42+Every save brings you back to the Add screen, ready to record another one or to
43+start a timer.
44+
45+## Start the timer
46+
47+The other card on the Add tab starts [a measurement](@/ecrans/minuteur.en.md)
48+without asking anything: no category, no note. It stays visible in its banner at
49+the top of every screen, and you keep moving around the application while it
50+runs.
51+
52+Filing the measurement happens when you stop it: you pick the category, then
53+the duration step opens with the measured minutes already filled in, still
54+editable. Nothing is written until the entry is confirmed.
55+
56+## Statistics, after a few days
57+
58+{{<shot name="stats" alt="Statistics screen: a “My entries” link, the scope pills Maison and Temps avec Alix, then the weekly activity chart with one column per day." lang={lang} legende="It takes a week of entries for the screen to look like this." />}}
59+
60+On the first evening, [the six charts](@/ecrans/stats.en.md) carry only two or
61+three segments. After a week the split becomes visible, and touching a segment
62+opens the detail: who, which category, how long, what share.
63+
64+## Bring the others in
65+
66+{{<extrait name="x-invitation" alt="Invitation card: “noa invites you to join the team Copropriété”, with Accept and Decline buttons." lang={lang} legende="The invitation waits at the top of the invited person's settings." />}}
67+
68+In [the settings](@/ecrans/parametres.en.md), the invitation field takes the
69+username of someone who already has an account. The card shows up at the top of
70+their own settings, and accepting switches them onto the team straight away.
71+
72+For someone without an account yet, the “Generate a link” button produces an
73+invitation link, valid for one hour, to send by whatever means you like. It
74+takes them directly to signup inside this team.
75+
76+There is nothing to set up on the rights side: every member can rename the
77+team, create categories, invite people, fix tasks. Only the time entries belong
78+to whoever wrote them.
79+
80+## Tasks
81+
82+[Tasks](@/ecrans/taches.en.md) are not there to count time. They are the only
83+other feature of the application: a very simple shared to-do list, with an
84+activation date and assignees.
85+
86+## Set up the display
87+
88+Still in the settings, three choices that belong to the account rather than to
89+the device: the interface language, the look between Organic and High contrast,
90+and the chart format between Columns and Rows. They follow the account from one
91+phone to the next, and two members of the same team can set them differently.
92+
93+## The same walkthrough on video
94+
95+These steps also exist as a film, played end to end on an empty team:
96+[the Ex Ego demonstration](https://files.judu.bzh/ex-ego-readme-demo.mp4).
new file mode 100644
@@ -0,0 +1,96 @@
1++++
2+title = "Getting started"
3+description = "The first moves in a team that holds nothing yet."
4+weight = 1
5++++
6+
7+A brand new team is empty: no category, no time entry, no task. The Add tab
8+says so right away, since it has nothing to offer until a category exists. You
9+fill it in the order of this page, categories first, then entries, up to the
10+moment the statistics start saying something.
11+
12+If you joined the team through an invitation link, it is probably running
13+already and the categories are there: go straight to [the first
14+entries](#the-first-entries).
15+
16+## Create three or four categories
17+
18+{{<shot name="categories" alt="Categories screen: a reminder that categories belong to the team, an add field, then the list of categories with their colours." lang={lang} legende="A field at the top, the list filling up below." />}}
19+
20+The “Manage categories” link, on the Add tab, leads to the creation screen.
21+
22+No category is imposed: it is up to the team to create them. Some people will
23+prefer very precise categories, others broader ones. You add more as the need
24+shows up, and you [archive](@/ecrans/categories.en.md) the ones that go unused
25+without losing the time already counted on them.
26+
27+The colour is not a choice: it follows the order in which the categories were
28+created, so everyone sees the same one.
29+
30+## The first entries
31+
32+{{<shot name="ajouter-duree" alt="Step two: the chosen category, a minute counter with minus and plus buttons, shortcuts for 5, 15, 30, 45 minutes and 1 h, a date picker, and the Add time button." lang={lang} legende="The duration, the date, and it is recorded." />}}
33+
34+Back on the Add tab, “Add time” asks for the category, then for [a duration and
35+a date](@/ecrans/duree.en.md).
36+
37+The “plus” and “minus” buttons move by five minutes, the shortcuts set a round
38+duration, and the number in the middle can be typed straight in when you know
39+it. On the date picker, the left arrow steps back one day, which mostly serves
40+to catch up on something forgotten yesterday.
41+
42+Every save brings you back to the Add screen, ready to record another one or to
43+start a timer.
44+
45+## Start the timer
46+
47+The other card on the Add tab starts [a measurement](@/ecrans/minuteur.en.md)
48+without asking anything: no category, no note. It stays visible in its banner at
49+the top of every screen, and you keep moving around the application while it
50+runs.
51+
52+Filing the measurement happens when you stop it: you pick the category, then
53+the duration step opens with the measured minutes already filled in, still
54+editable. Nothing is written until the entry is confirmed.
55+
56+## Statistics, after a few days
57+
58+{{<shot name="stats" alt="Statistics screen: a “My entries” link, the scope pills Maison and Temps avec Alix, then the weekly activity chart with one column per day." lang={lang} legende="It takes a week of entries for the screen to look like this." />}}
59+
60+On the first evening, [the six charts](@/ecrans/stats.en.md) carry only two or
61+three segments. After a week the split becomes visible, and touching a segment
62+opens the detail: who, which category, how long, what share.
63+
64+## Bring the others in
65+
66+{{<extrait name="x-invitation" alt="Invitation card: “noa invites you to join the team Copropriété”, with Accept and Decline buttons." lang={lang} legende="The invitation waits at the top of the invited person's settings." />}}
67+
68+In [the settings](@/ecrans/parametres.en.md), the invitation field takes the
69+username of someone who already has an account. The card shows up at the top of
70+their own settings, and accepting switches them onto the team straight away.
71+
72+For someone without an account yet, the “Generate a link” button produces an
73+invitation link, valid for one hour, to send by whatever means you like. It
74+takes them directly to signup inside this team.
75+
76+There is nothing to set up on the rights side: every member can rename the
77+team, create categories, invite people, fix tasks. Only the time entries belong
78+to whoever wrote them.
79+
80+## Tasks
81+
82+[Tasks](@/ecrans/taches.en.md) are not there to count time. They are the only
83+other feature of the application: a very simple shared to-do list, with an
84+activation date and assignees.
85+
86+## Set up the display
87+
88+Still in the settings, three choices that belong to the account rather than to
89+the device: the interface language, the look between Organic and High contrast,
90+and the chart format between Columns and Rows. They follow the account from one
91+phone to the next, and two members of the same team can set them differently.
92+
93+## The same walkthrough on video
94+
95+These steps also exist as a film, played end to end on an empty team:
96+[the Ex Ego demonstration](https://files.judu.bzh/ex-ego-readme-demo.mp4).
added docs/site-documentation/content/demarrage.md +101 -0
new file mode 100644
@@ -0,0 +1,101 @@
1++++
2+title = "Démarrage"
3+description = "Les premiers gestes dans une équipe qui ne contient encore rien."
4+weight = 1
5++++
6+
7+Une équipe qui vient de naître est vide : aucune catégorie, aucun temps, aucune
8+tâche. L'onglet Ajouter le dit tout de suite, puisqu'il n'a rien à proposer tant
9+qu'aucune catégorie n'existe. On la remplit dans l'ordre de cette page, les
10+catégories d'abord, puis les temps, jusqu'au moment où les statistiques
11+commencent à dire quelque chose.
12+
13+Si tu as rejoint l'équipe par un lien d'invitation, elle tourne probablement
14+déjà et les catégories sont là : va directement [aux premiers
15+temps](#les-premiers-temps).
16+
17+## Créer trois ou quatre catégories
18+
19+{{<shot name="categories" alt="Écran Catégories : rappel que les catégories appartiennent à l'équipe, champ d'ajout, puis la liste des catégories avec leur couleur." lang={lang} legende="Un champ en haut, la liste qui se remplit en dessous." />}}
20+
21+Le lien « Gérer les catégories », sur l'onglet Ajouter, mène à l'écran de
22+création.
23+
24+Aucune catégorie n’est imposée, c’est à l’équipe de les créer.
25+Certain·e·s préféreront des catégories très précises, d’autres des catégories plus larges.
26+On en ajoute au fur et à mesure que le besoin se fait sentir, et on
27+[archive](@/ecrans/categories.md) celles qui ne servent pas sans perdre le temps
28+déjà compté dessus.
29+
30+La couleur ne se choisit pas : elle découle de l’ordre de création des catégories
31+et tout le monde voit donc la même.
32+
33+## Les premiers temps
34+
35+{{<shot name="ajouter-duree" alt="Étape 2 : nom de la catégorie choisie, compteur de minutes avec boutons moins et plus, raccourcis 5, 15, 30, 45 minutes et 1 h, sélecteur de date, bouton Ajouter du temps." lang={lang} legende="La durée, la date, et c'est enregistré." />}}
36+
37+De retour sur l'onglet Ajouter, « Ajouter du temps » demande la catégorie, puis
38+[une durée et une date](@/ecrans/duree.md).
39+
40+Les boutons « plus » et « moins » avancent de cinq minutes, les raccourcis posent une
41+durée ronde, et le nombre au centre se tape directement quand on le connaît.
42+Sur le choix de la date, la flèche de gauche recule d'un jour.
43+Ça permet surtout de rattraper un oubli de la veille.
44+
45+Chaque enregistrement ramène à l’écran « Ajouter », pour pouvoir en enregistrer un nouveau
46+ou lancer un minuteur.
47+
48+## Lancer le minuteur
49+
50+L'autre carte de l'onglet Ajouter démarre [une mesure](@/ecrans/minuteur.md)
51+sans rien demander : ni catégorie, ni note. Elle reste visible dans son bandeau
52+en haut de chaque écran, et on continue à se promener dans l'application
53+pendant qu'elle tourne.
54+
55+C'est en l'arrêtant qu'on classifie la mesure : on choisit la catégorie, puis
56+l'étape de la durée s'ouvre avec les minutes mesurées déjà remplies, qu'on peut
57+encore corriger. Rien n'est écrit tant que la saisie n'est pas validée.
58+
59+## Les statistiques après quelques jours
60+
61+{{<shot name="stats" alt="Écran Statistiques : lien « Mes saisies », pastilles de scopes Maison et Temps avec Alix, puis le graphique de l'activité de la semaine, une colonne par jour." lang={lang} legende="Il faut une semaine de saisies pour que l'écran ressemble à ça." />}}
62+
63+Le premier soir, [les six graphiques](@/ecrans/stats.md) portent seulement deux ou trois
64+segments.
65+Au bout d'une semaine, la répartition commence à se voir, et toucher un segment ouvre le détail : qui, quelle
66+catégorie, combien de temps, quelle part.
67+
68+## Faire venir les autres
69+
70+{{<extrait name="x-invitation" alt="Carte d'invitation : « noa t'invite à rejoindre l'équipe Copropriété », boutons Accepter et Refuser." lang={lang} legende="L'invitation attend en haut des réglages de l'invité." />}}
71+
72+Dans [les réglages](@/ecrans/parametres.md), le champ d'invitation prend
73+l'identifiant de quelqu'un qui a déjà un compte. La carte apparaît en haut de
74+ses propres réglages, et accepter le fait basculer sur l'équipe dans la foulée.
75+
76+Pour quelqu'un qui n'a pas encore de compte, le bouton « Générer un lien »
77+génère un lien d'invitation valable une heure, à envoyer par le moyen de son
78+choix. Il amène directement à l'inscription dans cette équipe.
79+
80+Il n'y a rien à régler du côté des droits : tous les membres peuvent renommer
81+l'équipe, créer des catégories, inviter, corriger les tâches. Seules les
82+saisies de temps appartiennent à leur auteur.
83+
84+## Les tâches
85+
86+[Les tâches](@/ecrans/taches.md) ne servent pas à compter du temps.
87+C’est la seule autre fonctionnalité de l’application : une liste très simple de tâches partagée, avec
88+date d’activation et assignation.
89+
90+## Régler l'affichage
91+
92+Toujours dans les réglages, trois choix qui appartiennent au compte et non à
93+l'appareil : la langue de l'interface, l'apparence entre Organic et Contraste
94+élevé, et le format des graphiques entre Colonnes et Lignes. Ils suivent le
95+compte d'un téléphone à l'autre, et deux membres de la même équipe peuvent les
96+régler différemment.
97+
98+## Le même parcours en vidéo
99+
100+Ces étapes existent aussi en film, jouées d'affilée sur une équipe vide :
101+[la démonstration d'Ex Ego](https://files.judu.bzh/ex-ego-readme-demo.mp4).
new file mode 100644
@@ -0,0 +1,101 @@
1++++
2+title = "Démarrage"
3+description = "Les premiers gestes dans une équipe qui ne contient encore rien."
4+weight = 1
5++++
6+
7+Une équipe qui vient de naître est vide : aucune catégorie, aucun temps, aucune
8+tâche. L'onglet Ajouter le dit tout de suite, puisqu'il n'a rien à proposer tant
9+qu'aucune catégorie n'existe. On la remplit dans l'ordre de cette page, les
10+catégories d'abord, puis les temps, jusqu'au moment où les statistiques
11+commencent à dire quelque chose.
12+
13+Si tu as rejoint l'équipe par un lien d'invitation, elle tourne probablement
14+déjà et les catégories sont là : va directement [aux premiers
15+temps](#les-premiers-temps).
16+
17+## Créer trois ou quatre catégories
18+
19+{{<shot name="categories" alt="Écran Catégories : rappel que les catégories appartiennent à l'équipe, champ d'ajout, puis la liste des catégories avec leur couleur." lang={lang} legende="Un champ en haut, la liste qui se remplit en dessous." />}}
20+
21+Le lien « Gérer les catégories », sur l'onglet Ajouter, mène à l'écran de
22+création.
23+
24+Aucune catégorie n’est imposée, c’est à l’équipe de les créer.
25+Certain·e·s préféreront des catégories très précises, d’autres des catégories plus larges.
26+On en ajoute au fur et à mesure que le besoin se fait sentir, et on
27+[archive](@/ecrans/categories.md) celles qui ne servent pas sans perdre le temps
28+déjà compté dessus.
29+
30+La couleur ne se choisit pas : elle découle de l’ordre de création des catégories
31+et tout le monde voit donc la même.
32+
33+## Les premiers temps
34+
35+{{<shot name="ajouter-duree" alt="Étape 2 : nom de la catégorie choisie, compteur de minutes avec boutons moins et plus, raccourcis 5, 15, 30, 45 minutes et 1 h, sélecteur de date, bouton Ajouter du temps." lang={lang} legende="La durée, la date, et c'est enregistré." />}}
36+
37+De retour sur l'onglet Ajouter, « Ajouter du temps » demande la catégorie, puis
38+[une durée et une date](@/ecrans/duree.md).
39+
40+Les boutons « plus » et « moins » avancent de cinq minutes, les raccourcis posent une
41+durée ronde, et le nombre au centre se tape directement quand on le connaît.
42+Sur le choix de la date, la flèche de gauche recule d'un jour.
43+Ça permet surtout de rattraper un oubli de la veille.
44+
45+Chaque enregistrement ramène à l’écran « Ajouter », pour pouvoir en enregistrer un nouveau
46+ou lancer un minuteur.
47+
48+## Lancer le minuteur
49+
50+L'autre carte de l'onglet Ajouter démarre [une mesure](@/ecrans/minuteur.md)
51+sans rien demander : ni catégorie, ni note. Elle reste visible dans son bandeau
52+en haut de chaque écran, et on continue à se promener dans l'application
53+pendant qu'elle tourne.
54+
55+C'est en l'arrêtant qu'on classifie la mesure : on choisit la catégorie, puis
56+l'étape de la durée s'ouvre avec les minutes mesurées déjà remplies, qu'on peut
57+encore corriger. Rien n'est écrit tant que la saisie n'est pas validée.
58+
59+## Les statistiques après quelques jours
60+
61+{{<shot name="stats" alt="Écran Statistiques : lien « Mes saisies », pastilles de scopes Maison et Temps avec Alix, puis le graphique de l'activité de la semaine, une colonne par jour." lang={lang} legende="Il faut une semaine de saisies pour que l'écran ressemble à ça." />}}
62+
63+Le premier soir, [les six graphiques](@/ecrans/stats.md) portent seulement deux ou trois
64+segments.
65+Au bout d'une semaine, la répartition commence à se voir, et toucher un segment ouvre le détail : qui, quelle
66+catégorie, combien de temps, quelle part.
67+
68+## Faire venir les autres
69+
70+{{<extrait name="x-invitation" alt="Carte d'invitation : « noa t'invite à rejoindre l'équipe Copropriété », boutons Accepter et Refuser." lang={lang} legende="L'invitation attend en haut des réglages de l'invité." />}}
71+
72+Dans [les réglages](@/ecrans/parametres.md), le champ d'invitation prend
73+l'identifiant de quelqu'un qui a déjà un compte. La carte apparaît en haut de
74+ses propres réglages, et accepter le fait basculer sur l'équipe dans la foulée.
75+
76+Pour quelqu'un qui n'a pas encore de compte, le bouton « Générer un lien »
77+génère un lien d'invitation valable une heure, à envoyer par le moyen de son
78+choix. Il amène directement à l'inscription dans cette équipe.
79+
80+Il n'y a rien à régler du côté des droits : tous les membres peuvent renommer
81+l'équipe, créer des catégories, inviter, corriger les tâches. Seules les
82+saisies de temps appartiennent à leur auteur.
83+
84+## Les tâches
85+
86+[Les tâches](@/ecrans/taches.md) ne servent pas à compter du temps.
87+C’est la seule autre fonctionnalité de l’application : une liste très simple de tâches partagée, avec
88+date d’activation et assignation.
89+
90+## Régler l'affichage
91+
92+Toujours dans les réglages, trois choix qui appartiennent au compte et non à
93+l'appareil : la langue de l'interface, l'apparence entre Organic et Contraste
94+élevé, et le format des graphiques entre Colonnes et Lignes. Ils suivent le
95+compte d'un téléphone à l'autre, et deux membres de la même équipe peuvent les
96+régler différemment.
97+
98+## Le même parcours en vidéo
99+
100+Ces étapes existent aussi en film, jouées d'affilée sur une équipe vide :
101+[la démonstration d'Ex Ego](https://files.judu.bzh/ex-ego-readme-demo.mp4).
added docs/site-documentation/content/demarrage.pt-br.md +98 -0
new file mode 100644
@@ -0,0 +1,98 @@
1++++
2+title = "Primeiros passos"
3+description = "Os primeiros gestos numa equipe que ainda não tem nada dentro."
4+weight = 1
5++++
6+
7+Uma equipe recém-nascida está vazia: nenhuma categoria, nenhum tempo, nenhuma
8+tarefa. A aba Adicionar diz isso na hora, já que não tem nada a propor enquanto
9+nenhuma categoria existir. Ela se preenche na ordem desta página, as
10+categorias primeiro, depois os tempos, até o momento em que as estatísticas
11+começam a dizer alguma coisa.
12+
13+Se você entrou na equipe por um link de convite, ela provavelmente já está
14+rodando e as categorias estão lá: vá direto para [os primeiros
15+tempos](#os-primeiros-tempos).
16+
17+## Criar três ou quatro categorias
18+
19+{{<shot name="categories" alt="Tela Categorias: lembrete de que as categorias pertencem à equipe, campo de adição, depois a lista das categorias com sua cor." lang={lang} legende="Um campo em cima, a lista se enchendo embaixo." />}}
20+
21+O link “Gerenciar categorias”, na aba Adicionar, leva à tela de criação.
22+
23+Nenhuma categoria é imposta: é a equipe que cria as suas. Algumas pessoas vão
24+preferir categorias bem precisas, outras, categorias mais amplas. A gente
25+acrescenta conforme a necessidade aparece, e
26+[arquiva](@/ecrans/categories.pt-br.md) as que não servem sem perder o tempo já
27+contado nelas.
28+
29+A cor não se escolhe: ela vem da ordem de criação das categorias, e todo mundo
30+vê, portanto, a mesma.
31+
32+## Os primeiros tempos
33+
34+{{<shot name="ajouter-duree" alt="Etapa 2: nome da categoria escolhida, contador de minutos com botões menos e mais, atalhos de 5, 15, 30, 45 minutos e 1 h, seletor de data, botão Registrar tempo." lang={lang} legende="A duração, a data, e está registrado." />}}
35+
36+De volta à aba Adicionar, “Registrar tempo” pede a categoria, depois [uma
37+duração e uma data](@/ecrans/duree.pt-br.md).
38+
39+Os botões “mais” e “menos” andam de cinco em cinco minutos, os atalhos colocam
40+uma duração redonda, e o número do meio se digita direto quando você o conhece.
41+Na escolha da data, a seta da esquerda volta um dia, o que serve sobretudo para
42+recuperar um esquecimento de ontem.
43+
44+Cada registro traz você de volta à tela “Adicionar”, para registrar outro ou
45+iniciar um cronômetro.
46+
47+## Iniciar o cronômetro
48+
49+O outro cartão da aba Adicionar começa [uma
50+medição](@/ecrans/minuteur.pt-br.md) sem perguntar nada: nem categoria, nem
51+observação. Ela continua visível na sua faixa no alto de cada tela, e você
52+segue passeando pelo aplicativo enquanto ela roda.
53+
54+A medição só é classificada ao parar: você escolhe a categoria, e aí a etapa da
55+duração abre com os minutos medidos já preenchidos, ainda editáveis. Nada é
56+gravado enquanto o registro não for confirmado.
57+
58+## As estatísticas depois de alguns dias
59+
60+{{<shot name="stats" alt="Tela Estatísticas: link “Meus registros”, pastilhas de escopo Maison e Temps avec Alix, depois o gráfico da atividade da semana, uma coluna por dia." lang={lang} legende="É preciso uma semana de registros para a tela ficar assim." />}}
61+
62+Na primeira noite, [os seis gráficos](@/ecrans/stats.pt-br.md) carregam só dois
63+ou três segmentos. Depois de uma semana a divisão começa a aparecer, e tocar num
64+segmento abre o detalhe: quem, qual categoria, quanto tempo, que proporção.
65+
66+## Trazer as outras pessoas
67+
68+{{<extrait name="x-invitation" alt="Cartão de convite: “noa convida você para entrar na equipe Copropriété”, botões Aceitar e Recusar." lang={lang} legende="O convite espera no alto das configurações de quem foi convidado." />}}
69+
70+Nas [configurações](@/ecrans/parametres.pt-br.md), o campo de convite recebe o
71+nome de usuário de alguém que já tem conta. O cartão aparece no alto das
72+configurações dessa pessoa, e aceitar já muda para a equipe.
73+
74+Para quem ainda não tem conta, o botão “Gerar um link” fabrica um link de
75+convite que vale uma hora, para enviar do jeito que você quiser. Ele leva
76+direto ao cadastro dentro desta equipe.
77+
78+Não há nada a ajustar do lado dos direitos: todos os membros podem renomear a
79+equipe, criar categorias, convidar, corrigir tarefas. Só os registros de tempo
80+pertencem a quem os escreveu.
81+
82+## As tarefas
83+
84+[As tarefas](@/ecrans/taches.pt-br.md) não servem para contar tempo. São a
85+única outra funcionalidade do aplicativo: uma lista de tarefas compartilhada,
86+bem simples, com data de ativação e atribuição.
87+
88+## Ajustar a exibição
89+
90+Ainda nas configurações, três escolhas que pertencem à conta e não ao aparelho:
91+o idioma da interface, a aparência entre Organic e Alto contraste, e o formato
92+dos gráficos entre Colunas e Linhas. Eles seguem a conta de um celular para
93+outro, e dois membros da mesma equipe podem ajustá-los de maneiras diferentes.
94+
95+## O mesmo percurso em vídeo
96+
97+Essas etapas também existem em filme, jogadas de ponta a ponta numa equipe
98+vazia: [a demonstração do Ex Ego](https://files.judu.bzh/ex-ego-readme-demo.mp4).
new file mode 100644
@@ -0,0 +1,98 @@
1++++
2+title = "Primeiros passos"
3+description = "Os primeiros gestos numa equipe que ainda não tem nada dentro."
4+weight = 1
5++++
6+
7+Uma equipe recém-nascida está vazia: nenhuma categoria, nenhum tempo, nenhuma
8+tarefa. A aba Adicionar diz isso na hora, já que não tem nada a propor enquanto
9+nenhuma categoria existir. Ela se preenche na ordem desta página, as
10+categorias primeiro, depois os tempos, até o momento em que as estatísticas
11+começam a dizer alguma coisa.
12+
13+Se você entrou na equipe por um link de convite, ela provavelmente já está
14+rodando e as categorias estão lá: vá direto para [os primeiros
15+tempos](#os-primeiros-tempos).
16+
17+## Criar três ou quatro categorias
18+
19+{{<shot name="categories" alt="Tela Categorias: lembrete de que as categorias pertencem à equipe, campo de adição, depois a lista das categorias com sua cor." lang={lang} legende="Um campo em cima, a lista se enchendo embaixo." />}}
20+
21+O link “Gerenciar categorias”, na aba Adicionar, leva à tela de criação.
22+
23+Nenhuma categoria é imposta: é a equipe que cria as suas. Algumas pessoas vão
24+preferir categorias bem precisas, outras, categorias mais amplas. A gente
25+acrescenta conforme a necessidade aparece, e
26+[arquiva](@/ecrans/categories.pt-br.md) as que não servem sem perder o tempo já
27+contado nelas.
28+
29+A cor não se escolhe: ela vem da ordem de criação das categorias, e todo mundo
30+vê, portanto, a mesma.
31+
32+## Os primeiros tempos
33+
34+{{<shot name="ajouter-duree" alt="Etapa 2: nome da categoria escolhida, contador de minutos com botões menos e mais, atalhos de 5, 15, 30, 45 minutos e 1 h, seletor de data, botão Registrar tempo." lang={lang} legende="A duração, a data, e está registrado." />}}
35+
36+De volta à aba Adicionar, “Registrar tempo” pede a categoria, depois [uma
37+duração e uma data](@/ecrans/duree.pt-br.md).
38+
39+Os botões “mais” e “menos” andam de cinco em cinco minutos, os atalhos colocam
40+uma duração redonda, e o número do meio se digita direto quando você o conhece.
41+Na escolha da data, a seta da esquerda volta um dia, o que serve sobretudo para
42+recuperar um esquecimento de ontem.
43+
44+Cada registro traz você de volta à tela “Adicionar”, para registrar outro ou
45+iniciar um cronômetro.
46+
47+## Iniciar o cronômetro
48+
49+O outro cartão da aba Adicionar começa [uma
50+medição](@/ecrans/minuteur.pt-br.md) sem perguntar nada: nem categoria, nem
51+observação. Ela continua visível na sua faixa no alto de cada tela, e você
52+segue passeando pelo aplicativo enquanto ela roda.
53+
54+A medição só é classificada ao parar: você escolhe a categoria, e aí a etapa da
55+duração abre com os minutos medidos já preenchidos, ainda editáveis. Nada é
56+gravado enquanto o registro não for confirmado.
57+
58+## As estatísticas depois de alguns dias
59+
60+{{<shot name="stats" alt="Tela Estatísticas: link “Meus registros”, pastilhas de escopo Maison e Temps avec Alix, depois o gráfico da atividade da semana, uma coluna por dia." lang={lang} legende="É preciso uma semana de registros para a tela ficar assim." />}}
61+
62+Na primeira noite, [os seis gráficos](@/ecrans/stats.pt-br.md) carregam só dois
63+ou três segmentos. Depois de uma semana a divisão começa a aparecer, e tocar num
64+segmento abre o detalhe: quem, qual categoria, quanto tempo, que proporção.
65+
66+## Trazer as outras pessoas
67+
68+{{<extrait name="x-invitation" alt="Cartão de convite: “noa convida você para entrar na equipe Copropriété”, botões Aceitar e Recusar." lang={lang} legende="O convite espera no alto das configurações de quem foi convidado." />}}
69+
70+Nas [configurações](@/ecrans/parametres.pt-br.md), o campo de convite recebe o
71+nome de usuário de alguém que já tem conta. O cartão aparece no alto das
72+configurações dessa pessoa, e aceitar já muda para a equipe.
73+
74+Para quem ainda não tem conta, o botão “Gerar um link” fabrica um link de
75+convite que vale uma hora, para enviar do jeito que você quiser. Ele leva
76+direto ao cadastro dentro desta equipe.
77+
78+Não há nada a ajustar do lado dos direitos: todos os membros podem renomear a
79+equipe, criar categorias, convidar, corrigir tarefas. Só os registros de tempo
80+pertencem a quem os escreveu.
81+
82+## As tarefas
83+
84+[As tarefas](@/ecrans/taches.pt-br.md) não servem para contar tempo. São a
85+única outra funcionalidade do aplicativo: uma lista de tarefas compartilhada,
86+bem simples, com data de ativação e atribuição.
87+
88+## Ajustar a exibição
89+
90+Ainda nas configurações, três escolhas que pertencem à conta e não ao aparelho:
91+o idioma da interface, a aparência entre Organic e Alto contraste, e o formato
92+dos gráficos entre Colunas e Linhas. Eles seguem a conta de um celular para
93+outro, e dois membros da mesma equipe podem ajustá-los de maneiras diferentes.
94+
95+## O mesmo percurso em vídeo
96+
97+Essas etapas também existem em filme, jogadas de ponta a ponta numa equipe
98+vazia: [a demonstração do Ex Ego](https://files.judu.bzh/ex-ego-readme-demo.mp4).
added docs/site-documentation/content/ecrans/_index.pt-br.md +9 -0
new file mode 100644
@@ -0,0 +1,9 @@
1++++
2+title = "As telas"
3+description = "A volta completa pelo aplicativo, tela por tela, com a intenção de cada uma."
4+weight = 1
5+sort_by = "weight"
6++++
7+
8+O aplicativo cabe em quatro abas e um punhado de telas secundárias, uma por
9+página aqui embaixo.
new file mode 100644
@@ -0,0 +1,9 @@
1++++
2+title = "As telas"
3+description = "A volta completa pelo aplicativo, tela por tela, com a intenção de cada uma."
4+weight = 1
5+sort_by = "weight"
6++++
7+
8+O aplicativo cabe em quatro abas e um punhado de telas secundárias, uma por
9+página aqui embaixo.
added docs/site-documentation/content/ecrans/ajouter.pt-br.md +35 -0
new file mode 100644
@@ -0,0 +1,35 @@
1++++
2+title = "Adicionar tempo"
3+description = "A encruzilhada da aba Adicionar: contar a partir de agora, ou anotar o que já foi feito."
4+weight = 3
5++++
6+
7+{{<shot name="ajouter-choix" alt="Tela Adicionar: dois cartões grandes, “Iniciar o cronômetro” e “Registrar tempo”, depois um link “Gerenciar categorias”." lang={lang} legende="Duas maneiras de contar: durante, ou depois." />}}
8+
9+A aba Adicionar abre com uma pergunta curta: eu conto a partir de agora, ou
10+anoto uma coisa que já foi feita?
11+
12+## Por que dois caminhos
13+
14+Duas situações:
15+- Estou prestes a fazer alguma coisa e lembro de medir: aí eu inicio o
16+ cronômetro.
17+- Já fiz alguma coisa, olhei rápido a hora quando comecei, e estimo com cinco
18+ minutos de folga quanto tempo levou.
19+
20+O cronômetro não pede a categoria na largada: você escolhe ao parar. Isso é de
21+propósito, porque na hora de começar uma tarefa a gente quer apertar e ir, e
22+porque a gente sempre sabe melhor o que fez depois de ter feito.
23+
24+## Gerenciar categorias
25+
26+O link para a gestão das categorias mora nesta tela, além dos ajustes. Ele
27+também fica na página de escolha de categoria, bem no momento em que você
28+percebe que falta uma.
29+
30+## Quando já tem um cronômetro rodando
31+
32+Se um cronômetro está em andamento na equipe ativa, esta tela de escolha some:
33+a aba Adicionar vira direto [a tela do cronômetro](@/ecrans/minuteur.pt-br.md).
34+Não dá para ter duas medições ao mesmo tempo: melhor mostrar a que está rodando
35+do que oferecer uma segunda.
new file mode 100644
@@ -0,0 +1,35 @@
1++++
2+title = "Adicionar tempo"
3+description = "A encruzilhada da aba Adicionar: contar a partir de agora, ou anotar o que já foi feito."
4+weight = 3
5++++
6+
7+{{<shot name="ajouter-choix" alt="Tela Adicionar: dois cartões grandes, “Iniciar o cronômetro” e “Registrar tempo”, depois um link “Gerenciar categorias”." lang={lang} legende="Duas maneiras de contar: durante, ou depois." />}}
8+
9+A aba Adicionar abre com uma pergunta curta: eu conto a partir de agora, ou
10+anoto uma coisa que já foi feita?
11+
12+## Por que dois caminhos
13+
14+Duas situações:
15+- Estou prestes a fazer alguma coisa e lembro de medir: aí eu inicio o
16+ cronômetro.
17+- Já fiz alguma coisa, olhei rápido a hora quando comecei, e estimo com cinco
18+ minutos de folga quanto tempo levou.
19+
20+O cronômetro não pede a categoria na largada: você escolhe ao parar. Isso é de
21+propósito, porque na hora de começar uma tarefa a gente quer apertar e ir, e
22+porque a gente sempre sabe melhor o que fez depois de ter feito.
23+
24+## Gerenciar categorias
25+
26+O link para a gestão das categorias mora nesta tela, além dos ajustes. Ele
27+também fica na página de escolha de categoria, bem no momento em que você
28+percebe que falta uma.
29+
30+## Quando já tem um cronômetro rodando
31+
32+Se um cronômetro está em andamento na equipe ativa, esta tela de escolha some:
33+a aba Adicionar vira direto [a tela do cronômetro](@/ecrans/minuteur.pt-br.md).
34+Não dá para ter duas medições ao mesmo tempo: melhor mostrar a que está rodando
35+do que oferecer uma segunda.
added docs/site-documentation/content/ecrans/cadre.pt-br.md +43 -0
new file mode 100644
@@ -0,0 +1,43 @@
1++++
2+title = "A moldura comum"
3+description = "O cabeçalho, a barra de abas e a folha de troca de equipe, presentes em todo lugar."
4+weight = 1
5++++
6+
7+Todas as páginas, menos a de entrada e as de erro, dividem a mesma estrutura.
8+Aprender uma vez basta para se achar em qualquer lugar.
9+
10+## Em cima: onde estou e quem sou
11+
12+{{<extrait name="x-entete" alt="Cabeçalho: pastilha verde da equipe Maison à esquerda, nome de usuário à direita, título da página embaixo." lang={lang} legende="O cabeçalho responde a duas perguntas antes mesmo de você ler a página." />}}
13+
14+A pastilha da esquerda leva o nome da equipe ativa, tingida com a cor dela.
15+Essa cor é calculada a partir do identificador da equipe: não se ajusta e nunca
16+muda.
17+
18+Nenhum registro deve ir parar na equipe errada por distração: por isso a equipe
19+e a conta ficam sempre à vista.
20+
21+## Trocar de equipe
22+
23+Tocar na pastilha abre uma folha que sobe de baixo e lista as equipes de que
24+você faz parte.
25+
26+{{<shot name="equipes" alt="Folha “Trocar de equipe” aberta por cima da tela Adicionar, com a lista das equipes." lang={lang} legende="A folha é uma âncora dentro da página: ela abre mesmo sem JavaScript." />}}
27+
28+A equipe ativa não fica guardada no banco, é um ajuste do aparelho. O celular
29+pode então continuar em “Maison” enquanto o notebook está na associação, sem
30+que os dois se atrapalhem.
31+
32+## Embaixo: as quatro abas
33+
34+{{<extrait name="x-tabbar" alt="Barra de abas: Adicionar, Stats, Tarefas com um contador 3, Ajustes com um contador 1." lang={lang} legende="Os contadores contam as tarefas a fazer e os convites recebidos." />}}
35+
36+A barra fica colada embaixo, ao alcance do polegar. Só quatro abas, arrumadas
37+por frequência de uso: a gente adiciona tempo todo dia, olha as estatísticas
38+uma vez por semana, as tarefas de vez em quando, e os ajustes quase nunca.
39+
40+Duas telas importantes não têm aba, de propósito. “Meus tempos” se alcança
41+pelas estatísticas e pelos ajustes, porque a gente vai lá para corrigir, não
42+para consultar. “Categorias” se alcança pela aba Adicionar, ali onde a falta de
43+uma categoria aparece.
new file mode 100644
@@ -0,0 +1,43 @@
1++++
2+title = "A moldura comum"
3+description = "O cabeçalho, a barra de abas e a folha de troca de equipe, presentes em todo lugar."
4+weight = 1
5++++
6+
7+Todas as páginas, menos a de entrada e as de erro, dividem a mesma estrutura.
8+Aprender uma vez basta para se achar em qualquer lugar.
9+
10+## Em cima: onde estou e quem sou
11+
12+{{<extrait name="x-entete" alt="Cabeçalho: pastilha verde da equipe Maison à esquerda, nome de usuário à direita, título da página embaixo." lang={lang} legende="O cabeçalho responde a duas perguntas antes mesmo de você ler a página." />}}
13+
14+A pastilha da esquerda leva o nome da equipe ativa, tingida com a cor dela.
15+Essa cor é calculada a partir do identificador da equipe: não se ajusta e nunca
16+muda.
17+
18+Nenhum registro deve ir parar na equipe errada por distração: por isso a equipe
19+e a conta ficam sempre à vista.
20+
21+## Trocar de equipe
22+
23+Tocar na pastilha abre uma folha que sobe de baixo e lista as equipes de que
24+você faz parte.
25+
26+{{<shot name="equipes" alt="Folha “Trocar de equipe” aberta por cima da tela Adicionar, com a lista das equipes." lang={lang} legende="A folha é uma âncora dentro da página: ela abre mesmo sem JavaScript." />}}
27+
28+A equipe ativa não fica guardada no banco, é um ajuste do aparelho. O celular
29+pode então continuar em “Maison” enquanto o notebook está na associação, sem
30+que os dois se atrapalhem.
31+
32+## Embaixo: as quatro abas
33+
34+{{<extrait name="x-tabbar" alt="Barra de abas: Adicionar, Stats, Tarefas com um contador 3, Ajustes com um contador 1." lang={lang} legende="Os contadores contam as tarefas a fazer e os convites recebidos." />}}
35+
36+A barra fica colada embaixo, ao alcance do polegar. Só quatro abas, arrumadas
37+por frequência de uso: a gente adiciona tempo todo dia, olha as estatísticas
38+uma vez por semana, as tarefas de vez em quando, e os ajustes quase nunca.
39+
40+Duas telas importantes não têm aba, de propósito. “Meus tempos” se alcança
41+pelas estatísticas e pelos ajustes, porque a gente vai lá para corrigir, não
42+para consultar. “Categorias” se alcança pela aba Adicionar, ali onde a falta de
43+uma categoria aparece.
added docs/site-documentation/content/ecrans/categorie.pt-br.md +27 -0
new file mode 100644
@@ -0,0 +1,27 @@
1++++
2+title = "Etapa 1: a categoria"
3+description = "A lista das categorias da equipe, com o meu tempo da semana em cada uma."
4+weight = 5
5++++
6+
7+{{<shot name="ajouter-categorie" alt="Etapa 1: lista das categorias da equipe em forma de pastilhas, cada uma com uma cor, um nome e o tempo gasto esta semana." lang={lang} legende="Etapa 1 de 2: escolha a categoria." />}}
8+
9+O registro manual acontece em duas etapas. A primeira é a escolha da categoria
10+numa lista.
11+
12+## O que cada linha diz
13+
14+{{<extrait name="x-categorie-pill" alt="Uma pastilha de categoria: bolinha colorida, nome da categoria, e à direita o tempo já contado esta semana." lang={lang} />}}
15+
16+Cada categoria tem uma cor, nesta tela e nos gráficos. A cor não se escolhe e
17+nunca muda.
18+
19+À direita, quando existe, aparece o tempo que eu mesmo já contei nessa
20+categoria esta semana. Está ali para responder à pergunta que a gente se faz
21+logo antes de registrar: será que eu já anotei isso, ou não?
22+
23+As categorias arquivadas não aparecem aqui. Elas continuam visíveis nas
24+estatísticas, mas não dá mais para contar tempo nelas.
25+
26+Se a equipe ainda não tem categoria nenhuma, a lista dá lugar a um convite para
27+criar uma, e o link “Gerenciar categorias” espera logo abaixo.
new file mode 100644
@@ -0,0 +1,27 @@
1++++
2+title = "Etapa 1: a categoria"
3+description = "A lista das categorias da equipe, com o meu tempo da semana em cada uma."
4+weight = 5
5++++
6+
7+{{<shot name="ajouter-categorie" alt="Etapa 1: lista das categorias da equipe em forma de pastilhas, cada uma com uma cor, um nome e o tempo gasto esta semana." lang={lang} legende="Etapa 1 de 2: escolha a categoria." />}}
8+
9+O registro manual acontece em duas etapas. A primeira é a escolha da categoria
10+numa lista.
11+
12+## O que cada linha diz
13+
14+{{<extrait name="x-categorie-pill" alt="Uma pastilha de categoria: bolinha colorida, nome da categoria, e à direita o tempo já contado esta semana." lang={lang} />}}
15+
16+Cada categoria tem uma cor, nesta tela e nos gráficos. A cor não se escolhe e
17+nunca muda.
18+
19+À direita, quando existe, aparece o tempo que eu mesmo já contei nessa
20+categoria esta semana. Está ali para responder à pergunta que a gente se faz
21+logo antes de registrar: será que eu já anotei isso, ou não?
22+
23+As categorias arquivadas não aparecem aqui. Elas continuam visíveis nas
24+estatísticas, mas não dá mais para contar tempo nelas.
25+
26+Se a equipe ainda não tem categoria nenhuma, a lista dá lugar a um convite para
27+criar uma, e o link “Gerenciar categorias” espera logo abaixo.
added docs/site-documentation/content/ecrans/categories.pt-br.md +48 -0
new file mode 100644
@@ -0,0 +1,48 @@
1++++
2+title = "As categorias e os grupos"
3+description = "Criar, renomear, arquivar, e separar certas categorias."
4+weight = 14
5++++
6+
7+{{<shot name="categories" alt="Tela Categorias: lembrete de que as categorias pertencem à equipe, campo de adição, depois a lista das categorias com sua cor." lang={lang} legende="Um campo para adicionar, a lista logo abaixo." />}}
8+
9+Chega-se aqui pela aba Adicionar ou pelos Ajustes, pelo link “Gerenciar
10+categorias”.
11+
12+## Criar, renomear, arquivar
13+
14+Criar uma categoria cabe num campo e num botão. Renomear se faz no lugar,
15+alterando o texto na lista e confirmando com a tecla Enter.
16+
17+Uma categoria que não serve mais se arquiva em vez de ser excluída. Ela some
18+das listas de registro, vai para o fim da tela, apagada, e os tempos já
19+contados nela continuam intactos nas estatísticas. Uma categoria arquivada se
20+restaura com um gesto.
21+
22+A cor não é um ajuste. Ela vem da ordem de criação dentro da equipe, numa
23+paleta de quinze tons, o que garante que uma cor quer dizer a mesma coisa em
24+todas as telas e para todo mundo.
25+
26+## Os grupos
27+
28+{{<extrait name="x-groupe-carte" alt="Cartão do grupo “Temps avec Alix” contendo três categorias, Balade, Histoires e Jeux, cada uma com um xis para tirar." lang={lang} legende="O grupo existe enquanto uma categoria o carregar." />}}
29+
30+Embaixo, a seção Grupos permite separar categorias. O tempo contado nelas sai
31+das estatísticas da equipe e aparece num painel próprio.
32+
33+Não existe tela de criação de grupo: você escolhe uma categoria, escreve um
34+nome de grupo, e o grupo existe. Ele some sozinho quando nenhuma categoria o
35+carrega mais. Um grupo é um rótulo, nada além disso.
36+
37+O formulário sugere os grupos que já existem enquanto você digita, o que evita
38+criar um segundo por causa de uma maiúscula esquecida.
39+
40+## Para que servem os grupos
41+
42+Um grupo se justifica quando um assunto distorceria a leitura do resto: o
43+cuidado com alguém da família, o tempo de lazer com uma criança. É interessante
44+de medir, mas não se compara com a roupa suja.
45+
46+Esse recurso não é útil para todo mundo. Se você quer mesmo separar medições de
47+categoria (por exemplo, uma obra em paralelo com a vida cotidiana), pode ser
48+mais interessante fazer duas equipes.
new file mode 100644
@@ -0,0 +1,48 @@
1++++
2+title = "As categorias e os grupos"
3+description = "Criar, renomear, arquivar, e separar certas categorias."
4+weight = 14
5++++
6+
7+{{<shot name="categories" alt="Tela Categorias: lembrete de que as categorias pertencem à equipe, campo de adição, depois a lista das categorias com sua cor." lang={lang} legende="Um campo para adicionar, a lista logo abaixo." />}}
8+
9+Chega-se aqui pela aba Adicionar ou pelos Ajustes, pelo link “Gerenciar
10+categorias”.
11+
12+## Criar, renomear, arquivar
13+
14+Criar uma categoria cabe num campo e num botão. Renomear se faz no lugar,
15+alterando o texto na lista e confirmando com a tecla Enter.
16+
17+Uma categoria que não serve mais se arquiva em vez de ser excluída. Ela some
18+das listas de registro, vai para o fim da tela, apagada, e os tempos já
19+contados nela continuam intactos nas estatísticas. Uma categoria arquivada se
20+restaura com um gesto.
21+
22+A cor não é um ajuste. Ela vem da ordem de criação dentro da equipe, numa
23+paleta de quinze tons, o que garante que uma cor quer dizer a mesma coisa em
24+todas as telas e para todo mundo.
25+
26+## Os grupos
27+
28+{{<extrait name="x-groupe-carte" alt="Cartão do grupo “Temps avec Alix” contendo três categorias, Balade, Histoires e Jeux, cada uma com um xis para tirar." lang={lang} legende="O grupo existe enquanto uma categoria o carregar." />}}
29+
30+Embaixo, a seção Grupos permite separar categorias. O tempo contado nelas sai
31+das estatísticas da equipe e aparece num painel próprio.
32+
33+Não existe tela de criação de grupo: você escolhe uma categoria, escreve um
34+nome de grupo, e o grupo existe. Ele some sozinho quando nenhuma categoria o
35+carrega mais. Um grupo é um rótulo, nada além disso.
36+
37+O formulário sugere os grupos que já existem enquanto você digita, o que evita
38+criar um segundo por causa de uma maiúscula esquecida.
39+
40+## Para que servem os grupos
41+
42+Um grupo se justifica quando um assunto distorceria a leitura do resto: o
43+cuidado com alguém da família, o tempo de lazer com uma criança. É interessante
44+de medir, mas não se compara com a roupa suja.
45+
46+Esse recurso não é útil para todo mundo. Se você quer mesmo separar medições de
47+categoria (por exemplo, uma obra em paralelo com a vida cotidiana), pode ser
48+mais interessante fazer duas equipes.
added docs/site-documentation/content/ecrans/duree.pt-br.md +27 -0
new file mode 100644
@@ -0,0 +1,27 @@
1++++
2+title = "Etapa 2: a duração e a data"
3+description = "Quanto tempo passou, e quando."
4+weight = 6
5++++
6+
7+{{<shot name="ajouter-duree" alt="Etapa 2: nome da categoria escolhida, contador de minutos com botões menos e mais, atalhos de 5, 15, 30, 45 minutos e 1 h, seletor de data, botão Registrar tempo." lang={lang} legende="A duração primeiro, a data depois, a confirmação embaixo." />}}
8+
9+Segunda etapa. A categoria escolhida fica lembrada no alto, com a cor dela, e
10+um link deixa trocar sem perder o resto.
11+
12+## Três jeitos de informar uma duração
13+
14+{{<extrait name="x-stepper" alt="Contador de duração: botão menos à esquerda, o número 30 no centro, botão mais à direita." lang={lang} legende="O contador anda de cinco em cinco minutos." />}}
15+
16+Os botões mais e menos andam de cinco minutos, o que basta na maioria dos
17+casos. Os atalhos embaixo colocam uma duração de uma vez só. E o próprio número
18+é um campo de digitação: para três horas e quinze, você digita o valor em vez
19+de dar quarenta cliques.
20+
21+Não existe teto, uma duração só precisa ser maior que zero.
22+
23+## A data
24+
25+A data de hoje vem proposta por padrão, e duas setas voltam um dia para
26+recuperar um esquecimento. A seta “próximo” some assim que você volta a hoje:
27+não se conta tempo adiantado.
new file mode 100644
@@ -0,0 +1,27 @@
1++++
2+title = "Etapa 2: a duração e a data"
3+description = "Quanto tempo passou, e quando."
4+weight = 6
5++++
6+
7+{{<shot name="ajouter-duree" alt="Etapa 2: nome da categoria escolhida, contador de minutos com botões menos e mais, atalhos de 5, 15, 30, 45 minutos e 1 h, seletor de data, botão Registrar tempo." lang={lang} legende="A duração primeiro, a data depois, a confirmação embaixo." />}}
8+
9+Segunda etapa. A categoria escolhida fica lembrada no alto, com a cor dela, e
10+um link deixa trocar sem perder o resto.
11+
12+## Três jeitos de informar uma duração
13+
14+{{<extrait name="x-stepper" alt="Contador de duração: botão menos à esquerda, o número 30 no centro, botão mais à direita." lang={lang} legende="O contador anda de cinco em cinco minutos." />}}
15+
16+Os botões mais e menos andam de cinco minutos, o que basta na maioria dos
17+casos. Os atalhos embaixo colocam uma duração de uma vez só. E o próprio número
18+é um campo de digitação: para três horas e quinze, você digita o valor em vez
19+de dar quarenta cliques.
20+
21+Não existe teto, uma duração só precisa ser maior que zero.
22+
23+## A data
24+
25+A data de hoje vem proposta por padrão, e duas setas voltam um dia para
26+recuperar um esquecimento. A seta “próximo” some assim que você volta a hoje:
27+não se conta tempo adiantado.
added docs/site-documentation/content/ecrans/mes-temps.pt-br.md +16 -0
new file mode 100644
@@ -0,0 +1,16 @@
1++++
2+title = "Meus tempos"
3+description = "A lista dos meus registros na equipe ativa, do mais recente ao mais antigo."
4+weight = 8
5++++
6+
7+{{<shot name="mes-temps" alt="Lista “Meus tempos”: uma linha por registro, com a cor da categoria, o nome dela, a data e a duração, mais um lápis de edição." lang={lang} legende="Vinte linhas, depois “Ver mais”." />}}
8+
9+Esta tela mostra só os meus registros, na equipe ativa, os mais recentes
10+primeiro. A gente vem aqui para conferir ou corrigir.
11+
12+Um tempo pertence a quem o registrou, e só essa pessoa pode alterá-lo.
13+
14+Cada linha tem um lápis que leva à [página de
15+edição](@/ecrans/modifier-temps.pt-br.md). Quando não há nada para mostrar, uma
16+mensagem convida a começar em vez de deixar uma página em branco.
new file mode 100644
@@ -0,0 +1,16 @@
1++++
2+title = "Meus tempos"
3+description = "A lista dos meus registros na equipe ativa, do mais recente ao mais antigo."
4+weight = 8
5++++
6+
7+{{<shot name="mes-temps" alt="Lista “Meus tempos”: uma linha por registro, com a cor da categoria, o nome dela, a data e a duração, mais um lápis de edição." lang={lang} legende="Vinte linhas, depois “Ver mais”." />}}
8+
9+Esta tela mostra só os meus registros, na equipe ativa, os mais recentes
10+primeiro. A gente vem aqui para conferir ou corrigir.
11+
12+Um tempo pertence a quem o registrou, e só essa pessoa pode alterá-lo.
13+
14+Cada linha tem um lápis que leva à [página de
15+edição](@/ecrans/modifier-temps.pt-br.md). Quando não há nada para mostrar, uma
16+mensagem convida a começar em vez de deixar uma página em branco.
added docs/site-documentation/content/ecrans/minuteur.pt-br.md +31 -0
new file mode 100644
@@ -0,0 +1,31 @@
1++++
2+title = "O cronômetro"
3+description = "Uma medição em andamento, visível em todo lugar, que dá para encerrar ou jogar fora."
4+weight = 4
5++++
6+
7+{{<shot name="minuteur" alt="Tela do cronômetro: cartão damasco “CRONÔMETRO EM ANDAMENTO”, tempo decorrido em números grandes, hora de início, botões Encerrar o cronômetro e Cancelar o cronômetro." lang={lang} legende="Um número enorme e duas saídas." />}}
8+
9+Uma vez iniciado, o cronômetro toma a aba Adicionar inteira. O contador sobe a
10+cada segundo, a hora de início fica lembrada embaixo, e dois botões esperam:
11+encerrar, ou cancelar.
12+
13+## A faixa, para não esquecer
14+
15+{{<extrait name="x-bandeau-minuteur" alt="Faixa marrom no alto da tela Estatísticas, com um ícone de cronômetro, o tempo decorrido e a menção “em andamento”." lang={lang} legende="A faixa acompanha em todas as telas, e tocar nela para a medição." />}}
16+
17+Enquanto uma medição corre, uma faixa a lembra no alto de cada página. Ela
18+mesma é o botão de parada.
19+
20+Passando de quatro horas, a medição foi mais provavelmente esquecida do que
21+vivida: um aviso diz isso na hora de registrar.
22+
23+## Encerrar é chegar na etapa 2
24+
25+Parar o cronômetro não cria um tempo na hora. A medição fica de lado e o
26+aplicativo propõe escolher a categoria, depois apresenta a etapa da duração com
27+os minutos medidos já preenchidos. Nada é gravado enquanto o registro não for
28+confirmado, e a duração proposta continua editável: uma medição de quarenta e
29+sete minutos, dos quais sete foram no telefone, pode virar quarenta.
30+
31+Cancelar joga a medição fora, sem escrever nada.
new file mode 100644
@@ -0,0 +1,31 @@
1++++
2+title = "O cronômetro"
3+description = "Uma medição em andamento, visível em todo lugar, que dá para encerrar ou jogar fora."
4+weight = 4
5++++
6+
7+{{<shot name="minuteur" alt="Tela do cronômetro: cartão damasco “CRONÔMETRO EM ANDAMENTO”, tempo decorrido em números grandes, hora de início, botões Encerrar o cronômetro e Cancelar o cronômetro." lang={lang} legende="Um número enorme e duas saídas." />}}
8+
9+Uma vez iniciado, o cronômetro toma a aba Adicionar inteira. O contador sobe a
10+cada segundo, a hora de início fica lembrada embaixo, e dois botões esperam:
11+encerrar, ou cancelar.
12+
13+## A faixa, para não esquecer
14+
15+{{<extrait name="x-bandeau-minuteur" alt="Faixa marrom no alto da tela Estatísticas, com um ícone de cronômetro, o tempo decorrido e a menção “em andamento”." lang={lang} legende="A faixa acompanha em todas as telas, e tocar nela para a medição." />}}
16+
17+Enquanto uma medição corre, uma faixa a lembra no alto de cada página. Ela
18+mesma é o botão de parada.
19+
20+Passando de quatro horas, a medição foi mais provavelmente esquecida do que
21+vivida: um aviso diz isso na hora de registrar.
22+
23+## Encerrar é chegar na etapa 2
24+
25+Parar o cronômetro não cria um tempo na hora. A medição fica de lado e o
26+aplicativo propõe escolher a categoria, depois apresenta a etapa da duração com
27+os minutos medidos já preenchidos. Nada é gravado enquanto o registro não for
28+confirmado, e a duração proposta continua editável: uma medição de quarenta e
29+sete minutos, dos quais sete foram no telefone, pode virar quarenta.
30+
31+Cancelar joga a medição fora, sem escrever nada.
added docs/site-documentation/content/ecrans/modifier-temps.pt-br.md +12 -0
new file mode 100644
@@ -0,0 +1,12 @@
1++++
2+title = "Editar um tempo"
3+description = "Corrigir uma categoria, uma duração, uma data, ou apagar o registro."
4+weight = 9
5++++
6+
7+{{<shot name="modifier-temps" alt="Tela Editar o tempo: lista suspensa de categoria, campo de duração em minutos, campo de data, botão Salvar e botão Excluir." lang={lang} legende="Corrigir a categoria, a duração ou a data, ou apagar tudo." />}}
8+
9+O servidor confere duas coisas antes de abrir esta tela: que o registro é mesmo
10+meu, e que ele pertence à equipe ativa. Se não, é uma página 404.
11+
12+A exclusão é imediata e definitiva.
new file mode 100644
@@ -0,0 +1,12 @@
1++++
2+title = "Editar um tempo"
3+description = "Corrigir uma categoria, uma duração, uma data, ou apagar o registro."
4+weight = 9
5++++
6+
7+{{<shot name="modifier-temps" alt="Tela Editar o tempo: lista suspensa de categoria, campo de duração em minutos, campo de data, botão Salvar e botão Excluir." lang={lang} legende="Corrigir a categoria, a duração ou a data, ou apagar tudo." />}}
8+
9+O servidor confere duas coisas antes de abrir esta tela: que o registro é mesmo
10+meu, e que ele pertence à equipe ativa. Se não, é uma página 404.
11+
12+A exclusão é imediata e definitiva.
modified docs/site-documentation/content/ecrans/parametres.de.md +3 -2
@@ -42,8 +42,9 @@ zwei Teams angehöre: man ist immer irgendwo Mitglied.
4242
4343 ## Sprache und Darstellung
4444
45-Die Sprache der Oberfläche wird hier gewählt, zwischen Französisch, Englisch
46-und Deutsch. Diese Einstellung gehört zum Konto, nicht zum Browser.
45+Die Sprache der Oberfläche wird hier gewählt, zwischen Französisch, Englisch,
46+Deutsch und Portugiesisch. Diese Einstellung gehört zum Konto, nicht zum
47+Browser.
4748
4849 Direkt darunter bietet das Anzeigethema das Aussehen Organic, das der
4950 Screenshots dieser Dokumentation, sowie ein kontraststarkes Schwarzweiß für
@@ -42,8 +42,9 @@ zwei Teams angehöre: man ist immer irgendwo Mitglied.
42 42
43 ## Sprache und Darstellung43 ## Sprache und Darstellung
44 44
45-Die Sprache der Oberfläche wird hier gewählt, zwischen Französisch, Englisch45+Die Sprache der Oberfläche wird hier gewählt, zwischen Französisch, Englisch,
46-und Deutsch. Diese Einstellung gehört zum Konto, nicht zum Browser.46+Deutsch und Portugiesisch. Diese Einstellung gehört zum Konto, nicht zum
47+Browser.
47 48
48 Direkt darunter bietet das Anzeigethema das Aussehen Organic, das der49 Direkt darunter bietet das Anzeigethema das Aussehen Organic, das der
49 Screenshots dieser Dokumentation, sowie ein kontraststarkes Schwarzweiß für50 Screenshots dieser Dokumentation, sowie ein kontraststarkes Schwarzweiß für
modified docs/site-documentation/content/ecrans/parametres.en.md +2 -2
@@ -41,8 +41,8 @@ you are always a member somewhere.
4141
4242 ## Language and display
4343
44-The interface language is chosen here, between French, English and German. It
45-is a setting of the account, not of the browser.
44+The interface language is chosen here, between French, English, German and
45+Portuguese. It is a setting of the account, not of the browser.
4646
4747 Just below, the display theme offers the Organic look, the one in this
4848 documentation's screenshots, and a high-contrast black and white look for
@@ -41,8 +41,8 @@ you are always a member somewhere.
41 41
42 ## Language and display42 ## Language and display
43 43
44-The interface language is chosen here, between French, English and German. It44+The interface language is chosen here, between French, English, German and
45-is a setting of the account, not of the browser.45+Portuguese. It is a setting of the account, not of the browser.
46 46
47 Just below, the display theme offers the Organic look, the one in this47 Just below, the display theme offers the Organic look, the one in this
48 documentation's screenshots, and a high-contrast black and white look for48 documentation's screenshots, and a high-contrast black and white look for
modified docs/site-documentation/content/ecrans/parametres.md +3 -2
@@ -40,8 +40,9 @@ Le bouton pour quitter l'équipe n'apparaît que si j'appartiens à au moins deu
4040
4141 ## La langue et l'affichage
4242
43-La langue de l'interface se choisit ici, entre le français, l'anglais et
44-l'allemand. Ce réglage est au niveau du compte, pas du navigateur.
43+La langue de l'interface se choisit ici, entre le français, l'anglais,
44+l'allemand et le portugais. Ce réglage est au niveau du compte, pas du
45+navigateur.
4546
4647 Juste dessous, le thème d'affichage propose l'apparence Organic, celle des
4748 captures de cette documentation, et une apparence à contraste élevé, en noir et
@@ -40,8 +40,9 @@ Le bouton pour quitter l'équipe n'apparaît que si j'appartiens à au moins deu
40 40
41 ## La langue et l'affichage41 ## La langue et l'affichage
42 42
43-La langue de l'interface se choisit ici, entre le français, l'anglais et43+La langue de l'interface se choisit ici, entre le français, l'anglais,
44-l'allemand. Ce réglage est au niveau du compte, pas du navigateur.44+l'allemand et le portugais. Ce réglage est au niveau du compte, pas du
45+navigateur.
45 46
46 Juste dessous, le thème d'affichage propose l'apparence Organic, celle des47 Juste dessous, le thème d'affichage propose l'apparence Organic, celle des
47 captures de cette documentation, et une apparence à contraste élevé, en noir et48 captures de cette documentation, et une apparence à contraste élevé, en noir et
added docs/site-documentation/content/ecrans/parametres.pt-br.md +52 -0
new file mode 100644
@@ -0,0 +1,52 @@
1++++
2+title = "As configurações"
3+description = "A equipe, os convites, o idioma, a exibição e a sessão, nessa ordem."
4+weight = 13
5++++
6+
7+{{<shot name="parametres" alt="Tela Configurações: cartão de convite recebido com Aceitar e Recusar, cartão Conta, atalhos Meus registros e Categorias, campo para renomear a equipe." lang={lang} legende="O que pede resposta fica em cima." />}}
8+
9+Esta tela junta tudo o que não cabe em outro lugar:
10+- Convites para equipes
11+- Alterações dos tempos e das categorias (para quem pensa assim)
12+- Minhas equipes
13+- Exibição
14+- Minha conta
15+
16+## Os convites, bem no alto
17+
18+{{<extrait name="x-invitation" alt="Cartão de convite: “noa convida você para entrar na equipe Copropriété”, botões Aceitar e Recusar." lang={lang} />}}
19+
20+Um convite recebido aparece num cartão colorido, com dois botões. Um contador
21+também aparece na aba Ajustes.
22+
23+Aceitar faz entrar na equipe e já muda para ela. Recusar não avisa ninguém, e
24+não impede um novo convite mais tarde.
25+
26+## Gerenciar as equipes e convidar membros
27+
28+A partir desta tela, qualquer membro pode renomear a equipe, convidar alguém
29+pelo nome de usuário, cancelar um convite pendente, criar uma nova equipe, ou
30+sair desta. Não existe dono de equipe, e portanto não existe alguém a quem
31+pedir permissão.
32+
33+Os erros de convite são explícitos e aparecem ao lado do campo: conta
34+desconhecida, já é membro, convite já pendente. É o único lugar em que o
35+aplicativo pode dizer que uma conta existe, e isso é assumido, já que é preciso
36+poder convidar alguém.
37+
38+O botão para sair da equipe só aparece se eu pertenço a pelo menos duas
39+equipes: a gente é sempre membro de algum lugar.
40+
41+## O idioma e a exibição
42+
43+O idioma da interface se escolhe aqui, entre francês, inglês, alemão e
44+português. Esse ajuste é da conta, não do navegador.
45+
46+Logo abaixo, o tema de exibição oferece a aparência Organic, a das capturas
47+desta documentação, e uma aparência de alto contraste, em preto e branco, para
48+quem precisa de legibilidade máxima.
49+
50+## A sessão
51+
52+Bem embaixo, a troca de senha e a saída da conta.
new file mode 100644
@@ -0,0 +1,52 @@
1++++
2+title = "As configurações"
3+description = "A equipe, os convites, o idioma, a exibição e a sessão, nessa ordem."
4+weight = 13
5++++
6+
7+{{<shot name="parametres" alt="Tela Configurações: cartão de convite recebido com Aceitar e Recusar, cartão Conta, atalhos Meus registros e Categorias, campo para renomear a equipe." lang={lang} legende="O que pede resposta fica em cima." />}}
8+
9+Esta tela junta tudo o que não cabe em outro lugar:
10+- Convites para equipes
11+- Alterações dos tempos e das categorias (para quem pensa assim)
12+- Minhas equipes
13+- Exibição
14+- Minha conta
15+
16+## Os convites, bem no alto
17+
18+{{<extrait name="x-invitation" alt="Cartão de convite: “noa convida você para entrar na equipe Copropriété”, botões Aceitar e Recusar." lang={lang} />}}
19+
20+Um convite recebido aparece num cartão colorido, com dois botões. Um contador
21+também aparece na aba Ajustes.
22+
23+Aceitar faz entrar na equipe e já muda para ela. Recusar não avisa ninguém, e
24+não impede um novo convite mais tarde.
25+
26+## Gerenciar as equipes e convidar membros
27+
28+A partir desta tela, qualquer membro pode renomear a equipe, convidar alguém
29+pelo nome de usuário, cancelar um convite pendente, criar uma nova equipe, ou
30+sair desta. Não existe dono de equipe, e portanto não existe alguém a quem
31+pedir permissão.
32+
33+Os erros de convite são explícitos e aparecem ao lado do campo: conta
34+desconhecida, já é membro, convite já pendente. É o único lugar em que o
35+aplicativo pode dizer que uma conta existe, e isso é assumido, já que é preciso
36+poder convidar alguém.
37+
38+O botão para sair da equipe só aparece se eu pertenço a pelo menos duas
39+equipes: a gente é sempre membro de algum lugar.
40+
41+## O idioma e a exibição
42+
43+O idioma da interface se escolhe aqui, entre francês, inglês, alemão e
44+português. Esse ajuste é da conta, não do navegador.
45+
46+Logo abaixo, o tema de exibição oferece a aparência Organic, a das capturas
47+desta documentação, e uma aparência de alto contraste, em preto e branco, para
48+quem precisa de legibilidade máxima.
49+
50+## A sessão
51+
52+Bem embaixo, a troca de senha e a saída da conta.
added docs/site-documentation/content/ecrans/stats.pt-br.md +58 -0
new file mode 100644
@@ -0,0 +1,58 @@
1++++
2+title = "As estatísticas"
3+description = "Seis gráficos empilhados, painéis por grupo e os detalhes ao toque."
4+weight = 7
5++++
6+
7+{{<shot name="stats" alt="Tela Estatísticas: link “Meus registros”, pastilhas de escopo Maison e Temps avec Alix, depois o gráfico da atividade da semana, uma coluna por dia." lang={lang} legende="O total do período é anunciado no título do gráfico." />}}
8+
9+É a tela que a gente olha a dois, no domingo à noite.
10+
11+## Seis gráficos, do mais fino ao mais largo
12+
13+O primeiro gráfico dá a atividade da semana, uma coluna por dia, colorida por
14+pessoa. É o que conta o ritmo: os dias cheios, os dias vazios, quem segurou a
15+casa na quarta.
16+
17+Os cinco gráficos seguintes são construídos no mesmo princípio: uma coluna por
18+pessoa e segmentos coloridos por categoria. Tem o dia, a semana, o mês, o ano,
19+e depois todo o histórico. A altura é relativa ao máximo exibido, e a maior
20+fatia fica no topo da coluna.
21+
22+{{<extrait name="x-legende" alt="Legenda das categorias: Administratif, Courses, Cuisine, Enfants, Linge, Ménage, cada uma com sua cor." lang={lang} legende="As cores são as mesmas das listas de registro." />}}
23+
24+Duas setas fazem cada gráfico recuar e avançar um período.
25+
26+## Os painéis de grupos
27+
28+{{<extrait name="x-scopes" alt="Duas pastilhas de navegação: Maison, selecionada, e Temps avec Alix." lang={lang} legende="Uma pastilha por painel, o carrossel desliza de um ao outro." />}}
29+
30+Quando categorias foram separadas num [grupo](@/ecrans/categories.pt-br.md),
31+elas saem das estatísticas da equipe e ganham o próprio painel, com os mesmos
32+seis gráficos.
33+
34+{{<shot name="stats-groupe" alt="Painel “Temps avec Alix”: os mesmos gráficos, só com as categorias Balade, Histoires e Jeux." lang={lang} legende="A mesma tela para um assunto que vive à parte." />}}
35+
36+Passa-se de um painel a outro tocando numa pastilha ou arrastando o carrossel.
37+Sem JavaScript, as pastilhas continuam sendo simples âncoras e a navegação
38+funciona do mesmo jeito.
39+
40+Um assunto volumoso esmaga todos os outros num gráfico comum, e certas coisas
41+não se comparam. O tempo passado brincando com uma criança não concorre com o
42+tempo passado fazendo compras.
43+
44+## O detalhe de um segmento
45+
46+{{<shot name="stats-detail" alt="Folha de detalhe aberta embaixo da tela: categoria Enfants, camille, 3 h 15, proporção do tempo dela 29 %, 6 registros." lang={lang} legende="O detalhe de um segmento abre na parte de baixo da tela." />}}
47+
48+Tocar num segmento colorido abre uma folha de detalhe: qual categoria, quem,
49+quanto tempo, que proporção do tempo dessa pessoa no período, e quantos
50+registros.
51+
52+## Quem aparece nas colunas
53+
54+Os membros atuais da equipe, e os antigos membros que têm tempo no período.
55+Quem saiu da equipe não se apaga do histórico: o que foi feito foi feito.
56+
57+No alto da tela, o link “Meus registros” leva à lista dos meus próprios tempos,
58+para corrigir o que precisar.
new file mode 100644
@@ -0,0 +1,58 @@
1++++
2+title = "As estatísticas"
3+description = "Seis gráficos empilhados, painéis por grupo e os detalhes ao toque."
4+weight = 7
5++++
6+
7+{{<shot name="stats" alt="Tela Estatísticas: link “Meus registros”, pastilhas de escopo Maison e Temps avec Alix, depois o gráfico da atividade da semana, uma coluna por dia." lang={lang} legende="O total do período é anunciado no título do gráfico." />}}
8+
9+É a tela que a gente olha a dois, no domingo à noite.
10+
11+## Seis gráficos, do mais fino ao mais largo
12+
13+O primeiro gráfico dá a atividade da semana, uma coluna por dia, colorida por
14+pessoa. É o que conta o ritmo: os dias cheios, os dias vazios, quem segurou a
15+casa na quarta.
16+
17+Os cinco gráficos seguintes são construídos no mesmo princípio: uma coluna por
18+pessoa e segmentos coloridos por categoria. Tem o dia, a semana, o mês, o ano,
19+e depois todo o histórico. A altura é relativa ao máximo exibido, e a maior
20+fatia fica no topo da coluna.
21+
22+{{<extrait name="x-legende" alt="Legenda das categorias: Administratif, Courses, Cuisine, Enfants, Linge, Ménage, cada uma com sua cor." lang={lang} legende="As cores são as mesmas das listas de registro." />}}
23+
24+Duas setas fazem cada gráfico recuar e avançar um período.
25+
26+## Os painéis de grupos
27+
28+{{<extrait name="x-scopes" alt="Duas pastilhas de navegação: Maison, selecionada, e Temps avec Alix." lang={lang} legende="Uma pastilha por painel, o carrossel desliza de um ao outro." />}}
29+
30+Quando categorias foram separadas num [grupo](@/ecrans/categories.pt-br.md),
31+elas saem das estatísticas da equipe e ganham o próprio painel, com os mesmos
32+seis gráficos.
33+
34+{{<shot name="stats-groupe" alt="Painel “Temps avec Alix”: os mesmos gráficos, só com as categorias Balade, Histoires e Jeux." lang={lang} legende="A mesma tela para um assunto que vive à parte." />}}
35+
36+Passa-se de um painel a outro tocando numa pastilha ou arrastando o carrossel.
37+Sem JavaScript, as pastilhas continuam sendo simples âncoras e a navegação
38+funciona do mesmo jeito.
39+
40+Um assunto volumoso esmaga todos os outros num gráfico comum, e certas coisas
41+não se comparam. O tempo passado brincando com uma criança não concorre com o
42+tempo passado fazendo compras.
43+
44+## O detalhe de um segmento
45+
46+{{<shot name="stats-detail" alt="Folha de detalhe aberta embaixo da tela: categoria Enfants, camille, 3 h 15, proporção do tempo dela 29 %, 6 registros." lang={lang} legende="O detalhe de um segmento abre na parte de baixo da tela." />}}
47+
48+Tocar num segmento colorido abre uma folha de detalhe: qual categoria, quem,
49+quanto tempo, que proporção do tempo dessa pessoa no período, e quantos
50+registros.
51+
52+## Quem aparece nas colunas
53+
54+Os membros atuais da equipe, e os antigos membros que têm tempo no período.
55+Quem saiu da equipe não se apaga do histórico: o que foi feito foi feito.
56+
57+No alto da tela, o link “Meus registros” leva à lista dos meus próprios tempos,
58+para corrigir o que precisar.
added docs/site-documentation/content/ecrans/tache-effectuee.pt-br.md +33 -0
new file mode 100644
@@ -0,0 +1,33 @@
1++++
2+title = "Marcar uma tarefa como feita"
3+description = "Terminar, creditar o tempo gasto, e reprogramar no ritmo observado."
4+weight = 12
5++++
6+
7+{{<shot name="tache-effectuee" alt="Tela Tarefa concluída: nome da tarefa, interruptor “Registrar um tempo” com um contador de duração, depois interruptor “Reprogramar” com a data proposta e o ritmo observado." lang={lang} legende="Duas propostas, uma confirmação." />}}
8+
9+Dizer que uma tarefa está feita resolve três coisas de uma vez.
10+
11+## Um, está feita
12+
13+A tarefa volta ao estado concluída, com o nome da pessoa e a data. Nada é
14+apagado: cada mudança de estado fica guardada, o que dá à tarefa uma pequena
15+história.
16+
17+## Dois, registrar o tempo gasto
18+
19+O interruptor “Registrar um tempo” propõe criar um registro na categoria da
20+tarefa, em nome de quem acabou de terminá-la. É facultativo: o tempo talvez já
21+tenha sido medido no cronômetro, ou contado de uma vez para cinco tarefas da
22+mesma categoria. Fora esses casos, esse atalho evita ir registrar em outro
23+lugar.
24+
25+## Três, reprogramar
26+
27+O interruptor “Reprogramar” propõe uma data, calculada a partir das conclusões
28+anteriores dessa tarefa. O aplicativo pega o intervalo mediano entre duas
29+conclusões, aplica um piso de uma semana, e mostra o ritmo que observou, por
30+exemplo “a cada ~8 dias”.
31+
32+Pega-se a mediana em vez da média, porque um mês de férias não deve deslocar
33+todo o ritmo. Essa etapa também é facultativa: o interruptor a desliga.
new file mode 100644
@@ -0,0 +1,33 @@
1++++
2+title = "Marcar uma tarefa como feita"
3+description = "Terminar, creditar o tempo gasto, e reprogramar no ritmo observado."
4+weight = 12
5++++
6+
7+{{<shot name="tache-effectuee" alt="Tela Tarefa concluída: nome da tarefa, interruptor “Registrar um tempo” com um contador de duração, depois interruptor “Reprogramar” com a data proposta e o ritmo observado." lang={lang} legende="Duas propostas, uma confirmação." />}}
8+
9+Dizer que uma tarefa está feita resolve três coisas de uma vez.
10+
11+## Um, está feita
12+
13+A tarefa volta ao estado concluída, com o nome da pessoa e a data. Nada é
14+apagado: cada mudança de estado fica guardada, o que dá à tarefa uma pequena
15+história.
16+
17+## Dois, registrar o tempo gasto
18+
19+O interruptor “Registrar um tempo” propõe criar um registro na categoria da
20+tarefa, em nome de quem acabou de terminá-la. É facultativo: o tempo talvez já
21+tenha sido medido no cronômetro, ou contado de uma vez para cinco tarefas da
22+mesma categoria. Fora esses casos, esse atalho evita ir registrar em outro
23+lugar.
24+
25+## Três, reprogramar
26+
27+O interruptor “Reprogramar” propõe uma data, calculada a partir das conclusões
28+anteriores dessa tarefa. O aplicativo pega o intervalo mediano entre duas
29+conclusões, aplica um piso de uma semana, e mostra o ritmo que observou, por
30+exemplo “a cada ~8 dias”.
31+
32+Pega-se a mediana em vez da média, porque um mês de férias não deve deslocar
33+todo o ritmo. Essa etapa também é facultativa: o interruptor a desliga.
added docs/site-documentation/content/ecrans/tache-formulaire.pt-br.md +32 -0
new file mode 100644
@@ -0,0 +1,32 @@
1++++
2+title = "Criar ou editar uma tarefa"
3+description = "Um nome, uma categoria, uma data, e eventualmente nomes de pessoas."
4+weight = 11
5++++
6+
7+{{<duo a="tache-nouvelle" b="tache-modifier" alt_a="Formulário de nova tarefa: campo Nome da tarefa, escolha da categoria em pastilhas, data de ativação, lista dos membros para atribuir." alt_b="O mesmo formulário em edição, com o nome e a categoria já preenchidos." lang={lang} legende="O mesmo formulário serve para criar e para corrigir." />}}
8+
9+O formulário cabe em quatro campos, e só um deles é facultativo.
10+
11+## O nome, a categoria, a data
12+
13+A categoria se escolhe nas pastilhas coloridas da equipe, as mesmas de todo o
14+resto, o que prende a tarefa a um domínio e lhe dá a cor dela na lista.
15+
16+A data se chama data de ativação: é o dia a partir do qual a tarefa faz
17+sentido. Enquanto esse dia não chega, a tarefa espera no bloco “Em breve”.
18+
19+## Atribuição facultativa
20+
21+Embaixo, a lista dos membros da equipe deixa apontar uma ou várias pessoas. É
22+facultativo, e os outros membros podem pegar a tarefa mesmo assim. A atribuição
23+serve para a exibição, para o filtro “Minhas tarefas” e para a ordem da lista.
24+Ela não dá nem tira direito nenhum.
25+
26+## Edição de uma tarefa
27+
28+O mesmo formulário serve para corrigir uma tarefa que já existe. Uma ressalva:
29+se a tarefa está em andamento, só quem a pegou pode alterá-la.
30+
31+Uma tarefa também se exclui a partir desta tela. A exclusão é imediata e
32+definitiva.
new file mode 100644
@@ -0,0 +1,32 @@
1++++
2+title = "Criar ou editar uma tarefa"
3+description = "Um nome, uma categoria, uma data, e eventualmente nomes de pessoas."
4+weight = 11
5++++
6+
7+{{<duo a="tache-nouvelle" b="tache-modifier" alt_a="Formulário de nova tarefa: campo Nome da tarefa, escolha da categoria em pastilhas, data de ativação, lista dos membros para atribuir." alt_b="O mesmo formulário em edição, com o nome e a categoria já preenchidos." lang={lang} legende="O mesmo formulário serve para criar e para corrigir." />}}
8+
9+O formulário cabe em quatro campos, e só um deles é facultativo.
10+
11+## O nome, a categoria, a data
12+
13+A categoria se escolhe nas pastilhas coloridas da equipe, as mesmas de todo o
14+resto, o que prende a tarefa a um domínio e lhe dá a cor dela na lista.
15+
16+A data se chama data de ativação: é o dia a partir do qual a tarefa faz
17+sentido. Enquanto esse dia não chega, a tarefa espera no bloco “Em breve”.
18+
19+## Atribuição facultativa
20+
21+Embaixo, a lista dos membros da equipe deixa apontar uma ou várias pessoas. É
22+facultativo, e os outros membros podem pegar a tarefa mesmo assim. A atribuição
23+serve para a exibição, para o filtro “Minhas tarefas” e para a ordem da lista.
24+Ela não dá nem tira direito nenhum.
25+
26+## Edição de uma tarefa
27+
28+O mesmo formulário serve para corrigir uma tarefa que já existe. Uma ressalva:
29+se a tarefa está em andamento, só quem a pegou pode alterá-la.
30+
31+Uma tarefa também se exclui a partir desta tela. A exclusão é imediata e
32+definitiva.
added docs/site-documentation/content/ecrans/taches.pt-br.md +35 -0
new file mode 100644
@@ -0,0 +1,35 @@
1++++
2+title = "As tarefas"
3+description = "O que está em andamento, o que há para fazer, o que volta em breve."
4+weight = 10
5++++
6+
7+{{<shot name="taches" alt="Tela Tarefas: bloco “Em andamento” com duas tarefas pegas, depois bloco “A fazer”, cada bloco com um interruptor “Minhas tarefas”." lang={lang} legende="Dois blocos, um interruptor “Minhas tarefas” por bloco." />}}
8+
9+Uma tarefa é algo a fazer, presa a uma categoria e posta numa data. A tela as
10+arruma em três tempos: o que está em andamento, o que há para fazer, e o que
11+chega mais tarde, dobrado embaixo.
12+
13+## Pegar uma tarefa
14+
15+{{<extrait name="x-todo-carte" alt="Cartão de uma tarefa em andamento: bolinha com a cor da categoria, nome da tarefa, menção “pega por sacha” e a data." lang={lang} />}}
16+
17+Pegar uma tarefa a passa para em andamento e mostra quem pegou. Enquanto ela
18+está em andamento, só quem pegou pode alterá-la.
19+
20+Isso evita o grande clássico da vida em comum: duas pessoas fazendo a mesma
21+compra, cada uma convencida de que a outra não ia cuidar disso. Pegar uma
22+tarefa é anunciar.
23+
24+Dá para soltar o que você pegou. Ninguém fica preso, e sair de uma equipe solta
25+automaticamente o que você segurava lá.
26+
27+## Atribuir sem mandar
28+
29+Uma tarefa pode levar o nome de uma ou de várias pessoas. É uma indicação, não
30+uma limitação: qualquer membro pode pegá-la e terminá-la mesmo assim. Essa
31+escolha vem da ausência de hierarquia no aplicativo.
32+
33+Cada bloco tem seu interruptor “Minhas tarefas”, que esconde o que não me diz
34+respeito. O filtro fica escrito no endereço da página: dá para salvar a sua
35+visão nos favoritos.
new file mode 100644
@@ -0,0 +1,35 @@
1++++
2+title = "As tarefas"
3+description = "O que está em andamento, o que há para fazer, o que volta em breve."
4+weight = 10
5++++
6+
7+{{<shot name="taches" alt="Tela Tarefas: bloco “Em andamento” com duas tarefas pegas, depois bloco “A fazer”, cada bloco com um interruptor “Minhas tarefas”." lang={lang} legende="Dois blocos, um interruptor “Minhas tarefas” por bloco." />}}
8+
9+Uma tarefa é algo a fazer, presa a uma categoria e posta numa data. A tela as
10+arruma em três tempos: o que está em andamento, o que há para fazer, e o que
11+chega mais tarde, dobrado embaixo.
12+
13+## Pegar uma tarefa
14+
15+{{<extrait name="x-todo-carte" alt="Cartão de uma tarefa em andamento: bolinha com a cor da categoria, nome da tarefa, menção “pega por sacha” e a data." lang={lang} />}}
16+
17+Pegar uma tarefa a passa para em andamento e mostra quem pegou. Enquanto ela
18+está em andamento, só quem pegou pode alterá-la.
19+
20+Isso evita o grande clássico da vida em comum: duas pessoas fazendo a mesma
21+compra, cada uma convencida de que a outra não ia cuidar disso. Pegar uma
22+tarefa é anunciar.
23+
24+Dá para soltar o que você pegou. Ninguém fica preso, e sair de uma equipe solta
25+automaticamente o que você segurava lá.
26+
27+## Atribuir sem mandar
28+
29+Uma tarefa pode levar o nome de uma ou de várias pessoas. É uma indicação, não
30+uma limitação: qualquer membro pode pegá-la e terminá-la mesmo assim. Essa
31+escolha vem da ausência de hierarquia no aplicativo.
32+
33+Cada bloco tem seu interruptor “Minhas tarefas”, que esconde o que não me diz
34+respeito. O filtro fica escrito no endereço da página: dá para salvar a sua
35+visão nos favoritos.
added docs/site-documentation/shots-seed.sh +312 -0
new file mode 100755
@@ -0,0 +1,312 @@
1+#!/usr/bin/env bash
2+# Prépare une base de développement pour `shots.mjs` : table rase, puis les
3+# équipes et les comptes créés par le binaire exego (c'est lui qui hash les
4+# mots de passe), puis les données que les captures doivent montrer.
5+#
6+# cd docs/site-documentation && ./shots-seed.sh
7+#
8+# Variables :
9+# DATABASE_URL base à remplir (défaut : la base locale du projet)
10+# TT_PASS mot de passe des trois comptes (défaut : exego-demo)
11+# EXEGO comment lancer le binaire (défaut : `exego` s'il est dans le
12+# PATH, sinon `cargo run --quiet --`)
13+#
14+# Ensuite, serveur sur cette base, puis :
15+#
16+# CHROME=/chemin/vers/chrome TT_USER=camille TT_PASS=exego-demo node shots.mjs
17+#
18+# Rejouable : le script efface tout avant d'écrire, donc deux exécutions le
19+# même jour donnent exactement la même base (le tirage des temps est un
20+# hachage, pas un PRNG). Les dates, elles, glissent avec le calendrier.
21+#
22+# Cousin de docs/slides/demo/seed.mjs, qui produit les mêmes données pour les
23+# slides mais suppose la base déjà peuplée de comptes.
24+
25+set -euo pipefail
26+
27+ICI=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
28+RACINE=$(cd "$ICI/../.." && pwd)
29+
30+export DATABASE_URL=${DATABASE_URL:-postgresql://exego:exego@localhost:5432/exego}
31+TT_PASS=${TT_PASS:-exego-demo}
32+
33+# `config::pg_options` lit POSTGRESQL_ADDON_URI EN PREMIER : hérité du shell,
34+# il enverrait le binaire sur une base Clever pendant que psql travaille sur
35+# celle demandée ici. On le retire du décor.
36+unset POSTGRESQL_ADDON_URI
37+
38+# Garde-fou : l'hôte de la prod commence par bpuhu, celui de la base DEV par
39+# b8nju. Le premier n'est pas discutable.
40+if [[ $DATABASE_URL == *bpuhu* ]]; then
41+ echo "refus : cette URL est celle de la base de PRODUCTION." >&2
42+ exit 1
43+fi
44+
45+# L'URL affichée sans son mot de passe.
46+echo "→ base : $(sed -E 's#://[^@/]*@#://#' <<<"$DATABASE_URL")"
47+
48+if [ -n "${EXEGO:-}" ]; then
49+ read -ra exego <<<"$EXEGO"
50+elif command -v exego >/dev/null 2>&1; then
51+ exego=(exego)
52+else
53+ exego=(cargo run --quiet --manifest-path "$RACINE/Cargo.toml" --)
54+fi
55+
56+psql=(psql -X -q -v ON_ERROR_STOP=1 "$DATABASE_URL")
57+
58+# ───────────────────────────────────────────────────────────── table rase
59+
60+# Sur une base vierge les tables n'existent pas encore : le vidage se saute
61+# tout seul, et la première commande exego appliquera les migrations.
62+# Les tables d'énumération (exego_enums) ne sont pas des données : on n'y
63+# touche pas.
64+"${psql[@]}" <<'SQL'
65+DO $$
66+BEGIN
67+ IF to_regclass('public.users') IS NULL THEN
68+ RAISE NOTICE 'base vierge : les migrations vont tourner au premier appel du binaire.';
69+ ELSE
70+ TRUNCATE time_entries, todo_assignees, todo_state_changes, todos,
71+ invitations, timers, team_members, categories, teams,
72+ users, revoked_tokens;
73+ END IF;
74+END $$;
75+SQL
76+
77+# ──────────────────────────────────────────────────── équipes et comptes
78+
79+# Par le binaire, pas par du SQL : lui seul sait hasher un mot de passe en
80+# argon2id, et il pose les adhésions dans le bon ordre. L'ordre compte :
81+# l'équipe active se replie sur l'adhésion la plus ancienne, donc « Maison »
82+# doit être la première de camille et de sacha.
83+for equipe in "Maison" "Asso du quartier" "Copropriété"; do
84+ "${exego[@]}" team add "$equipe" >/dev/null
85+done
86+
87+# camille est le compte des captures, sacha son binôme dans la maison, noa la
88+# voisine qui tient l'asso et d'où vient l'invitation en attente.
89+"${exego[@]}" user add camille --team "Maison" --password "$TT_PASS" >/dev/null
90+"${exego[@]}" user add sacha --team "Maison" --password "$TT_PASS" >/dev/null
91+"${exego[@]}" user add noa --team "Asso du quartier" --password "$TT_PASS" >/dev/null
92+
93+"${exego[@]}" user join camille --team "Asso du quartier" >/dev/null
94+"${exego[@]}" user join sacha --team "Asso du quartier" >/dev/null
95+"${exego[@]}" user join noa --team "Copropriété" >/dev/null
96+
97+echo "→ 3 équipes, 3 comptes (mot de passe : $TT_PASS)"
98+
99+# ─────────────────────────────────────────────────────────────── données
100+
101+"${psql[@]}" <<'SQL'
102+BEGIN;
103+
104+-- UUIDv7 daté : l'application génère ses identifiants en Rust (Uuid::now_v7),
105+-- où l'ordre lexicographique suit l'ordre de création. La couleur d'une
106+-- catégorie est son rang dans ce tri : sans horodatage croissant, la palette
107+-- des captures changerait d'un seed à l'autre.
108+CREATE FUNCTION pg_temp.uuid_v7(ts timestamptz) RETURNS uuid AS $$
109+ SELECT (
110+ lpad(to_hex((extract(epoch FROM ts) * 1000)::bigint), 12, '0')
111+ || '7' || substr(md5(random()::text), 1, 3) -- version 7
112+ || '8' || substr(md5(random()::text), 1, 3) -- variante RFC 4122
113+ || substr(md5(random()::text), 1, 12)
114+ )::uuid
115+$$ LANGUAGE sql VOLATILE;
116+
117+-- Le jour de l'application, pas celui du serveur : tout le calendrier d'Ex Ego
118+-- se calcule en Europe/Paris.
119+CREATE FUNCTION pg_temp.jour(decalage int) RETURNS date AS $$
120+ SELECT ((now() AT TIME ZONE 'Europe/Paris')::date) + decalage
121+$$ LANGUAGE sql STABLE;
122+
123+-- Tirage reproductible : un hachage de la graine plutôt qu'un PRNG. Le
124+-- tirage dépend ainsi du jour ET de l'habitude — un `random()` qui ne
125+-- regarderait que l'habitude, le planificateur le remonterait sur la liste
126+-- VALUES pour l'évaluer une fois pour toutes, et chaque habitude retenue
127+-- tomberait alors les 56 jours d'affilée.
128+CREATE FUNCTION pg_temp.alea(graine text) RETURNS double precision AS $$
129+ SELECT ('x' || substr(md5(graine), 1, 8))::bit(32)::bigint / 4294967296.0
130+$$ LANGUAGE sql IMMUTABLE;
131+
132+CREATE FUNCTION pg_temp.u(text) RETURNS uuid AS $$
133+ SELECT id FROM users WHERE username = $1
134+$$ LANGUAGE sql STABLE;
135+
136+CREATE FUNCTION pg_temp.t(text) RETURNS uuid AS $$
137+ SELECT id FROM teams WHERE name = $1
138+$$ LANGUAGE sql STABLE;
139+
140+CREATE FUNCTION pg_temp.c(text) RETURNS uuid AS $$
141+ SELECT id FROM categories WHERE name = $1
142+$$ LANGUAGE sql STABLE;
143+
144+CREATE FUNCTION pg_temp.todo(text) RETURNS uuid AS $$
145+ SELECT id FROM todos WHERE name = $1
146+$$ LANGUAGE sql STABLE;
147+
148+-- ─────────────────────────────────────────────────────── catégories
149+
150+-- L'ordre de cette liste EST la palette : PALETTE[rang de création] dans
151+-- l'équipe, d'où l'horodatage croissant minute par minute. Étendre par la
152+-- fin, jamais par le milieu, sinon toutes les captures changent de couleur.
153+-- « Temps avec Alix » met trois catégories à part : leur temps sort des
154+-- statistiques de l'équipe et va dans son propre panneau.
155+INSERT INTO categories (id, name, archived, created_at, team_id, group_name)
156+SELECT pg_temp.uuid_v7(now() - interval '60 days' + v.rang * interval '1 minute'),
157+ v.name, v.archived,
158+ now() - interval '60 days' + v.rang * interval '1 minute',
159+ pg_temp.t(v.team), v.groupe
160+ FROM (VALUES
161+ ( 1, 'Maison', 'Cuisine', false, NULL),
162+ ( 2, 'Maison', 'Courses', false, NULL),
163+ ( 3, 'Maison', 'Linge', false, NULL),
164+ ( 4, 'Maison', 'Ménage', false, NULL),
165+ ( 5, 'Maison', 'Enfants', false, NULL),
166+ ( 6, 'Maison', 'Administratif', false, NULL),
167+ ( 7, 'Asso du quartier', 'Réunions', false, NULL),
168+ ( 8, 'Asso du quartier', 'Buvette', false, NULL),
169+ ( 9, 'Asso du quartier', 'Communication', false, NULL),
170+ (10, 'Maison', 'Jeux', false, 'Temps avec Alix'),
171+ (11, 'Maison', 'Histoires', false, 'Temps avec Alix'),
172+ (12, 'Maison', 'Balade', false, 'Temps avec Alix'),
173+ (13, 'Maison', 'Jardin', true, NULL)
174+ ) AS v(rang, team, name, archived, groupe);
175+
176+-- ─────────────────────────────────────────────────────────── temps
177+
178+-- Une habitude = une catégorie, quelqu'un, une probabilité par jour et une
179+-- fourchette de minutes. Sur 56 jours, ça donne des colonnes irrégulières
180+-- mais crédibles, avec un déséquilibre assumé : camille porte ~60 % du temps
181+-- de la maison.
182+INSERT INTO time_entries (id, user_id, category_id, minutes, entry_date, created_at)
183+SELECT pg_temp.uuid_v7(pg_temp.jour(-j.d) + time '20:00'),
184+ pg_temp.u(h.username), pg_temp.c(h.cat),
185+ GREATEST(5, (round((h.lo + pg_temp.alea(j.d || h.cat || h.username || '/min')
186+ * (h.hi - h.lo)) / 5.0) * 5)::int),
187+ pg_temp.jour(-j.d),
188+ pg_temp.jour(-j.d) + time '20:00'
189+ FROM generate_series(0, 55) AS j(d)
190+ CROSS JOIN (VALUES
191+ ('Cuisine', 'camille', 0.80, 25, 50),
192+ ('Cuisine', 'sacha', 0.55, 20, 45),
193+ ('Courses', 'camille', 0.28, 40, 70),
194+ ('Courses', 'sacha', 0.15, 30, 60),
195+ ('Linge', 'camille', 0.40, 20, 40),
196+ ('Linge', 'sacha', 0.28, 15, 35),
197+ ('Ménage', 'camille', 0.35, 30, 60),
198+ ('Ménage', 'sacha', 0.30, 25, 50),
199+ ('Enfants', 'camille', 0.70, 20, 60),
200+ ('Enfants', 'sacha', 0.55, 20, 50),
201+ ('Administratif', 'camille', 0.12, 20, 45),
202+ ('Administratif', 'sacha', 0.08, 15, 40),
203+ ('Réunions', 'noa', 0.18, 60, 90),
204+ ('Réunions', 'camille', 0.12, 60, 90),
205+ ('Réunions', 'sacha', 0.08, 60, 90),
206+ ('Buvette', 'noa', 0.10, 90, 180),
207+ ('Buvette', 'camille', 0.08, 60, 120),
208+ ('Buvette', 'sacha', 0.10, 60, 120),
209+ ('Communication', 'noa', 0.20, 20, 60),
210+ ('Communication', 'camille', 0.05, 20, 40),
211+ ('Communication', 'sacha', 0.03, 20, 40),
212+ -- Temps avec Alix : à part, donc absent des stats d'équipe.
213+ ('Jeux', 'camille', 0.50, 20, 45),
214+ ('Jeux', 'sacha', 0.60, 25, 60),
215+ ('Histoires', 'camille', 0.55, 10, 25),
216+ ('Histoires', 'sacha', 0.45, 10, 20),
217+ ('Balade', 'camille', 0.20, 45, 90),
218+ ('Balade', 'sacha', 0.25, 45, 120)
219+ ) AS h(cat, username, p, lo, hi)
220+ WHERE pg_temp.alea(j.d || h.cat || h.username) < h.p;
221+
222+-- ─────────────────────────────────────────────────────────── tâches
223+
224+-- Une todo est UNE ligne réutilisée : `state` est l'état courant (1 en cours,
225+-- 2 à faire, 3 fait) et l'historique vit dans todo_state_changes.
226+INSERT INTO todos (id, category_id, name, created_at, activation_date, state_id)
227+SELECT pg_temp.uuid_v7(pg_temp.jour(-v.creee) + time '09:00'),
228+ pg_temp.c(v.cat), v.name,
229+ pg_temp.jour(-v.creee) + time '09:00',
230+ pg_temp.jour(v.activation), v.state
231+ FROM (VALUES
232+ ('Nettoyer le frigo', 'Ménage', 12, -2, 1),
233+ ('Prendre rendez-vous chez le pédiatre', 'Enfants', 6, -4, 2),
234+ -- Complétions ~hebdomadaires : la reprogrammation proposée par
235+ -- l'écran « effectuée » a de quoi être crédible (c'est sur cette
236+ -- tâche-là que se prend la capture tache-effectuee).
237+ ('Sortir les poubelles', 'Ménage', 45, 0, 2),
238+ ('Trier les papiers', 'Administratif', 3, 0, 2),
239+ ('Arroser les plantes', 'Ménage', 2, 3, 2),
240+ -- Prise par camille : le compte des captures voit le verrou de son
241+ -- côté (« Relâcher » et « Effectuée »).
242+ ('Ranger la chambre d’Alix', 'Enfants', 5, -1, 1)
243+ ) AS v(name, cat, creee, activation, state);
244+
245+INSERT INTO todo_state_changes (id, todo_id, state_id, user_id, changed_at)
246+SELECT pg_temp.uuid_v7(pg_temp.jour(-v.jour) + time '09:00' + v.rang * interval '1 minute'),
247+ pg_temp.todo(v.todo), v.state, pg_temp.u(v.username),
248+ pg_temp.jour(-v.jour) + time '09:00' + v.rang * interval '1 minute'
249+ FROM (VALUES
250+ ('Nettoyer le frigo', 12, 2, 'camille', 0),
251+ ('Nettoyer le frigo', 1, 1, 'sacha', 1),
252+ ('Prendre rendez-vous chez le pédiatre', 6, 2, 'sacha', 0),
253+ ('Sortir les poubelles', 45, 2, 'camille', 0),
254+ ('Sortir les poubelles', 38, 3, 'sacha', 1),
255+ ('Sortir les poubelles', 38, 2, 'sacha', 2),
256+ ('Sortir les poubelles', 31, 3, 'camille', 3),
257+ ('Sortir les poubelles', 31, 2, 'camille', 4),
258+ ('Sortir les poubelles', 23, 3, 'sacha', 5),
259+ ('Sortir les poubelles', 23, 2, 'sacha', 6),
260+ ('Sortir les poubelles', 16, 3, 'camille', 7),
261+ ('Sortir les poubelles', 16, 2, 'camille', 8),
262+ ('Sortir les poubelles', 8, 3, 'sacha', 9),
263+ ('Sortir les poubelles', 8, 2, 'sacha', 10),
264+ ('Trier les papiers', 3, 2, 'camille', 0),
265+ ('Arroser les plantes', 2, 2, 'sacha', 0),
266+ ('Ranger la chambre d’Alix', 5, 2, 'sacha', 0),
267+ ('Ranger la chambre d’Alix', 0, 1, 'camille', 1)
268+ ) AS v(todo, jour, state, username, rang);
269+
270+-- Assignations informatives : elles nourrissent l'affichage, le filtre
271+-- « Mes tâches » et le tri, jamais un droit.
272+INSERT INTO todo_assignees (todo_id, user_id)
273+SELECT pg_temp.todo(v.todo), pg_temp.u(v.username)
274+ FROM (VALUES
275+ ('Prendre rendez-vous chez le pédiatre', 'camille'),
276+ ('Arroser les plantes', 'sacha')
277+ ) AS v(todo, username);
278+
279+-- ─────────────────────────────────────────────────────── invitation
280+
281+-- Invitation en attente pour camille : c'est elle qui pose le compteur sur
282+-- l'onglet Réglages et qui donne la carte abricot de la capture x-invitation.
283+INSERT INTO invitations (id, team_id, invitee_id, inviter_id, created_at)
284+VALUES (pg_temp.uuid_v7(now() - interval '1 day'),
285+ pg_temp.t('Copropriété'), pg_temp.u('camille'), pg_temp.u('noa'),
286+ now() - interval '1 day');
287+
288+COMMIT;
289+SQL
290+
291+# ────────────────────────────────────────────────────────── récapitulatif
292+
293+psql -X "$DATABASE_URL" -c "
294+SELECT t.name AS equipe,
295+ (SELECT count(*) FROM team_members m WHERE m.team_id = t.id) AS membres,
296+ (SELECT count(*) FROM categories c
297+ WHERE c.team_id = t.id AND NOT c.archived) AS categories,
298+ (SELECT count(*) FROM time_entries e JOIN categories c ON c.id = e.category_id
299+ WHERE c.team_id = t.id) AS temps,
300+ (SELECT count(*) FROM todos td JOIN categories c ON c.id = td.category_id
301+ WHERE c.team_id = t.id) AS taches
302+ FROM teams t ORDER BY t.name;"
303+
304+cat <<EOF
305+Base prête. Lancer le serveur dessus, puis les captures :
306+
307+ DATABASE_URL='$DATABASE_URL' \\
308+ BISCUIT_PRIVATE_KEY=\$(cargo run -- keygen | grep -o '[0-9a-f]\{64\}') \\
309+ PORT=8090 cargo run -- serve
310+
311+ CHROME=/chemin/vers/chrome TT_USER=camille TT_PASS=$TT_PASS node shots.mjs
312+EOF
new file mode 100755
@@ -0,0 +1,312 @@
1+#!/usr/bin/env bash
2+# Prépare une base de développement pour `shots.mjs` : table rase, puis les
3+# équipes et les comptes créés par le binaire exego (c'est lui qui hash les
4+# mots de passe), puis les données que les captures doivent montrer.
5+#
6+# cd docs/site-documentation && ./shots-seed.sh
7+#
8+# Variables :
9+# DATABASE_URL base à remplir (défaut : la base locale du projet)
10+# TT_PASS mot de passe des trois comptes (défaut : exego-demo)
11+# EXEGO comment lancer le binaire (défaut : `exego` s'il est dans le
12+# PATH, sinon `cargo run --quiet --`)
13+#
14+# Ensuite, serveur sur cette base, puis :
15+#
16+# CHROME=/chemin/vers/chrome TT_USER=camille TT_PASS=exego-demo node shots.mjs
17+#
18+# Rejouable : le script efface tout avant d'écrire, donc deux exécutions le
19+# même jour donnent exactement la même base (le tirage des temps est un
20+# hachage, pas un PRNG). Les dates, elles, glissent avec le calendrier.
21+#
22+# Cousin de docs/slides/demo/seed.mjs, qui produit les mêmes données pour les
23+# slides mais suppose la base déjà peuplée de comptes.
24+
25+set -euo pipefail
26+
27+ICI=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
28+RACINE=$(cd "$ICI/../.." && pwd)
29+
30+export DATABASE_URL=${DATABASE_URL:-postgresql://exego:exego@localhost:5432/exego}
31+TT_PASS=${TT_PASS:-exego-demo}
32+
33+# `config::pg_options` lit POSTGRESQL_ADDON_URI EN PREMIER : hérité du shell,
34+# il enverrait le binaire sur une base Clever pendant que psql travaille sur
35+# celle demandée ici. On le retire du décor.
36+unset POSTGRESQL_ADDON_URI
37+
38+# Garde-fou : l'hôte de la prod commence par bpuhu, celui de la base DEV par
39+# b8nju. Le premier n'est pas discutable.
40+if [[ $DATABASE_URL == *bpuhu* ]]; then
41+ echo "refus : cette URL est celle de la base de PRODUCTION." >&2
42+ exit 1
43+fi
44+
45+# L'URL affichée sans son mot de passe.
46+echo "→ base : $(sed -E 's#://[^@/]*@#://#' <<<"$DATABASE_URL")"
47+
48+if [ -n "${EXEGO:-}" ]; then
49+ read -ra exego <<<"$EXEGO"
50+elif command -v exego >/dev/null 2>&1; then
51+ exego=(exego)
52+else
53+ exego=(cargo run --quiet --manifest-path "$RACINE/Cargo.toml" --)
54+fi
55+
56+psql=(psql -X -q -v ON_ERROR_STOP=1 "$DATABASE_URL")
57+
58+# ───────────────────────────────────────────────────────────── table rase
59+
60+# Sur une base vierge les tables n'existent pas encore : le vidage se saute
61+# tout seul, et la première commande exego appliquera les migrations.
62+# Les tables d'énumération (exego_enums) ne sont pas des données : on n'y
63+# touche pas.
64+"${psql[@]}" <<'SQL'
65+DO $$
66+BEGIN
67+ IF to_regclass('public.users') IS NULL THEN
68+ RAISE NOTICE 'base vierge : les migrations vont tourner au premier appel du binaire.';
69+ ELSE
70+ TRUNCATE time_entries, todo_assignees, todo_state_changes, todos,
71+ invitations, timers, team_members, categories, teams,
72+ users, revoked_tokens;
73+ END IF;
74+END $$;
75+SQL
76+
77+# ──────────────────────────────────────────────────── équipes et comptes
78+
79+# Par le binaire, pas par du SQL : lui seul sait hasher un mot de passe en
80+# argon2id, et il pose les adhésions dans le bon ordre. L'ordre compte :
81+# l'équipe active se replie sur l'adhésion la plus ancienne, donc « Maison »
82+# doit être la première de camille et de sacha.
83+for equipe in "Maison" "Asso du quartier" "Copropriété"; do
84+ "${exego[@]}" team add "$equipe" >/dev/null
85+done
86+
87+# camille est le compte des captures, sacha son binôme dans la maison, noa la
88+# voisine qui tient l'asso et d'où vient l'invitation en attente.
89+"${exego[@]}" user add camille --team "Maison" --password "$TT_PASS" >/dev/null
90+"${exego[@]}" user add sacha --team "Maison" --password "$TT_PASS" >/dev/null
91+"${exego[@]}" user add noa --team "Asso du quartier" --password "$TT_PASS" >/dev/null
92+
93+"${exego[@]}" user join camille --team "Asso du quartier" >/dev/null
94+"${exego[@]}" user join sacha --team "Asso du quartier" >/dev/null
95+"${exego[@]}" user join noa --team "Copropriété" >/dev/null
96+
97+echo "→ 3 équipes, 3 comptes (mot de passe : $TT_PASS)"
98+
99+# ─────────────────────────────────────────────────────────────── données
100+
101+"${psql[@]}" <<'SQL'
102+BEGIN;
103+
104+-- UUIDv7 daté : l'application génère ses identifiants en Rust (Uuid::now_v7),
105+-- où l'ordre lexicographique suit l'ordre de création. La couleur d'une
106+-- catégorie est son rang dans ce tri : sans horodatage croissant, la palette
107+-- des captures changerait d'un seed à l'autre.
108+CREATE FUNCTION pg_temp.uuid_v7(ts timestamptz) RETURNS uuid AS $$
109+ SELECT (
110+ lpad(to_hex((extract(epoch FROM ts) * 1000)::bigint), 12, '0')
111+ || '7' || substr(md5(random()::text), 1, 3) -- version 7
112+ || '8' || substr(md5(random()::text), 1, 3) -- variante RFC 4122
113+ || substr(md5(random()::text), 1, 12)
114+ )::uuid
115+$$ LANGUAGE sql VOLATILE;
116+
117+-- Le jour de l'application, pas celui du serveur : tout le calendrier d'Ex Ego
118+-- se calcule en Europe/Paris.
119+CREATE FUNCTION pg_temp.jour(decalage int) RETURNS date AS $$
120+ SELECT ((now() AT TIME ZONE 'Europe/Paris')::date) + decalage
121+$$ LANGUAGE sql STABLE;
122+
123+-- Tirage reproductible : un hachage de la graine plutôt qu'un PRNG. Le
124+-- tirage dépend ainsi du jour ET de l'habitude — un `random()` qui ne
125+-- regarderait que l'habitude, le planificateur le remonterait sur la liste
126+-- VALUES pour l'évaluer une fois pour toutes, et chaque habitude retenue
127+-- tomberait alors les 56 jours d'affilée.
128+CREATE FUNCTION pg_temp.alea(graine text) RETURNS double precision AS $$
129+ SELECT ('x' || substr(md5(graine), 1, 8))::bit(32)::bigint / 4294967296.0
130+$$ LANGUAGE sql IMMUTABLE;
131+
132+CREATE FUNCTION pg_temp.u(text) RETURNS uuid AS $$
133+ SELECT id FROM users WHERE username = $1
134+$$ LANGUAGE sql STABLE;
135+
136+CREATE FUNCTION pg_temp.t(text) RETURNS uuid AS $$
137+ SELECT id FROM teams WHERE name = $1
138+$$ LANGUAGE sql STABLE;
139+
140+CREATE FUNCTION pg_temp.c(text) RETURNS uuid AS $$
141+ SELECT id FROM categories WHERE name = $1
142+$$ LANGUAGE sql STABLE;
143+
144+CREATE FUNCTION pg_temp.todo(text) RETURNS uuid AS $$
145+ SELECT id FROM todos WHERE name = $1
146+$$ LANGUAGE sql STABLE;
147+
148+-- ─────────────────────────────────────────────────────── catégories
149+
150+-- L'ordre de cette liste EST la palette : PALETTE[rang de création] dans
151+-- l'équipe, d'où l'horodatage croissant minute par minute. Étendre par la
152+-- fin, jamais par le milieu, sinon toutes les captures changent de couleur.
153+-- « Temps avec Alix » met trois catégories à part : leur temps sort des
154+-- statistiques de l'équipe et va dans son propre panneau.
155+INSERT INTO categories (id, name, archived, created_at, team_id, group_name)
156+SELECT pg_temp.uuid_v7(now() - interval '60 days' + v.rang * interval '1 minute'),
157+ v.name, v.archived,
158+ now() - interval '60 days' + v.rang * interval '1 minute',
159+ pg_temp.t(v.team), v.groupe
160+ FROM (VALUES
161+ ( 1, 'Maison', 'Cuisine', false, NULL),
162+ ( 2, 'Maison', 'Courses', false, NULL),
163+ ( 3, 'Maison', 'Linge', false, NULL),
164+ ( 4, 'Maison', 'Ménage', false, NULL),
165+ ( 5, 'Maison', 'Enfants', false, NULL),
166+ ( 6, 'Maison', 'Administratif', false, NULL),
167+ ( 7, 'Asso du quartier', 'Réunions', false, NULL),
168+ ( 8, 'Asso du quartier', 'Buvette', false, NULL),
169+ ( 9, 'Asso du quartier', 'Communication', false, NULL),
170+ (10, 'Maison', 'Jeux', false, 'Temps avec Alix'),
171+ (11, 'Maison', 'Histoires', false, 'Temps avec Alix'),
172+ (12, 'Maison', 'Balade', false, 'Temps avec Alix'),
173+ (13, 'Maison', 'Jardin', true, NULL)
174+ ) AS v(rang, team, name, archived, groupe);
175+
176+-- ─────────────────────────────────────────────────────────── temps
177+
178+-- Une habitude = une catégorie, quelqu'un, une probabilité par jour et une
179+-- fourchette de minutes. Sur 56 jours, ça donne des colonnes irrégulières
180+-- mais crédibles, avec un déséquilibre assumé : camille porte ~60 % du temps
181+-- de la maison.
182+INSERT INTO time_entries (id, user_id, category_id, minutes, entry_date, created_at)
183+SELECT pg_temp.uuid_v7(pg_temp.jour(-j.d) + time '20:00'),
184+ pg_temp.u(h.username), pg_temp.c(h.cat),
185+ GREATEST(5, (round((h.lo + pg_temp.alea(j.d || h.cat || h.username || '/min')
186+ * (h.hi - h.lo)) / 5.0) * 5)::int),
187+ pg_temp.jour(-j.d),
188+ pg_temp.jour(-j.d) + time '20:00'
189+ FROM generate_series(0, 55) AS j(d)
190+ CROSS JOIN (VALUES
191+ ('Cuisine', 'camille', 0.80, 25, 50),
192+ ('Cuisine', 'sacha', 0.55, 20, 45),
193+ ('Courses', 'camille', 0.28, 40, 70),
194+ ('Courses', 'sacha', 0.15, 30, 60),
195+ ('Linge', 'camille', 0.40, 20, 40),
196+ ('Linge', 'sacha', 0.28, 15, 35),
197+ ('Ménage', 'camille', 0.35, 30, 60),
198+ ('Ménage', 'sacha', 0.30, 25, 50),
199+ ('Enfants', 'camille', 0.70, 20, 60),
200+ ('Enfants', 'sacha', 0.55, 20, 50),
201+ ('Administratif', 'camille', 0.12, 20, 45),
202+ ('Administratif', 'sacha', 0.08, 15, 40),
203+ ('Réunions', 'noa', 0.18, 60, 90),
204+ ('Réunions', 'camille', 0.12, 60, 90),
205+ ('Réunions', 'sacha', 0.08, 60, 90),
206+ ('Buvette', 'noa', 0.10, 90, 180),
207+ ('Buvette', 'camille', 0.08, 60, 120),
208+ ('Buvette', 'sacha', 0.10, 60, 120),
209+ ('Communication', 'noa', 0.20, 20, 60),
210+ ('Communication', 'camille', 0.05, 20, 40),
211+ ('Communication', 'sacha', 0.03, 20, 40),
212+ -- Temps avec Alix : à part, donc absent des stats d'équipe.
213+ ('Jeux', 'camille', 0.50, 20, 45),
214+ ('Jeux', 'sacha', 0.60, 25, 60),
215+ ('Histoires', 'camille', 0.55, 10, 25),
216+ ('Histoires', 'sacha', 0.45, 10, 20),
217+ ('Balade', 'camille', 0.20, 45, 90),
218+ ('Balade', 'sacha', 0.25, 45, 120)
219+ ) AS h(cat, username, p, lo, hi)
220+ WHERE pg_temp.alea(j.d || h.cat || h.username) < h.p;
221+
222+-- ─────────────────────────────────────────────────────────── tâches
223+
224+-- Une todo est UNE ligne réutilisée : `state` est l'état courant (1 en cours,
225+-- 2 à faire, 3 fait) et l'historique vit dans todo_state_changes.
226+INSERT INTO todos (id, category_id, name, created_at, activation_date, state_id)
227+SELECT pg_temp.uuid_v7(pg_temp.jour(-v.creee) + time '09:00'),
228+ pg_temp.c(v.cat), v.name,
229+ pg_temp.jour(-v.creee) + time '09:00',
230+ pg_temp.jour(v.activation), v.state
231+ FROM (VALUES
232+ ('Nettoyer le frigo', 'Ménage', 12, -2, 1),
233+ ('Prendre rendez-vous chez le pédiatre', 'Enfants', 6, -4, 2),
234+ -- Complétions ~hebdomadaires : la reprogrammation proposée par
235+ -- l'écran « effectuée » a de quoi être crédible (c'est sur cette
236+ -- tâche-là que se prend la capture tache-effectuee).
237+ ('Sortir les poubelles', 'Ménage', 45, 0, 2),
238+ ('Trier les papiers', 'Administratif', 3, 0, 2),
239+ ('Arroser les plantes', 'Ménage', 2, 3, 2),
240+ -- Prise par camille : le compte des captures voit le verrou de son
241+ -- côté (« Relâcher » et « Effectuée »).
242+ ('Ranger la chambre d’Alix', 'Enfants', 5, -1, 1)
243+ ) AS v(name, cat, creee, activation, state);
244+
245+INSERT INTO todo_state_changes (id, todo_id, state_id, user_id, changed_at)
246+SELECT pg_temp.uuid_v7(pg_temp.jour(-v.jour) + time '09:00' + v.rang * interval '1 minute'),
247+ pg_temp.todo(v.todo), v.state, pg_temp.u(v.username),
248+ pg_temp.jour(-v.jour) + time '09:00' + v.rang * interval '1 minute'
249+ FROM (VALUES
250+ ('Nettoyer le frigo', 12, 2, 'camille', 0),
251+ ('Nettoyer le frigo', 1, 1, 'sacha', 1),
252+ ('Prendre rendez-vous chez le pédiatre', 6, 2, 'sacha', 0),
253+ ('Sortir les poubelles', 45, 2, 'camille', 0),
254+ ('Sortir les poubelles', 38, 3, 'sacha', 1),
255+ ('Sortir les poubelles', 38, 2, 'sacha', 2),
256+ ('Sortir les poubelles', 31, 3, 'camille', 3),
257+ ('Sortir les poubelles', 31, 2, 'camille', 4),
258+ ('Sortir les poubelles', 23, 3, 'sacha', 5),
259+ ('Sortir les poubelles', 23, 2, 'sacha', 6),
260+ ('Sortir les poubelles', 16, 3, 'camille', 7),
261+ ('Sortir les poubelles', 16, 2, 'camille', 8),
262+ ('Sortir les poubelles', 8, 3, 'sacha', 9),
263+ ('Sortir les poubelles', 8, 2, 'sacha', 10),
264+ ('Trier les papiers', 3, 2, 'camille', 0),
265+ ('Arroser les plantes', 2, 2, 'sacha', 0),
266+ ('Ranger la chambre d’Alix', 5, 2, 'sacha', 0),
267+ ('Ranger la chambre d’Alix', 0, 1, 'camille', 1)
268+ ) AS v(todo, jour, state, username, rang);
269+
270+-- Assignations informatives : elles nourrissent l'affichage, le filtre
271+-- « Mes tâches » et le tri, jamais un droit.
272+INSERT INTO todo_assignees (todo_id, user_id)
273+SELECT pg_temp.todo(v.todo), pg_temp.u(v.username)
274+ FROM (VALUES
275+ ('Prendre rendez-vous chez le pédiatre', 'camille'),
276+ ('Arroser les plantes', 'sacha')
277+ ) AS v(todo, username);
278+
279+-- ─────────────────────────────────────────────────────── invitation
280+
281+-- Invitation en attente pour camille : c'est elle qui pose le compteur sur
282+-- l'onglet Réglages et qui donne la carte abricot de la capture x-invitation.
283+INSERT INTO invitations (id, team_id, invitee_id, inviter_id, created_at)
284+VALUES (pg_temp.uuid_v7(now() - interval '1 day'),
285+ pg_temp.t('Copropriété'), pg_temp.u('camille'), pg_temp.u('noa'),
286+ now() - interval '1 day');
287+
288+COMMIT;
289+SQL
290+
291+# ────────────────────────────────────────────────────────── récapitulatif
292+
293+psql -X "$DATABASE_URL" -c "
294+SELECT t.name AS equipe,
295+ (SELECT count(*) FROM team_members m WHERE m.team_id = t.id) AS membres,
296+ (SELECT count(*) FROM categories c
297+ WHERE c.team_id = t.id AND NOT c.archived) AS categories,
298+ (SELECT count(*) FROM time_entries e JOIN categories c ON c.id = e.category_id
299+ WHERE c.team_id = t.id) AS temps,
300+ (SELECT count(*) FROM todos td JOIN categories c ON c.id = td.category_id
301+ WHERE c.team_id = t.id) AS taches
302+ FROM teams t ORDER BY t.name;"
303+
304+cat <<EOF
305+Base prête. Lancer le serveur dessus, puis les captures :
306+
307+ DATABASE_URL='$DATABASE_URL' \\
308+ BISCUIT_PRIVATE_KEY=\$(cargo run -- keygen | grep -o '[0-9a-f]\{64\}') \\
309+ PORT=8090 cargo run -- serve
310+
311+ CHROME=/chemin/vers/chrome TT_USER=camille TT_PASS=$TT_PASS node shots.mjs
312+EOF
modified docs/site-documentation/shots.mjs +9 -7
@@ -1,12 +1,14 @@
11 // Captures d'écran du site de documentation — Chrome headless via
22 // puppeteer-core, calqué sur docs/slides/demo/capture.mjs.
33 //
4-// Particularité : la documentation est trilingue, donc chaque écran est
5-// capturé trois fois, une par langue de l'utilisateur (la langue est un
6-// réglage de compte, pas du navigateur). Sortie dans static/img/<lang>/.
4+// Particularité : la documentation suit les quatre langues de l'application,
5+// donc chaque écran est capturé quatre fois, une par langue de l'utilisateur
6+// (la langue est un réglage de compte, pas du navigateur). Sortie dans
7+// static/img/<lang>/, avec le code de langue de l'application (pt-br compris,
8+// puisque c'est aussi celui des dossiers et des URL du site).
79 // Les pages anonymes (connexion, erreurs) sont toujours rendues dans la
810 // langue par défaut de l'instance : elles ne sont capturées qu'une fois et
9-// recopiées dans les trois dossiers.
11+// recopiées dans les autres dossiers.
1012 //
1113 // Prérequis : un serveur exego sur la base DEV, seedée par
1214 // docs/slides/demo/seed.mjs, et les dépendances node d'a11y/.
@@ -41,7 +43,7 @@ const CHROME =
4143
4244 const HERE = path.dirname(fileURLToPath(import.meta.url));
4345 const IMG = path.join(HERE, 'static', 'img');
44-const LANGS = ['fr', 'en', 'de'];
46+const LANGS = ['fr', 'en', 'de', 'pt-br'];
4547 for (const l of LANGS) mkdirSync(path.join(IMG, l), { recursive: true });
4648
4749 // Semaine ISO précédente : toujours pleine, donc plus parlante que la semaine
@@ -108,7 +110,7 @@ async function go(pg, url) {
108110 if (url.includes('#')) await wait(700);
109111 }
110112
111-// --- Écrans anonymes : une seule prise, recopiée dans les trois langues ----
113+// --- Écrans anonymes : une seule prise, recopiée dans les autres langues ---
112114 {
113115 const anon = await browser.createBrowserContext();
114116 const pg = await anon.newPage();
@@ -262,7 +264,7 @@ for (const lang of LANGS) {
262264 await go(page, '/temps/nouveau');
263265 await full(page, lang, 'minuteur');
264266 await go(page, '/stats');
265- await crop(page, lang, 'x-bandeau-minuteur', '.timer-banner', 8);
267+ await crop(page, lang, 'x-bandeau-minuteur', '.timer-dock .timer-btn', 8);
266268 await go(page, '/temps/nouveau');
267269 await page.evaluate(() => {
268270 document.querySelector('form[action="/timer/abandonner"] button')?.click();
@@ -1,12 +1,14 @@
1 // Captures d'écran du site de documentation — Chrome headless via1 // Captures d'écran du site de documentation — Chrome headless via
2 // puppeteer-core, calqué sur docs/slides/demo/capture.mjs.2 // puppeteer-core, calqué sur docs/slides/demo/capture.mjs.
3 //3 //
4-// Particularité : la documentation est trilingue, donc chaque écran est4+// Particularité : la documentation suit les quatre langues de l'application,
5-// capturé trois fois, une par langue de l'utilisateur (la langue est un5+// donc chaque écran est capturé quatre fois, une par langue de l'utilisateur
6-// réglage de compte, pas du navigateur). Sortie dans static/img/<lang>/.6+// (la langue est un réglage de compte, pas du navigateur). Sortie dans
7+// static/img/<lang>/, avec le code de langue de l'application (pt-br compris,
8+// puisque c'est aussi celui des dossiers et des URL du site).
7 // Les pages anonymes (connexion, erreurs) sont toujours rendues dans la9 // Les pages anonymes (connexion, erreurs) sont toujours rendues dans la
8 // langue par défaut de l'instance : elles ne sont capturées qu'une fois et10 // langue par défaut de l'instance : elles ne sont capturées qu'une fois et
9-// recopiées dans les trois dossiers.11+// recopiées dans les autres dossiers.
10 //12 //
11 // Prérequis : un serveur exego sur la base DEV, seedée par13 // Prérequis : un serveur exego sur la base DEV, seedée par
12 // docs/slides/demo/seed.mjs, et les dépendances node d'a11y/.14 // docs/slides/demo/seed.mjs, et les dépendances node d'a11y/.
@@ -41,7 +43,7 @@ const CHROME =
41 43
42 const HERE = path.dirname(fileURLToPath(import.meta.url));44 const HERE = path.dirname(fileURLToPath(import.meta.url));
43 const IMG = path.join(HERE, 'static', 'img');45 const IMG = path.join(HERE, 'static', 'img');
44-const LANGS = ['fr', 'en', 'de'];46+const LANGS = ['fr', 'en', 'de', 'pt-br'];
45 for (const l of LANGS) mkdirSync(path.join(IMG, l), { recursive: true });47 for (const l of LANGS) mkdirSync(path.join(IMG, l), { recursive: true });
46 48
47 // Semaine ISO précédente : toujours pleine, donc plus parlante que la semaine49 // Semaine ISO précédente : toujours pleine, donc plus parlante que la semaine
@@ -108,7 +110,7 @@ async function go(pg, url) {
108 if (url.includes('#')) await wait(700);110 if (url.includes('#')) await wait(700);
109 }111 }
110 112
111-// --- Écrans anonymes : une seule prise, recopiée dans les trois langues ----113+// --- Écrans anonymes : une seule prise, recopiée dans les autres langues ---
112 {114 {
113 const anon = await browser.createBrowserContext();115 const anon = await browser.createBrowserContext();
114 const pg = await anon.newPage();116 const pg = await anon.newPage();
@@ -262,7 +264,7 @@ for (const lang of LANGS) {
262 await go(page, '/temps/nouveau');264 await go(page, '/temps/nouveau');
263 await full(page, lang, 'minuteur');265 await full(page, lang, 'minuteur');
264 await go(page, '/stats');266 await go(page, '/stats');
265- await crop(page, lang, 'x-bandeau-minuteur', '.timer-banner', 8);267+ await crop(page, lang, 'x-bandeau-minuteur', '.timer-dock .timer-btn', 8);
266 await go(page, '/temps/nouveau');268 await go(page, '/temps/nouveau');
267 await page.evaluate(() => {269 await page.evaluate(() => {
268 document.querySelector('form[action="/timer/abandonner"] button')?.click();270 document.querySelector('form[action="/timer/abandonner"] button')?.click();
modified docs/site-documentation/static/img/de/ajouter-categorie.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/ajouter-categorie.jxl and b/docs/site-documentation/static/img/de/ajouter-categorie.jxl differ
Binary files a/docs/site-documentation/static/img/de/ajouter-categorie.jxl and b/docs/site-documentation/static/img/de/ajouter-categorie.jxl differBinary files a/docs/site-documentation/static/img/de/ajouter-categorie.jxl and b/docs/site-documentation/static/img/de/ajouter-categorie.jxl differ
modified docs/site-documentation/static/img/de/ajouter-categorie.png +0 -0
Binary files a/docs/site-documentation/static/img/de/ajouter-categorie.png and b/docs/site-documentation/static/img/de/ajouter-categorie.png differ
Binary files a/docs/site-documentation/static/img/de/ajouter-categorie.png and b/docs/site-documentation/static/img/de/ajouter-categorie.png differBinary files a/docs/site-documentation/static/img/de/ajouter-categorie.png and b/docs/site-documentation/static/img/de/ajouter-categorie.png differ
modified docs/site-documentation/static/img/de/ajouter-choix.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/ajouter-choix.jxl and b/docs/site-documentation/static/img/de/ajouter-choix.jxl differ
Binary files a/docs/site-documentation/static/img/de/ajouter-choix.jxl and b/docs/site-documentation/static/img/de/ajouter-choix.jxl differBinary files a/docs/site-documentation/static/img/de/ajouter-choix.jxl and b/docs/site-documentation/static/img/de/ajouter-choix.jxl differ
modified docs/site-documentation/static/img/de/ajouter-choix.png +0 -0
Binary files a/docs/site-documentation/static/img/de/ajouter-choix.png and b/docs/site-documentation/static/img/de/ajouter-choix.png differ
Binary files a/docs/site-documentation/static/img/de/ajouter-choix.png and b/docs/site-documentation/static/img/de/ajouter-choix.png differBinary files a/docs/site-documentation/static/img/de/ajouter-choix.png and b/docs/site-documentation/static/img/de/ajouter-choix.png differ
modified docs/site-documentation/static/img/de/ajouter-duree.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/ajouter-duree.jxl and b/docs/site-documentation/static/img/de/ajouter-duree.jxl differ
Binary files a/docs/site-documentation/static/img/de/ajouter-duree.jxl and b/docs/site-documentation/static/img/de/ajouter-duree.jxl differBinary files a/docs/site-documentation/static/img/de/ajouter-duree.jxl and b/docs/site-documentation/static/img/de/ajouter-duree.jxl differ
modified docs/site-documentation/static/img/de/ajouter-duree.png +0 -0
Binary files a/docs/site-documentation/static/img/de/ajouter-duree.png and b/docs/site-documentation/static/img/de/ajouter-duree.png differ
Binary files a/docs/site-documentation/static/img/de/ajouter-duree.png and b/docs/site-documentation/static/img/de/ajouter-duree.png differBinary files a/docs/site-documentation/static/img/de/ajouter-duree.png and b/docs/site-documentation/static/img/de/ajouter-duree.png differ
modified docs/site-documentation/static/img/de/categories.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/categories.jxl and b/docs/site-documentation/static/img/de/categories.jxl differ
Binary files a/docs/site-documentation/static/img/de/categories.jxl and b/docs/site-documentation/static/img/de/categories.jxl differBinary files a/docs/site-documentation/static/img/de/categories.jxl and b/docs/site-documentation/static/img/de/categories.jxl differ
modified docs/site-documentation/static/img/de/categories.png +0 -0
Binary files a/docs/site-documentation/static/img/de/categories.png and b/docs/site-documentation/static/img/de/categories.png differ
Binary files a/docs/site-documentation/static/img/de/categories.png and b/docs/site-documentation/static/img/de/categories.png differBinary files a/docs/site-documentation/static/img/de/categories.png and b/docs/site-documentation/static/img/de/categories.png differ
modified docs/site-documentation/static/img/de/connexion.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/connexion.jxl and b/docs/site-documentation/static/img/de/connexion.jxl differ
Binary files a/docs/site-documentation/static/img/de/connexion.jxl and b/docs/site-documentation/static/img/de/connexion.jxl differBinary files a/docs/site-documentation/static/img/de/connexion.jxl and b/docs/site-documentation/static/img/de/connexion.jxl differ
modified docs/site-documentation/static/img/de/connexion.png +0 -0
Binary files a/docs/site-documentation/static/img/de/connexion.png and b/docs/site-documentation/static/img/de/connexion.png differ
Binary files a/docs/site-documentation/static/img/de/connexion.png and b/docs/site-documentation/static/img/de/connexion.png differBinary files a/docs/site-documentation/static/img/de/connexion.png and b/docs/site-documentation/static/img/de/connexion.png differ
modified docs/site-documentation/static/img/de/equipes.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/equipes.jxl and b/docs/site-documentation/static/img/de/equipes.jxl differ
Binary files a/docs/site-documentation/static/img/de/equipes.jxl and b/docs/site-documentation/static/img/de/equipes.jxl differBinary files a/docs/site-documentation/static/img/de/equipes.jxl and b/docs/site-documentation/static/img/de/equipes.jxl differ
modified docs/site-documentation/static/img/de/equipes.png +0 -0
Binary files a/docs/site-documentation/static/img/de/equipes.png and b/docs/site-documentation/static/img/de/equipes.png differ
Binary files a/docs/site-documentation/static/img/de/equipes.png and b/docs/site-documentation/static/img/de/equipes.png differBinary files a/docs/site-documentation/static/img/de/equipes.png and b/docs/site-documentation/static/img/de/equipes.png differ
modified docs/site-documentation/static/img/de/mes-temps.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/mes-temps.jxl and b/docs/site-documentation/static/img/de/mes-temps.jxl differ
Binary files a/docs/site-documentation/static/img/de/mes-temps.jxl and b/docs/site-documentation/static/img/de/mes-temps.jxl differBinary files a/docs/site-documentation/static/img/de/mes-temps.jxl and b/docs/site-documentation/static/img/de/mes-temps.jxl differ
modified docs/site-documentation/static/img/de/mes-temps.png +0 -0
Binary files a/docs/site-documentation/static/img/de/mes-temps.png and b/docs/site-documentation/static/img/de/mes-temps.png differ
Binary files a/docs/site-documentation/static/img/de/mes-temps.png and b/docs/site-documentation/static/img/de/mes-temps.png differBinary files a/docs/site-documentation/static/img/de/mes-temps.png and b/docs/site-documentation/static/img/de/mes-temps.png differ
modified docs/site-documentation/static/img/de/minuteur.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/minuteur.jxl and b/docs/site-documentation/static/img/de/minuteur.jxl differ
Binary files a/docs/site-documentation/static/img/de/minuteur.jxl and b/docs/site-documentation/static/img/de/minuteur.jxl differBinary files a/docs/site-documentation/static/img/de/minuteur.jxl and b/docs/site-documentation/static/img/de/minuteur.jxl differ
modified docs/site-documentation/static/img/de/minuteur.png +0 -0
Binary files a/docs/site-documentation/static/img/de/minuteur.png and b/docs/site-documentation/static/img/de/minuteur.png differ
Binary files a/docs/site-documentation/static/img/de/minuteur.png and b/docs/site-documentation/static/img/de/minuteur.png differBinary files a/docs/site-documentation/static/img/de/minuteur.png and b/docs/site-documentation/static/img/de/minuteur.png differ
modified docs/site-documentation/static/img/de/modifier-temps.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/modifier-temps.jxl and b/docs/site-documentation/static/img/de/modifier-temps.jxl differ
Binary files a/docs/site-documentation/static/img/de/modifier-temps.jxl and b/docs/site-documentation/static/img/de/modifier-temps.jxl differBinary files a/docs/site-documentation/static/img/de/modifier-temps.jxl and b/docs/site-documentation/static/img/de/modifier-temps.jxl differ
modified docs/site-documentation/static/img/de/modifier-temps.png +0 -0
Binary files a/docs/site-documentation/static/img/de/modifier-temps.png and b/docs/site-documentation/static/img/de/modifier-temps.png differ
Binary files a/docs/site-documentation/static/img/de/modifier-temps.png and b/docs/site-documentation/static/img/de/modifier-temps.png differBinary files a/docs/site-documentation/static/img/de/modifier-temps.png and b/docs/site-documentation/static/img/de/modifier-temps.png differ
modified docs/site-documentation/static/img/de/parametres.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/parametres.jxl and b/docs/site-documentation/static/img/de/parametres.jxl differ
Binary files a/docs/site-documentation/static/img/de/parametres.jxl and b/docs/site-documentation/static/img/de/parametres.jxl differBinary files a/docs/site-documentation/static/img/de/parametres.jxl and b/docs/site-documentation/static/img/de/parametres.jxl differ
modified docs/site-documentation/static/img/de/parametres.png +0 -0
Binary files a/docs/site-documentation/static/img/de/parametres.png and b/docs/site-documentation/static/img/de/parametres.png differ
Binary files a/docs/site-documentation/static/img/de/parametres.png and b/docs/site-documentation/static/img/de/parametres.png differBinary files a/docs/site-documentation/static/img/de/parametres.png and b/docs/site-documentation/static/img/de/parametres.png differ
modified docs/site-documentation/static/img/de/stats-asso.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/stats-asso.jxl and b/docs/site-documentation/static/img/de/stats-asso.jxl differ
Binary files a/docs/site-documentation/static/img/de/stats-asso.jxl and b/docs/site-documentation/static/img/de/stats-asso.jxl differBinary files a/docs/site-documentation/static/img/de/stats-asso.jxl and b/docs/site-documentation/static/img/de/stats-asso.jxl differ
modified docs/site-documentation/static/img/de/stats-asso.png +0 -0
Binary files a/docs/site-documentation/static/img/de/stats-asso.png and b/docs/site-documentation/static/img/de/stats-asso.png differ
Binary files a/docs/site-documentation/static/img/de/stats-asso.png and b/docs/site-documentation/static/img/de/stats-asso.png differBinary files a/docs/site-documentation/static/img/de/stats-asso.png and b/docs/site-documentation/static/img/de/stats-asso.png differ
modified docs/site-documentation/static/img/de/stats-detail.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/stats-detail.jxl and b/docs/site-documentation/static/img/de/stats-detail.jxl differ
Binary files a/docs/site-documentation/static/img/de/stats-detail.jxl and b/docs/site-documentation/static/img/de/stats-detail.jxl differBinary files a/docs/site-documentation/static/img/de/stats-detail.jxl and b/docs/site-documentation/static/img/de/stats-detail.jxl differ
modified docs/site-documentation/static/img/de/stats-detail.png +0 -0
Binary files a/docs/site-documentation/static/img/de/stats-detail.png and b/docs/site-documentation/static/img/de/stats-detail.png differ
Binary files a/docs/site-documentation/static/img/de/stats-detail.png and b/docs/site-documentation/static/img/de/stats-detail.png differBinary files a/docs/site-documentation/static/img/de/stats-detail.png and b/docs/site-documentation/static/img/de/stats-detail.png differ
modified docs/site-documentation/static/img/de/stats-groupe.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/stats-groupe.jxl and b/docs/site-documentation/static/img/de/stats-groupe.jxl differ
Binary files a/docs/site-documentation/static/img/de/stats-groupe.jxl and b/docs/site-documentation/static/img/de/stats-groupe.jxl differBinary files a/docs/site-documentation/static/img/de/stats-groupe.jxl and b/docs/site-documentation/static/img/de/stats-groupe.jxl differ
modified docs/site-documentation/static/img/de/stats-groupe.png +0 -0
Binary files a/docs/site-documentation/static/img/de/stats-groupe.png and b/docs/site-documentation/static/img/de/stats-groupe.png differ
Binary files a/docs/site-documentation/static/img/de/stats-groupe.png and b/docs/site-documentation/static/img/de/stats-groupe.png differBinary files a/docs/site-documentation/static/img/de/stats-groupe.png and b/docs/site-documentation/static/img/de/stats-groupe.png differ
modified docs/site-documentation/static/img/de/stats.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/stats.jxl and b/docs/site-documentation/static/img/de/stats.jxl differ
Binary files a/docs/site-documentation/static/img/de/stats.jxl and b/docs/site-documentation/static/img/de/stats.jxl differBinary files a/docs/site-documentation/static/img/de/stats.jxl and b/docs/site-documentation/static/img/de/stats.jxl differ
modified docs/site-documentation/static/img/de/stats.png +0 -0
Binary files a/docs/site-documentation/static/img/de/stats.png and b/docs/site-documentation/static/img/de/stats.png differ
Binary files a/docs/site-documentation/static/img/de/stats.png and b/docs/site-documentation/static/img/de/stats.png differBinary files a/docs/site-documentation/static/img/de/stats.png and b/docs/site-documentation/static/img/de/stats.png differ
modified docs/site-documentation/static/img/de/tache-effectuee.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/tache-effectuee.jxl and b/docs/site-documentation/static/img/de/tache-effectuee.jxl differ
Binary files a/docs/site-documentation/static/img/de/tache-effectuee.jxl and b/docs/site-documentation/static/img/de/tache-effectuee.jxl differBinary files a/docs/site-documentation/static/img/de/tache-effectuee.jxl and b/docs/site-documentation/static/img/de/tache-effectuee.jxl differ
modified docs/site-documentation/static/img/de/tache-effectuee.png +0 -0
Binary files a/docs/site-documentation/static/img/de/tache-effectuee.png and b/docs/site-documentation/static/img/de/tache-effectuee.png differ
Binary files a/docs/site-documentation/static/img/de/tache-effectuee.png and b/docs/site-documentation/static/img/de/tache-effectuee.png differBinary files a/docs/site-documentation/static/img/de/tache-effectuee.png and b/docs/site-documentation/static/img/de/tache-effectuee.png differ
modified docs/site-documentation/static/img/de/tache-modifier.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/tache-modifier.jxl and b/docs/site-documentation/static/img/de/tache-modifier.jxl differ
Binary files a/docs/site-documentation/static/img/de/tache-modifier.jxl and b/docs/site-documentation/static/img/de/tache-modifier.jxl differBinary files a/docs/site-documentation/static/img/de/tache-modifier.jxl and b/docs/site-documentation/static/img/de/tache-modifier.jxl differ
modified docs/site-documentation/static/img/de/tache-modifier.png +0 -0
Binary files a/docs/site-documentation/static/img/de/tache-modifier.png and b/docs/site-documentation/static/img/de/tache-modifier.png differ
Binary files a/docs/site-documentation/static/img/de/tache-modifier.png and b/docs/site-documentation/static/img/de/tache-modifier.png differBinary files a/docs/site-documentation/static/img/de/tache-modifier.png and b/docs/site-documentation/static/img/de/tache-modifier.png differ
modified docs/site-documentation/static/img/de/tache-nouvelle.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/tache-nouvelle.jxl and b/docs/site-documentation/static/img/de/tache-nouvelle.jxl differ
Binary files a/docs/site-documentation/static/img/de/tache-nouvelle.jxl and b/docs/site-documentation/static/img/de/tache-nouvelle.jxl differBinary files a/docs/site-documentation/static/img/de/tache-nouvelle.jxl and b/docs/site-documentation/static/img/de/tache-nouvelle.jxl differ
modified docs/site-documentation/static/img/de/tache-nouvelle.png +0 -0
Binary files a/docs/site-documentation/static/img/de/tache-nouvelle.png and b/docs/site-documentation/static/img/de/tache-nouvelle.png differ
Binary files a/docs/site-documentation/static/img/de/tache-nouvelle.png and b/docs/site-documentation/static/img/de/tache-nouvelle.png differBinary files a/docs/site-documentation/static/img/de/tache-nouvelle.png and b/docs/site-documentation/static/img/de/tache-nouvelle.png differ
modified docs/site-documentation/static/img/de/taches.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/taches.jxl and b/docs/site-documentation/static/img/de/taches.jxl differ
Binary files a/docs/site-documentation/static/img/de/taches.jxl and b/docs/site-documentation/static/img/de/taches.jxl differBinary files a/docs/site-documentation/static/img/de/taches.jxl and b/docs/site-documentation/static/img/de/taches.jxl differ
modified docs/site-documentation/static/img/de/taches.png +0 -0
Binary files a/docs/site-documentation/static/img/de/taches.png and b/docs/site-documentation/static/img/de/taches.png differ
Binary files a/docs/site-documentation/static/img/de/taches.png and b/docs/site-documentation/static/img/de/taches.png differBinary files a/docs/site-documentation/static/img/de/taches.png and b/docs/site-documentation/static/img/de/taches.png differ
modified docs/site-documentation/static/img/de/x-bandeau-minuteur.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/x-bandeau-minuteur.jxl and b/docs/site-documentation/static/img/de/x-bandeau-minuteur.jxl differ
Binary files a/docs/site-documentation/static/img/de/x-bandeau-minuteur.jxl and b/docs/site-documentation/static/img/de/x-bandeau-minuteur.jxl differBinary files a/docs/site-documentation/static/img/de/x-bandeau-minuteur.jxl and b/docs/site-documentation/static/img/de/x-bandeau-minuteur.jxl differ
modified docs/site-documentation/static/img/de/x-bandeau-minuteur.png +0 -0
Binary files a/docs/site-documentation/static/img/de/x-bandeau-minuteur.png and b/docs/site-documentation/static/img/de/x-bandeau-minuteur.png differ
Binary files a/docs/site-documentation/static/img/de/x-bandeau-minuteur.png and b/docs/site-documentation/static/img/de/x-bandeau-minuteur.png differBinary files a/docs/site-documentation/static/img/de/x-bandeau-minuteur.png and b/docs/site-documentation/static/img/de/x-bandeau-minuteur.png differ
modified docs/site-documentation/static/img/de/x-categorie-pill.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/x-categorie-pill.jxl and b/docs/site-documentation/static/img/de/x-categorie-pill.jxl differ
Binary files a/docs/site-documentation/static/img/de/x-categorie-pill.jxl and b/docs/site-documentation/static/img/de/x-categorie-pill.jxl differBinary files a/docs/site-documentation/static/img/de/x-categorie-pill.jxl and b/docs/site-documentation/static/img/de/x-categorie-pill.jxl differ
modified docs/site-documentation/static/img/de/x-categorie-pill.png +0 -0
Binary files a/docs/site-documentation/static/img/de/x-categorie-pill.png and b/docs/site-documentation/static/img/de/x-categorie-pill.png differ
Binary files a/docs/site-documentation/static/img/de/x-categorie-pill.png and b/docs/site-documentation/static/img/de/x-categorie-pill.png differBinary files a/docs/site-documentation/static/img/de/x-categorie-pill.png and b/docs/site-documentation/static/img/de/x-categorie-pill.png differ
modified docs/site-documentation/static/img/de/x-entete.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/x-entete.jxl and b/docs/site-documentation/static/img/de/x-entete.jxl differ
Binary files a/docs/site-documentation/static/img/de/x-entete.jxl and b/docs/site-documentation/static/img/de/x-entete.jxl differBinary files a/docs/site-documentation/static/img/de/x-entete.jxl and b/docs/site-documentation/static/img/de/x-entete.jxl differ
modified docs/site-documentation/static/img/de/x-entete.png +0 -0
Binary files a/docs/site-documentation/static/img/de/x-entete.png and b/docs/site-documentation/static/img/de/x-entete.png differ
Binary files a/docs/site-documentation/static/img/de/x-entete.png and b/docs/site-documentation/static/img/de/x-entete.png differBinary files a/docs/site-documentation/static/img/de/x-entete.png and b/docs/site-documentation/static/img/de/x-entete.png differ
modified docs/site-documentation/static/img/de/x-stepper.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/x-stepper.jxl and b/docs/site-documentation/static/img/de/x-stepper.jxl differ
Binary files a/docs/site-documentation/static/img/de/x-stepper.jxl and b/docs/site-documentation/static/img/de/x-stepper.jxl differBinary files a/docs/site-documentation/static/img/de/x-stepper.jxl and b/docs/site-documentation/static/img/de/x-stepper.jxl differ
modified docs/site-documentation/static/img/de/x-stepper.png +0 -0
Binary files a/docs/site-documentation/static/img/de/x-stepper.png and b/docs/site-documentation/static/img/de/x-stepper.png differ
Binary files a/docs/site-documentation/static/img/de/x-stepper.png and b/docs/site-documentation/static/img/de/x-stepper.png differBinary files a/docs/site-documentation/static/img/de/x-stepper.png and b/docs/site-documentation/static/img/de/x-stepper.png differ
modified docs/site-documentation/static/img/de/x-todo-carte.jxl +0 -0
Binary files a/docs/site-documentation/static/img/de/x-todo-carte.jxl and b/docs/site-documentation/static/img/de/x-todo-carte.jxl differ
Binary files a/docs/site-documentation/static/img/de/x-todo-carte.jxl and b/docs/site-documentation/static/img/de/x-todo-carte.jxl differBinary files a/docs/site-documentation/static/img/de/x-todo-carte.jxl and b/docs/site-documentation/static/img/de/x-todo-carte.jxl differ
modified docs/site-documentation/static/img/de/x-todo-carte.png +0 -0
Binary files a/docs/site-documentation/static/img/de/x-todo-carte.png and b/docs/site-documentation/static/img/de/x-todo-carte.png differ
Binary files a/docs/site-documentation/static/img/de/x-todo-carte.png and b/docs/site-documentation/static/img/de/x-todo-carte.png differBinary files a/docs/site-documentation/static/img/de/x-todo-carte.png and b/docs/site-documentation/static/img/de/x-todo-carte.png differ
modified docs/site-documentation/static/img/en/ajouter-categorie.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/ajouter-categorie.jxl and b/docs/site-documentation/static/img/en/ajouter-categorie.jxl differ
Binary files a/docs/site-documentation/static/img/en/ajouter-categorie.jxl and b/docs/site-documentation/static/img/en/ajouter-categorie.jxl differBinary files a/docs/site-documentation/static/img/en/ajouter-categorie.jxl and b/docs/site-documentation/static/img/en/ajouter-categorie.jxl differ
modified docs/site-documentation/static/img/en/ajouter-categorie.png +0 -0
Binary files a/docs/site-documentation/static/img/en/ajouter-categorie.png and b/docs/site-documentation/static/img/en/ajouter-categorie.png differ
Binary files a/docs/site-documentation/static/img/en/ajouter-categorie.png and b/docs/site-documentation/static/img/en/ajouter-categorie.png differBinary files a/docs/site-documentation/static/img/en/ajouter-categorie.png and b/docs/site-documentation/static/img/en/ajouter-categorie.png differ
modified docs/site-documentation/static/img/en/ajouter-choix.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/ajouter-choix.jxl and b/docs/site-documentation/static/img/en/ajouter-choix.jxl differ
Binary files a/docs/site-documentation/static/img/en/ajouter-choix.jxl and b/docs/site-documentation/static/img/en/ajouter-choix.jxl differBinary files a/docs/site-documentation/static/img/en/ajouter-choix.jxl and b/docs/site-documentation/static/img/en/ajouter-choix.jxl differ
modified docs/site-documentation/static/img/en/ajouter-choix.png +0 -0
Binary files a/docs/site-documentation/static/img/en/ajouter-choix.png and b/docs/site-documentation/static/img/en/ajouter-choix.png differ
Binary files a/docs/site-documentation/static/img/en/ajouter-choix.png and b/docs/site-documentation/static/img/en/ajouter-choix.png differBinary files a/docs/site-documentation/static/img/en/ajouter-choix.png and b/docs/site-documentation/static/img/en/ajouter-choix.png differ
modified docs/site-documentation/static/img/en/ajouter-duree.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/ajouter-duree.jxl and b/docs/site-documentation/static/img/en/ajouter-duree.jxl differ
Binary files a/docs/site-documentation/static/img/en/ajouter-duree.jxl and b/docs/site-documentation/static/img/en/ajouter-duree.jxl differBinary files a/docs/site-documentation/static/img/en/ajouter-duree.jxl and b/docs/site-documentation/static/img/en/ajouter-duree.jxl differ
modified docs/site-documentation/static/img/en/ajouter-duree.png +0 -0
Binary files a/docs/site-documentation/static/img/en/ajouter-duree.png and b/docs/site-documentation/static/img/en/ajouter-duree.png differ
Binary files a/docs/site-documentation/static/img/en/ajouter-duree.png and b/docs/site-documentation/static/img/en/ajouter-duree.png differBinary files a/docs/site-documentation/static/img/en/ajouter-duree.png and b/docs/site-documentation/static/img/en/ajouter-duree.png differ
modified docs/site-documentation/static/img/en/categories.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/categories.jxl and b/docs/site-documentation/static/img/en/categories.jxl differ
Binary files a/docs/site-documentation/static/img/en/categories.jxl and b/docs/site-documentation/static/img/en/categories.jxl differBinary files a/docs/site-documentation/static/img/en/categories.jxl and b/docs/site-documentation/static/img/en/categories.jxl differ
modified docs/site-documentation/static/img/en/categories.png +0 -0
Binary files a/docs/site-documentation/static/img/en/categories.png and b/docs/site-documentation/static/img/en/categories.png differ
Binary files a/docs/site-documentation/static/img/en/categories.png and b/docs/site-documentation/static/img/en/categories.png differBinary files a/docs/site-documentation/static/img/en/categories.png and b/docs/site-documentation/static/img/en/categories.png differ
modified docs/site-documentation/static/img/en/connexion.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/connexion.jxl and b/docs/site-documentation/static/img/en/connexion.jxl differ
Binary files a/docs/site-documentation/static/img/en/connexion.jxl and b/docs/site-documentation/static/img/en/connexion.jxl differBinary files a/docs/site-documentation/static/img/en/connexion.jxl and b/docs/site-documentation/static/img/en/connexion.jxl differ
modified docs/site-documentation/static/img/en/connexion.png +0 -0
Binary files a/docs/site-documentation/static/img/en/connexion.png and b/docs/site-documentation/static/img/en/connexion.png differ
Binary files a/docs/site-documentation/static/img/en/connexion.png and b/docs/site-documentation/static/img/en/connexion.png differBinary files a/docs/site-documentation/static/img/en/connexion.png and b/docs/site-documentation/static/img/en/connexion.png differ
modified docs/site-documentation/static/img/en/equipes.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/equipes.jxl and b/docs/site-documentation/static/img/en/equipes.jxl differ
Binary files a/docs/site-documentation/static/img/en/equipes.jxl and b/docs/site-documentation/static/img/en/equipes.jxl differBinary files a/docs/site-documentation/static/img/en/equipes.jxl and b/docs/site-documentation/static/img/en/equipes.jxl differ
modified docs/site-documentation/static/img/en/equipes.png +0 -0
Binary files a/docs/site-documentation/static/img/en/equipes.png and b/docs/site-documentation/static/img/en/equipes.png differ
Binary files a/docs/site-documentation/static/img/en/equipes.png and b/docs/site-documentation/static/img/en/equipes.png differBinary files a/docs/site-documentation/static/img/en/equipes.png and b/docs/site-documentation/static/img/en/equipes.png differ
modified docs/site-documentation/static/img/en/mes-temps.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/mes-temps.jxl and b/docs/site-documentation/static/img/en/mes-temps.jxl differ
Binary files a/docs/site-documentation/static/img/en/mes-temps.jxl and b/docs/site-documentation/static/img/en/mes-temps.jxl differBinary files a/docs/site-documentation/static/img/en/mes-temps.jxl and b/docs/site-documentation/static/img/en/mes-temps.jxl differ
modified docs/site-documentation/static/img/en/mes-temps.png +0 -0
Binary files a/docs/site-documentation/static/img/en/mes-temps.png and b/docs/site-documentation/static/img/en/mes-temps.png differ
Binary files a/docs/site-documentation/static/img/en/mes-temps.png and b/docs/site-documentation/static/img/en/mes-temps.png differBinary files a/docs/site-documentation/static/img/en/mes-temps.png and b/docs/site-documentation/static/img/en/mes-temps.png differ
modified docs/site-documentation/static/img/en/minuteur.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/minuteur.jxl and b/docs/site-documentation/static/img/en/minuteur.jxl differ
Binary files a/docs/site-documentation/static/img/en/minuteur.jxl and b/docs/site-documentation/static/img/en/minuteur.jxl differBinary files a/docs/site-documentation/static/img/en/minuteur.jxl and b/docs/site-documentation/static/img/en/minuteur.jxl differ
modified docs/site-documentation/static/img/en/minuteur.png +0 -0
Binary files a/docs/site-documentation/static/img/en/minuteur.png and b/docs/site-documentation/static/img/en/minuteur.png differ
Binary files a/docs/site-documentation/static/img/en/minuteur.png and b/docs/site-documentation/static/img/en/minuteur.png differBinary files a/docs/site-documentation/static/img/en/minuteur.png and b/docs/site-documentation/static/img/en/minuteur.png differ
modified docs/site-documentation/static/img/en/modifier-temps.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/modifier-temps.jxl and b/docs/site-documentation/static/img/en/modifier-temps.jxl differ
Binary files a/docs/site-documentation/static/img/en/modifier-temps.jxl and b/docs/site-documentation/static/img/en/modifier-temps.jxl differBinary files a/docs/site-documentation/static/img/en/modifier-temps.jxl and b/docs/site-documentation/static/img/en/modifier-temps.jxl differ
modified docs/site-documentation/static/img/en/modifier-temps.png +0 -0
Binary files a/docs/site-documentation/static/img/en/modifier-temps.png and b/docs/site-documentation/static/img/en/modifier-temps.png differ
Binary files a/docs/site-documentation/static/img/en/modifier-temps.png and b/docs/site-documentation/static/img/en/modifier-temps.png differBinary files a/docs/site-documentation/static/img/en/modifier-temps.png and b/docs/site-documentation/static/img/en/modifier-temps.png differ
modified docs/site-documentation/static/img/en/parametres.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/parametres.jxl and b/docs/site-documentation/static/img/en/parametres.jxl differ
Binary files a/docs/site-documentation/static/img/en/parametres.jxl and b/docs/site-documentation/static/img/en/parametres.jxl differBinary files a/docs/site-documentation/static/img/en/parametres.jxl and b/docs/site-documentation/static/img/en/parametres.jxl differ
modified docs/site-documentation/static/img/en/parametres.png +0 -0
Binary files a/docs/site-documentation/static/img/en/parametres.png and b/docs/site-documentation/static/img/en/parametres.png differ
Binary files a/docs/site-documentation/static/img/en/parametres.png and b/docs/site-documentation/static/img/en/parametres.png differBinary files a/docs/site-documentation/static/img/en/parametres.png and b/docs/site-documentation/static/img/en/parametres.png differ
modified docs/site-documentation/static/img/en/stats-asso.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/stats-asso.jxl and b/docs/site-documentation/static/img/en/stats-asso.jxl differ
Binary files a/docs/site-documentation/static/img/en/stats-asso.jxl and b/docs/site-documentation/static/img/en/stats-asso.jxl differBinary files a/docs/site-documentation/static/img/en/stats-asso.jxl and b/docs/site-documentation/static/img/en/stats-asso.jxl differ
modified docs/site-documentation/static/img/en/stats-asso.png +0 -0
Binary files a/docs/site-documentation/static/img/en/stats-asso.png and b/docs/site-documentation/static/img/en/stats-asso.png differ
Binary files a/docs/site-documentation/static/img/en/stats-asso.png and b/docs/site-documentation/static/img/en/stats-asso.png differBinary files a/docs/site-documentation/static/img/en/stats-asso.png and b/docs/site-documentation/static/img/en/stats-asso.png differ
modified docs/site-documentation/static/img/en/stats-detail.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/stats-detail.jxl and b/docs/site-documentation/static/img/en/stats-detail.jxl differ
Binary files a/docs/site-documentation/static/img/en/stats-detail.jxl and b/docs/site-documentation/static/img/en/stats-detail.jxl differBinary files a/docs/site-documentation/static/img/en/stats-detail.jxl and b/docs/site-documentation/static/img/en/stats-detail.jxl differ
modified docs/site-documentation/static/img/en/stats-detail.png +0 -0
Binary files a/docs/site-documentation/static/img/en/stats-detail.png and b/docs/site-documentation/static/img/en/stats-detail.png differ
Binary files a/docs/site-documentation/static/img/en/stats-detail.png and b/docs/site-documentation/static/img/en/stats-detail.png differBinary files a/docs/site-documentation/static/img/en/stats-detail.png and b/docs/site-documentation/static/img/en/stats-detail.png differ
modified docs/site-documentation/static/img/en/stats-groupe.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/stats-groupe.jxl and b/docs/site-documentation/static/img/en/stats-groupe.jxl differ
Binary files a/docs/site-documentation/static/img/en/stats-groupe.jxl and b/docs/site-documentation/static/img/en/stats-groupe.jxl differBinary files a/docs/site-documentation/static/img/en/stats-groupe.jxl and b/docs/site-documentation/static/img/en/stats-groupe.jxl differ
modified docs/site-documentation/static/img/en/stats-groupe.png +0 -0
Binary files a/docs/site-documentation/static/img/en/stats-groupe.png and b/docs/site-documentation/static/img/en/stats-groupe.png differ
Binary files a/docs/site-documentation/static/img/en/stats-groupe.png and b/docs/site-documentation/static/img/en/stats-groupe.png differBinary files a/docs/site-documentation/static/img/en/stats-groupe.png and b/docs/site-documentation/static/img/en/stats-groupe.png differ
modified docs/site-documentation/static/img/en/stats.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/stats.jxl and b/docs/site-documentation/static/img/en/stats.jxl differ
Binary files a/docs/site-documentation/static/img/en/stats.jxl and b/docs/site-documentation/static/img/en/stats.jxl differBinary files a/docs/site-documentation/static/img/en/stats.jxl and b/docs/site-documentation/static/img/en/stats.jxl differ
modified docs/site-documentation/static/img/en/stats.png +0 -0
Binary files a/docs/site-documentation/static/img/en/stats.png and b/docs/site-documentation/static/img/en/stats.png differ
Binary files a/docs/site-documentation/static/img/en/stats.png and b/docs/site-documentation/static/img/en/stats.png differBinary files a/docs/site-documentation/static/img/en/stats.png and b/docs/site-documentation/static/img/en/stats.png differ
modified docs/site-documentation/static/img/en/tache-effectuee.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/tache-effectuee.jxl and b/docs/site-documentation/static/img/en/tache-effectuee.jxl differ
Binary files a/docs/site-documentation/static/img/en/tache-effectuee.jxl and b/docs/site-documentation/static/img/en/tache-effectuee.jxl differBinary files a/docs/site-documentation/static/img/en/tache-effectuee.jxl and b/docs/site-documentation/static/img/en/tache-effectuee.jxl differ
modified docs/site-documentation/static/img/en/tache-effectuee.png +0 -0
Binary files a/docs/site-documentation/static/img/en/tache-effectuee.png and b/docs/site-documentation/static/img/en/tache-effectuee.png differ
Binary files a/docs/site-documentation/static/img/en/tache-effectuee.png and b/docs/site-documentation/static/img/en/tache-effectuee.png differBinary files a/docs/site-documentation/static/img/en/tache-effectuee.png and b/docs/site-documentation/static/img/en/tache-effectuee.png differ
modified docs/site-documentation/static/img/en/tache-modifier.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/tache-modifier.jxl and b/docs/site-documentation/static/img/en/tache-modifier.jxl differ
Binary files a/docs/site-documentation/static/img/en/tache-modifier.jxl and b/docs/site-documentation/static/img/en/tache-modifier.jxl differBinary files a/docs/site-documentation/static/img/en/tache-modifier.jxl and b/docs/site-documentation/static/img/en/tache-modifier.jxl differ
modified docs/site-documentation/static/img/en/tache-modifier.png +0 -0
Binary files a/docs/site-documentation/static/img/en/tache-modifier.png and b/docs/site-documentation/static/img/en/tache-modifier.png differ
Binary files a/docs/site-documentation/static/img/en/tache-modifier.png and b/docs/site-documentation/static/img/en/tache-modifier.png differBinary files a/docs/site-documentation/static/img/en/tache-modifier.png and b/docs/site-documentation/static/img/en/tache-modifier.png differ
modified docs/site-documentation/static/img/en/tache-nouvelle.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/tache-nouvelle.jxl and b/docs/site-documentation/static/img/en/tache-nouvelle.jxl differ
Binary files a/docs/site-documentation/static/img/en/tache-nouvelle.jxl and b/docs/site-documentation/static/img/en/tache-nouvelle.jxl differBinary files a/docs/site-documentation/static/img/en/tache-nouvelle.jxl and b/docs/site-documentation/static/img/en/tache-nouvelle.jxl differ
modified docs/site-documentation/static/img/en/tache-nouvelle.png +0 -0
Binary files a/docs/site-documentation/static/img/en/tache-nouvelle.png and b/docs/site-documentation/static/img/en/tache-nouvelle.png differ
Binary files a/docs/site-documentation/static/img/en/tache-nouvelle.png and b/docs/site-documentation/static/img/en/tache-nouvelle.png differBinary files a/docs/site-documentation/static/img/en/tache-nouvelle.png and b/docs/site-documentation/static/img/en/tache-nouvelle.png differ
modified docs/site-documentation/static/img/en/taches.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/taches.jxl and b/docs/site-documentation/static/img/en/taches.jxl differ
Binary files a/docs/site-documentation/static/img/en/taches.jxl and b/docs/site-documentation/static/img/en/taches.jxl differBinary files a/docs/site-documentation/static/img/en/taches.jxl and b/docs/site-documentation/static/img/en/taches.jxl differ
modified docs/site-documentation/static/img/en/taches.png +0 -0
Binary files a/docs/site-documentation/static/img/en/taches.png and b/docs/site-documentation/static/img/en/taches.png differ
Binary files a/docs/site-documentation/static/img/en/taches.png and b/docs/site-documentation/static/img/en/taches.png differBinary files a/docs/site-documentation/static/img/en/taches.png and b/docs/site-documentation/static/img/en/taches.png differ
modified docs/site-documentation/static/img/en/x-bandeau-minuteur.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/x-bandeau-minuteur.jxl and b/docs/site-documentation/static/img/en/x-bandeau-minuteur.jxl differ
Binary files a/docs/site-documentation/static/img/en/x-bandeau-minuteur.jxl and b/docs/site-documentation/static/img/en/x-bandeau-minuteur.jxl differBinary files a/docs/site-documentation/static/img/en/x-bandeau-minuteur.jxl and b/docs/site-documentation/static/img/en/x-bandeau-minuteur.jxl differ
modified docs/site-documentation/static/img/en/x-bandeau-minuteur.png +0 -0
Binary files a/docs/site-documentation/static/img/en/x-bandeau-minuteur.png and b/docs/site-documentation/static/img/en/x-bandeau-minuteur.png differ
Binary files a/docs/site-documentation/static/img/en/x-bandeau-minuteur.png and b/docs/site-documentation/static/img/en/x-bandeau-minuteur.png differBinary files a/docs/site-documentation/static/img/en/x-bandeau-minuteur.png and b/docs/site-documentation/static/img/en/x-bandeau-minuteur.png differ
modified docs/site-documentation/static/img/en/x-categorie-pill.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/x-categorie-pill.jxl and b/docs/site-documentation/static/img/en/x-categorie-pill.jxl differ
Binary files a/docs/site-documentation/static/img/en/x-categorie-pill.jxl and b/docs/site-documentation/static/img/en/x-categorie-pill.jxl differBinary files a/docs/site-documentation/static/img/en/x-categorie-pill.jxl and b/docs/site-documentation/static/img/en/x-categorie-pill.jxl differ
modified docs/site-documentation/static/img/en/x-categorie-pill.png +0 -0
Binary files a/docs/site-documentation/static/img/en/x-categorie-pill.png and b/docs/site-documentation/static/img/en/x-categorie-pill.png differ
Binary files a/docs/site-documentation/static/img/en/x-categorie-pill.png and b/docs/site-documentation/static/img/en/x-categorie-pill.png differBinary files a/docs/site-documentation/static/img/en/x-categorie-pill.png and b/docs/site-documentation/static/img/en/x-categorie-pill.png differ
modified docs/site-documentation/static/img/en/x-entete.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/x-entete.jxl and b/docs/site-documentation/static/img/en/x-entete.jxl differ
Binary files a/docs/site-documentation/static/img/en/x-entete.jxl and b/docs/site-documentation/static/img/en/x-entete.jxl differBinary files a/docs/site-documentation/static/img/en/x-entete.jxl and b/docs/site-documentation/static/img/en/x-entete.jxl differ
modified docs/site-documentation/static/img/en/x-entete.png +0 -0
Binary files a/docs/site-documentation/static/img/en/x-entete.png and b/docs/site-documentation/static/img/en/x-entete.png differ
Binary files a/docs/site-documentation/static/img/en/x-entete.png and b/docs/site-documentation/static/img/en/x-entete.png differBinary files a/docs/site-documentation/static/img/en/x-entete.png and b/docs/site-documentation/static/img/en/x-entete.png differ
modified docs/site-documentation/static/img/en/x-stepper.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/x-stepper.jxl and b/docs/site-documentation/static/img/en/x-stepper.jxl differ
Binary files a/docs/site-documentation/static/img/en/x-stepper.jxl and b/docs/site-documentation/static/img/en/x-stepper.jxl differBinary files a/docs/site-documentation/static/img/en/x-stepper.jxl and b/docs/site-documentation/static/img/en/x-stepper.jxl differ
modified docs/site-documentation/static/img/en/x-stepper.png +0 -0
Binary files a/docs/site-documentation/static/img/en/x-stepper.png and b/docs/site-documentation/static/img/en/x-stepper.png differ
Binary files a/docs/site-documentation/static/img/en/x-stepper.png and b/docs/site-documentation/static/img/en/x-stepper.png differBinary files a/docs/site-documentation/static/img/en/x-stepper.png and b/docs/site-documentation/static/img/en/x-stepper.png differ
modified docs/site-documentation/static/img/en/x-todo-carte.jxl +0 -0
Binary files a/docs/site-documentation/static/img/en/x-todo-carte.jxl and b/docs/site-documentation/static/img/en/x-todo-carte.jxl differ
Binary files a/docs/site-documentation/static/img/en/x-todo-carte.jxl and b/docs/site-documentation/static/img/en/x-todo-carte.jxl differBinary files a/docs/site-documentation/static/img/en/x-todo-carte.jxl and b/docs/site-documentation/static/img/en/x-todo-carte.jxl differ
modified docs/site-documentation/static/img/en/x-todo-carte.png +0 -0
Binary files a/docs/site-documentation/static/img/en/x-todo-carte.png and b/docs/site-documentation/static/img/en/x-todo-carte.png differ
Binary files a/docs/site-documentation/static/img/en/x-todo-carte.png and b/docs/site-documentation/static/img/en/x-todo-carte.png differBinary files a/docs/site-documentation/static/img/en/x-todo-carte.png and b/docs/site-documentation/static/img/en/x-todo-carte.png differ
modified docs/site-documentation/static/img/fr/ajouter-categorie.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/ajouter-categorie.jxl and b/docs/site-documentation/static/img/fr/ajouter-categorie.jxl differ
Binary files a/docs/site-documentation/static/img/fr/ajouter-categorie.jxl and b/docs/site-documentation/static/img/fr/ajouter-categorie.jxl differBinary files a/docs/site-documentation/static/img/fr/ajouter-categorie.jxl and b/docs/site-documentation/static/img/fr/ajouter-categorie.jxl differ
modified docs/site-documentation/static/img/fr/ajouter-categorie.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/ajouter-categorie.png and b/docs/site-documentation/static/img/fr/ajouter-categorie.png differ
Binary files a/docs/site-documentation/static/img/fr/ajouter-categorie.png and b/docs/site-documentation/static/img/fr/ajouter-categorie.png differBinary files a/docs/site-documentation/static/img/fr/ajouter-categorie.png and b/docs/site-documentation/static/img/fr/ajouter-categorie.png differ
modified docs/site-documentation/static/img/fr/ajouter-choix.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/ajouter-choix.jxl and b/docs/site-documentation/static/img/fr/ajouter-choix.jxl differ
Binary files a/docs/site-documentation/static/img/fr/ajouter-choix.jxl and b/docs/site-documentation/static/img/fr/ajouter-choix.jxl differBinary files a/docs/site-documentation/static/img/fr/ajouter-choix.jxl and b/docs/site-documentation/static/img/fr/ajouter-choix.jxl differ
modified docs/site-documentation/static/img/fr/ajouter-choix.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/ajouter-choix.png and b/docs/site-documentation/static/img/fr/ajouter-choix.png differ
Binary files a/docs/site-documentation/static/img/fr/ajouter-choix.png and b/docs/site-documentation/static/img/fr/ajouter-choix.png differBinary files a/docs/site-documentation/static/img/fr/ajouter-choix.png and b/docs/site-documentation/static/img/fr/ajouter-choix.png differ
modified docs/site-documentation/static/img/fr/ajouter-duree.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/ajouter-duree.jxl and b/docs/site-documentation/static/img/fr/ajouter-duree.jxl differ
Binary files a/docs/site-documentation/static/img/fr/ajouter-duree.jxl and b/docs/site-documentation/static/img/fr/ajouter-duree.jxl differBinary files a/docs/site-documentation/static/img/fr/ajouter-duree.jxl and b/docs/site-documentation/static/img/fr/ajouter-duree.jxl differ
modified docs/site-documentation/static/img/fr/ajouter-duree.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/ajouter-duree.png and b/docs/site-documentation/static/img/fr/ajouter-duree.png differ
Binary files a/docs/site-documentation/static/img/fr/ajouter-duree.png and b/docs/site-documentation/static/img/fr/ajouter-duree.png differBinary files a/docs/site-documentation/static/img/fr/ajouter-duree.png and b/docs/site-documentation/static/img/fr/ajouter-duree.png differ
modified docs/site-documentation/static/img/fr/categories.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/categories.jxl and b/docs/site-documentation/static/img/fr/categories.jxl differ
Binary files a/docs/site-documentation/static/img/fr/categories.jxl and b/docs/site-documentation/static/img/fr/categories.jxl differBinary files a/docs/site-documentation/static/img/fr/categories.jxl and b/docs/site-documentation/static/img/fr/categories.jxl differ
modified docs/site-documentation/static/img/fr/categories.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/categories.png and b/docs/site-documentation/static/img/fr/categories.png differ
Binary files a/docs/site-documentation/static/img/fr/categories.png and b/docs/site-documentation/static/img/fr/categories.png differBinary files a/docs/site-documentation/static/img/fr/categories.png and b/docs/site-documentation/static/img/fr/categories.png differ
modified docs/site-documentation/static/img/fr/connexion.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/connexion.jxl and b/docs/site-documentation/static/img/fr/connexion.jxl differ
Binary files a/docs/site-documentation/static/img/fr/connexion.jxl and b/docs/site-documentation/static/img/fr/connexion.jxl differBinary files a/docs/site-documentation/static/img/fr/connexion.jxl and b/docs/site-documentation/static/img/fr/connexion.jxl differ
modified docs/site-documentation/static/img/fr/connexion.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/connexion.png and b/docs/site-documentation/static/img/fr/connexion.png differ
Binary files a/docs/site-documentation/static/img/fr/connexion.png and b/docs/site-documentation/static/img/fr/connexion.png differBinary files a/docs/site-documentation/static/img/fr/connexion.png and b/docs/site-documentation/static/img/fr/connexion.png differ
modified docs/site-documentation/static/img/fr/equipes.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/equipes.jxl and b/docs/site-documentation/static/img/fr/equipes.jxl differ
Binary files a/docs/site-documentation/static/img/fr/equipes.jxl and b/docs/site-documentation/static/img/fr/equipes.jxl differBinary files a/docs/site-documentation/static/img/fr/equipes.jxl and b/docs/site-documentation/static/img/fr/equipes.jxl differ
modified docs/site-documentation/static/img/fr/equipes.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/equipes.png and b/docs/site-documentation/static/img/fr/equipes.png differ
Binary files a/docs/site-documentation/static/img/fr/equipes.png and b/docs/site-documentation/static/img/fr/equipes.png differBinary files a/docs/site-documentation/static/img/fr/equipes.png and b/docs/site-documentation/static/img/fr/equipes.png differ
modified docs/site-documentation/static/img/fr/mes-temps.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/mes-temps.jxl and b/docs/site-documentation/static/img/fr/mes-temps.jxl differ
Binary files a/docs/site-documentation/static/img/fr/mes-temps.jxl and b/docs/site-documentation/static/img/fr/mes-temps.jxl differBinary files a/docs/site-documentation/static/img/fr/mes-temps.jxl and b/docs/site-documentation/static/img/fr/mes-temps.jxl differ
modified docs/site-documentation/static/img/fr/mes-temps.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/mes-temps.png and b/docs/site-documentation/static/img/fr/mes-temps.png differ
Binary files a/docs/site-documentation/static/img/fr/mes-temps.png and b/docs/site-documentation/static/img/fr/mes-temps.png differBinary files a/docs/site-documentation/static/img/fr/mes-temps.png and b/docs/site-documentation/static/img/fr/mes-temps.png differ
modified docs/site-documentation/static/img/fr/minuteur.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/minuteur.jxl and b/docs/site-documentation/static/img/fr/minuteur.jxl differ
Binary files a/docs/site-documentation/static/img/fr/minuteur.jxl and b/docs/site-documentation/static/img/fr/minuteur.jxl differBinary files a/docs/site-documentation/static/img/fr/minuteur.jxl and b/docs/site-documentation/static/img/fr/minuteur.jxl differ
modified docs/site-documentation/static/img/fr/minuteur.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/minuteur.png and b/docs/site-documentation/static/img/fr/minuteur.png differ
Binary files a/docs/site-documentation/static/img/fr/minuteur.png and b/docs/site-documentation/static/img/fr/minuteur.png differBinary files a/docs/site-documentation/static/img/fr/minuteur.png and b/docs/site-documentation/static/img/fr/minuteur.png differ
modified docs/site-documentation/static/img/fr/modifier-temps.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/modifier-temps.jxl and b/docs/site-documentation/static/img/fr/modifier-temps.jxl differ
Binary files a/docs/site-documentation/static/img/fr/modifier-temps.jxl and b/docs/site-documentation/static/img/fr/modifier-temps.jxl differBinary files a/docs/site-documentation/static/img/fr/modifier-temps.jxl and b/docs/site-documentation/static/img/fr/modifier-temps.jxl differ
modified docs/site-documentation/static/img/fr/modifier-temps.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/modifier-temps.png and b/docs/site-documentation/static/img/fr/modifier-temps.png differ
Binary files a/docs/site-documentation/static/img/fr/modifier-temps.png and b/docs/site-documentation/static/img/fr/modifier-temps.png differBinary files a/docs/site-documentation/static/img/fr/modifier-temps.png and b/docs/site-documentation/static/img/fr/modifier-temps.png differ
modified docs/site-documentation/static/img/fr/parametres.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/parametres.jxl and b/docs/site-documentation/static/img/fr/parametres.jxl differ
Binary files a/docs/site-documentation/static/img/fr/parametres.jxl and b/docs/site-documentation/static/img/fr/parametres.jxl differBinary files a/docs/site-documentation/static/img/fr/parametres.jxl and b/docs/site-documentation/static/img/fr/parametres.jxl differ
modified docs/site-documentation/static/img/fr/parametres.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/parametres.png and b/docs/site-documentation/static/img/fr/parametres.png differ
Binary files a/docs/site-documentation/static/img/fr/parametres.png and b/docs/site-documentation/static/img/fr/parametres.png differBinary files a/docs/site-documentation/static/img/fr/parametres.png and b/docs/site-documentation/static/img/fr/parametres.png differ
modified docs/site-documentation/static/img/fr/stats-asso.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/stats-asso.jxl and b/docs/site-documentation/static/img/fr/stats-asso.jxl differ
Binary files a/docs/site-documentation/static/img/fr/stats-asso.jxl and b/docs/site-documentation/static/img/fr/stats-asso.jxl differBinary files a/docs/site-documentation/static/img/fr/stats-asso.jxl and b/docs/site-documentation/static/img/fr/stats-asso.jxl differ
modified docs/site-documentation/static/img/fr/stats-asso.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/stats-asso.png and b/docs/site-documentation/static/img/fr/stats-asso.png differ
Binary files a/docs/site-documentation/static/img/fr/stats-asso.png and b/docs/site-documentation/static/img/fr/stats-asso.png differBinary files a/docs/site-documentation/static/img/fr/stats-asso.png and b/docs/site-documentation/static/img/fr/stats-asso.png differ
modified docs/site-documentation/static/img/fr/stats-detail.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/stats-detail.jxl and b/docs/site-documentation/static/img/fr/stats-detail.jxl differ
Binary files a/docs/site-documentation/static/img/fr/stats-detail.jxl and b/docs/site-documentation/static/img/fr/stats-detail.jxl differBinary files a/docs/site-documentation/static/img/fr/stats-detail.jxl and b/docs/site-documentation/static/img/fr/stats-detail.jxl differ
modified docs/site-documentation/static/img/fr/stats-detail.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/stats-detail.png and b/docs/site-documentation/static/img/fr/stats-detail.png differ
Binary files a/docs/site-documentation/static/img/fr/stats-detail.png and b/docs/site-documentation/static/img/fr/stats-detail.png differBinary files a/docs/site-documentation/static/img/fr/stats-detail.png and b/docs/site-documentation/static/img/fr/stats-detail.png differ
modified docs/site-documentation/static/img/fr/stats-groupe.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/stats-groupe.jxl and b/docs/site-documentation/static/img/fr/stats-groupe.jxl differ
Binary files a/docs/site-documentation/static/img/fr/stats-groupe.jxl and b/docs/site-documentation/static/img/fr/stats-groupe.jxl differBinary files a/docs/site-documentation/static/img/fr/stats-groupe.jxl and b/docs/site-documentation/static/img/fr/stats-groupe.jxl differ
modified docs/site-documentation/static/img/fr/stats-groupe.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/stats-groupe.png and b/docs/site-documentation/static/img/fr/stats-groupe.png differ
Binary files a/docs/site-documentation/static/img/fr/stats-groupe.png and b/docs/site-documentation/static/img/fr/stats-groupe.png differBinary files a/docs/site-documentation/static/img/fr/stats-groupe.png and b/docs/site-documentation/static/img/fr/stats-groupe.png differ
modified docs/site-documentation/static/img/fr/stats.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/stats.jxl and b/docs/site-documentation/static/img/fr/stats.jxl differ
Binary files a/docs/site-documentation/static/img/fr/stats.jxl and b/docs/site-documentation/static/img/fr/stats.jxl differBinary files a/docs/site-documentation/static/img/fr/stats.jxl and b/docs/site-documentation/static/img/fr/stats.jxl differ
modified docs/site-documentation/static/img/fr/stats.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/stats.png and b/docs/site-documentation/static/img/fr/stats.png differ
Binary files a/docs/site-documentation/static/img/fr/stats.png and b/docs/site-documentation/static/img/fr/stats.png differBinary files a/docs/site-documentation/static/img/fr/stats.png and b/docs/site-documentation/static/img/fr/stats.png differ
modified docs/site-documentation/static/img/fr/tache-effectuee.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/tache-effectuee.jxl and b/docs/site-documentation/static/img/fr/tache-effectuee.jxl differ
Binary files a/docs/site-documentation/static/img/fr/tache-effectuee.jxl and b/docs/site-documentation/static/img/fr/tache-effectuee.jxl differBinary files a/docs/site-documentation/static/img/fr/tache-effectuee.jxl and b/docs/site-documentation/static/img/fr/tache-effectuee.jxl differ
modified docs/site-documentation/static/img/fr/tache-effectuee.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/tache-effectuee.png and b/docs/site-documentation/static/img/fr/tache-effectuee.png differ
Binary files a/docs/site-documentation/static/img/fr/tache-effectuee.png and b/docs/site-documentation/static/img/fr/tache-effectuee.png differBinary files a/docs/site-documentation/static/img/fr/tache-effectuee.png and b/docs/site-documentation/static/img/fr/tache-effectuee.png differ
modified docs/site-documentation/static/img/fr/tache-modifier.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/tache-modifier.jxl and b/docs/site-documentation/static/img/fr/tache-modifier.jxl differ
Binary files a/docs/site-documentation/static/img/fr/tache-modifier.jxl and b/docs/site-documentation/static/img/fr/tache-modifier.jxl differBinary files a/docs/site-documentation/static/img/fr/tache-modifier.jxl and b/docs/site-documentation/static/img/fr/tache-modifier.jxl differ
modified docs/site-documentation/static/img/fr/tache-modifier.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/tache-modifier.png and b/docs/site-documentation/static/img/fr/tache-modifier.png differ
Binary files a/docs/site-documentation/static/img/fr/tache-modifier.png and b/docs/site-documentation/static/img/fr/tache-modifier.png differBinary files a/docs/site-documentation/static/img/fr/tache-modifier.png and b/docs/site-documentation/static/img/fr/tache-modifier.png differ
modified docs/site-documentation/static/img/fr/tache-nouvelle.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/tache-nouvelle.jxl and b/docs/site-documentation/static/img/fr/tache-nouvelle.jxl differ
Binary files a/docs/site-documentation/static/img/fr/tache-nouvelle.jxl and b/docs/site-documentation/static/img/fr/tache-nouvelle.jxl differBinary files a/docs/site-documentation/static/img/fr/tache-nouvelle.jxl and b/docs/site-documentation/static/img/fr/tache-nouvelle.jxl differ
modified docs/site-documentation/static/img/fr/tache-nouvelle.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/tache-nouvelle.png and b/docs/site-documentation/static/img/fr/tache-nouvelle.png differ
Binary files a/docs/site-documentation/static/img/fr/tache-nouvelle.png and b/docs/site-documentation/static/img/fr/tache-nouvelle.png differBinary files a/docs/site-documentation/static/img/fr/tache-nouvelle.png and b/docs/site-documentation/static/img/fr/tache-nouvelle.png differ
modified docs/site-documentation/static/img/fr/taches.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/taches.jxl and b/docs/site-documentation/static/img/fr/taches.jxl differ
Binary files a/docs/site-documentation/static/img/fr/taches.jxl and b/docs/site-documentation/static/img/fr/taches.jxl differBinary files a/docs/site-documentation/static/img/fr/taches.jxl and b/docs/site-documentation/static/img/fr/taches.jxl differ
modified docs/site-documentation/static/img/fr/taches.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/taches.png and b/docs/site-documentation/static/img/fr/taches.png differ
Binary files a/docs/site-documentation/static/img/fr/taches.png and b/docs/site-documentation/static/img/fr/taches.png differBinary files a/docs/site-documentation/static/img/fr/taches.png and b/docs/site-documentation/static/img/fr/taches.png differ
modified docs/site-documentation/static/img/fr/x-bandeau-minuteur.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/x-bandeau-minuteur.jxl and b/docs/site-documentation/static/img/fr/x-bandeau-minuteur.jxl differ
Binary files a/docs/site-documentation/static/img/fr/x-bandeau-minuteur.jxl and b/docs/site-documentation/static/img/fr/x-bandeau-minuteur.jxl differBinary files a/docs/site-documentation/static/img/fr/x-bandeau-minuteur.jxl and b/docs/site-documentation/static/img/fr/x-bandeau-minuteur.jxl differ
modified docs/site-documentation/static/img/fr/x-bandeau-minuteur.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/x-bandeau-minuteur.png and b/docs/site-documentation/static/img/fr/x-bandeau-minuteur.png differ
Binary files a/docs/site-documentation/static/img/fr/x-bandeau-minuteur.png and b/docs/site-documentation/static/img/fr/x-bandeau-minuteur.png differBinary files a/docs/site-documentation/static/img/fr/x-bandeau-minuteur.png and b/docs/site-documentation/static/img/fr/x-bandeau-minuteur.png differ
modified docs/site-documentation/static/img/fr/x-categorie-pill.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/x-categorie-pill.jxl and b/docs/site-documentation/static/img/fr/x-categorie-pill.jxl differ
Binary files a/docs/site-documentation/static/img/fr/x-categorie-pill.jxl and b/docs/site-documentation/static/img/fr/x-categorie-pill.jxl differBinary files a/docs/site-documentation/static/img/fr/x-categorie-pill.jxl and b/docs/site-documentation/static/img/fr/x-categorie-pill.jxl differ
modified docs/site-documentation/static/img/fr/x-categorie-pill.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/x-categorie-pill.png and b/docs/site-documentation/static/img/fr/x-categorie-pill.png differ
Binary files a/docs/site-documentation/static/img/fr/x-categorie-pill.png and b/docs/site-documentation/static/img/fr/x-categorie-pill.png differBinary files a/docs/site-documentation/static/img/fr/x-categorie-pill.png and b/docs/site-documentation/static/img/fr/x-categorie-pill.png differ
modified docs/site-documentation/static/img/fr/x-entete.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/x-entete.jxl and b/docs/site-documentation/static/img/fr/x-entete.jxl differ
Binary files a/docs/site-documentation/static/img/fr/x-entete.jxl and b/docs/site-documentation/static/img/fr/x-entete.jxl differBinary files a/docs/site-documentation/static/img/fr/x-entete.jxl and b/docs/site-documentation/static/img/fr/x-entete.jxl differ
modified docs/site-documentation/static/img/fr/x-entete.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/x-entete.png and b/docs/site-documentation/static/img/fr/x-entete.png differ
Binary files a/docs/site-documentation/static/img/fr/x-entete.png and b/docs/site-documentation/static/img/fr/x-entete.png differBinary files a/docs/site-documentation/static/img/fr/x-entete.png and b/docs/site-documentation/static/img/fr/x-entete.png differ
modified docs/site-documentation/static/img/fr/x-stepper.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/x-stepper.jxl and b/docs/site-documentation/static/img/fr/x-stepper.jxl differ
Binary files a/docs/site-documentation/static/img/fr/x-stepper.jxl and b/docs/site-documentation/static/img/fr/x-stepper.jxl differBinary files a/docs/site-documentation/static/img/fr/x-stepper.jxl and b/docs/site-documentation/static/img/fr/x-stepper.jxl differ
modified docs/site-documentation/static/img/fr/x-stepper.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/x-stepper.png and b/docs/site-documentation/static/img/fr/x-stepper.png differ
Binary files a/docs/site-documentation/static/img/fr/x-stepper.png and b/docs/site-documentation/static/img/fr/x-stepper.png differBinary files a/docs/site-documentation/static/img/fr/x-stepper.png and b/docs/site-documentation/static/img/fr/x-stepper.png differ
modified docs/site-documentation/static/img/fr/x-todo-carte.jxl +0 -0
Binary files a/docs/site-documentation/static/img/fr/x-todo-carte.jxl and b/docs/site-documentation/static/img/fr/x-todo-carte.jxl differ
Binary files a/docs/site-documentation/static/img/fr/x-todo-carte.jxl and b/docs/site-documentation/static/img/fr/x-todo-carte.jxl differBinary files a/docs/site-documentation/static/img/fr/x-todo-carte.jxl and b/docs/site-documentation/static/img/fr/x-todo-carte.jxl differ
modified docs/site-documentation/static/img/fr/x-todo-carte.png +0 -0
Binary files a/docs/site-documentation/static/img/fr/x-todo-carte.png and b/docs/site-documentation/static/img/fr/x-todo-carte.png differ
Binary files a/docs/site-documentation/static/img/fr/x-todo-carte.png and b/docs/site-documentation/static/img/fr/x-todo-carte.png differBinary files a/docs/site-documentation/static/img/fr/x-todo-carte.png and b/docs/site-documentation/static/img/fr/x-todo-carte.png differ
added docs/site-documentation/static/img/pt-br/ajouter-categorie.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/ajouter-categorie.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/ajouter-categorie.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/ajouter-categorie.jxl differ
added docs/site-documentation/static/img/pt-br/ajouter-categorie.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/ajouter-categorie.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/ajouter-categorie.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/ajouter-categorie.png differ
added docs/site-documentation/static/img/pt-br/ajouter-choix.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/ajouter-choix.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/ajouter-choix.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/ajouter-choix.jxl differ
added docs/site-documentation/static/img/pt-br/ajouter-choix.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/ajouter-choix.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/ajouter-choix.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/ajouter-choix.png differ
added docs/site-documentation/static/img/pt-br/ajouter-duree.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/ajouter-duree.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/ajouter-duree.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/ajouter-duree.jxl differ
added docs/site-documentation/static/img/pt-br/ajouter-duree.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/ajouter-duree.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/ajouter-duree.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/ajouter-duree.png differ
added docs/site-documentation/static/img/pt-br/categories.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/categories.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/categories.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/categories.jxl differ
added docs/site-documentation/static/img/pt-br/categories.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/categories.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/categories.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/categories.png differ
added docs/site-documentation/static/img/pt-br/connexion.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/connexion.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/connexion.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/connexion.jxl differ
added docs/site-documentation/static/img/pt-br/connexion.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/connexion.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/connexion.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/connexion.png differ
added docs/site-documentation/static/img/pt-br/equipes.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/equipes.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/equipes.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/equipes.jxl differ
added docs/site-documentation/static/img/pt-br/equipes.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/equipes.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/equipes.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/equipes.png differ
added docs/site-documentation/static/img/pt-br/erreur-404.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/erreur-404.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/erreur-404.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/erreur-404.jxl differ
added docs/site-documentation/static/img/pt-br/erreur-404.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/erreur-404.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/erreur-404.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/erreur-404.png differ
added docs/site-documentation/static/img/pt-br/mes-temps.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/mes-temps.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/mes-temps.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/mes-temps.jxl differ
added docs/site-documentation/static/img/pt-br/mes-temps.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/mes-temps.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/mes-temps.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/mes-temps.png differ
added docs/site-documentation/static/img/pt-br/minuteur.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/minuteur.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/minuteur.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/minuteur.jxl differ
added docs/site-documentation/static/img/pt-br/minuteur.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/minuteur.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/minuteur.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/minuteur.png differ
added docs/site-documentation/static/img/pt-br/modifier-temps.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/modifier-temps.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/modifier-temps.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/modifier-temps.jxl differ
added docs/site-documentation/static/img/pt-br/modifier-temps.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/modifier-temps.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/modifier-temps.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/modifier-temps.png differ
added docs/site-documentation/static/img/pt-br/parametres.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/parametres.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/parametres.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/parametres.jxl differ
added docs/site-documentation/static/img/pt-br/parametres.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/parametres.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/parametres.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/parametres.png differ
added docs/site-documentation/static/img/pt-br/stats-asso.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats-asso.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats-asso.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats-asso.jxl differ
added docs/site-documentation/static/img/pt-br/stats-asso.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats-asso.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats-asso.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats-asso.png differ
added docs/site-documentation/static/img/pt-br/stats-detail.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats-detail.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats-detail.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats-detail.jxl differ
added docs/site-documentation/static/img/pt-br/stats-detail.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats-detail.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats-detail.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats-detail.png differ
added docs/site-documentation/static/img/pt-br/stats-groupe.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats-groupe.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats-groupe.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats-groupe.jxl differ
added docs/site-documentation/static/img/pt-br/stats-groupe.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats-groupe.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats-groupe.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats-groupe.png differ
added docs/site-documentation/static/img/pt-br/stats.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats.jxl differ
added docs/site-documentation/static/img/pt-br/stats.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/stats.png differ
added docs/site-documentation/static/img/pt-br/tache-effectuee.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/tache-effectuee.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/tache-effectuee.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/tache-effectuee.jxl differ
added docs/site-documentation/static/img/pt-br/tache-effectuee.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/tache-effectuee.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/tache-effectuee.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/tache-effectuee.png differ
added docs/site-documentation/static/img/pt-br/tache-modifier.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/tache-modifier.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/tache-modifier.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/tache-modifier.jxl differ
added docs/site-documentation/static/img/pt-br/tache-modifier.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/tache-modifier.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/tache-modifier.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/tache-modifier.png differ
added docs/site-documentation/static/img/pt-br/tache-nouvelle.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/tache-nouvelle.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/tache-nouvelle.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/tache-nouvelle.jxl differ
added docs/site-documentation/static/img/pt-br/tache-nouvelle.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/tache-nouvelle.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/tache-nouvelle.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/tache-nouvelle.png differ
added docs/site-documentation/static/img/pt-br/taches.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/taches.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/taches.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/taches.jxl differ
added docs/site-documentation/static/img/pt-br/taches.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/taches.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/taches.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/taches.png differ
added docs/site-documentation/static/img/pt-br/x-bandeau-minuteur.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-bandeau-minuteur.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-bandeau-minuteur.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-bandeau-minuteur.jxl differ
added docs/site-documentation/static/img/pt-br/x-bandeau-minuteur.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-bandeau-minuteur.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-bandeau-minuteur.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-bandeau-minuteur.png differ
added docs/site-documentation/static/img/pt-br/x-categorie-pill.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-categorie-pill.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-categorie-pill.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-categorie-pill.jxl differ
added docs/site-documentation/static/img/pt-br/x-categorie-pill.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-categorie-pill.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-categorie-pill.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-categorie-pill.png differ
added docs/site-documentation/static/img/pt-br/x-entete.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-entete.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-entete.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-entete.jxl differ
added docs/site-documentation/static/img/pt-br/x-entete.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-entete.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-entete.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-entete.png differ
added docs/site-documentation/static/img/pt-br/x-groupe-carte.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-groupe-carte.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-groupe-carte.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-groupe-carte.jxl differ
added docs/site-documentation/static/img/pt-br/x-groupe-carte.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-groupe-carte.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-groupe-carte.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-groupe-carte.png differ
added docs/site-documentation/static/img/pt-br/x-invitation.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-invitation.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-invitation.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-invitation.jxl differ
added docs/site-documentation/static/img/pt-br/x-invitation.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-invitation.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-invitation.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-invitation.png differ
added docs/site-documentation/static/img/pt-br/x-legende.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-legende.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-legende.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-legende.jxl differ
added docs/site-documentation/static/img/pt-br/x-legende.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-legende.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-legende.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-legende.png differ
added docs/site-documentation/static/img/pt-br/x-scopes.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-scopes.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-scopes.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-scopes.jxl differ
added docs/site-documentation/static/img/pt-br/x-scopes.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-scopes.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-scopes.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-scopes.png differ
added docs/site-documentation/static/img/pt-br/x-stepper.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-stepper.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-stepper.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-stepper.jxl differ
added docs/site-documentation/static/img/pt-br/x-stepper.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-stepper.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-stepper.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-stepper.png differ
added docs/site-documentation/static/img/pt-br/x-tabbar.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-tabbar.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-tabbar.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-tabbar.jxl differ
added docs/site-documentation/static/img/pt-br/x-tabbar.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-tabbar.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-tabbar.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-tabbar.png differ
added docs/site-documentation/static/img/pt-br/x-todo-carte.jxl +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-todo-carte.jxl differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-todo-carte.jxl differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-todo-carte.jxl differ
added docs/site-documentation/static/img/pt-br/x-todo-carte.png +0 -0
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-todo-carte.png differ
new file mode 100644
Binary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-todo-carte.png differBinary files /dev/null and b/docs/site-documentation/static/img/pt-br/x-todo-carte.png differ
modified docs/site-documentation/templates/base.html +6 -3
@@ -28,7 +28,7 @@
2828 {%- for code in config.extra.langs -%}
2929 {%- set label = trans(key="lang_" ~ code, lang=config.default_language) -%}
3030 {%- if code == lang -%}
31- <span class="lang is-on" aria-current="true"><span class="l-long">{{ label }}</span><span class="l-short">{{ code | upper }}</span></span>
31+ <span class="lang is-on" aria-current="true"><span class="l-long">{{ label }}</span><span class="l-short">{{ code | split(pat="-") | first | upper }}</span></span>
3232 {%- else -%}
3333 {%- set_global target = "" -%}
3434 {%- if page is defined -%}
@@ -42,9 +42,9 @@
4242 {%- if root -%}{%- set_global target = root.permalink -%}{%- endif -%}
4343 {%- endif -%}
4444 {%- if target == "" -%}
45- <span class="lang is-off"><span class="l-long">{{ label }}</span><span class="l-short">{{ code | upper }}</span></span>
45+ <span class="lang is-off"><span class="l-long">{{ label }}</span><span class="l-short">{{ code | split(pat="-") | first | upper }}</span></span>
4646 {%- else -%}
47- <a class="lang" href="{{ target }}" hreflang="{{ code }}" aria-label="{{ label }}"><span class="l-long">{{ label }}</span><span class="l-short" aria-hidden="true">{{ code | upper }}</span></a>
47+ <a class="lang" href="{{ target }}" hreflang="{{ code }}" aria-label="{{ label }}"><span class="l-long">{{ label }}</span><span class="l-short" aria-hidden="true">{{ code | split(pat="-") | first | upper }}</span></a>
4848 {%- endif -%}
4949 {%- endif -%}
5050 {%- endfor -%}
@@ -64,6 +64,9 @@
6464 <nav class="side" id="sommaire" aria-label="{{ trans(key='sections', lang=lang) }}">
6565 <p class="side-head">{{ trans(key="summary", lang=lang) }}</p>
6666 <a class="side-top{% if here == home?.path %} is-on{% endif %}" href="{{ home?.permalink or config.base_url }}">{{ trans(key="home", lang=lang) }}</a>
67+ {%- if home %}{% for p in home.pages %}
68+ <a class="side-top{% if here == p.path %} is-on{% endif %}" href="{{ p.permalink }}"{% if here == p.path %} aria-current="page"{% endif %}>{{ p.title }}</a>
69+ {%- endfor %}{% endif %}
6770 {%- for s in [ecrans, cas] %}{% if s %}
6871 <p class="side-title">{{ s.title }}</p>
6972 <ul>
@@ -28,7 +28,7 @@
28 {%- for code in config.extra.langs -%}28 {%- for code in config.extra.langs -%}
29 {%- set label = trans(key="lang_" ~ code, lang=config.default_language) -%}29 {%- set label = trans(key="lang_" ~ code, lang=config.default_language) -%}
30 {%- if code == lang -%}30 {%- if code == lang -%}
31- <span class="lang is-on" aria-current="true"><span class="l-long">{{ label }}</span><span class="l-short">{{ code | upper }}</span></span>31+ <span class="lang is-on" aria-current="true"><span class="l-long">{{ label }}</span><span class="l-short">{{ code | split(pat="-") | first | upper }}</span></span>
32 {%- else -%}32 {%- else -%}
33 {%- set_global target = "" -%}33 {%- set_global target = "" -%}
34 {%- if page is defined -%}34 {%- if page is defined -%}
@@ -42,9 +42,9 @@
42 {%- if root -%}{%- set_global target = root.permalink -%}{%- endif -%}42 {%- if root -%}{%- set_global target = root.permalink -%}{%- endif -%}
43 {%- endif -%}43 {%- endif -%}
44 {%- if target == "" -%}44 {%- if target == "" -%}
45- <span class="lang is-off"><span class="l-long">{{ label }}</span><span class="l-short">{{ code | upper }}</span></span>45+ <span class="lang is-off"><span class="l-long">{{ label }}</span><span class="l-short">{{ code | split(pat="-") | first | upper }}</span></span>
46 {%- else -%}46 {%- else -%}
47- <a class="lang" href="{{ target }}" hreflang="{{ code }}" aria-label="{{ label }}"><span class="l-long">{{ label }}</span><span class="l-short" aria-hidden="true">{{ code | upper }}</span></a>47+ <a class="lang" href="{{ target }}" hreflang="{{ code }}" aria-label="{{ label }}"><span class="l-long">{{ label }}</span><span class="l-short" aria-hidden="true">{{ code | split(pat="-") | first | upper }}</span></a>
48 {%- endif -%}48 {%- endif -%}
49 {%- endif -%}49 {%- endif -%}
50 {%- endfor -%}50 {%- endfor -%}
@@ -64,6 +64,9 @@
64 <nav class="side" id="sommaire" aria-label="{{ trans(key='sections', lang=lang) }}">64 <nav class="side" id="sommaire" aria-label="{{ trans(key='sections', lang=lang) }}">
65 <p class="side-head">{{ trans(key="summary", lang=lang) }}</p>65 <p class="side-head">{{ trans(key="summary", lang=lang) }}</p>
66 <a class="side-top{% if here == home?.path %} is-on{% endif %}" href="{{ home?.permalink or config.base_url }}">{{ trans(key="home", lang=lang) }}</a>66 <a class="side-top{% if here == home?.path %} is-on{% endif %}" href="{{ home?.permalink or config.base_url }}">{{ trans(key="home", lang=lang) }}</a>
67+ {%- if home %}{% for p in home.pages %}
68+ <a class="side-top{% if here == p.path %} is-on{% endif %}" href="{{ p.permalink }}"{% if here == p.path %} aria-current="page"{% endif %}>{{ p.title }}</a>
69+ {%- endfor %}{% endif %}
67 {%- for s in [ecrans, cas] %}{% if s %}70 {%- for s in [ecrans, cas] %}{% if s %}
68 <p class="side-title">{{ s.title }}</p>71 <p class="side-title">{{ s.title }}</p>
69 <ul>72 <ul>
modified docs/site-documentation/templates/components.html +10 -2
@@ -1,13 +1,19 @@
11 {# Composants Tera appelés depuis le markdown (Zola 0.23 a supprimé les
22 shortcodes : le contenu des pages est templaté directement).
33
4- Les captures sont trilingues : chaque appel passe la langue de la page,
4+ Les captures suivent la langue : chaque appel passe celle de la page,
55 `lang={lang}`, parce qu'un composant ne voit pas le contexte de l'appelant.
6- Chaque image existe en JPEG XL (proposé d'abord) et en PNG (repli). #}
6+ Chaque image existe en JPEG XL (proposé d'abord) et en PNG (repli).
7+
8+ Une langue sans dossier dans static/img/ retombe sur « en » : le portugais
9+ emprunte donc les captures anglaises tant que shots.mjs n'a pas fait sa
10+ passe. Le repli est écrit en dur parce qu'un composant ne voit pas `config`
11+ non plus, seulement ses propres paramètres. #}
712
813 {# Capture pleine page, format téléphone.
914 {{<shot name="stats" alt="…" lang={lang} legende="…" />}} #}
1015 {% component shot(name: string, alt: string, lang: string, legende: string = "") %}
16+{% if not get_image_metadata(path="static/img/" ~ lang ~ "/" ~ name ~ ".png", allow_missing=true) %}{% set lang = "en" %}{% endif %}
1117 {% set meta = get_image_metadata(path="static/img/" ~ lang ~ "/" ~ name ~ ".png", allow_missing=true) %}
1218 <figure class="shot">
1319 <picture>
@@ -22,6 +28,7 @@
2228 {# Extrait recadré, posé dans le fil du texte.
2329 {{<extrait name="x-scopes" alt="…" lang={lang} legende="…" />}} #}
2430 {% component extrait(name: string, alt: string, lang: string, legende: string = "") %}
31+{% if not get_image_metadata(path="static/img/" ~ lang ~ "/" ~ name ~ ".png", allow_missing=true) %}{% set lang = "en" %}{% endif %}
2532 {% set meta = get_image_metadata(path="static/img/" ~ lang ~ "/" ~ name ~ ".png", allow_missing=true) %}
2633 <figure class="extrait">
2734 <picture>
@@ -36,6 +43,7 @@
3643 {# Deux captures côte à côte (deux étapes, avant et après).
3744 {{<duo a="…" b="…" alt_a="…" alt_b="…" lang={lang} legende="…" />}} #}
3845 {% component duo(a: string, b: string, alt_a: string, alt_b: string, lang: string, legende: string = "") %}
46+{% if not get_image_metadata(path="static/img/" ~ lang ~ "/" ~ a ~ ".png", allow_missing=true) %}{% set lang = "en" %}{% endif %}
3947 {% set ma = get_image_metadata(path="static/img/" ~ lang ~ "/" ~ a ~ ".png", allow_missing=true) %}
4048 {% set mb = get_image_metadata(path="static/img/" ~ lang ~ "/" ~ b ~ ".png", allow_missing=true) %}
4149 <figure class="duo">
@@ -1,13 +1,19 @@
1 {# Composants Tera appelés depuis le markdown (Zola 0.23 a supprimé les1 {# Composants Tera appelés depuis le markdown (Zola 0.23 a supprimé les
2 shortcodes : le contenu des pages est templaté directement).2 shortcodes : le contenu des pages est templaté directement).
3 3
4- Les captures sont trilingues : chaque appel passe la langue de la page,4+ Les captures suivent la langue : chaque appel passe celle de la page,
5 `lang={lang}`, parce qu'un composant ne voit pas le contexte de l'appelant.5 `lang={lang}`, parce qu'un composant ne voit pas le contexte de l'appelant.
6- Chaque image existe en JPEG XL (proposé d'abord) et en PNG (repli). #}6+ Chaque image existe en JPEG XL (proposé d'abord) et en PNG (repli).
7+
8+ Une langue sans dossier dans static/img/ retombe sur « en » : le portugais
9+ emprunte donc les captures anglaises tant que shots.mjs n'a pas fait sa
10+ passe. Le repli est écrit en dur parce qu'un composant ne voit pas `config`
11+ non plus, seulement ses propres paramètres. #}
7 12
8 {# Capture pleine page, format téléphone.13 {# Capture pleine page, format téléphone.
9 {{<shot name="stats" alt="…" lang={lang} legende="…" />}} #}14 {{<shot name="stats" alt="…" lang={lang} legende="…" />}} #}
10 {% component shot(name: string, alt: string, lang: string, legende: string = "") %}15 {% component shot(name: string, alt: string, lang: string, legende: string = "") %}
16+{% if not get_image_metadata(path="static/img/" ~ lang ~ "/" ~ name ~ ".png", allow_missing=true) %}{% set lang = "en" %}{% endif %}
11 {% set meta = get_image_metadata(path="static/img/" ~ lang ~ "/" ~ name ~ ".png", allow_missing=true) %}17 {% set meta = get_image_metadata(path="static/img/" ~ lang ~ "/" ~ name ~ ".png", allow_missing=true) %}
12 <figure class="shot">18 <figure class="shot">
13 <picture>19 <picture>
@@ -22,6 +28,7 @@
22 {# Extrait recadré, posé dans le fil du texte.28 {# Extrait recadré, posé dans le fil du texte.
23 {{<extrait name="x-scopes" alt="…" lang={lang} legende="…" />}} #}29 {{<extrait name="x-scopes" alt="…" lang={lang} legende="…" />}} #}
24 {% component extrait(name: string, alt: string, lang: string, legende: string = "") %}30 {% component extrait(name: string, alt: string, lang: string, legende: string = "") %}
31+{% if not get_image_metadata(path="static/img/" ~ lang ~ "/" ~ name ~ ".png", allow_missing=true) %}{% set lang = "en" %}{% endif %}
25 {% set meta = get_image_metadata(path="static/img/" ~ lang ~ "/" ~ name ~ ".png", allow_missing=true) %}32 {% set meta = get_image_metadata(path="static/img/" ~ lang ~ "/" ~ name ~ ".png", allow_missing=true) %}
26 <figure class="extrait">33 <figure class="extrait">
27 <picture>34 <picture>
@@ -36,6 +43,7 @@
36 {# Deux captures côte à côte (deux étapes, avant et après).43 {# Deux captures côte à côte (deux étapes, avant et après).
37 {{<duo a="…" b="…" alt_a="…" alt_b="…" lang={lang} legende="…" />}} #}44 {{<duo a="…" b="…" alt_a="…" alt_b="…" lang={lang} legende="…" />}} #}
38 {% component duo(a: string, b: string, alt_a: string, alt_b: string, lang: string, legende: string = "") %}45 {% component duo(a: string, b: string, alt_a: string, alt_b: string, lang: string, legende: string = "") %}
46+{% if not get_image_metadata(path="static/img/" ~ lang ~ "/" ~ a ~ ".png", allow_missing=true) %}{% set lang = "en" %}{% endif %}
39 {% set ma = get_image_metadata(path="static/img/" ~ lang ~ "/" ~ a ~ ".png", allow_missing=true) %}47 {% set ma = get_image_metadata(path="static/img/" ~ lang ~ "/" ~ a ~ ".png", allow_missing=true) %}
40 {% set mb = get_image_metadata(path="static/img/" ~ lang ~ "/" ~ b ~ ".png", allow_missing=true) %}48 {% set mb = get_image_metadata(path="static/img/" ~ lang ~ "/" ~ b ~ ".png", allow_missing=true) %}
41 <figure class="duo">49 <figure class="duo">
modified docs/site-documentation/templates/index.html +7 -0
@@ -15,6 +15,13 @@
1515 {{ section.content | safe }}
1616
1717 <div class="cards">
18+ {#- Pages posées à la racine (Démarrage), avant les sections. -#}
19+ {%- for p in section.pages %}
20+ <a class="card" href="{{ p.permalink }}">
21+ <span class="card-title">{{ p.title }}</span>
22+ {%- if p.description %}<span class="card-desc">{{ p.description }}</span>{% endif %}
23+ </a>
24+ {%- endfor %}
1825 {%- for s in section.subsections %}
1926 {%- set sub = get_section(path=s) %}
2027 <a class="card" href="{{ sub.permalink }}">
@@ -15,6 +15,13 @@
15 {{ section.content | safe }}15 {{ section.content | safe }}
16 16
17 <div class="cards">17 <div class="cards">
18+ {#- Pages posées à la racine (Démarrage), avant les sections. -#}
19+ {%- for p in section.pages %}
20+ <a class="card" href="{{ p.permalink }}">
21+ <span class="card-title">{{ p.title }}</span>
22+ {%- if p.description %}<span class="card-desc">{{ p.description }}</span>{% endif %}
23+ </a>
24+ {%- endfor %}
18 {%- for s in section.subsections %}25 {%- for s in section.subsections %}
19 {%- set sub = get_section(path=s) %}26 {%- set sub = get_section(path=s) %}
20 <a class="card" href="{{ sub.permalink }}">27 <a class="card" href="{{ sub.permalink }}">