feat(marketing): A-2.8b /conformite + /contact standalone pages

- /conformite page: extends base.html, page H1 with cosmic orb header,
  4 pillar cards on white (mirrors landing's Conformite section content
  with same hedges 'Mappe' 'concue avec' 'Compatible'), 3 Loi 25 article
  detail cards (art. 3.3 EFVP, art. 3.5 Audit trail, art. 14 Consentement)
  with grad-bg article-number badges, AGPL v3 transparency CTA section
  with external links to Gitea + gnu.org (rel=noopener), generic CTA section
- /contact page: extends base.html, 3 method cards (email, phone tel:link,
  postal address with <address>), 6 pre-filled mailto subject shortcuts
  with focus-visible WCAG 2.2 AA, pre-launch disclaimer that online form
  ships at launch (B-2.x). NO <form> tag - mailto only - POST returns 405
  until B-2.x adds the form handler.
- routes.py: add /conformite and /contact routes; preserves existing
  landing/tarifs/fonctionnalites views and TESTIMONIALS/FAQ data.
- tests: append 13 new tests to test_marketing_secondary_pages.py covering
  routes 200, single H1, 4 pillars + Loi 25 articles + AGPL externals on
  /conformite, 3 contact methods + 6 shortcuts + 405 on POST + pre-launch
  note + OQLF typography on /contact.
- Apply established WCAG 2.2 AA, FlexiHub, OQLF, LPC art. 219 disciplines.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Allison
2026-04-27 21:23:47 -04:00
parent 202e1a08d9
commit 3646a5e64d
5 changed files with 430 additions and 0 deletions

View File

@@ -2303,6 +2303,9 @@
.text-\[clamp\(2\.25rem\,4vw\,3\.5rem\)\] {
font-size: clamp(2.25rem, 4vw, 3.5rem);
}
.text-\[clamp\(2rem\,3vw\,2\.5rem\)\] {
font-size: clamp(2rem, 3vw, 2.5rem);
}
.text-\[clamp\(2rem\,3vw\,2\.75rem\)\] {
font-size: clamp(2rem, 3vw, 2.75rem);
}
@@ -3049,6 +3052,13 @@
}
}
}
.hover\:border-brand-b1\/30 {
&:hover {
@media (hover: hover) {
border-color: color-mix(in oklab, #0062ff 30%, transparent);
}
}
}
.hover\:border-yellow-500\/30 {
&:hover {
@media (hover: hover) {
@@ -3336,6 +3346,13 @@
}
}
}
.hover\:bg-white {
&:hover {
@media (hover: hover) {
background-color: var(--color-white);
}
}
}
.hover\:bg-white\/20 {
&:hover {
@media (hover: hover) {
@@ -4154,6 +4171,11 @@
flex-direction: row;
}
}
.md\:items-start {
@media (width >= 48rem) {
align-items: flex-start;
}
}
.md\:gap-4 {
@media (width >= 48rem) {
gap: calc(var(--spacing) * 4);