UQO Éval : assets de marque (favicon/OG/manifest/apple-touch avec logo officiel), corrections PDF (pieds de page, mention cours), Analyser partout, données src/data, nettoyage tokens
8 changed files +24 −20
modified
docs/PIPELINE-DONNEES.md
+2 −0
@@ -1,3 +1,5 @@ | ||
| 1 | +> **Note UQO Éval** — document hérité du projet d'origine (Vrai-Prix) : le pipeline de données décrit ici est celui qui a produit la base `data/vraiprix.db` utilisée par UQO Éval. | |
| 2 | + | |
| 1 | 3 | # Vrai-Prix — Pipeline de données (documentation de continuité) |
| 2 | 4 | |
| 3 | 5 | > Rédigé le 2026-08-18. **Important : contrairement aux autres apps Ka, Vrai-Prix |
modified
src/components/MobileTabBar.tsx
+3 −3
@@ -1,8 +1,8 @@ | ||
| 1 | 1 | // UQO Éval — laboratoire pédagogique d'évaluation immobilière |
| 2 | 2 | /** |
| 3 | 3 | * Barre de navigation mobile commune (tabbar v1) : |
| 4 | − * Estimer · Marché · Ventes · Méthode, accent rouge signature, bilingue. | |
| 5 | − * Estimer mène immédiatement à la recherche d'adresse (focus du champ héros) ; | |
| 4 | + * Analyser · Marché · Ventes · Méthode, accent bleu UQO, bilingue. | |
| 5 | + * Analyser mène immédiatement à la recherche d'adresse (focus du champ héros) ; | |
| 6 | 6 | * Ventes ancre le flux « dernières ventes réelles » de l'accueil. |
| 7 | 7 | */ |
| 8 | 8 | "use client"; |
@@ -40,7 +40,7 @@ export default function MobileTabBar() { | ||
| 40 | 40 | <KaTabbar |
| 41 | 41 | tabs={[ |
| 42 | 42 | { |
| 43 | − label: fr ? "Estimer" : "Estimate", | |
| 43 | + label: fr ? "Analyser" : "Analyze", | |
| 44 | 44 | icon: "target", |
| 45 | 45 | to: "/", |
| 46 | 46 | onClick: () => { |
modified
src/components/SearchBox.tsx
+2 −2
@@ -86,7 +86,7 @@ export default function SearchBox({ | ||
| 86 | 86 | {hero && ( |
| 87 | 87 | <button |
| 88 | 88 | type="button" |
| 89 | − aria-label={fr ? "Estimer cette adresse" : "Estimate this address"} | |
| 89 | + aria-label={fr ? "Analyser cette adresse" : "Analyze this address"} | |
| 90 | 90 | onMouseDown={(e) => { |
| 91 | 91 | // mousedown : devance le blur de l'input (sinon le menu se ferme avant) |
| 92 | 92 | e.preventDefault(); |
@@ -95,7 +95,7 @@ export default function SearchBox({ | ||
| 95 | 95 | }} |
| 96 | 96 | className="vp-display -mb-px flex min-h-[56px] shrink-0 items-center gap-2 self-end bg-[var(--accent-bright)] px-4 text-[14px] font-bold text-ink transition-colors hover:bg-[#ff6b63] sm:px-7 sm:text-[15px]" |
| 97 | 97 | > |
| 98 | − {fr ? "Estimer" : "Estimate"} | |
| 98 | + {fr ? "Analyser" : "Analyze"} | |
| 99 | 99 | <span aria-hidden="true">→</span> |
| 100 | 100 | </button> |
| 101 | 101 | )} |
modified
src/ka/ka-tabbar.css
+1 −1
@@ -1,5 +1,5 @@ | ||
| 1 | 1 | /* ============================================================ |
| 2 | − KA Tabbar v1 — barre de navigation mobile commune Groupe KA | |
| 2 | + Tabbar v1 — barre de navigation mobile (UQO Éval) | |
| 3 | 3 | Canonique : ka-ui.git/nav/ka-tabbar.css — copiée telle quelle |
| 4 | 4 | dans chaque app (src/ka/ka-tabbar.css) et importée par le |
| 5 | 5 | composant KaTabbar. Voir TABBAR-STANDARD.md. |
modified
src/ka/tokens.css
+5 −5
@@ -14,7 +14,7 @@ | ||
| 14 | 14 | ----------------------------------------------------------------------------- */ |
| 15 | 15 | |
| 16 | 16 | :root { |
| 17 | − /* ---- Palette fixe Groupe KA (identique sur les 12 sites) ---- */ | |
| 17 | + /* ---- Palette de base (surchargée par globals.css — UQO Éval) ---- */ | |
| 18 | 18 | --paper: #f5f3ee; |
| 19 | 19 | --surface: #ffffff; |
| 20 | 20 | --surface-2: #faf9f5; |
@@ -31,8 +31,8 @@ | ||
| 31 | 31 | --danger-soft: #fbe9e7; |
| 32 | 32 | |
| 33 | 33 | /* ---- ACCENT du site — SEULES variables surchargées par marque ---- */ |
| 34 | − --accent: #d9f26b; /* défaut : lime Groupe KA */ | |
| 35 | − --accent-soft: #f0f9d2; | |
| 34 | + --accent: #006085; /* défaut : bleu UQO (surchargé par globals.css) */ | |
| 35 | + --accent-soft: #dcebf2; | |
| 36 | 36 | --accent-deep: #123f2e; |
| 37 | 37 | --on-accent: var(--ink); /* couleur du texte posé SUR l'accent */ |
| 38 | 38 | |
@@ -194,7 +194,7 @@ body > * { position: relative; } | ||
| 194 | 194 | } |
| 195 | 195 | .input::placeholder { color: var(--ink-3); } |
| 196 | 196 | |
| 197 | −/* ---- Badge « Un service Groupe KA » (header, cliquable → hub) ---- */ | |
| 197 | +/* ---- Badge hérité (.gk-badge — inutilisé par UQO Éval) ---- */ | |
| 198 | 198 | .gk-badge { |
| 199 | 199 | display: inline-flex; align-items: center; gap: 7px; |
| 200 | 200 | min-height: 30px; padding: 3px 10px 4px; |
@@ -271,7 +271,7 @@ body > * { position: relative; } | ||
| 271 | 271 | select, textarea { font-size: max(16px, 1em) !important; } |
| 272 | 272 | } |
| 273 | 273 | |
| 274 | −/* Zone tactile du badge Groupe KA étendue à ≥44 px au doigt, sans changer | |
| 274 | +/* Zone tactile du badge hérité étendue à ≥44 px au doigt, sans changer | |
| 275 | 275 | son rendu (débord de la zone cliquable via pseudo-élément). */ |
| 276 | 276 | @media (pointer: coarse) { |
| 277 | 277 | .gk-badge { position: relative; } |
modified
src/lib/report-portfolio.ts
+3 −3
@@ -60,11 +60,11 @@ function pageFrame(doc: Doc, page: number, total: number, generated: string) { | ||
| 60 | 60 | doc.rect(0, 0, W, H).fill(PAPER); |
| 61 | 61 | doc.rect(M, H - 46, W - 2 * M, 1.2).fill(INK); |
| 62 | 62 | doc.font("JB-Reg").fontSize(6.5).fillColor(INK3).text( |
| 63 | − "UQO-EVAL.APP — RAPPORT DE PARC IMMOBILIER · PLATEFORME PÉDAGOGIQUE · ESTIMATION STATISTIQUE À TITRE INDICATIF", | |
| 64 | − M, H - 38, { width: W - 2 * M - 60, characterSpacing: 0.4, lineBreak: false }); | |
| 63 | + "UQO-EVAL.APP · RAPPORT DE PARC — PLATEFORME PÉDAGOGIQUE · ESTIMATION À TITRE INDICATIF", | |
| 64 | + M, H - 39, { width: W - 2 * M - 60, characterSpacing: 0.4, lineBreak: false }); | |
| 65 | 65 | doc.font("JB-Reg").fontSize(6.5).fillColor(INK3).text( |
| 66 | 66 | "COURS IMM1003 · IMM1033 — SIMON-PIERRE BOUCHER, UQO", |
| 67 | − M, H - 29, { width: W - 2 * M - 60, characterSpacing: 0.4, lineBreak: false }); | |
| 67 | + M, H - 30, { width: W - 2 * M - 60, characterSpacing: 0.4, lineBreak: false }); | |
| 68 | 68 | doc.font("JB-Bold").fontSize(7.5).fillColor(INK) |
| 69 | 69 | .text(`${page} / ${total}`, W - M - 40, H - 39, { width: 40, align: "right" }); |
| 70 | 70 | doc.font("JB-Reg").fontSize(6.5).fillColor(INK3) |
modified
src/lib/report-pro.ts
+2 −2
@@ -67,11 +67,11 @@ function footer(c: Ctx, total: number) { | ||
| 67 | 67 | const { doc } = c; |
| 68 | 68 | doc.rect(M, H - 52, CW, 0.8).fill(INK); |
| 69 | 69 | doc.font("JB-Reg").fontSize(6).fillColor(INK3).text( |
| 70 | − "ESTIMATION STATISTIQUE AUTOMATISÉE (AVM) À VOCATION PÉDAGOGIQUE — NE CONSTITUE PAS UN RAPPORT D'ÉVALUATION AU SENS DES NORMES DE L'OEAQ · UQO-EVAL.APP", | |
| 70 | + "AVM PÉDAGOGIQUE — NE CONSTITUE PAS UN RAPPORT D'ÉVALUATION AU SENS DES NORMES DE L'OEAQ · UQO-EVAL.APP", | |
| 71 | 71 | M, H - 44, { width: CW - 50, characterSpacing: 0.3, lineBreak: false }); |
| 72 | 72 | doc.font("JB-Reg").fontSize(6).fillColor(INK3).text( |
| 73 | 73 | "COURS IMM1003 · IMM1033 — SIMON-PIERRE BOUCHER, UQO", |
| 74 | − M, H - 36, { width: CW - 50, characterSpacing: 0.3, lineBreak: false }); | |
| 74 | + M, H - 35, { width: CW - 50, characterSpacing: 0.3, lineBreak: false }); | |
| 75 | 75 | doc.font("JB-Bold").fontSize(7).fillColor(INK) |
| 76 | 76 | .text(`${c.page} / ${total}`, W - M - 40, H - 45, { width: 40, align: "right" }); |
| 77 | 77 | } |
modified
src/lib/report.ts
+6 −4
@@ -73,12 +73,12 @@ function pageFrame(doc: Doc, page: number, total: number, generated: string) { | ||
| 73 | 73 | // filet de bas de page |
| 74 | 74 | doc.rect(M, H - 46, W - 2 * M, 1.2).fill(INK); |
| 75 | 75 | doc.font("JB-Reg").fontSize(6.5).fillColor(INK3).text( |
| 76 | − "UQO-EVAL.APP — PLATEFORME PÉDAGOGIQUE · ESTIMATION STATISTIQUE À TITRE INDICATIF · NE REMPLACE PAS UNE ÉVALUATION PROFESSIONNELLE CERTIFIÉE (OEAQ)", | |
| 77 | − M, H - 38, { width: W - 2 * M - 60, characterSpacing: 0.4, lineBreak: false } | |
| 76 | + "UQO-EVAL.APP · PLATEFORME PÉDAGOGIQUE — ESTIMATION STATISTIQUE À TITRE INDICATIF (OEAQ)", | |
| 77 | + M, H - 39, { width: W - 2 * M - 60, characterSpacing: 0.4, lineBreak: false } | |
| 78 | 78 | ); |
| 79 | 79 | doc.font("JB-Reg").fontSize(6.5).fillColor(INK3).text( |
| 80 | 80 | "COURS IMM1003 · IMM1033 — SIMON-PIERRE BOUCHER, UQO", |
| 81 | − M, H - 29, { width: W - 2 * M - 60, characterSpacing: 0.4, lineBreak: false } | |
| 81 | + M, H - 30, { width: W - 2 * M - 60, characterSpacing: 0.4, lineBreak: false } | |
| 82 | 82 | ); |
| 83 | 83 | doc.font("JB-Bold").fontSize(7.5).fillColor(INK) |
| 84 | 84 | .text(`${page} / ${total}`, W - M - 40, H - 39, { width: 40, align: "right" }); |
@@ -363,7 +363,9 @@ export async function buildReport(data: UnitEstimate): Promise<Buffer> { | ||
| 363 | 363 | "leur dispersion et la largeur de la fourchette. Validation selon la norme IAAO sur études de ratios.", |
| 364 | 364 | M + 16, my + 26, { width: W - 2 * M - 32, lineGap: 1.5 }); |
| 365 | 365 | doc.font("JB-Reg").fontSize(6.8).fillColor(LIME) |
| 366 | − .text(COURS.toUpperCase(), M + 16, my + 88, { width: W - 2 * M - 32, characterSpacing: 0.2, height: 14, ellipsis: true }); | |
| 366 | + .text( | |
| 367 | + "GÉNÉRÉ DANS LE CADRE DES COURS IMM1003 · IMM1033 (ÉVALUATION IMMOBILIÈRE) — SIMON-PIERRE BOUCHER, UQO", | |
| 368 | + M + 16, my + 88, { width: W - 2 * M - 32, characterSpacing: 0.2, height: 14, ellipsis: true, lineBreak: false }); | |
| 367 | 369 | |
| 368 | 370 | doc.end(); |
| 369 | 371 | return done; |
| 370 | 372 | |