IliesAllali and Claude Opus 5.5
82c895d10a
Revue de droits 1.5.1 : photos refusées libérées après la relecture, citations lues dans le JSON décodé, contenu normalisé à l'envoi, plafond tenu sous verrou
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 20:27:35 +01:00
IliesAllali and Claude Opus 5.5
73be6a7cfd
Compteurs d'édition (sans contenu de l'arbre) : personne ajoutée et par où, proposition envoyée ou relue, modifications enregistrées, doublon ouvert
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 20:21:41 +01:00
IliesAllali and Claude Opus 5.5
5ebfa8337d
Ajouter un proche depuis la fiche : créer depuis la recherche d'un lien, frère ou sœur, « + » en lecture, panneau prérempli, alerte de doublon
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 20:20:27 +01:00
IliesAllali and Claude Opus 5.5
6e42a1f12d
Erreurs : la photo posée sur l'arbre dit pourquoi elle échoue ; « Mettre à jour l'arbre » garde dans le brouillon ce qui n'a pas été enregistré
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 20:16:02 +01:00
IliesAllali and Claude Opus 5.5
0c74adb012
Fantômes : propositions en attente, brouillon et envois de la famille dessinés sur l'arbre ; acceptation ou refus depuis le fantôme
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 20:14:58 +01:00
IliesAllali and Claude Opus 5.5
ddc2231a8a
Relecture : une ancienne annotation incomplète est écartée, pas la relecture entière
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 20:05:48 +01:00
IliesAllali and Claude Opus 5.5
eebb8f2cb1
Propositions de la famille : photos posées sur l'arbre en attente de relecture, annotations posées par le serveur à l'acceptation, état d'une proposition
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 20:04:13 +01:00
IliesAllali and Claude Opus 5.5
01aeb69aff
1.5.0 : changelog
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
v1.5.0
2026-10-25 19:26:05 +01:00
IliesAllali
da680bceea
Merge pull request #149 from IliesAllali/feat/bouton-icone
...
Icône de l'arbre et bouton « Modifier »
2026-10-25 19:25:19 +01:00
IliesAllali
c207d25b60
Merge pull request #148 from IliesAllali/feat/cogestion-145
...
Plusieurs gestionnaires pour un arbre (#145 )
2026-10-25 18:34:55 +01:00
IliesAllali
b9faa2a4b4
Merge branch 'feat/cogestion-145' into feat/bouton-icone
...
# Conflicts:
# CHANGELOG.md
2026-10-25 18:31:39 +01:00
IliesAllali
83e8282d94
Merge remote-tracking branch 'origin/main' into feat/cogestion-145
...
# Conflicts:
# CHANGELOG.md
# backend/src/app.ts
# frontend/src/i18n/en/index.js
2026-10-25 18:30:28 +01:00
IliesAllali and Claude Opus 5.5
b61ce5c8ad
Icône de l'arbre (un emoji, dans les menus, le compte et la page d'invitation) et bouton « Modifier » pour qui gère l'arbre
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 18:22:48 +01:00
IliesAllali
f192665f17
Merge pull request #146 from IliesAllali/feat/recherche-sources
...
Chercher quelqu'un ailleurs : panneau à droite de l'arbre
2026-10-25 18:19:56 +01:00
IliesAllali
3814a192f4
Merge pull request #147 from IliesAllali/fix/fiche-modifier-ipad
...
Fiche : « Modifier » d'un clic, « ? » entier sur les cadres ronds, arbre jusqu'en bas sur iPad
2026-10-25 18:19:46 +01:00
IliesAllali and Claude Opus 5.5
7c9ea3c95e
Chercher quelqu'un : créer la personne trouvée, rattachée à un proche
...
« Ajouter à l'arbre » s'ouvre sur Nouvelle personne : lien (parent, enfant, conjoint,
frère ou sœur) et proche dans l'arbre, par le même chemin qu'« Ajouter quelqu'un ».
Dates, lieux, sexe, source en note, à vérifier. « Déjà dans l'arbre » complète une fiche.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 18:15:03 +01:00
IliesAllali and Claude Opus 5.5
f9fefd83e1
Chercher quelqu'un : recherche repliée après résultats, cartes plus complètes
...
La recherche tient en une ligne au-dessus des résultats. Chaque carte donne les
années de vie, l'âge au décès, des phrases accordées au sexe et la raison de sa note.
WikiTree limité au même nom de famille ; flèche des liens collée au texte.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 17:51:43 +01:00
IliesAllali and Claude Opus 5.5
d0ab96d634
Pastilles : emoji entier en initiale (arbre, compte, personne) ; fiche : message clair quand les droits ont été retirés
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 17:35:31 +01:00
IliesAllali and Claude Opus 5.5
bff3f54b00
Chercher quelqu'un ailleurs : panneau à droite de l'arbre
...
Entrée « Quelqu'un ailleurs » dans le menu +. On tape un nom, une année et un lieu.
Liens préremplis vers Gallica, FranceArchives, Mémoire des hommes, Léonore, Geneanet,
Open Archives, WikiTree, FreeBMD et FamilySearch, ouverts par le navigateur.
Le serveur interroge les décès INSEE depuis 1970 (matchID) et WikiTree quand
SEARCH_SOURCES les nomme ; MATCHID_TOKEN au-delà d'une centaine de recherches.
Un résultat ajouté ne remplit que les champs vides, passe la personne à vérifier
et garde la source dans sa note.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 17:33:41 +01:00
IliesAllali and Claude Opus 5.5
aa50123e9f
Paramètres : cinq onglets qui tiennent à 360 px
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 17:20:19 +01:00
IliesAllali and Claude Opus 5.5
9221f8b63f
CHANGELOG : 1.5.0, co-gestion et correctifs de la fiche
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 17:05:11 +01:00
IliesAllali and Claude Opus 5.5
07d69896ae
Co-gestion ( #145 ), écrans : onglet Gestion, page du lien d'invitation, Quitter pour le co-gestionnaire, avertissement à la suppression du compte, Immich caché
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 16:57:57 +01:00
IliesAllali and Claude Opus 5.5
ac9c33d43f
Co-gestion ( #145 ), revue de droits : Immich réservé au propriétaire, retrait qui coupe aussi l'accès par le partage, rattachement OIDC sur l'adresse du compte
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 16:57:11 +01:00
IliesAllali and Claude Opus 5.5
5be134e0e6
Co-gestion d'un arbre ( #145 ) : invitations, rattachement OIDC sur email vérifié, compte ouvert par invitation
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 16:57:11 +01:00
IliesAllali and Claude Opus 5.5
befe8fe19a
« À vérifier » : drawPortrait, et un test qui échoue si la marque repasse sous la découpe du cadre
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 16:57:10 +01:00
IliesAllali and Claude Opus 5.5
230ec2ae05
Fiche : « Modifier » d'un clic pour l'administrateur ; « à vérifier » entier sur un cadre rond ; arbre jusqu'en bas de l'écran sur iPad
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 16:36:41 +01:00
IliesAllali
3c9031e6b2
Merge pull request #143 from IliesAllali/release/1.4.0
...
1.4.0 : changelog
v1.4.0
2026-10-23 16:31:58 +02:00
IliesAllali and Claude Opus 5.5
387029f4e7
1.4.0 : changelog
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 16:29:36 +02:00
IliesAllali
c35d13885a
Merge pull request #136 from IliesAllali/dependabot/npm_and_yarn/frontend/frontend-minor-patch-8146d706b9
...
build(deps): bump the frontend-minor-patch group in /frontend with 8 updates
2026-10-23 16:29:08 +02:00
IliesAllali
ccd9cd0936
Merge pull request #134 from IliesAllali/dependabot/npm_and_yarn/backend/backend-minor-patch-7298adcaed
...
build(deps): bump the backend-minor-patch group in /backend with 3 updates
2026-10-23 16:29:03 +02:00
IliesAllali
07b10559e6
Merge pull request #133 from IliesAllali/dependabot/npm_and_yarn/landing/landing-minor-patch-00b7d6252c
...
build(deps): bump the landing-minor-patch group in /landing with 4 updates
2026-10-23 16:28:58 +02:00
IliesAllali
6030b1ff6f
Merge pull request #142 from IliesAllali/fix/souvenirs-non-etires
...
Souvenirs en orbite recadrés, plus étirés dans leur carré
2026-10-23 16:09:48 +02:00
IliesAllali and Claude Opus 5.5
aa22ff1422
Souvenirs en orbite recadrés, plus étirés dans leur carré
...
Retour de Patch du 23/10 sur l'arbre d'Anaïs : les vignettes de souvenirs autour des portraits
étaient « souvent tassées horizontalement ou verticalement ». drawMediaContent étirait la photo
dans le carré quel que soit son format ; elle passe par drawImageCover, le recadrage centré
des portraits.
Vérifié ailleurs, rien à corriger : fiche, liste et gestion des souvenirs, onglet Vie, moments,
propositions et Immich sont déjà en object-fit cover, la visionneuse en contain, les photos
posées sur l'arbre gardent leur rapport.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 16:05:04 +02:00
IliesAllali
2345dd5505
Merge pull request #140 from IliesAllali/feat/a-verifier
...
Personnes « à vérifier » : la famille signale ce dont elle n'est pas sûre
2026-10-23 15:30:36 +02:00
IliesAllali
8fe2f53b34
Merge remote-tracking branch 'origin/main' into feat/a-verifier
2026-10-23 15:27:25 +02:00
IliesAllali
4817cea93b
Merge pull request #141 from IliesAllali/fix/annotations-ancrees
...
Annotations rattachées à une personne, texte posé modifiable
2026-10-23 15:27:07 +02:00
IliesAllali
93a5e41794
Merge remote-tracking branch 'origin/main' into fix/annotations-ancrees
...
# Conflicts:
# frontend/src/App.jsx
# frontend/src/components/Galaxy.jsx
2026-10-23 15:24:46 +02:00
IliesAllali
e91c3206f2
Merge pull request #138 from IliesAllali/feat/onglets-ligne-directe
...
Onglets de familles : la ligne directe vers « C'est moi » dans chaque onglet
2026-10-23 15:20:30 +02:00
IliesAllali
fb176c0cc6
Merge remote-tracking branch 'origin/main' into feat/a-verifier
2026-10-23 15:18:38 +02:00
IliesAllali
d579c4a34b
Merge remote-tracking branch 'origin/main' into fix/annotations-ancrees
2026-10-23 15:18:35 +02:00
IliesAllali
4ff34705c1
Merge remote-tracking branch 'origin/main' into feat/onglets-ligne-directe
2026-10-23 15:18:31 +02:00
IliesAllali
09c1d2337d
Merge pull request #139 from IliesAllali/fix/dompurify
...
deps: dompurify 3.4.17 (avis critique du 23/10)
2026-10-23 15:18:09 +02:00
IliesAllali and Claude Opus 5.5
2e5db68969
Annotations rattachées à une personne, texte posé modifiable
...
Retour d'Anaïs du 23/10 : un texte posé dans l'onglet d'une famille réapparaissait au même
endroit dans l'onglet d'une autre. L'annotation ne gardait que x et y, or chaque onglet recalcule
le placement.
- Chaque annotation garde dans son style la personne la plus proche quand on la pose et le
décalage à son portrait (style.anchor, pas de migration). Elle s'affiche à côté de ce portrait
dans le placement affiché, et pas du tout si la personne n'y est pas. Déplacer recalcule l'ancre.
- Les anciennes annotations sont rattachées au premier affichage, dans le placement de l'onglet
de départ, puis enregistrées une fois (style seul) quand on administre l'arbre.
- Un texte déjà sélectionné se rouvre au clic pour être modifié (double clic sur ordinateur,
deux touchers sur téléphone), et n'est plus dessiné sous sa saisie.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 15:10:46 +02:00
IliesAllali and Claude Opus 5.5
e9d57e5954
Personnes « à vérifier » : la famille signale ce dont elle n'est pas sûre
...
Retour d'Anaïs du 23/10 : plutôt que de dessiner sur l'arbre, marquer une
personne « à vérifier ». Champ toVerify (migration additive, faux par défaut),
posé dans la fiche en modification (ligne « Vérification ») par un admin ou
par la famille via une proposition, montré par une pastille dans la fiche et
un petit rond terracotta avec un « ? » sur le portrait (absent au dézoom).
Taper « à vérifier » dans la recherche liste les personnes marquées.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 15:02:29 +02:00
IliesAllali and Claude Opus 5.5
64821c9c99
deps: dompurify 3.4.17 sous posthog-js (GHSA-cg2g-xh64-v4q7, critique)
...
L'audit de la CI bloque toutes les PR depuis la publication de l'avis du 23/10.
Seuls les fichiers de verrou changent.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 14:55:38 +02:00
IliesAllali and Claude Opus 5.5
03f172b59b
Onglets de familles : la ligne directe vers « C'est moi » dans chaque onglet
...
Dans l'onglet d'une autre famille, la personne commune (celle que le visiteur
désigne par « C'est moi », sinon la personne de départ de l'arbre) reste visible,
reliée par sa ligne directe : le plus court chemin de parenté jusqu'à la famille,
avec les deux parents à chaque pas, sans fratries autour. Ces portraits sont
estompés et un peu réduits.
Un visiteur sans compte peut maintenant dire qui il est dans l'arbre (menu du
visiteur), choix gardé dans son navigateur pour cet arbre.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 14:49:46 +02:00
dependabot[bot]
831aa4c0ac
build(deps): bump the frontend-minor-patch group
...
Bumps the frontend-minor-patch group in /frontend with 8 updates:
| Package | From | To |
| --- | --- | --- |
| [@lucide/icons](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide ) | `1.56.0` | `1.59.0` |
| [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react ) | `1.56.0` | `1.59.0` |
| [posthog-js](https://github.com/PostHog/posthog-js ) | `1.438.9` | `1.438.12` |
| [react](https://github.com/react/react/tree/HEAD/packages/react ) | `19.3.0` | `19.3.1` |
| [react-dom](https://github.com/react/react/tree/HEAD/packages/react-dom ) | `19.3.0` | `19.3.1` |
| [eslint](https://github.com/eslint/eslint ) | `10.12.0` | `10.13.0` |
| [postcss](https://github.com/postcss/postcss ) | `8.5.30` | `8.5.31` |
| [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest ) | `5.0.4` | `5.0.5` |
Updates `@lucide/icons` from 1.56.0 to 1.59.0
- [Release notes](https://github.com/lucide-icons/lucide/releases )
- [Commits](https://github.com/lucide-icons/lucide/commits/1.59.0/packages/lucide )
Updates `lucide-react` from 1.56.0 to 1.59.0
- [Release notes](https://github.com/lucide-icons/lucide/releases )
- [Commits](https://github.com/lucide-icons/lucide/commits/1.59.0/packages/lucide-react )
Updates `posthog-js` from 1.438.9 to 1.438.12
- [Release notes](https://github.com/PostHog/posthog-js/releases )
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/CHANGELOG.md )
- [Commits](https://github.com/PostHog/posthog-js/compare/posthog-js@1.438.9...posthog-js@1.438.12 )
Updates `react` from 19.3.0 to 19.3.1
- [Release notes](https://github.com/react/react/releases )
- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md )
- [Commits](https://github.com/react/react/commits/v19.3.1/packages/react )
Updates `react-dom` from 19.3.0 to 19.3.1
- [Release notes](https://github.com/react/react/releases )
- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md )
- [Commits](https://github.com/react/react/commits/v19.3.1/packages/react-dom )
Updates `eslint` from 10.12.0 to 10.13.0
- [Release notes](https://github.com/eslint/eslint/releases )
- [Commits](https://github.com/eslint/eslint/compare/v10.12.0...v10.13.0 )
Updates `postcss` from 8.5.30 to 8.5.31
- [Release notes](https://github.com/postcss/postcss/releases )
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md )
- [Commits](https://github.com/postcss/postcss/compare/8.5.30...8.5.31 )
Updates `vitest` from 5.0.4 to 5.0.5
- [Release notes](https://github.com/vitest-dev/vitest/releases )
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md )
- [Commits](https://github.com/vitest-dev/vitest/commits/v5.0.5/packages/vitest )
---
updated-dependencies:
- dependency-name: "@lucide/icons"
dependency-version: 1.59.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: frontend-minor-patch
- dependency-name: lucide-react
dependency-version: 1.59.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: frontend-minor-patch
- dependency-name: posthog-js
dependency-version: 1.438.12
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: frontend-minor-patch
- dependency-name: react
dependency-version: 19.3.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: frontend-minor-patch
- dependency-name: react-dom
dependency-version: 19.3.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: frontend-minor-patch
- dependency-name: eslint
dependency-version: 10.13.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: frontend-minor-patch
- dependency-name: postcss
dependency-version: 8.5.31
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: frontend-minor-patch
- dependency-name: vitest
dependency-version: 5.0.5
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: frontend-minor-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-10-22 01:15:01 +00:00
dependabot[bot]
4796d921a2
build(deps): bump the backend-minor-patch group
...
Bumps the backend-minor-patch group in /backend with 3 updates: [@fastify/jwt](https://github.com/fastify/fastify-jwt ), [dotenv](https://github.com/motdotla/dotenv ) and [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest ).
Updates `@fastify/jwt` from 10.2.4 to 10.2.5
- [Release notes](https://github.com/fastify/fastify-jwt/releases )
- [Commits](https://github.com/fastify/fastify-jwt/compare/v10.2.4...v10.2.5 )
Updates `dotenv` from 18.0.7 to 18.0.8
- [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md )
- [Commits](https://github.com/motdotla/dotenv/compare/v18.0.7...v18.0.8 )
Updates `vitest` from 5.0.4 to 5.0.5
- [Release notes](https://github.com/vitest-dev/vitest/releases )
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md )
- [Commits](https://github.com/vitest-dev/vitest/commits/v5.0.5/packages/vitest )
---
updated-dependencies:
- dependency-name: "@fastify/jwt"
dependency-version: 10.2.5
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: backend-minor-patch
- dependency-name: dotenv
dependency-version: 18.0.8
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: backend-minor-patch
- dependency-name: vitest
dependency-version: 5.0.5
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: backend-minor-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-10-22 01:14:38 +00:00
dependabot[bot]
5a7cb03a01
build(deps): bump the landing-minor-patch group
...
Bumps the landing-minor-patch group in /landing with 4 updates: [posthog-js](https://github.com/PostHog/posthog-js ), [react](https://github.com/react/react/tree/HEAD/packages/react ), [react-dom](https://github.com/react/react/tree/HEAD/packages/react-dom ) and [postcss](https://github.com/postcss/postcss ).
Updates `posthog-js` from 1.438.9 to 1.438.12
- [Release notes](https://github.com/PostHog/posthog-js/releases )
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/CHANGELOG.md )
- [Commits](https://github.com/PostHog/posthog-js/compare/posthog-js@1.438.9...posthog-js@1.438.12 )
Updates `react` from 19.3.0 to 19.3.1
- [Release notes](https://github.com/react/react/releases )
- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md )
- [Commits](https://github.com/react/react/commits/v19.3.1/packages/react )
Updates `react-dom` from 19.3.0 to 19.3.1
- [Release notes](https://github.com/react/react/releases )
- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md )
- [Commits](https://github.com/react/react/commits/v19.3.1/packages/react-dom )
Updates `postcss` from 8.5.30 to 8.5.31
- [Release notes](https://github.com/postcss/postcss/releases )
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md )
- [Commits](https://github.com/postcss/postcss/compare/8.5.30...8.5.31 )
---
updated-dependencies:
- dependency-name: posthog-js
dependency-version: 1.438.12
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: landing-minor-patch
- dependency-name: react
dependency-version: 19.3.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: landing-minor-patch
- dependency-name: react-dom
dependency-version: 19.3.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: landing-minor-patch
- dependency-name: postcss
dependency-version: 8.5.31
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: landing-minor-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-10-22 01:14:30 +00:00
IliesAllali
dd0eb93965
Merge pull request #132 from IliesAllali/fix/arbre-sans-plus-photo
...
Arbre : plus de « + photo » sur un portrait vide
2026-10-21 21:26:21 +02:00