feat(marketing): base.html layout + glassmorphism header + button macro
- templates/macros/button.html: 3 variants (primary gradient/glow, secondary, ghost) x 3 sizes for reuse across marketing/billing/legal/auth templates - templates/marketing/base.html: Tailwind v4-scoped layout with FlexiHub glassmorphism header (62px, navy/.97, backdrop-blur-xl, .045 border), sticky positioning, OG/Twitter meta, Inter font preload, marketing.css link, Alpine.js defer, 5-item main nav + Connexion/Demarrer CTAs - templates/marketing/_footer.html: minimal Phase 2 placeholder with legal links + Inverness QC address + info@dictia.ca (full footer in A-2.7) - templates/marketing/landing.html: minimal hero placeholder (replaced in A-2.2 with full hero + cosmic orbs) - src/marketing/routes.py: landing() now render_template instead of inline HTML - 7 tests verify template structure, FlexiHub markers, nav, CTAs, legal links, no login redirect for anonymous users - Tailwind CSS rebuilt with new template content scope (cssnano-minified)
This commit is contained in:
71
templates/marketing/base.html
Normal file
71
templates/marketing/base.html
Normal file
@@ -0,0 +1,71 @@
|
||||
<!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="font-black text-xl tracking-tight grad-text" aria-label="DictIA — accueil">DictIA</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="/conformite" class="hover:text-white transition">Conformité</a>
|
||||
<a href="/tarifs" class="hover:text-white transition">Tarifs</a>
|
||||
<a href="/blog" class="hover:text-white transition">Blog</a>
|
||||
<a href="/contact" class="hover:text-white transition">Contact</a>
|
||||
</nav>
|
||||
|
||||
<div class="flex items-center gap-3">
|
||||
<a href="/login" class="hidden sm:inline-block 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') }}
|
||||
</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>
|
||||
Reference in New Issue
Block a user