Author SHA1 Message Date
jmartin efc2ef442c feat(vitrine): proposition « Horizon nuit » (nocturne, or, serif)
- Cormorant Garamond + Sora, fond profond et halos discrets
- Accueil en colonnes : prose vitrée, principes en file or, zone constellation
- Nav minimaliste caps, menu mobile, CTA en contours dorés
- Pages intérieures en panneau translucide

Made-with: Cursor
2026-04-22 19:00:31 +02:00
14 changed files with 420 additions and 590 deletions
+11 -12
View File
@@ -1,25 +1,24 @@
---
title: "P'titsPas : La solution publique pour accompagner la Petite Enfance de votre territoire"
title: "P'titsPas : la petite enfance, vue du large."
description: "Solution numérique publique pour les collectivités : gestion transparente des relations parents-assistantes maternelles, sans notation ni algorithme opaque. Égalité et neutralité garanties."
keywords: ["P'titsPas", "ptitspas", "p'tits pas", "ptits pas", "petitspas", "petit pas", "petits pas", "opetitspas", "pitispas", "ptitpas", "p'titpas", "Ptitspas", "PTITSPAS", "petite enfance", "assistante maternelle", "collectivité", "commune", "garde enfant", "RPE", "relais petite enfance", "plateforme publique", "transparence", "neutralité", "gestion municipale petite enfance", "plateforme numérique collectivité", "mise en relation parents assistante maternelle", "solution publique garde enfant", "service public petite enfance", "accompagnement parental collectivité", "transparence service public", "égalité accès garde enfant", "politique municipale enfance", "dématérialisation services municipaux"]
date: 2025-05-17T12:00:00+02:00
hero_image: "/images/page_login_4.1.png"
hero_image_alt: "Logo P'titsPas"
hero_tagline: "Plateforme publique pour les collectivités — transparence, neutralité, service public numérique."
hero_image_alt: "Illustration P'titsPas"
hero_tagline: "Clarté · neutralité · territoire"
intro_md: |
**Modernisez la mise en relation Parents - Assistantes Maternelles avec une plateforme 100% éthique, conçue pour les collectivités.**
**Modernisez la mise en relation Parents - Assistantes Maternelles** avec une plateforme conçue pour les collectivités — sans notation des professionnels, sans algorithme opaque.
Les RPE sont saturés, la gestion administrative est lourde et les parents peinent à trouver une information fiable ?
**P'titsPas** centralise et sécurise tout le parcours d'accueil individuel, tout en redonnant la main à la collectivité.
Les RPE portent une charge immense : **P'titsPas** apaise le quotidien administratif tout en laissant la collectivité piloter le service rendu aux familles.
Plus qu'un outil de gestion, c'est la garantie d'un **Service Public Numérique** exemplaire.
Une même règle du jeu pour tous : **service public numérique** exigeant.
ethics:
- title: "Sans notation"
detail: "des professionnels"
detail: " des professionnels"
- title: "Sans algorithme opaque"
detail: "de sélection"
- title: "100% conforme"
detail: "aux valeurs de la République"
detail: " de sélection"
- title: "100 % conforme"
detail: " aux valeurs de la République"
why_md: |
## Pourquoi choisir P'titsPas pour votre commune ?
@@ -29,5 +28,5 @@ why_md: |
* **⚖️ Équité Territoriale :** Offrez la même qualité de service à tous les administrés, quel que soit leur quartier.
* **🤝 Valorisation des RPE :** Libérez vos agents des tâches chronophages pour qu'ils se concentrent sur l'accompagnement humain.
* **📱 Simplicité d'Usage :** Une interface pensée pour tous (parents, assistantes mat', agents), accessible sur mobile et PC.
cta_title: "Reprenez le contrôle de votre politique Petite Enfance"
cta_title: "Un horizon commun pour votre politique petite enfance"
---
+17 -17
View File
@@ -12,28 +12,28 @@ Que vous souhaitiez une démonstration personnalisée, obtenir un devis, ou simp
Utilisez le formulaire ci-dessous pour nous faire part de votre projet. Nous nous engageons à vous répondre dans les plus brefs délais.
<form class="site-form" action="/contact.php" method="POST">
<div>
<label for="name">Nom Prénom :</label>
<input type="text" id="name" name="name" required>
<form action="/contact.php" method="POST" style="max-width: 600px; margin: 20px auto; padding: 20px; border: 1px solid #ddd; border-radius: 5px;">
<div style="margin-bottom: 15px;">
<label for="name" style="display: block; margin-bottom: 5px;">Nom Prénom :</label>
<input type="text" id="name" name="name" required style="width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 3px;">
</div>
<div>
<label for="collectivite">Collectivité / Organisation :</label>
<input type="text" id="collectivite" name="collectivite" required>
<div style="margin-bottom: 15px;">
<label for="collectivite" style="display: block; margin-bottom: 5px;">Collectivité / Organisation :</label>
<input type="text" id="collectivite" name="collectivite" required style="width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 3px;">
</div>
<div>
<label for="email">Adresse E-mail :</label>
<input type="email" id="email" name="email" required>
<div style="margin-bottom: 15px;">
<label for="email" style="display: block; margin-bottom: 5px;">Adresse E-mail :</label>
<input type="email" id="email" name="email" required style="width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 3px;">
</div>
<div>
<label for="phone">Téléphone (facultatif) :</label>
<input type="tel" id="phone" name="phone">
<div style="margin-bottom: 15px;">
<label for="phone" style="display: block; margin-bottom: 5px;">Téléphone (facultatif) :</label>
<input type="tel" id="phone" name="phone" style="width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 3px;">
</div>
<div>
<label for="message">Votre Message :</label>
<textarea id="message" name="message" rows="6" required></textarea>
<div style="margin-bottom: 15px;">
<label for="message" style="display: block; margin-bottom: 5px;">Votre Message :</label>
<textarea id="message" name="message" rows="6" required style="width: 100%; padding: 8px; border: 1px solid #ccc; border-radius: 3px;"></textarea>
</div>
<button type="submit">Envoyer votre demande</button>
<button type="submit" style="background-color: #007bff; color: white; padding: 10px 20px; border: none; border-radius: 3px; cursor: pointer;">Envoyer Votre Demande</button>
</form>
Nous avons hâte de collaborer avec vous pour améliorer la gestion de la petite enfance sur votre territoire !
+4 -12
View File
@@ -10,25 +10,21 @@ P'titsPas offre une suite complète de fonctionnalités conçues pour simplifier
Nous comprenons que chaque acteur a des besoins spécifiques. C'est pourquoi P'titsPas propose des tableaux de bord et des outils dédiés :
{{% featureblock title="Pour les Parents et Assistantes Maternelles : Une expérience fluide et rassurante" %}}
### Pour les Parents et Assistantes Maternelles : Une expérience fluide et rassurante
Bien que P'titsPas soit un outil au service de la collectivité, nous savons que l'adhésion des familles est la clé du succès. Une adoption facilitée signifie moins de sollicitations pour vos services et une plus grande satisfaction citoyenne.
***Recherche facilitée** : Mise en relation transparente basée sur les besoins réels.
***Gestion administrative simplifiée** : Contrats, avenants et suivi des heures en quelques clics.
***Communication directe et tracée** : Pour apaiser les relations et garder un historique.
***Agenda partagé** : Une meilleure organisation au quotidien.
{{% /featureblock %}}
{{% featureblock title="Pour vos Gestionnaires RPE : Gagnez du temps et de la visibilité" %}}
### Pour vos Gestionnaires RPE : Gagnez du temps et de la visibilité
Libérez vos agents des tâches chronophages pour qu'ils se concentrent sur leur cœur de métier : l'accompagnement humain.
* 📊 **Tableau de bord de supervision** : Une vue d'ensemble immédiate des contrats et disponibilités sur le territoire.
***Validation rapide** : Gestion fluide des comptes et suivi des dossiers en temps réel.
* 🤝 **Outils de médiation** : Intervenez facilement en cas de désaccord grâce à l'historique des échanges.
* 📢 **Communication ciblée** : Organisez vos événements RPE et diffusez l'information efficacement.
{{% /featureblock %}}
{{% featureblock title="Pour votre DSI et Direction : Une solution souveraine et maîtrisée" %}}
### Pour votre DSI et Direction : Une solution souveraine et maîtrisée
P'titsPas s'intègre à votre écosystème avec un niveau d'exigence élevé en matière de sécurité et de personnalisation.
* 🔒 **Sécurité et Conformité RGPD** : Une conception "Privacy by Design", hébergement souverain et chiffrement des données sensibles (NIR).
@@ -36,18 +32,14 @@ P'titsPas s'intègre à votre écosystème avec un niveau d'exigence élevé en
* ⚙️ **Gestion fine des droits** : Administration centralisée des comptes et des paramètres de la plateforme.
* 📈 **Pilotage par la donnée** : Statistiques d'usage, nombre de contrats, taux d'occupation... exportables pour vos rapports.
* 🧩 **Évolutivité** : Activez uniquement les modules dont vous avez besoin (Blog, IA, etc.).
{{% /featureblock %}}
## Des Workflows Clairs et Sécurisés
De la recherche d'une assistante maternelle à la fin de contrat, P'titsPas structure chaque étape :
{{% featureblock %}}
* **Recherche et mise en relation** guidées.
* **Création et validation de contrats** dématérialisée et collaborative.
* **Gestion des avenants** simplifiée.
* **Procédure de fin de contrat** accompagnée, avec calcul du solde de tout compte.
{{% /featureblock %}}
---
@@ -55,4 +47,4 @@ P'titsPas est plus qu'un logiciel, c'est un partenaire pour votre politique peti
[Découvrez pourquoi P'titsPas est la solution de confiance pour les collectivités](/pourquoi-ptitspas)
[Contactez-nous pour échanger sur vos besoins spécifiques](/contact)
[Contactez-nous pour échanger sur vos besoins spécifiques](/contact)
+12 -20
View File
@@ -3,32 +3,26 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} | {{ .Site.Title }}{{ end }}</title>
<meta name="description" content="{{ if .Description }}{{ .Description }}{{ else }}{{ .Site.Params.description }}{{ end }}">
<meta name="keywords" content="{{ if .Keywords }}{{ delimit .Keywords ", " }}{{ else }}{{ .Site.Params.keywords }}{{ end }}">
<meta name="author" content="{{ .Site.Params.author | default .Site.Title }}">
{{ if eq .Site.BaseURL "https://staging.ptits-pas.fr/" }}
<meta name="robots" content="noindex, nofollow">
{{ end }}
<meta property="og:type" content="{{ if .IsHome }}website{{ else }}article{{ end }}">
<meta property="og:url" content="{{ .Permalink }}">
<meta property="og:title" content="{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }}{{ end }}">
<meta property="og:description" content="{{ if .Description }}{{ .Description }}{{ else }}{{ .Site.Params.description }}{{ end }}">
<meta property="og:image" content="{{ .Site.BaseURL }}images/page_login_4.1.png">
<meta property="og:locale" content="fr_FR">
<meta property="twitter:card" content="summary_large_image">
<meta property="twitter:url" content="{{ .Permalink }}">
<meta property="twitter:title" content="{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }}{{ end }}">
<meta property="twitter:description" content="{{ if .Description }}{{ .Description }}{{ else }}{{ .Site.Params.description }}{{ end }}">
<meta property="twitter:image" content="{{ .Site.BaseURL }}images/page_login_4.1.png">
<link rel="canonical" href="{{ .Permalink }}">
<link rel="icon" type="image/x-icon" href="{{ "favicon.ico" | relURL }}">
<script type="application/ld+json">
{
"@context": "https://schema.org",
@@ -49,9 +43,7 @@
{{ end }}
}
</script>
<link rel="stylesheet" href="{{ `/css/style.css` | relURL }}">
<script async src="https://www.googletagmanager.com/gtag/js?id=G-65J8GVLCRH"></script>
<script>
window.dataLayer = window.dataLayer || [];
@@ -65,19 +57,19 @@
});
</script>
</head>
<body>
<body class="theme-horizon-nuit">
<a class="skip-link" href="#contenu-principal">Aller au contenu</a>
<header class="site-header">
<div class="site-header__inner">
<a class="site-logo" href="{{ "/" | relURL }}">P'titsPas</a>
<nav class="site-nav" id="site-nav" aria-label="Navigation principale">
<button type="button" class="nav-toggle" aria-expanded="false" aria-controls="site-nav-panel" id="site-nav-toggle" aria-label="Ouvrir le menu">
<span class="nav-toggle__bar" aria-hidden="true"></span>
<span class="nav-toggle__bar" aria-hidden="true"></span>
<span class="nav-toggle__bar" aria-hidden="true"></span>
<header class="hn-header">
<div class="hn-header__inner">
<a class="hn-brand" href="{{ "/" | relURL }}">P'tits<span class="hn-brand__gold">Pas</span></a>
<nav class="hn-nav" id="hn-nav" aria-label="Navigation principale">
<button type="button" class="hn-nav-toggle" id="hn-nav-toggle" aria-expanded="false" aria-controls="hn-nav-panel" aria-label="Ouvrir le menu">
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</button>
<div class="site-nav__panel" id="site-nav-panel">
<ul class="site-nav__list">
<div class="hn-nav-panel" id="hn-nav-panel">
<ul class="hn-nav-list">
{{ range .Site.Menus.main }}
<li><a href="{{ .URL | relURL }}">{{ .Name }}</a></li>
{{ end }}
@@ -86,7 +78,7 @@
</nav>
</div>
</header>
<main id="contenu-principal" class="site-main">
<main id="contenu-principal" class="hn-main">
{{ block "main" . }}{{ .Content }}{{ end }}
</main>
{{ partial "footer.html" . }}
+1 -1
View File
@@ -1,5 +1,5 @@
{{ define "main" }}
<div class="page-shell">
<div class="hn-panel">
{{ .Content }}
</div>
{{ end }}
+1 -1
View File
@@ -1,5 +1,5 @@
{{ define "main" }}
<div class="page-shell">
<div class="hn-panel">
<article class="content">
{{ .Content }}
</article>
+23 -32
View File
@@ -1,45 +1,36 @@
{{ define "main" }}
<div class="home">
<section class="home-hero">
{{ partial "home-path-motif.html" . }}
<div class="home-hero__inner">
<div class="home-hero__media">
<img src="{{ (.Params.hero_image | default "/images/page_login_4.1.png") | relURL }}" alt="{{ .Params.hero_image_alt | default "Illustration P'titsPas" }}" width="1200" height="630" fetchpriority="high">
</div>
<div class="home-hero__copy">
<h1 class="home-hero__title">{{ .Title }}</h1>
{{ with .Params.hero_tagline }}<p class="accroche">{{ . }}</p>{{ end }}
</div>
<div class="hn-home">
<section class="hn-hero" aria-label="Accroche">
<p class="hn-hero__kicker">{{ .Params.hero_tagline | default "Plateforme publique — petite enfance" }}</p>
<h1>{{ .Title }}</h1>
<div class="hn-hero__visual">
<img src="{{ (.Params.hero_image | default "/images/page_login_4.1.png") | relURL }}" alt="{{ .Params.hero_image_alt | default "Illustration P'titsPas" }}" width="900" height="560" fetchpriority="high">
</div>
</section>
<div class="home-bento">
<article class="home-card home-card--intro">
<div class="hn-dual">
<div class="hn-panel hn-prose">
{{ with .Params.intro_md }}{{ . | markdownify }}{{ end }}
</article>
<aside class="home-card home-card--ethics" aria-label="Engagements">
<h2 class="visually-hidden">Nos engagements</h2>
<ol class="ethics-steps">
</div>
<aside class="hn-ethics" aria-label="Engagements">
<h2>Principes</h2>
<ul>
{{ range .Params.ethics }}
<li>
<strong>{{ .title }}</strong>
{{ .detail }}
</li>
<li><strong>{{ .title }}</strong>{{ .detail }}</li>
{{ end }}
</ol>
</ul>
</aside>
</div>
<section class="home-why">
{{ with .Params.why_md }}{{ . | markdownify }}{{ end }}
<section class="hn-constellation">
<div class="hn-constellation-inner hn-prose">
{{ with .Params.why_md }}{{ . | markdownify }}{{ end }}
</div>
</section>
<section class="home-cta" aria-labelledby="home-cta-title">
<h2 id="home-cta-title" class="visually-hidden">Actions</h2>
{{ with .Params.cta_title }}<h3>{{ . }}</h3>{{ end }}
<section class="hn-cta" aria-labelledby="hn-cta-title">
<h2 id="hn-cta-title">{{ .Params.cta_title | default "Échanger avec nous" }}</h2>
<p>Parcours clair · données maîtrisées · service public</p>
<div>
<a href="{{ "fonctionnalites" | relURL }}" class="cta-button">Voir les fonctionnalités clés</a>
<a href="{{ "contact" | relURL }}" class="cta-button">Demander une démo</a>
<a class="hn-btn" href="{{ "fonctionnalites" | relURL }}">Fonctionnalités</a>
<a class="hn-btn" href="{{ "contact" | relURL }}">Demander une démo</a>
</div>
</section>
</div>
+4 -4
View File
@@ -1,8 +1,8 @@
<footer class="footer-site">
<p>&copy; {{ now.Year }} P'titsPas — Tous droits réservés.</p>
<nav class="footer-site__links" aria-label="Liens de pied de page">
<footer class="hn-footer">
<p>&copy; {{ now.Year }} P'titsPas</p>
<nav aria-label="Liens de pied de page">
<a href="{{ "mentions-legales" | relURL }}">Mentions légales</a>
<a href="{{ "politique-de-confidentialite" | relURL }}">Politique de confidentialité</a>
<a href="{{ "politique-de-confidentialite" | relURL }}">Confidentialité</a>
<a href="{{ "technique" | relURL }}">Données techniques</a>
</nav>
</footer>
-1
View File
@@ -1 +0,0 @@
<img class="home-hero__motif home-hero__motif-img" src="{{ "images/motif-trajet.svg" | relURL }}" width="520" height="140" alt="" role="presentation" decoding="async">
-7
View File
@@ -1,7 +0,0 @@
{{- $title := .Get "title" -}}
<div class="feature-card">
{{- if $title -}}
<h4 class="feature-card__title">{{ $title }}</h4>
{{- end -}}
<div class="feature-card__body">{{ .Inner | markdownify }}</div>
</div>
-7
View File
@@ -1,7 +0,0 @@
{{- $title := .Get "title" -}}
<section class="feature-section">
{{- if $title -}}
<h3 class="feature-section__title">{{ $title }}</h3>
{{- end -}}
<div class="feature-section__body">{{ .Inner | markdownify }}</div>
</section>
+340 -461
View File
@@ -1,35 +1,25 @@
/* Charte P'titsPas — vitrine modernisée (tokens + layout) */
/* Proposition « Horizon nuit » — nocturne, lumière et serif (contraste maximal avec « Cahier pop ») */
@import url("https://fonts.googleapis.com/css2?family=Merienda:wght@400;700&family=Source+Sans+3:ital,wght@0,400;0,600;0,700;1,400&display=swap");
@import url("https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;0,700;1,400&family=Sora:wght@300;400;500;600&display=swap");
:root {
--color-peche-doux: #ffd7a8;
--color-menthe-claire: #aee1cd;
--color-rose-tendre: #f6b2c4;
--color-jaune-pale: #ffecb3;
--color-lavande: #e6e6fa;
--color-corail-leger: #ffdab9;
--color-texte-principal: #2c2c2c;
--color-texte-secondaire: #555;
--color-blanc: #fff;
--color-lien: #c45b6e;
--color-lien-hover: #a8485a;
--color-surface: rgba(255, 255, 255, 0.92);
--shadow-soft: 0 2px 12px rgba(44, 44, 44, 0.06);
--shadow-card: 0 4px 24px rgba(44, 44, 44, 0.08);
--radius-sm: 8px;
--radius-md: 16px;
--radius-lg: 24px;
--space-1: 0.5rem;
--space-2: 1rem;
--space-3: 1.5rem;
--space-4: 2rem;
--space-5: 3rem;
--font-display: "Merienda", cursive;
--font-body: "Source Sans 3", system-ui, sans-serif;
--header-height: 4rem;
--content-max: 72rem;
--nav-break: 52rem;
--hn-void: #06080c;
--hn-deep: #0e1219;
--hn-mist: rgba(230, 223, 209, 0.92);
--hn-mist-dim: rgba(200, 190, 175, 0.75);
--hn-gold: #e8c547;
--hn-gold-soft: rgba(232, 197, 71, 0.35);
--hn-aurora: rgba(120, 190, 255, 0.12);
--hn-line: rgba(232, 197, 71, 0.22);
--font-serif: "Cormorant Garamond", Georgia, serif;
--font-sans: "Sora", system-ui, sans-serif;
--nav-cut: 52rem;
}
.hn-brand__gold {
color: var(--hn-gold);
font-style: italic;
font-weight: 400;
}
@media (prefers-reduced-motion: reduce) {
@@ -39,7 +29,6 @@
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
@@ -53,601 +42,491 @@ html {
scroll-behavior: smooth;
}
body {
body.theme-horizon-nuit {
margin: 0;
font-family: var(--font-body);
font-size: clamp(1rem, 0.95rem + 0.2vw, 1.0625rem);
line-height: 1.65;
color: var(--color-texte-principal);
background: linear-gradient(165deg, var(--color-blanc) 0%, var(--color-lavande) 35%, var(--color-menthe-claire) 100%);
font-family: var(--font-sans);
font-weight: 300;
font-size: clamp(0.95rem, 0.9rem + 0.25vw, 1.05rem);
line-height: 1.7;
color: var(--hn-mist);
background: var(--hn-void);
background-image:
radial-gradient(ellipse 120% 80% at 50% -30%, var(--hn-gold-soft), transparent 55%),
radial-gradient(ellipse 70% 50% at 100% 20%, var(--hn-aurora), transparent 50%),
radial-gradient(ellipse 50% 40% at 0% 80%, rgba(180, 120, 255, 0.06), transparent 45%);
background-attachment: fixed;
min-height: 100vh;
}
:focus-visible {
outline: 3px solid var(--color-menthe-claire);
outline: 2px solid var(--hn-gold);
outline-offset: 3px;
}
.skip-link {
position: absolute;
left: -9999px;
z-index: 1000;
padding: var(--space-2) var(--space-3);
background: var(--color-texte-principal);
color: var(--color-blanc);
font-weight: 600;
z-index: 3000;
padding: 0.65rem 1rem;
background: var(--hn-deep);
color: var(--hn-gold);
border: 1px solid var(--hn-line);
text-decoration: none;
border-radius: var(--radius-sm);
font-family: var(--font-sans);
font-size: 0.75rem;
letter-spacing: 0.2em;
text-transform: uppercase;
}
.skip-link:focus {
left: var(--space-2);
top: var(--space-2);
left: 1rem;
top: 1rem;
}
.visually-hidden {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
/* ——— Header ——— */
.site-header {
/* Header */
.hn-header {
position: sticky;
top: 0;
z-index: 50;
background: color-mix(in srgb, var(--color-menthe-claire) 92%, transparent);
backdrop-filter: blur(10px);
border-bottom: 1px solid color-mix(in srgb, var(--color-texte-principal) 8%, transparent);
box-shadow: var(--shadow-soft);
z-index: 100;
backdrop-filter: blur(14px);
background: color-mix(in srgb, var(--hn-deep) 82%, transparent);
border-bottom: 1px solid var(--hn-line);
}
.site-header__inner {
max-width: var(--content-max);
.hn-header__inner {
max-width: 80rem;
margin: 0 auto;
padding: var(--space-2) var(--space-3);
padding: 1rem 1.25rem;
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-2);
min-height: var(--header-height);
gap: 1rem;
}
.site-logo {
font-family: var(--font-display);
font-weight: 700;
font-size: clamp(1.1rem, 1rem + 0.5vw, 1.35rem);
color: var(--color-texte-principal);
.hn-brand {
font-family: var(--font-serif);
font-weight: 500;
font-size: clamp(1.35rem, 1.1rem + 1vw, 1.85rem);
letter-spacing: 0.02em;
text-decoration: none;
white-space: nowrap;
color: var(--hn-mist);
}
.site-logo:hover {
text-decoration: none;
color: var(--color-lien-hover);
}
.site-nav {
.hn-nav {
position: relative;
display: flex;
align-items: center;
justify-content: flex-end;
}
.nav-toggle {
.hn-nav-toggle {
display: flex;
flex-direction: column;
justify-content: center;
gap: 6px;
width: 2.75rem;
height: 2.75rem;
gap: 5px;
width: 2.6rem;
height: 2.6rem;
padding: 0;
border: none;
border-radius: var(--radius-sm);
background: var(--color-blanc);
border: 1px solid var(--hn-line);
border-radius: 50%;
background: transparent;
color: var(--hn-mist);
cursor: pointer;
box-shadow: var(--shadow-soft);
}
.nav-toggle__bar {
.hn-nav-toggle span {
display: block;
width: 1.25rem;
height: 2px;
width: 1rem;
height: 1px;
margin: 0 auto;
background: var(--color-texte-principal);
border-radius: 1px;
transition: transform 0.2s ease, opacity 0.2s ease;
background: currentColor;
}
.site-nav.is-open .nav-toggle__bar:nth-child(1) {
transform: translateY(8px) rotate(45deg);
.hn-nav-panel {
max-height: 0;
overflow: hidden;
transition: max-height 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}
.site-nav.is-open .nav-toggle__bar:nth-child(2) {
opacity: 0;
.hn-nav.is-open .hn-nav-panel {
max-height: 24rem;
}
.site-nav.is-open .nav-toggle__bar:nth-child(3) {
transform: translateY(-8px) rotate(-45deg);
}
.site-nav__list {
.hn-nav-list {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
gap: var(--space-1);
gap: 0.25rem 1.25rem;
justify-content: flex-end;
}
.site-nav__list a {
display: block;
padding: var(--space-1) var(--space-2);
font-weight: 600;
font-size: 0.95rem;
color: var(--color-texte-principal);
.hn-nav-list a {
font-size: 0.7rem;
font-weight: 500;
letter-spacing: 0.22em;
text-transform: uppercase;
text-decoration: none;
border-radius: var(--radius-sm);
transition: background-color 0.2s ease;
color: var(--hn-mist-dim);
padding: 0.35rem 0;
border-bottom: 1px solid transparent;
transition: color 0.2s ease, border-color 0.2s ease;
}
.site-nav__list a:hover {
background: var(--color-peche-doux);
text-decoration: none;
}
@media (max-width: 51.99rem) {
.nav-toggle {
display: flex;
}
.site-nav__panel {
position: absolute;
left: 0;
right: 0;
top: 100%;
max-height: 0;
overflow: hidden;
background: color-mix(in srgb, var(--color-blanc) 96%, var(--color-menthe-claire));
border-bottom: 1px solid color-mix(in srgb, var(--color-texte-principal) 8%, transparent);
transition: max-height 0.35s ease;
}
.site-nav.is-open .site-nav__panel {
max-height: 24rem;
}
.site-nav__list {
flex-direction: column;
padding: var(--space-3);
align-items: stretch;
}
.site-nav__list a {
text-align: center;
}
.hn-nav-list a:hover {
color: var(--hn-gold);
border-bottom-color: var(--hn-gold);
}
@media (min-width: 52rem) {
.nav-toggle {
.hn-nav-toggle {
display: none;
}
.site-nav {
flex: 1;
}
.site-nav__panel {
position: static;
.hn-nav-panel {
max-height: none !important;
overflow: visible;
background: transparent;
border: none;
}
.site-nav__list {
justify-content: flex-end;
}
}
/* ——— Main ——— */
.site-main {
max-width: var(--content-max);
@media (max-width: 51.99rem) {
.hn-nav-panel {
position: absolute;
right: 0;
top: calc(100% + 0.75rem);
left: 0;
background: color-mix(in srgb, var(--hn-deep) 96%, black);
border: 1px solid var(--hn-line);
padding: 1rem 1.25rem;
}
.hn-nav-list {
flex-direction: column;
align-items: flex-start;
gap: 0.75rem;
}
}
/* Main */
.hn-main {
max-width: 80rem;
margin: 0 auto;
padding: var(--space-4) var(--space-3) var(--space-5);
padding: 0 1rem 4rem;
}
.page-shell {
background: var(--color-surface);
border-radius: var(--radius-md);
box-shadow: var(--shadow-card);
padding: var(--space-4);
.hn-panel {
border: 1px solid var(--hn-line);
background: color-mix(in srgb, var(--hn-deep) 75%, transparent);
backdrop-filter: blur(8px);
border-radius: 2px;
padding: clamp(1.25rem, 3vw, 2.5rem);
}
.page-shell .content {
max-width: 52rem;
.hn-panel .content {
max-width: 42rem;
margin: 0 auto;
}
h1 {
font-family: var(--font-display);
font-weight: 700;
font-size: clamp(1.65rem, 1.2rem + 2vw, 2.35rem);
line-height: 1.25;
color: var(--color-texte-principal);
margin: 0 0 var(--space-3);
}
h2,
h3,
h4,
h5,
h6 {
font-family: var(--font-body);
font-weight: 700;
color: var(--color-texte-principal);
line-height: 1.3;
}
h2 {
font-size: clamp(1.35rem, 1.1rem + 1vw, 1.75rem);
}
h3 {
font-size: clamp(1.15rem, 1rem + 0.5vw, 1.35rem);
}
.accroche {
font-weight: 600;
color: var(--color-texte-secondaire);
}
a {
color: var(--color-lien);
text-decoration: underline;
text-decoration-thickness: 1px;
text-underline-offset: 3px;
}
a:hover {
color: var(--color-lien-hover);
}
/* ——— Home ——— */
.home-hero {
/* Home */
.hn-hero {
min-height: clamp(22rem, 55vh, 36rem);
display: flex;
flex-direction: column;
justify-content: flex-end;
padding: 3rem 0 2.5rem;
margin-bottom: 0;
position: relative;
overflow: hidden;
border-radius: var(--radius-lg);
background: var(--color-surface);
box-shadow: var(--shadow-card);
margin-bottom: var(--space-4);
}
.home-hero__motif {
.hn-hero::after {
content: "";
position: absolute;
inset: 0;
pointer-events: none;
left: 5%;
right: 5%;
bottom: 0;
height: 1px;
background: linear-gradient(90deg, transparent, var(--hn-gold), transparent);
opacity: 0.5;
}
.home-hero__motif-img {
width: 100%;
height: 100%;
object-fit: cover;
opacity: 0;
animation: motifReveal 2s ease forwards 0.2s;
.hn-hero__kicker {
font-size: 0.65rem;
letter-spacing: 0.35em;
text-transform: uppercase;
color: var(--hn-gold);
margin-bottom: 1rem;
}
@media (prefers-reduced-motion: reduce) {
.home-hero__motif-img {
animation: none;
opacity: 0.16;
}
.hn-hero h1 {
font-family: var(--font-serif);
font-weight: 500;
font-size: clamp(2.4rem, 1.2rem + 5vw, 4.2rem);
line-height: 1.05;
max-width: 18ch;
margin: 0 0 1.5rem;
color: var(--hn-mist);
}
@keyframes motifReveal {
to {
opacity: 0.16;
}
.hn-hero__visual {
margin-top: 2rem;
max-width: 28rem;
border: 1px solid var(--hn-line);
padding: 0.35rem;
background: color-mix(in srgb, var(--hn-deep) 90%, transparent);
}
.home-hero__inner {
position: relative;
z-index: 1;
display: grid;
gap: var(--space-4);
padding: var(--space-4);
}
@media (min-width: 48rem) {
.home-hero__inner {
grid-template-columns: 1fr 1.1fr;
align-items: center;
}
}
.home-hero__media {
border-radius: var(--radius-md);
overflow: hidden;
box-shadow: var(--shadow-soft);
}
.home-hero__media img {
.hn-hero__visual img {
display: block;
width: 100%;
height: auto;
max-height: 22rem;
object-fit: cover;
display: block;
filter: saturate(0.92) contrast(1.05);
}
.home-hero__title {
margin-bottom: var(--space-2);
}
.home-bento {
.hn-dual {
display: grid;
gap: var(--space-3);
margin-bottom: var(--space-4);
gap: 1.25rem;
margin: 2.5rem 0;
}
@media (min-width: 48rem) {
.home-bento {
grid-template-columns: 1.4fr 1fr;
.hn-dual {
grid-template-columns: 1.2fr 1fr;
align-items: start;
}
}
.home-card {
background: var(--color-surface);
border-radius: var(--radius-md);
box-shadow: var(--shadow-card);
padding: var(--space-4);
.hn-prose {
font-weight: 300;
}
.home-card--ethics {
background: linear-gradient(145deg, var(--color-blanc), var(--color-jaune-pale));
.hn-prose strong {
font-weight: 500;
color: var(--hn-mist);
}
.ethics-steps {
.hn-ethics {
border-left: 1px solid var(--hn-line);
padding-left: 1.25rem;
}
.hn-ethics h2 {
font-family: var(--font-sans);
font-size: 0.65rem;
letter-spacing: 0.28em;
text-transform: uppercase;
font-weight: 500;
color: var(--hn-gold);
margin: 0 0 1rem;
}
.hn-ethics ul {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: var(--space-2);
}
.ethics-steps li {
padding: var(--space-2);
background: var(--color-blanc);
border-radius: var(--radius-sm);
border-left: 4px solid var(--color-rose-tendre);
font-size: 0.95rem;
box-shadow: var(--shadow-soft);
.hn-ethics li {
position: relative;
padding: 0.65rem 0 0.65rem 1.25rem;
border-bottom: 1px solid rgba(255, 255, 255, 0.06);
font-size: 0.9rem;
color: var(--hn-mist-dim);
}
.ethics-steps strong {
.hn-ethics li::before {
content: "";
position: absolute;
left: 0;
top: 50%;
width: 6px;
height: 6px;
margin-top: -3px;
border-radius: 50%;
background: var(--hn-gold);
opacity: 0.85;
}
.hn-ethics strong {
display: block;
font-family: var(--font-body);
color: var(--hn-mist);
font-weight: 500;
margin-bottom: 0.15rem;
}
.home-why {
background: var(--color-surface);
border-radius: var(--radius-md);
box-shadow: var(--shadow-card);
padding: var(--space-4);
margin-bottom: var(--space-4);
.hn-constellation {
position: relative;
padding: 2.5rem 0;
margin: 2rem 0;
}
.home-why :first-child {
.hn-constellation::before {
content: "";
position: absolute;
inset: 0;
background-image: radial-gradient(1px 1px at 20% 30%, rgba(255, 255, 255, 0.35), transparent),
radial-gradient(1px 1px at 70% 20%, rgba(255, 255, 255, 0.25), transparent),
radial-gradient(1px 1px at 40% 70%, rgba(255, 255, 255, 0.2), transparent),
radial-gradient(1px 1px at 88% 65%, rgba(232, 197, 71, 0.4), transparent),
radial-gradient(1px 1px at 12% 80%, rgba(255, 255, 255, 0.18), transparent);
pointer-events: none;
opacity: 0.7;
}
.hn-constellation-inner {
position: relative;
z-index: 1;
max-width: 40rem;
margin: 0 auto;
}
.hn-constellation-inner h2 {
font-family: var(--font-serif);
font-size: clamp(1.75rem, 1.2rem + 1.5vw, 2.35rem);
font-weight: 500;
margin-top: 0;
color: var(--hn-mist);
}
.home-why :last-child {
margin-bottom: 0;
.hn-constellation-inner a {
color: var(--hn-gold);
}
.home-cta {
.hn-cta {
text-align: center;
padding: var(--space-4);
background: linear-gradient(135deg, var(--color-peche-doux), var(--color-rose-tendre));
border-radius: var(--radius-lg);
box-shadow: var(--shadow-card);
padding: 3rem 1.5rem;
margin-top: 2rem;
border: 1px solid var(--hn-line);
background: linear-gradient(160deg, color-mix(in srgb, var(--hn-deep) 90%, transparent), rgba(232, 197, 71, 0.06));
}
.home-cta h2,
.home-cta h3 {
.hn-cta h2 {
font-family: var(--font-serif);
font-weight: 500;
font-size: clamp(1.6rem, 1.2rem + 1vw, 2rem);
margin-top: 0;
margin-bottom: var(--space-3);
color: var(--hn-mist);
}
.home-cta .cta-button {
margin: var(--space-1);
.hn-cta p {
font-size: 0.8rem;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--hn-mist-dim);
margin-bottom: 1.5rem;
}
/* ——— Legacy / inner pages ——— */
.logo-accueil img {
width: 100%;
max-height: 400px;
object-fit: cover;
display: block;
margin-bottom: var(--space-4);
border-radius: var(--radius-sm);
}
.content-section {
background: var(--color-surface);
padding: var(--space-4);
margin-bottom: var(--space-3);
border-radius: var(--radius-md);
box-shadow: var(--shadow-soft);
}
button,
input[type="submit"],
.cta-button {
font-family: var(--font-body);
font-weight: 700;
background: var(--color-peche-doux);
color: var(--color-texte-principal);
border: none;
padding: var(--space-2) var(--space-4);
border-radius: 999px;
cursor: pointer;
text-decoration: none;
.hn-btn {
display: inline-block;
margin-top: var(--space-1);
transition: background-color 0.2s ease, transform 0.15s ease;
box-shadow: var(--shadow-soft);
}
.cta-button {
margin: 0.35rem 0.5rem;
padding: 0.65rem 1.4rem;
font-size: 0.68rem;
font-weight: 500;
letter-spacing: 0.2em;
text-transform: uppercase;
text-decoration: none;
color: var(--hn-gold);
border: 1px solid var(--hn-gold);
background: transparent;
transition: background 0.2s ease, color 0.2s ease;
}
button:hover,
input[type="submit"]:hover,
.cta-button:hover {
background: var(--color-rose-tendre);
text-decoration: none;
transform: translateY(-1px);
.hn-btn:hover {
background: var(--hn-gold);
color: var(--hn-void);
}
@media (prefers-reduced-motion: reduce) {
button:hover,
input[type="submit"]:hover,
.cta-button:hover {
transform: none;
}
/* Inner pages */
body.theme-horizon-nuit h1,
body.theme-horizon-nuit h2,
body.theme-horizon-nuit h3 {
font-family: var(--font-serif);
font-weight: 500;
color: var(--hn-mist);
}
form div {
margin-bottom: var(--space-2);
body.theme-horizon-nuit .logo-accueil img {
border: 1px solid var(--hn-line);
padding: 0.25rem;
background: color-mix(in srgb, var(--hn-deep) 80%, transparent);
}
form label {
display: block;
margin-bottom: var(--space-1);
font-weight: 600;
body.theme-horizon-nuit .content-section {
border: 1px solid var(--hn-line);
background: color-mix(in srgb, var(--hn-deep) 70%, transparent);
padding: 1.25rem;
margin-bottom: 1.25rem;
}
form input[type="text"],
form input[type="email"],
form input[type="tel"],
form textarea {
width: 100%;
padding: var(--space-2);
border: 1px solid color-mix(in srgb, var(--color-menthe-claire) 70%, var(--color-texte-principal));
border-radius: var(--radius-sm);
font-family: var(--font-body);
font-size: 1rem;
body.theme-horizon-nuit a {
color: var(--hn-gold);
}
.site-form {
max-width: 38rem;
margin: var(--space-4) auto;
padding: var(--space-4);
background: var(--color-surface);
border-radius: var(--radius-md);
box-shadow: var(--shadow-soft);
body.theme-horizon-nuit .cta-button {
font-family: var(--font-sans);
font-size: 0.68rem;
letter-spacing: 0.18em;
text-transform: uppercase;
border: 1px solid var(--hn-gold);
background: transparent;
color: var(--hn-gold);
padding: 0.6rem 1.2rem;
border-radius: 0;
}
.site-form button[type="submit"] {
margin-top: var(--space-2);
body.theme-horizon-nuit .cta-button:hover {
background: var(--hn-gold);
color: var(--hn-void);
}
/* ——— Feature sections (shortcodes) ——— */
.feature-section {
background: var(--color-surface);
border-radius: var(--radius-md);
box-shadow: var(--shadow-soft);
padding: var(--space-4);
margin: var(--space-4) 0;
body.theme-horizon-nuit form label {
font-size: 0.75rem;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--hn-mist-dim);
}
.feature-section__title {
margin: 0 0 var(--space-2);
padding-bottom: var(--space-2);
border-bottom: 2px solid var(--color-menthe-claire);
body.theme-horizon-nuit form input,
body.theme-horizon-nuit form textarea {
background: color-mix(in srgb, var(--hn-void) 60%, transparent);
border: 1px solid var(--hn-line);
color: var(--hn-mist);
}
.feature-section__body > :first-child {
margin-top: 0;
body.theme-horizon-nuit button,
body.theme-horizon-nuit input[type="submit"] {
font-family: var(--font-sans);
font-size: 0.68rem;
letter-spacing: 0.18em;
text-transform: uppercase;
border: 1px solid var(--hn-gold);
background: transparent;
color: var(--hn-gold);
padding: 0.55rem 1.1rem;
cursor: pointer;
}
.feature-section__body > :last-child {
margin-bottom: 0;
}
.feature-grid {
display: grid;
gap: var(--space-3);
margin: var(--space-3) 0;
}
@media (min-width: 40rem) {
.feature-grid {
grid-template-columns: repeat(2, 1fr);
}
}
.feature-card {
background: color-mix(in srgb, var(--color-blanc) 88%, var(--color-lavande));
border-radius: var(--radius-sm);
padding: var(--space-3);
border: 1px solid color-mix(in srgb, var(--color-texte-principal) 6%, transparent);
}
.feature-card__title {
margin: 0 0 var(--space-1);
font-size: 1rem;
}
.feature-card__body {
margin: 0;
font-size: 0.95rem;
color: var(--color-texte-secondaire);
}
/* ——— Footer ——— */
.footer-site {
background: color-mix(in srgb, var(--color-jaune-pale) 88%, var(--color-blanc));
padding: var(--space-4) var(--space-3);
/* Footer */
.hn-footer {
margin-top: 3rem;
padding: 2rem 1rem;
border-top: 1px solid var(--hn-line);
text-align: center;
border-top: 1px solid color-mix(in srgb, var(--color-peche-doux) 80%, transparent);
margin-top: var(--space-5);
font-size: 0.72rem;
letter-spacing: 0.15em;
text-transform: uppercase;
color: var(--hn-mist-dim);
}
.footer-site p {
margin: var(--space-1) 0;
font-size: 0.95rem;
color: var(--color-texte-secondaire);
.hn-footer nav {
margin-top: 0.75rem;
}
.footer-site__links {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: var(--space-2) var(--space-3);
margin-top: var(--space-2);
}
.footer-site__links a {
color: var(--color-texte-principal);
font-weight: 600;
.hn-footer a {
color: var(--hn-mist-dim);
text-decoration: none;
margin: 0 0.75rem;
}
.footer-site__links a:hover {
text-decoration: underline;
color: var(--color-lien-hover);
.hn-footer a:hover {
color: var(--hn-gold);
}
-3
View File
@@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 520 140" preserveAspectRatio="xMidYMid slice" fill="none">
<path stroke="#7eb9a4" stroke-width="2.5" stroke-linecap="round" opacity="0.35" d="M20 100 C 90 30, 160 120, 230 70 S 360 20, 500 85"/>
</svg>

Before

Width:  |  Height:  |  Size: 257 B

+7 -12
View File
@@ -1,8 +1,7 @@
(function () {
var nav = document.getElementById("site-nav");
var nav = document.getElementById("hn-nav");
if (!nav) return;
var toggle = nav.querySelector(".nav-toggle");
var toggle = document.getElementById("hn-nav-toggle");
var mq = window.matchMedia("(max-width: 51.99rem)");
function setOpen(open) {
@@ -18,12 +17,8 @@
var next = !nav.classList.contains("is-open");
setOpen(next);
if (next) {
var first = nav.querySelector(".site-nav__list a");
if (first) {
window.requestAnimationFrame(function () {
first.focus();
});
}
var first = nav.querySelector(".hn-nav-list a");
if (first) requestAnimationFrame(function () { first.focus(); });
}
});
}
@@ -35,13 +30,13 @@
}
});
nav.querySelectorAll(".site-nav__list a").forEach(function (a) {
nav.querySelectorAll(".hn-nav-list a").forEach(function (a) {
a.addEventListener("click", function () {
if (mq.matches) setOpen(false);
});
});
mq.addEventListener("change", function (e) {
if (!e.matches) setOpen(false);
mq.addEventListener("change", function (ev) {
if (!ev.matches) setOpen(false);
});
})();