Add mobile overflow nav, law check feature, and favicon

Nav: "Fonctionnement" and "Flyer QR" restored on mobile via a ···
overflow dropdown (click-outside closes); other links always visible

Law check: new POST /api/check-law endpoint (5/min, 20/h) calls
mistral-small with a new LAW_CHECK_PROMPT to detect if a proposal is
already covered by French or EU law. Informational only, non-blocking.
Frontend: "Vérifier le cadre légal existant" button below textarea in
home.tsx; result displayed with Scale icon; resets on content change.

Favicon: replaced placeholder red square with a petrol rounded square
containing a serif "V" (for Voix) in warm cream — matches brand palette

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-23 17:57:29 +02:00
parent 5c5152a387
commit 2ef14ac765
6 changed files with 179 additions and 7 deletions
+21
View File
@@ -459,6 +459,27 @@ Si rejetée :
{"accepted": false, "reason": "Explication courte en français avec référence légale précise (ex: contraire à DUDH Art. 20 — incitation à la haine raciale)", "legal_basis": "DUDH Art. 20, PIDCP Art. 20"}
"""
LAW_CHECK_PROMPT = """
Tu es un assistant juridique spécialisé en droit français et en droit de l'Union européenne.
Ta mission : analyser une proposition citoyenne et déterminer si elle est déjà couverte,
en tout ou en partie, par une loi française ou un règlement européen en vigueur.
INSTRUCTIONS
- Si un texte législatif ou réglementaire couvre déjà cette proposition :
• Cite le texte précis : nom complet, numéro ou date, article le cas échéant.
• Résume en une phrase ce que ce texte prévoit concrètement.
• Si le texte manque de décrets d'application ou n'est que partiellement appliqué, dis-le
clairement — car une loi non appliquée ne rend pas la revendication caduque.
- Si la proposition n'est couverte par aucun texte en vigueur, réponds simplement :
"Aucun texte législatif en vigueur ne couvre cette proposition."
- Ne te prononce pas sur la valeur ou l'opportunité de la proposition.
- Ne réponds pas avec des textes abrogés ou non ratifiés.
TON : neutre, factuel, concis. Pas de formule introductive.
FORMAT : 2 à 4 phrases maximum. Pas de markdown, pas de tirets, pas de liste.
"""
SYNTHESIS_PROMPT = """
Tu es un outil de résumé de contributions citoyennes. Tu n'exprimes aucune opinion.
Tu restitues fidèlement ce qui a été soumis, sans l'édulcorer ni l'amplifier.