Accents FR, architecture modulaire, protocoles opérationnels

- Fix accents manquants dans 7 pages UI (décisions, boîte à outils, etc.)
- Titres accueil enrichis : Décisions structurantes, Documents de référence,
  Mandats et nominations, Protocoles et fonctionnement
- Retrait Embarquement Forgeron du seed (n'est pas une Decision)
- 2 protocoles opérationnels dans Protocoles : Embarquement Forgeron
  (lié à l'Acte d'engagement) + Soumission Runtime Upgrade (lié à la
  Décision Runtime Upgrade) avec timeline et liens croisés signalétiques
- Décision Runtime Upgrade : badge on-chain + lien protocole + contexte
- Document [slug] : lien protocole dans la section Qualification

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Yvv
2026-03-03 07:05:55 +01:00
parent c19c1aa55e
commit 8201e73d7c
8 changed files with 328 additions and 221 deletions

View File

@@ -23,18 +23,18 @@ onMounted(async () => {
const entryCards = computed(() => [
{
key: 'decisions',
title: 'Decisions',
title: 'Décisions structurantes',
icon: 'i-lucide-scale',
to: '/decisions',
count: decisions.activeDecisions.length,
countLabel: `${decisions.activeDecisions.length} en cours`,
totalLabel: `${decisions.list.length} au total`,
description: 'Processus de decision collectifs',
description: 'Processus de décision collectifs',
color: 'var(--mood-secondary, var(--mood-accent))',
},
{
key: 'documents',
title: 'Documents',
title: 'Documents de référence',
icon: 'i-lucide-book-open',
to: '/documents',
count: documents.activeDocuments.length,
@@ -45,24 +45,24 @@ const entryCards = computed(() => [
},
{
key: 'mandats',
title: 'Mandats',
title: 'Mandats et nominations',
icon: 'i-lucide-user-check',
to: '/mandates',
count: null,
countLabel: null,
totalLabel: null,
description: 'Missions deleguees avec nomination en binome',
description: 'Missions déléguées avec nomination en binôme',
color: 'var(--mood-success)',
},
{
key: 'protocoles',
title: 'Protocoles',
title: 'Protocoles et fonctionnement',
icon: 'i-lucide-settings',
to: '/protocols',
count: protocols.protocols.length,
countLabel: `${protocols.protocols.length} modalite${protocols.protocols.length > 1 ? 's' : ''}`,
totalLabel: 'Boite a outils de vote + workflows',
description: 'Modalites de vote, formules, workflows',
countLabel: `${protocols.protocols.length} modalité${protocols.protocols.length > 1 ? 's' : ''}`,
totalLabel: 'Boîte à outils de vote + workflows',
description: 'Modalités de vote, formules, workflows',
color: 'var(--mood-tertiary, var(--mood-accent))',
},
])
@@ -81,7 +81,7 @@ function formatDate(dateStr: string): string {
if (diffHours < 1) {
const diffMinutes = Math.floor(diffMs / (1000 * 60))
return diffMinutes <= 1 ? 'A l\'instant' : `Il y a ${diffMinutes} min`
return diffMinutes <= 1 ? 'À l\'instant' : `Il y a ${diffMinutes} min`
}
if (diffHours < 24) {
return `Il y a ${Math.floor(diffHours)}h`
@@ -101,7 +101,7 @@ function formatDate(dateStr: string): string {
<span class="dash__title-g">ğ</span><span class="dash__title-paren">(</span>Decision<span class="dash__title-paren">)</span>
</h1>
<p class="dash__subtitle">
Decisions collectives pour la communaute Duniter / G1
Décisions collectives pour la communauté Duniter / G1
</p>
</div>
@@ -141,7 +141,7 @@ function formatDate(dateStr: string): string {
<div class="dash__connect-left">
<UIcon name="i-lucide-key-round" class="text-lg" />
<div>
<p class="dash__connect-text">Connectez-vous avec votre identite Duniter pour participer.</p>
<p class="dash__connect-text">Connectez-vous avec votre identité Duniter pour participer.</p>
<p class="dash__connect-hint">Signature Ed25519 · aucun mot de passe</p>
</div>
</div>
@@ -158,7 +158,7 @@ function formatDate(dateStr: string): string {
<UIcon name="i-lucide-wrench" class="text-xl" />
</div>
<div class="dash__toolbox-card-body">
<h3 class="dash__toolbox-card-title">Boite a outils</h3>
<h3 class="dash__toolbox-card-title">Boîte à outils</h3>
<p class="dash__toolbox-card-desc">
Simulateur de formules, modules de vote, workflows
</p>
@@ -177,7 +177,7 @@ function formatDate(dateStr: string): string {
<div v-if="recentDecisions.length > 0" class="dash__activity">
<div class="dash__activity-head">
<UIcon name="i-lucide-activity" class="text-lg" />
<h3>Activite recente</h3>
<h3>Activité récente</h3>
</div>
<div class="dash__activity-list">
<NuxtLink
@@ -207,7 +207,7 @@ function formatDate(dateStr: string): string {
<template #content>
<div class="dash__formula-body">
<p class="dash__formula-desc">
Le seuil s'adapte a la participation : faible = quasi-unanimite ; forte = majorite simple.
Le seuil s'adapte à la participation : faible = quasi-unanimité ; forte = majorité simple.
</p>
<code class="dash__formula-code">
Seuil = C + B^W + (M + (1-M) * (1 - (T/W)^G)) * max(0, T-C)
@@ -217,7 +217,7 @@ function formatDate(dateStr: string): string {
<span>B = base</span>
<span>W = taille WoT</span>
<span>T = votes</span>
<span>M = majorite</span>
<span>M = majorité</span>
<span>G = gradient</span>
</div>
<NuxtLink to="/protocols/formulas" class="dash__formula-link">