Ajustements manuels : textes du formulaire, opacité des en-têtes de grille
ci-cd / backend-test (push) Failing after 41m59s
ci-cd / build-backend (push) Skipped
ci-cd / frontend-test (push) Failing after 45m57s
ci-cd / build-frontend (push) Skipped
ci-cd / deploy (push) Skipped

Formulaire public : libellés retravaillés (photo, disponibilité, cotisation),
suppression du libellé RGPD affiché sur le bouton de suppression d'un
bénévole. Grilles (besoins, vue bénévoles) : en-têtes « Affectés/idéal » et
« Nom » en pleine opacité ; z-index de l'infobulle au survol d'un créneau
relevé (z-[100]). .gitignore : ignore le fichier TODO personnel.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
AdamThomas
2026-09-28 20:23:49 +02:00
co-authored by Claude Sonnet 5
parent 5f7718adfd
commit 26a10cd595
5 changed files with 12 additions and 10 deletions
+2
View File
@@ -23,3 +23,5 @@ dist/
# Claude Code (worktrees, agents locaux) # Claude Code (worktrees, agents locaux)
.claude/ .claude/
TODO
+6 -6
View File
@@ -172,9 +172,9 @@
"config.vol.lastName": "NOM", "config.vol.lastName": "NOM",
"config.vol.phone": "TÉLÉPHONE", "config.vol.phone": "TÉLÉPHONE",
"config.vol.email": "EMAIL (LIEN MAGIQUE)", "config.vol.email": "EMAIL (LIEN MAGIQUE)",
"config.vol.delete": "SUPPRIMER (RGPD — EFFACEMENT COMPLET)", "config.vol.delete": "SUPPRIMER",
"config.vol.deleteConfirm": "Supprimer définitivement ce bénévole et toutes ses données (disponibilités, affectations) ?", "config.vol.deleteConfirm": "Supprimer définitivement ce bénévole et toutes ses données (disponibilités, affectations) ?",
"config.vol.note": "Modifications enregistrées immédiatement via l'API. La suppression est un effacement complet en cascade (RGPD).", "config.vol.note": "Modifications enregistrées immédiatement via l'API. La suppression est un effacement complet en cascade.",
"config.mail.smtpBanner": "Envoie un récapitulatif de planning à chaque bénévole. L'email part si le serveur SMTP est configuré (EMAIL_ENABLED) ; sinon il est seulement journalisé.", "config.mail.smtpBanner": "Envoie un récapitulatif de planning à chaque bénévole. L'email part si le serveur SMTP est configuré (EMAIL_ENABLED) ; sinon il est seulement journalisé.",
"config.mail.templateTitle": "MODÈLE DE MESSAGE", "config.mail.templateTitle": "MODÈLE DE MESSAGE",
"config.mail.senderNote": "Expéditeur défini côté serveur (SMTP_FROM).", "config.mail.senderNote": "Expéditeur défini côté serveur (SMTP_FROM).",
@@ -381,7 +381,7 @@
"form.field.available": "Case « je suis disponible »", "form.field.available": "Case « je suis disponible »",
"form.field.available.help": "Purement informatif — n'a aucun lien avec les disponibilités détaillées de la fiche bénévole.", "form.field.available.help": "Purement informatif — n'a aucun lien avec les disponibilités détaillées de la fiche bénévole.",
"form.field.willingToPayFee": "Case « je veux bien payer une cotisation »", "form.field.willingToPayFee": "Case « je veux bien payer une cotisation »",
"form.field.photo": "Photo", "form.field.photo": "Une magnifique photo de toi :",
"form.field.comment": "Commentaire", "form.field.comment": "Commentaire",
"form.link.title": "Lien du formulaire", "form.link.title": "Lien du formulaire",
"form.link.hint": "À partager aux bénévoles potentiels — n'importe qui muni du lien peut s'inscrire.", "form.link.hint": "À partager aux bénévoles potentiels — n'importe qui muni du lien peut s'inscrire.",
@@ -401,15 +401,15 @@
"form.customize.logo.uploading": "Envoi…", "form.customize.logo.uploading": "Envoi…",
"form.customize.description": "Texte d'introduction", "form.customize.description": "Texte d'introduction",
"form.customize.description.placeholder": "Un mot de bienvenue affiché en haut du formulaire (facultatif)…", "form.customize.description.placeholder": "Un mot de bienvenue affiché en haut du formulaire (facultatif)…",
"form.customize.yaplaUrl": "Lien de cotisation Yapla", "form.customize.yaplaUrl": "Lien de cotisation Yapla",
"form.customize.yaplaUrl.help": "Facultatif : lien vers votre page de cotisation sur Yapla. Un encart « Payer ma cotisation » apparaît alors sur le formulaire public, près de la case correspondante.", "form.customize.yaplaUrl.help": "Facultatif : lien vers votre page de cotisation sur Yapla. Un encart « Payer ma cotisation » apparaît alors sur le formulaire public, près de la case correspondante.",
"form.customize.yaplaUrl.placeholder": "https://www.yapla.com/fr/...", "form.customize.yaplaUrl.placeholder": "https://www.yapla.com/fr/...",
"publicForm.title": "Inscription bénévole", "publicForm.title": "Inscription bénévole",
"publicForm.positionWishes.count": "{count} / {max}", "publicForm.positionWishes.count": "{count} / {max}",
"publicForm.artistWishes.none": "— Aucun —", "publicForm.artistWishes.none": "— Aucun —",
"publicForm.field.available": "Je suis disponible et prêt·e à filer un coup de main !", "publicForm.field.available": "Je suis bénévole les deux jours (vendredi 30 et samedi 31 oct.)",
"publicForm.field.willingToPayFee": "Ça ne me dérange pas de participer à la cotisation de l'association", "publicForm.field.willingToPayFee": "Je participe à la cotisation bénévole de 20€",
"publicForm.photo.squareHint": "Recadrée automatiquement en carré.", "publicForm.photo.squareHint": "Recadrée automatiquement en carré.",
"publicForm.yapla.hint": "Le paiement se fait en ligne, via notre page Yapla.", "publicForm.yapla.hint": "Le paiement se fait en ligne, via notre page Yapla.",
"publicForm.yapla.cta": "Payer ma cotisation ↗", "publicForm.yapla.cta": "Payer ma cotisation ↗",
+2 -2
View File
@@ -245,7 +245,7 @@ export function GrillePage() {
<div <div
style={{ gridColumn: '1 / span 1', gridRow: 2 }} style={{ gridColumn: '1 / span 1', gridRow: 2 }}
className="sticky left-0 top-[27px] z-[21] flex items-center border-b-[3px] border-r-[3px] border-ink bg-sand px-2 font-mono text-[8.5px] opacity-60" className="sticky left-0 top-[27px] z-[21] flex items-center border-b-[3px] border-r-[3px] border-ink bg-sand px-2 font-mono text-[8.5px]"
> >
{t('grille.assignedRequired')} {t('grille.assignedRequired')}
</div> </div>
@@ -463,7 +463,7 @@ function ShiftCell({
<span className="font-mono text-[13px] font-bold">{assigned}</span> <span className="font-mono text-[13px] font-bold">{assigned}</span>
<span className="font-mono text-[9px] opacity-50">/{shift.ideal_staff}</span> <span className="font-mono text-[9px] opacity-50">/{shift.ideal_staff}</span>
<span className={cx('font-mono text-[10px] font-bold', isOk && 'text-green')}>{glyph}</span> <span className={cx('font-mono text-[10px] font-bold', isOk && 'text-green')}>{glyph}</span>
<div className="pointer-events-none absolute left-1/2 top-full z-20 mt-[4px] w-max max-w-[220px] -translate-x-1/2 border-2 border-ink bg-ink px-[9px] py-[7px] text-left font-mono text-[10px] font-normal normal-case leading-relaxed tracking-normal text-cream opacity-0 shadow-brutal-md transition-opacity duration-100 group-hover:opacity-100"> <div className="pointer-events-none absolute left-1/2 top-full z-[100] mt-[4px] w-max max-w-[220px] -translate-x-1/2 border-2 border-ink bg-ink px-[9px] py-[7px] text-left font-mono text-[10px] font-normal normal-case leading-relaxed tracking-normal text-cream opacity-0 shadow-brutal-md transition-opacity duration-100 group-hover:opacity-100">
<div className="mb-[1px] font-mono text-[9px] font-bold text-cream opacity-80"> <div className="mb-[1px] font-mono text-[9px] font-bold text-cream opacity-80">
{hourRangeLabel(shift.starts_at, shift.ends_at)} {hourRangeLabel(shift.starts_at, shift.ends_at)}
</div> </div>
+1 -1
View File
@@ -120,7 +120,7 @@ function FormLogo({ url }: { url: string | null }) {
<img <img
src={url} src={url}
alt="" alt=""
className="mx-auto h-[120px] w-[120px] border-2 border-ink bg-cream object-contain shadow-brutal-sm" className="mx-auto h-[120px] border-2 border-ink bg-cream object-contain shadow-brutal-sm"
/> />
); );
} }
+1 -1
View File
@@ -139,7 +139,7 @@ export function VolunteerViewPage() {
{t('volunteers.totalHours')} {t('volunteers.totalHours')}
</div> </div>
<div className="sticky left-0 top-[27px] z-[7] flex items-center border-b-[3px] border-r-[3px] border-ink bg-sand px-2 font-mono text-[8.5px] opacity-60"> <div className="sticky left-0 top-[27px] z-[7] flex items-center border-b-[3px] border-r-[3px] border-ink bg-sand px-2 font-mono text-[8.5px]">
{t('volunteers.name')} {t('volunteers.name')}
</div> </div>
{lattice.columns.map((column) => ( {lattice.columns.map((column) => (