Pass de modernisation visuelle : remplacement de TOUS les emojis Unicode dans les templates marketing/legal/billing/auth par des SVG inline (style heroicons) ou par du texte propre, pour un look SaaS pro à la Linear/Vercel/Stripe. Mapping principal : - ✓ / ✗ / ⚠ → SVG check / x / triangle (text-brand-b3 / red / amber) - → / ← / ↗ → SVG arrow-right / arrow-left / arrow-up-right - 🍁 / 🏛️ / ⚖️ / 🔓 → SVG map-pin / building / scale / code-brackets - 🎙️ / 👥 / 📝 / 💬 / 📄 / 🔌 → 6 SVG bento icons (microphone, users, doc, chat, export, plug) - ✉️ / ☎️ / 📬 → SVG envelope / phone / map-pin - ↺ → SVG refresh-counter-clockwise - ★ → SVG star (RECOMMANDÉ badge) - 🎯/🏢/📺/🤝/📰 → SVG target / office / play / handshake / news (raccourcis contact) - ⚖️/📊/🏛️ (testimonials) → SVG scale / bar-chart / building - ✦ (default bento icon) → SVG sparkle inline Tous les SVG utilisent stroke="currentColor" pour héritage Tailwind text-*. Les SVG informationnels du tableau comparatif portent un aria-label sémantique (Conforme/Non conforme/Partiel) ; les SVG décoratifs portent aria-hidden. Tests : - 18/18 legal pages passent (test_legal_pages.py) - test_comparatif_check_marks_consistently_mean_good ajusté pour asserter sur les aria-label SVG plutôt que les caractères ✓/✗ - 4 échecs pré-existants non liés (manque /blog dans nav, SOC 2 hedge dans conformite.html, gitea.innova-ai.ca url) — confirmés présents avant ce commit Fichiers modifiés (14) : - templates/macros/{bento,pricing_card}.html (sources de vérité) - templates/marketing/{base,_footer,landing,fonctionnalites,tarifs,conformite,contact}.html - templates/legal/{_layout,index}.html - templates/billing/{cancel,success}.html - tests/test_marketing_landing_template.py (assert sur aria-label) Audit final : 0 emoji restant dans les fichiers in-scope ; 0 emoji dans le HTML rendu de toutes les pages marketing/legal vérifiées. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
73 lines
3.6 KiB
HTML
73 lines
3.6 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="fr-CA">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="theme-color" content="#060d1a">
|
|
|
|
<title>{% block title %}DictIA — Transcription IA conforme Loi 25 | Avocats, CPA, secteur public{% endblock %}</title>
|
|
<meta name="description" content="{% block description %}Transcription IA 100% locale, conforme Loi 25. Pour avocats, CPA, ChAD et 6 autres ordres professionnels. Hébergé au Québec, zéro Cloud Act.{% endblock %}">
|
|
<link rel="canonical" href="{% block canonical %}https://dictia.pages.dev{{ request.path }}{% endblock %}">
|
|
|
|
<!-- Open Graph -->
|
|
<meta property="og:type" content="website">
|
|
<meta property="og:title" content="{{ self.title() }}">
|
|
<meta property="og:description" content="{{ self.description() }}">
|
|
<meta property="og:image" content="{% block og_image %}https://dictia.pages.dev/static/images/og/og-default.png{% endblock %}">
|
|
<meta property="og:url" content="https://dictia.pages.dev{{ request.path }}">
|
|
<meta property="og:locale" content="fr_CA">
|
|
<meta property="og:site_name" content="DictIA">
|
|
|
|
<!-- Twitter Card -->
|
|
<meta name="twitter:card" content="summary_large_image">
|
|
<meta name="twitter:title" content="{{ self.title() }}">
|
|
<meta name="twitter:description" content="{{ self.description() }}">
|
|
<meta name="twitter:image" content="{{ self.og_image() }}">
|
|
|
|
<!-- Preload critical fonts -->
|
|
<link rel="preload" href="/static/fonts/Inter-Variable.woff2" as="font" type="font/woff2" crossorigin>
|
|
|
|
<!-- Marketing CSS (Tailwind v4 buildé) -->
|
|
<link rel="stylesheet" href="/static/css/marketing.css">
|
|
|
|
<!-- Favicon -->
|
|
<link rel="icon" type="image/svg+xml" href="/static/images/favicon.svg">
|
|
|
|
{% block schema %}{% endblock %}
|
|
{% block head_extra %}{% endblock %}
|
|
</head>
|
|
<body class="bg-white">
|
|
<!-- Glassmorphism header (FlexiHub style: 62px, navy/.97 + backdrop-blur-xl + 0.045 border) -->
|
|
<header class="fixed top-0 inset-x-0 z-50 h-[62px] bg-brand-navy/[0.97] backdrop-blur-xl border-b border-white/[0.045]">
|
|
<div class="max-w-[1200px] mx-auto h-full px-6 flex items-center justify-between">
|
|
<a href="/" class="flex flex-col leading-none" aria-label="DictIA — Transcription, accueil">
|
|
<span class="font-black text-xl tracking-tight grad-text">DictIA</span>
|
|
<span class="text-[10px] uppercase tracking-[0.2em] text-white font-medium mt-0.5">Transcription</span>
|
|
</a>
|
|
|
|
<nav class="hidden md:flex gap-8 text-sm font-medium text-white/80" aria-label="Navigation principale">
|
|
<a href="/fonctionnalites" class="hover:text-white transition">Fonctionnalités</a>
|
|
<a href="/tarifs" class="hover:text-white transition">Tarifs</a>
|
|
<a href="/contact" class="hover:text-white transition">Contact</a>
|
|
</nav>
|
|
|
|
<div class="flex items-center gap-3">
|
|
<a href="/login" class="text-sm font-medium text-white/80 hover:text-white">Connexion</a>
|
|
{% from 'macros/button.html' import button %}
|
|
{{ button('Démarrer', href='/signup', variant='primary', size='sm', icon='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="w-4 h-4" aria-hidden="true"><path d="M14 5l7 7m0 0l-7 7m7-7H3"/></svg>') }}
|
|
</div>
|
|
</div>
|
|
</header>
|
|
|
|
<main class="pt-[62px]">
|
|
{% block content %}{% endblock %}
|
|
</main>
|
|
|
|
{% include 'marketing/_footer.html' %}
|
|
|
|
<!-- Alpine.js for interactivity (FAQ accordion, ROI calculator, mobile menu) -->
|
|
<script src="/static/js/alpine.min.js" defer></script>
|
|
{% block scripts %}{% endblock %}
|
|
</body>
|
|
</html>
|