diff --git a/docs/chantiers/acte-certification/UX-lecteur.md b/docs/chantiers/acte-certification/UX-lecteur.md index 2929588..0681a71 100644 --- a/docs/chantiers/acte-certification/UX-lecteur.md +++ b/docs/chantiers/acte-certification/UX-lecteur.md @@ -132,6 +132,31 @@ endroit, avec « Pour » et « Contre ». Si l'ordre formé est l'ordre en vigue Routes inchangées (ADR 0009) : `POST /api/units/{id}/order` pour proposer, le vote d'une version pour voter. +## Combien de oui pour passer, combien de non pour bloquer + +Yvv, 2026-11-02 : « combien il faut de oui pour passer et combien de non pour maintenir +l'opposition ». Le serveur le dit (ADR 0013 : `yesNeeded`, `noNeeded`, `quorum`) ; l'écran le +répète sans rien calculer (`needOf`, `web/src/lib/labels.ts`), le quorum en infobulle, jamais en +titre : + +| Cas | Sous l'article déplié | En bref, dans la liste | +|---|---|---| +| aucun vote | « 9 oui sur 12 votants pour passer » | « 9 oui sur 12 » | +| des votes, des « non » la tiennent | « 11 oui pour passer · 4 non pour bloquer » | « passe à 11 oui · bloquée à 4 non » | +| sous le quorum, les absents la tiennent (`noNeeded` = 0) | « 9 oui pour passer · le quorum la bloque » | « passe à 9 oui » | + +Cette ligne remplace « Seuil : R voix pour » sous l'article (R à la participation du moment +induisait en erreur dès qu'un « non » arrivait) ; R reste dans « La formule du seuil ». « Il +manque N voix pour. » reste : c'est `yesNeeded − pour`. + +## Le quorum d'un article + +Visible seulement quand le serveur le permet (`canSetQuorum` : l'auteur de la première +version, avant le premier vote ; un administrateur pour un texte du seed), dans le vote déplié, +sous l'inertie : un champ nombre, le défaut du cran rappelé, « Revenir au défaut (n) ». Les +refus du serveur sont dits dans les mots de la personne : hors bornes (400), un vote déjà là +(409), pas l'auteur (403). Les bornes restent au serveur : l'écran ne les recalcule pas. + ## Ce qu'Yvv devrait regarder - Les sections de « Propositions en cours » **repliées par défaut** : la page tient en un écran @@ -141,3 +166,6 @@ pour voter. - Les ordres et les titres proposés **ne sont plus des lignes** de « Propositions en cours » : ils se lisent et se votent à leur module (le panier les garde). - Quand rien n'est en vigueur, les Propositions seed **en tête, en entier**. +- La ligne d'ordre, ses gestes discrets comme ceux d'un article (au survol sur bureau, toujours + visibles sur téléphone) : elle ne crie plus, mais « Réordonner » se trouve au survol. +- Le mot court dans la liste : « passe à 11 oui · bloquée à 4 non ». diff --git a/web/src/lib/components/WaterLevel.svelte b/web/src/lib/components/WaterLevel.svelte index 23f9033..8d9a524 100644 --- a/web/src/lib/components/WaterLevel.svelte +++ b/web/src/lib/components/WaterLevel.svelte @@ -64,4 +64,9 @@ .blocked { box-shadow: inset 0 0 0 2px var(--ochre); } + @media (prefers-reduced-motion: reduce) { + .water { + transition: none; + } + } diff --git a/web/src/lib/i18n/en.ts b/web/src/lib/i18n/en.ts index c9e8b1c..3773e1a 100644 --- a/web/src/lib/i18n/en.ts +++ b/web/src/lib/i18n/en.ts @@ -128,7 +128,6 @@ export const en: Messages = { 'doc.confirmed': 'confirmed by vote', 'doc.adopted': 'adopted on {date}', 'doc.action.vote': 'Voting', - 'doc.action.proposals': 'Proposals', 'doc.action.propose': 'Propose a change', 'doc.basket': 'Vote in bulk', 'doc.basket.count': 'Vote in bulk · {n}', @@ -177,8 +176,6 @@ export const en: Messages = { 'module.title.name': 'Title of the document', 'module.order.name': 'Order of the articles', 'module.order.named': 'Order of the articles · {section}', - 'module.order.count.one': '{n} article', - 'module.order.count.other': '{n} articles', 'module.order.inforce': 'Order in force', 'module.order.proposal': 'Order proposed', 'module.order.added.one': '{n} article added since, placed at the end', @@ -187,7 +184,6 @@ export const en: Messages = { 'module.order.dropped.other': '{n} articles gone since', 'module.order.same': 'it is the order in force', 'module.order.rule': 'A new article goes at the end of its section. If it arrives while an order is under vote, it is added at its end, and the votes stay.', - 'order.propose': 'Propose another order', 'order.edit.label': 'New order of the articles', 'order.edit.help': 'Take an article by its handle and drop it in its place. Without dragging: click an article, then its new place, or use its arrows. With the keyboard: up and down arrows.', 'order.edit.up': 'Move “{title}” up', @@ -213,7 +209,6 @@ export const en: Messages = { 'title.proposed.other': '{n} titles proposed', 'tally.short': '{for} for · {against} against', - 'tally.required': 'Threshold: {n} votes in favor', 'tally.missing.one': '{n} more vote in favor needed.', 'tally.missing.other': '{n} more votes in favor needed.', 'tally.reached': 'Threshold reached.', @@ -227,11 +222,7 @@ export const en: Messages = { 'inertia.badge': 'inertia {level}', - 'panel.vote': 'Voting', - 'panel.proposals': 'Proposals', 'panel.propose': 'Propose', - 'panel.settings': 'Settings', - 'panel.basket': 'Basket', 'panel.details': 'Details', 'panel.close': 'Close panel', 'panel.inforce': 'In force', diff --git a/web/src/lib/i18n/es.ts b/web/src/lib/i18n/es.ts index 6a3282b..09d5f99 100644 --- a/web/src/lib/i18n/es.ts +++ b/web/src/lib/i18n/es.ts @@ -128,7 +128,6 @@ export const es: Messages = { 'doc.confirmed': 'confirmado por la votación', 'doc.adopted': 'adoptado el {date}', 'doc.action.vote': 'Votación', - 'doc.action.proposals': 'Propuestas', 'doc.action.propose': 'Proponer una modificación', 'doc.basket': 'Votar en bloque', 'doc.basket.count': 'Votar en bloque · {n}', @@ -177,8 +176,6 @@ export const es: Messages = { 'module.title.name': 'Título del documento', 'module.order.name': 'Orden de los artículos', 'module.order.named': 'Orden de los artículos · {section}', - 'module.order.count.one': '{n} artículo', - 'module.order.count.other': '{n} artículos', 'module.order.inforce': 'Orden en vigor', 'module.order.proposal': 'Orden propuesto', 'module.order.added.one': '{n} artículo añadido desde entonces, al final', @@ -187,7 +184,6 @@ export const es: Messages = { 'module.order.dropped.other': '{n} artículos salidos desde entonces', 'module.order.same': 'es el orden en vigor', 'module.order.rule': 'Un artículo nuevo se coloca al final de su sección. Si llega durante la votación de un orden, se añade al final, y los votos se mantienen.', - 'order.propose': 'Proponer otro orden', 'order.edit.label': 'Nuevo orden de los artículos', 'order.edit.help': 'Toma un artículo por su asa y suéltalo en su lugar. Sin arrastrar: haz clic en un artículo y luego en su nuevo lugar, o usa sus flechas. Con el teclado: flechas arriba y abajo.', 'order.edit.up': 'Subir «{title}»', @@ -213,7 +209,6 @@ export const es: Messages = { 'title.proposed.other': '{n} títulos propuestos', 'tally.short': '{for} a favor · {against} en contra', - 'tally.required': 'Umbral: {n} votos a favor', 'tally.missing.one': 'Falta {n} voto a favor.', 'tally.missing.other': 'Faltan {n} votos a favor.', 'tally.reached': 'Umbral alcanzado.', @@ -227,11 +222,7 @@ export const es: Messages = { 'inertia.badge': 'inercia {level}', - 'panel.vote': 'Votación', - 'panel.proposals': 'Propuestas', 'panel.propose': 'Proponer', - 'panel.settings': 'Ajustes', - 'panel.basket': 'Cesta', 'panel.details': 'Detalles', 'panel.close': 'Cerrar el panel', 'panel.inforce': 'En vigor', diff --git a/web/src/lib/i18n/fr.ts b/web/src/lib/i18n/fr.ts index 929e7cc..26b8148 100644 --- a/web/src/lib/i18n/fr.ts +++ b/web/src/lib/i18n/fr.ts @@ -132,7 +132,6 @@ export const fr = { 'doc.confirmed': 'confirmé par le vote', 'doc.adopted': 'adopté le {date}', 'doc.action.vote': 'Le vote', - 'doc.action.proposals': 'Propositions', 'doc.action.propose': 'Proposer une modification', 'doc.basket': 'Voter en lot', 'doc.basket.count': 'Voter en lot · {n}', @@ -181,8 +180,6 @@ export const fr = { 'module.title.name': 'Titre du document', 'module.order.name': 'Ordre des articles', 'module.order.named': 'Ordre des articles · {section}', - 'module.order.count.one': '{n} article', - 'module.order.count.other': '{n} articles', 'module.order.inforce': 'Ordre en vigueur', 'module.order.proposal': 'Ordre proposé', 'module.order.added.one': '{n} article entré depuis, placé à la fin', @@ -191,7 +188,6 @@ export const fr = { 'module.order.dropped.other': '{n} articles sortis depuis', 'module.order.same': "c'est l'ordre en vigueur", 'module.order.rule': "Un nouvel article se place à la fin de sa section. S'il arrive pendant le vote d'un ordre, il s'y ajoute à la fin, et les votes restent.", - 'order.propose': 'Proposer un autre ordre', 'order.edit.label': 'Nouvel ordre des articles', 'order.edit.help': 'Prends un article par sa poignée et dépose-le à sa place. Sans glisser : clique un article, puis sa nouvelle place, ou utilise ses flèches. Au clavier : flèches haut et bas.', 'order.edit.up': 'Monter « {title} »', @@ -217,7 +213,6 @@ export const fr = { 'title.proposed.other': '{n} titres proposés', 'tally.short': '{for} pour · {against} contre', - 'tally.required': 'Seuil : {n} voix pour', 'tally.missing.one': 'Il manque {n} voix pour.', 'tally.missing.other': 'Il manque {n} voix pour.', 'tally.reached': 'Seuil atteint.', @@ -231,11 +226,7 @@ export const fr = { 'inertia.badge': 'inertie {level}', - 'panel.vote': 'Le vote', - 'panel.proposals': 'Propositions', 'panel.propose': 'Proposer', - 'panel.settings': 'Réglages', - 'panel.basket': 'Panier', 'panel.details': 'Détails', 'panel.close': 'Fermer le panneau', 'panel.inforce': 'En vigueur',