<?xml version="1.0" encoding="UTF-8" ?><!-- generator=Zoho Sites --><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><atom:link href="https://www.fys-consulting.fr/banc-d-essai/tag/ech/feed" rel="self" type="application/rss+xml"/><title>FYS Consulting - Le banc d'essai #ECH</title><description>FYS Consulting - Le banc d'essai #ECH</description><link>https://www.fys-consulting.fr/banc-d-essai/tag/ech</link><lastBuildDate>Wed, 28 Oct 2026 02:52:53 +0100</lastBuildDate><generator>http://zoho.com/sites/</generator><item><title><![CDATA[Filtrage web : HTTP/2 et ECH, deux angles morts que votre pare-feu ne voit pas]]></title><link>https://www.fys-consulting.fr/banc-d-essai/post/filtrage-web-http2-ech</link><description><![CDATA[Beaucoup de filtres web se fient au nom de site annoncé en clair. HTTP/2 et ECH les rendent aveugles. Explications, test en 2 minutes, solutions.]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_HtAnPMtyTbK6mLX8O6KtvQ" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_4d2CWjblTvy_uOAastxWDw" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_kFWIC6YATpihkeAITafFeg" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_AycORpax6ZkgCXJgk5GOAA" data-element-type="codeSnippet" class="zpelement zpelem-codesnippet "><div class="zpsnippet-container"><!-- FYS Consulting — article « Filtrage web : HTTP/2 et ECH, deux angles morts que votre pare-feu ne voit pas » — généré par build.py --><div class="fys fys-billet"><!-- ============================================================ --><!-- LE BANC D'ESSAI — article n°1 --><!-- Corps d'article à coller dans un « Extrait de code » du billet --><!-- de blog Zoho (le titre est celui du billet). --><!-- ============================================================ --><div class="fys-billet-chapo"><span class="fys-surtitre">Le banc d'essai · Infrastructure</span><p>Votre pare-feu bloque les sites indésirables. Du moins, c'est ce qu'indique son tableau de bord. Dans beaucoup d'entreprises, ce filtrage repose sur une information que les navigateurs récents ne donnent plus, ou plus toujours.</p></div>
<aside class="fys-billet-bref" aria-label="En bref"><p class="fys-billet-bref-titre">En bref</p><ul><li>Beaucoup de filtres web décident sans déchiffrer le trafic, en lisant le <strong>nom du site annoncé en clair</strong> à l'ouverture de la connexion (le SNI).</li><li><strong>HTTP/2</strong> réutilise une connexion pour plusieurs sites, <strong>ECH</strong> chiffre ce nom : dans les deux cas, le filtre ne voit plus le vrai site.</li><li>Se tester prend deux minutes. Corriger passe surtout par la configuration des navigateurs et du DNS.</li></ul></aside><h2>Comment votre filtrage web décide</h2><p>Le trafic HTTPS est chiffré : un pare-feu ne voit pas les pages consultées. Pour filtrer sans tout déchiffrer, la plupart des solutions regardent le <strong>SNI</strong> (<em>Server Name Indication</em>), le nom du site que le navigateur annonce en clair au tout début de la connexion. C'est léger, rapide, et ça ne casse aucune application.</p><p>Mais toute la méthode repose sur une hypothèse : <strong>un nom annoncé égale un site visité</strong>. Cette hypothèse ne tient plus.</p><h2>Angle mort n°1 : HTTP/2 réutilise la connexion</h2><p>Avec HTTP/2, un navigateur peut réutiliser une connexion déjà ouverte pour <strong>un autre site</strong>, à condition que le même certificat couvre les deux noms et qu'ils pointent vers la même adresse. C'est très courant chez les grands hébergeurs et les réseaux de diffusion de contenu, où des milliers de sites partagent la même infrastructure.</p><div class="fys-billet-schema" role="img" aria-label="Le navigateur ouvre une connexion pour un site autorisé, le filtre lit ce nom et laisse passer, puis le navigateur envoie dans la même connexion des requêtes vers un site bloqué, que le filtre ne voit pas."><div class="fys-billet-etape"><span>1</span><p>Le navigateur ouvre une connexion vers <strong>site-autorisé</strong></p></div>
<div class="fys-billet-etape fys-billet-ok"><span>2</span><p>Le filtre lit ce nom : <strong>autorisé, il laisse passer</strong></p></div>
<div class="fys-billet-etape fys-billet-ko"><span>3</span><p>Dans la même connexion, des requêtes partent vers <strong>site-bloqué</strong> : le filtre ne voit rien</p></div>
</div><p>Le filtre a vu un seul nom, au début. Il ne voit pas les suivants. Ce comportement, appelé <em>connection coalescing</em>, est prévu par la norme HTTP/2 elle-même : ce n'est pas un bug, c'est une optimisation.</p><h2>Angle mort n°2 : ECH chiffre le nom du site</h2><p><strong>ECH</strong> (<em>Encrypted Client Hello</em>) va plus loin : le navigateur chiffre le vrai nom du site. Le filtre ne voit plus qu'un nom générique, celui de l'hébergeur. ECH est activé par défaut dans les versions récentes de Chrome et de Firefox, pour tous les sites qui le proposent, et de grands hébergeurs l'ont déployé largement.</p><p>Pour l'utiliser, le navigateur récupère une clé publiée dans le DNS, dans un enregistrement de type <strong>HTTPS</strong>. Et il le fait souvent par <strong>DNS over HTTPS</strong>, c'est-à-dire en contournant aussi les serveurs DNS de l'entreprise et le filtrage qui s'y applique.</p><div class="fys-billet-note"><p><strong>Et HTTP/3&nbsp;?</strong> Il circule en UDP (protocole QUIC) et non plus en TCP. Selon les équipements, ce trafic est inspecté différemment, voire pas du tout. Bloquer l'UDP sur le port 443 en sortie force les navigateurs à revenir en HTTP/2.</p></div>
<h2>Testez-vous en deux minutes</h2><ol class="fys-billet-liste"><li>Sur un poste de l'entreprise, ouvrez <a href="https://crypto.cloudflare.com/cdn-cgi/trace" target="_blank" rel="noopener">crypto.cloudflare.com/cdn-cgi/trace</a> et cherchez la ligne <code>sni=</code>. Si elle indique <code>sni=encrypted</code>, ECH passe : votre filtre ne voit pas le nom des sites hébergés de cette façon. Si elle indique <code>sni=plaintext</code>, ce point est sous contrôle.</li><li>Dans les paramètres du navigateur, vérifiez si le <strong>DNS sécurisé</strong> (DNS over HTTPS) est activé. S'il l'est, la résolution échappe à vos serveurs DNS.</li><li>Posez la question à votre prestataire : votre filtre web <strong>déchiffre-t-il</strong> le trafic, ou s'appuie-t-il seulement sur le nom annoncé&nbsp;?</li></ol><h2>Ce qu'il faut faire</h2><div class="fys-billet-mesures"><div><h3>Désactiver DNS over HTTPS sur les postes gérés</h3><p>Par stratégie de groupe ou par votre outil de gestion des postes, pour que la résolution passe par vos serveurs DNS.</p></div>
<div><h3>Désactiver ECH dans les navigateurs</h3><p>Chrome et Edge disposent d'une stratégie dédiée. Dans Firefox, ECH dépend de DNS over HTTPS : le désactiver suffit en général.</p></div>
<div><h3>Filtrer les enregistrements DNS de type HTTPS</h3><p>Sur vos résolveurs, pour que les navigateurs ne récupèrent pas la clé ECH.</p></div>
<div><h3>Bloquer QUIC si votre filtre ne l'inspecte pas</h3><p>Fermer l'UDP 443 en sortie ramène le trafic web sur un terrain que le filtre connaît.</p></div>
<div><h3>Réserver l'inspection complète aux cas qui la justifient</h3><p>Déchiffrer le trafic voit tout, mais impose un certificat déployé sur les postes, des exceptions (banque, santé) et une information claire des salariés.</p></div>
<div><h3>Refaire le test après chaque mise à jour majeure</h3><p>Les navigateurs évoluent vite : ce qui était fermé peut se rouvrir.</p></div>
</div><div class="fys-billet-fys"><p class="fys-billet-fys-titre">Le point de vue FYS</p><p>Aucun de ces réglages n'exige d'acheter un produit : c'est de la configuration. C'est précisément le type de point que nous vérifions dans le volet réseau du <a href="/diagnostic-cyber" class="fys-lien">diagnostic cyber</a>, et que nous corrigeons lors d'une <a href="/integration-securite" class="fys-lien">intégration</a>.</p><p><a href="/contact" class="fys-cta">En parler 30 minutes</a></p></div>
<p class="fys-billet-signature">Yannick Ferry, FYS Consulting · <a href="/securite-infrastructure" class="fys-lien">Le pilier Infrastructure →</a></p></div>
<style> /* ============================================================ FYS Consulting — styles communs à toutes les pages Tout est préfixé par .fys pour ne jamais entrer en conflit avec le thème Zoho (et réciproquement). Charte : Identité Visuelle/GUIDE_LOGOS.md ============================================================ */ .fys { --noir: #1C1C24; --noir-2: #252530; --orange: #F26B3A; --orange-fonce: #D95A2A; --gris: #5A5A5A; --gris-clair: #A0A0A0; --gris-pale: #E0E0E0; --fond-doux: #F5F5F7; --bordure: #3A3A44; font-family: Arial, Helvetica, sans-serif; color: var(--noir); line-height: 1.6; -webkit-font-smoothing: antialiased; } .fys *, .fys *::before, .fys *::after { box-sizing: border-box; } /* Pleine largeur même si la section Zoho est en mode « boîte » */ .fys-page { width: 100vw; margin-left: calc(50% - 50vw); margin-right: calc(50% - 50vw); } body { overflow-x: clip; } html { scroll-behavior: smooth; } .fys section[id] { scroll-margin-top: 76px; } /* ---------- Typographie (couleurs toujours explicites) ---------- */ .fys h1, .fys h2, .fys h3, .fys p { margin: 0; font-family: inherit; } .fys h1 { font-size: 44px; font-weight: 700; line-height: 1.15; color: var(--noir); letter-spacing: -0.5px; margin-bottom: 22px; } .fys h2 { font-size: 30px; font-weight: 700; line-height: 1.25; color: var(--noir); margin-bottom: 18px; } .fys h2.fys-souligne { display: inline-block; padding-bottom: 10px; border-bottom: 3px solid var(--orange); } .fys h3 { font-size: 19px; font-weight: 700; line-height: 1.35; color: var(--orange); margin-bottom: 8px; } .fys p { font-size: 16px; color: var(--gris); } .fys a { color: var(--orange); text-decoration: none; } .fys strong { color: inherit; } .fys-sombre { background: var(--noir); } .fys-sombre h1, .fys-sombre h2 { color: #FFF; } .fys-sombre p { color: var(--gris-clair); } .fys-clair { background: #FFF; } .fys-doux { background: var(--fond-doux); } .fys-surtitre { display: block; font-size: 13px; font-weight: 700; letter-spacing: 1.2px; text-transform: uppercase; color: var(--orange); margin-bottom: 14px; } /* ---------- Ossature ---------- */ .fys-section { padding: 72px 24px; } .fys-section.fys-compact { padding: 52px 24px; } .fys-wrap { max-width: 1120px; margin: 0 auto; } .fys-wrap-etroit { max-width: 800px; margin: 0 auto; } .fys-centre { text-align: center; } .fys-chapeau { font-size: 18px !important; line-height: 1.7; max-width: 760px; margin-bottom: 36px !important; } /* ---------- Boutons ---------- */ .fys .fys-cta { display: inline-block; background: var(--orange); color: #FFF; padding: 15px 32px; font-size: 17px; font-weight: 700; border-radius: 6px; transition: background-color .25s, transform .2s; } .fys .fys-cta:hover { background: var(--orange-fonce); color: #FFF; transform: translateY(-2px); } .fys .fys-lien { font-weight: 700; font-size: 16px; color: var(--orange); border-bottom: 1px solid transparent; transition: border-color .2s; } .fys .fys-lien:hover { border-bottom-color: var(--orange); } /* ---------- En-tête ---------- */ .fys-entete { position: sticky; top: 0; z-index: 100; background: rgba(28, 28, 36, .97); border-bottom: 1px solid var(--bordure); } .fys-entete-inner { max-width: 1120px; margin: 0 auto; padding: 10px 24px; display: flex; align-items: center; justify-content: space-between; gap: 20px; position: relative; } .fys-logo { display: flex; line-height: 0; } .fys-logo svg { height: 42px; width: auto; display: block; } .fys-nav { display: flex; align-items: center; gap: 28px; } .fys-nav > a, .fys-menu-titre { color: #FFF !important; font-size: 15px; font-weight: 700; padding: 6px 0; border-bottom: 2px solid transparent; background: none; border-top: 0; border-left: 0; border-right: 0; font-family: inherit; cursor: pointer; transition: border-color .2s; } .fys-nav > a:hover, .fys-menu-titre:hover { border-bottom-color: var(--orange); } .fys-nav > a.fys-nav-cta { background: var(--orange); padding: 9px 18px; border-radius: 6px; border-bottom: 0; } .fys-nav > a.fys-nav-cta:hover { background: var(--orange-fonce); } .fys-menu { position: relative; } /* Le thème Zoho stylise les <button> : on neutralise pour garder le chevron aligné */ .fys .fys-menu-titre { display: inline-flex; align-items: center; gap: 7px; line-height: 1.2; height: auto; min-height: 0; margin: 0; text-transform: none; letter-spacing: 0; box-shadow: none; vertical-align: middle; } .fys .fys-menu-titre .fys-chevron { margin: 0 0 4px 0; padding: 0; box-sizing: content-box; flex: 0 0 auto; } .fys-chevron { display: inline-block; width: 7px; height: 7px; margin-left: 7px; border-right: 2px solid var(--orange); border-bottom: 2px solid var(--orange); transform: translateY(-3px) rotate(45deg); transition: transform .2s; } .fys-sous-menu { display: none; position: absolute; top: calc(100% + 12px); left: -18px; min-width: 290px; padding: 10px; background: var(--noir); border: 1px solid var(--bordure); border-radius: 8px; box-shadow: 0 14px 34px rgba(0, 0, 0, .35); } .fys-sous-menu::before { /* pont invisible pour ne pas perdre le survol */ content: ""; position: absolute; left: 0; right: 0; top: -14px; height: 14px; } .fys-menu:hover .fys-sous-menu, .fys-menu:focus-within .fys-sous-menu, .fys-menu.ouvert .fys-sous-menu { display: block; } .fys-menu:hover .fys-chevron, .fys-menu.ouvert .fys-chevron { transform: translateY(0) rotate(-135deg); } .fys-sous-menu a { display: block; padding: 10px 12px; border-radius: 6px; color: #FFF !important; font-size: 15px; font-weight: 700; } .fys-sous-menu a small { display: block; font-size: 13px; font-weight: 400; color: var(--gris-clair); margin-top: 2px; } .fys-sous-menu a:hover { background: var(--noir-2); } .fys-sous-menu a:hover small { color: var(--gris-pale); } .fys-pastille { display: inline-block; margin-left: 8px; padding: 1px 7px; border-radius: 10px; background: var(--orange); color: #FFF; font-size: 11px; font-weight: 700; vertical-align: 2px; letter-spacing: .3px; } .fys-burger { display: none; background: none; border: 0; cursor: pointer; padding: 8px; width: 44px; height: 40px; } .fys-burger span { display: block; height: 2px; width: 24px; background: #FFF; margin: 5px auto; transition: transform .25s, opacity .25s; } .fys-burger[aria-expanded="true"] span:nth-child(1) { transform: translateY(7px) rotate(45deg); } .fys-burger[aria-expanded="true"] span:nth-child(2) { opacity: 0; } .fys-burger[aria-expanded="true"] span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); } /* ---------- Grilles et blocs ---------- */ .fys-grille-2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 30px 48px; } .fys-grille-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px; } .fys-grille-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; } .fys-cas { border-left: 3px solid var(--orange); padding: 2px 0 2px 20px; } .fys-cas strong { display: block; font-size: 17px; line-height: 1.45; color: var(--orange); margin-bottom: 8px; } .fys-cas p { font-size: 15px; } .fys-bloc p { font-size: 16px; } /* Carte cliquable (sur fond sombre ou clair) */ .fys .fys-carte { display: flex; flex-direction: column; padding: 26px 24px; border-radius: 10px; border: 1px solid var(--bordure); color: #FFF; transition: transform .25s, border-color .25s, box-shadow .25s; } .fys .fys-carte:hover { transform: translateY(-4px); border-color: var(--orange); } .fys-carte p { font-size: 15px; margin-bottom: 16px !important; flex: 1; } .fys-carte-pied { font-size: 14px; font-weight: 700; color: var(--orange); } .fys-carte-vedette { border-color: var(--orange) !important; background: var(--noir-2); } .fys-doux .fys-carte, .fys-clair .fys-carte { background: #FFF; border-color: var(--gris-pale); color: var(--noir); } .fys-doux .fys-carte:hover, .fys-clair .fys-carte:hover { box-shadow: 0 12px 30px rgba(28, 28, 36, .08); } .fys-etape { font-size: 13px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: var(--gris); margin-bottom: 10px; } .fys-prix { margin-top: 4px; padding-top: 14px; border-top: 1px solid var(--gris-pale); font-size: 15px; font-weight: 700; color: var(--noir); } .fys-prix span { display: block; font-size: 13px; font-weight: 400; color: var(--gris); } /* Lien vers une page pas encore publiée : rendu inactif à la génération */ .fys .fys-inactif { cursor: default; } .fys .fys-inactif:hover { transform: none; border-color: var(--bordure); box-shadow: none; } .fys-doux .fys-inactif:hover, .fys-clair .fys-inactif:hover { border-color: var(--gris-pale); } .fys-si-inactif { display: none; } .fys-inactif .fys-si-actif { display: none; } .fys-inactif .fys-si-inactif { display: inline; color: var(--gris-clair); font-weight: 400; } /* Citation / encart */ .fys-encart { border-left: 4px solid var(--orange); padding: 6px 0 6px 26px; margin-top: 44px; } .fys-encart p.fys-encart-texte { font-size: 22px; line-height: 1.5; font-weight: 700; color: var(--noir); } .fys-encart p + p { margin-top: 10px; } .fys-etiquettes { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 26px; } .fys-etiquettes span { padding: 7px 14px; border-radius: 20px; font-size: 14px; color: var(--noir); background: #FFF; border: 1px solid var(--gris-pale); } .fys-modalites { margin-top: 34px !important; padding-top: 22px; border-top: 1px solid var(--gris-pale); font-size: 15px !important; } /* Bandeau « et ensuite » */ .fys-ensuite { margin-top: 28px; padding: 24px 28px; border-radius: 10px; background: var(--noir); display: flex; align-items: center; gap: 28px; } .fys-ensuite-titre { flex: 0 0 auto; color: var(--orange); font-weight: 700; font-size: 14px; text-transform: uppercase; letter-spacing: 1px; } .fys-ensuite p { color: var(--gris-clair); font-size: 15px; } .fys-ensuite p strong { color: #FFF; } /* ---------- Hero ---------- */ .fys-hero { padding: 88px 24px 72px; text-align: center; } .fys-hero-accroche { font-size: 20px !important; line-height: 1.65; color: var(--noir) !important; margin-bottom: 16px !important; } .fys-orange { color: var(--orange); } .fys-h1-suite { display: block; margin-top: 10px; font-size: 26px; font-weight: 400; color: var(--gris); letter-spacing: 0; } .fys-hero-sous { font-size: 16px; margin-bottom: 34px !important; } .fys-preuves { display: flex; justify-content: center; flex-wrap: wrap; gap: 10px 34px; margin-top: 38px; } .fys-preuves div { font-size: 14px; color: var(--gris); } .fys-preuves strong { display: block; font-size: 26px; color: var(--noir); line-height: 1.2; } .fys-preuves-source { margin-top: 12px !important; font-size: 13px !important; color: var(--gris-clair) !important; } /* ---------- Contact final ---------- */ .fys-grille-contact { display: grid; grid-template-columns: 1.5fr 1fr; gap: 40px; align-items: center; } .fys-contact-actions { text-align: right; } .fys-prescripteur { margin-top: 36px !important; padding-top: 22px; border-top: 1px solid var(--bordure); font-size: 15px !important; } /* ---------- Pied de page ---------- */ .fys-pied { background: #15151B; padding: 56px 24px 28px; } .fys-pied-grille { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1fr; gap: 32px; } .fys-pied svg { height: 66px; width: auto; display: block; margin-bottom: 14px; } .fys-pied p { font-size: 14px; color: var(--gris-clair); } .fys-pied-titre { font-size: 13px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: #FFF; margin-bottom: 12px; } .fys-pied ul { list-style: none; margin: 0; padding: 0; } .fys-pied li { margin: 0 0 8px; padding: 0; } .fys-pied li a, .fys-pied li span { font-size: 14px; color: var(--gris-clair); } .fys-pied li a:hover { color: var(--orange); } .fys-pied-bas { max-width: 1120px; margin: 40px auto 0; padding-top: 20px; border-top: 1px solid var(--bordure); display: flex; justify-content: space-between; flex-wrap: wrap; gap: 10px; font-size: 13px; color: var(--gris-clair); } .fys-pied-bas a { color: var(--gris-clair); } .fys-pied-bas a:hover { color: var(--orange); } /* ---------- Accessibilité ---------- */ .fys a:focus-visible, .fys button:focus-visible { outline: 3px solid var(--orange); outline-offset: 3px; border-radius: 3px; } @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } .fys * { transition: none !important; } .fys .fys-cta:hover, .fys .fys-carte:hover { transform: none; } } /* ---------- Tablette ---------- */ @media (max-width: 1024px) { .fys-grille-4 { grid-template-columns: repeat(2, 1fr); } .fys-pied-grille { grid-template-columns: 1fr 1fr; } .fys-nav { gap: 20px; } } /* ---------- Mobile ---------- */ @media (max-width: 860px) { .fys-burger { display: block; } .fys-nav { display: none; position: absolute; left: 0; right: 0; top: 100%; flex-direction: column; align-items: stretch; gap: 0; background: var(--noir); border-bottom: 1px solid var(--bordure); padding: 6px 24px 20px; max-height: calc(100vh - 64px); overflow-y: auto; } .fys-nav.ouvert { display: flex; } .fys-nav > a, .fys-menu-titre { display: block; width: 100%; text-align: left; padding: 14px 0; border-bottom: 1px solid var(--bordure); } .fys-nav > a:hover, .fys-menu-titre:hover { border-bottom-color: var(--bordure); color: var(--orange) !important; } .fys-nav > a.fys-nav-cta { margin-top: 16px; text-align: center; padding: 13px; } .fys .fys-menu-titre { display: flex; justify-content: space-between; } .fys-sous-menu { position: static; display: none; min-width: 0; padding: 4px 0 8px 12px; border: 0; box-shadow: none; background: none; } .fys-sous-menu::before { display: none; } .fys-menu:hover .fys-sous-menu, .fys-menu:focus-within .fys-sous-menu { display: none; } .fys-menu.ouvert .fys-sous-menu { display: block; } .fys-menu:hover .fys-chevron { transform: translateY(-3px) rotate(45deg); } .fys-menu.ouvert .fys-chevron { transform: translateY(0) rotate(-135deg); } } @media (max-width: 768px) { .fys-section, .fys-section.fys-compact { padding: 48px 20px; } .fys-hero { padding: 56px 20px 48px; } .fys h1 { font-size: 31px; } .fys h2 { font-size: 24px; } .fys-hero-accroche { font-size: 17px !important; } .fys-h1-suite { font-size: 19px; } .fys-grille-2, .fys-grille-3, .fys-grille-4, .fys-grille-contact { grid-template-columns: 1fr; gap: 20px; } .fys-contact-actions { text-align: left; } .fys .fys-cta { display: block; text-align: center; } .fys-logo svg { height: 36px; } .fys-encart p.fys-encart-texte { font-size: 19px; } .fys-ensuite { flex-direction: column; align-items: flex-start; gap: 10px; } .fys-pied-grille { grid-template-columns: 1fr; } } /* ============================================================ COMPOSANTS UX ============================================================ */ /* ---------- Hero : motif flèche en fond ---------- */ .fys-hero { position: relative; overflow: hidden; } .fys-hero > .fys-wrap-etroit { position: relative; z-index: 1; } .fys-hero-motif { position: absolute; inset: 0; z-index: 0; pointer-events: none; background-image: linear-gradient(var(--fond-doux) 1px, transparent 1px), linear-gradient(90deg, var(--fond-doux) 1px, transparent 1px); background-size: 48px 48px; -webkit-mask-image: radial-gradient(ellipse at center, transparent 30%, #000 85%); mask-image: radial-gradient(ellipse at center, transparent 30%, #000 85%); } .fys-hero-fleche { display: block; width: 74px; height: 22px; margin: 0 auto 26px; } .fys-hero-fleche line, .fys-hero-fleche path { stroke-dasharray: 90; stroke-dashoffset: 90; animation: fys-trace 1s .2s ease-out forwards; } @keyframes fys-trace { to { stroke-dashoffset: 0; } } /* ---------- Aiguillage : choisir sa situation ---------- */ .fys-aiguillage { display: grid; grid-template-columns: 1fr 1.15fr; gap: 28px; margin-top: 34px; align-items: start; } .fys-situations { display: flex; flex-direction: column; gap: 10px; } .fys .fys-situation { display: flex; gap: 14px; align-items: flex-start; text-align: left; width: 100%; padding: 16px 18px; border-radius: 10px; cursor: pointer; background: transparent; border: 1px solid var(--bordure); font-family: inherit; color: var(--gris-clair); font-size: 16px; line-height: 1.45; transition: border-color .2s, background-color .2s, color .2s; } .fys .fys-situation:hover { border-color: var(--gris); color: #FFF; } .fys .fys-situation[aria-selected="true"] { border-color: var(--orange); background: var(--noir-2); color: #FFF; } .fys-situation-num { flex: 0 0 26px; height: 26px; border-radius: 50%; border: 1px solid var(--bordure); display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 700; color: var(--gris-clair); } .fys-situation[aria-selected="true"] .fys-situation-num { background: var(--orange); border-color: var(--orange); color: #FFF; } .fys-reponse { padding: 30px 32px; border-radius: 12px; background: #FFF; position: sticky; top: 90px; } .fys-reponse[hidden] { display: none; } .fys-reponse.fys-apparait { animation: fys-fondu .35s ease-out; } @keyframes fys-fondu { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } } .fys-reponse .fys-surtitre { margin-bottom: 8px; } .fys-reponse h3 { color: var(--noir); font-size: 22px; margin-bottom: 12px; } .fys-reponse p { color: var(--gris); } .fys-reponse p + p { margin-top: 10px; } .fys-reponse-offre { margin-top: 22px; padding-top: 18px; border-top: 1px solid var(--gris-pale); display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; } .fys-reponse-offre span { font-size: 14px; color: var(--gris); } .fys-reponse-offre span strong { display: block; font-size: 16px; color: var(--noir); } /* ---------- Frise : entre l'ESN et l'auditeur ---------- */ .fys-frise { margin-top: 40px; } .fys-frise svg { width: 100%; height: auto; display: block; overflow: visible; } .fys-frise text { font-family: Arial, Helvetica, sans-serif; } .fys-frise-fys { stroke-dasharray: 1200; stroke-dashoffset: 1200; } .fys-frise.fys-visible .fys-frise-fys { animation: fys-frise 1.8s .3s ease-out forwards; } @keyframes fys-frise { to { stroke-dashoffset: 0; } } .fys-frise-defile { overflow-x: auto; -webkit-overflow-scrolling: touch; } .fys-frise-indice { display: none; font-size: 13px; color: var(--gris-clair); margin-top: 6px; } .fys-frise-legende { display: flex; flex-wrap: wrap; gap: 8px 26px; margin-top: 16px; font-size: 14px; color: var(--gris); } .fys-frise-legende i { display: inline-block; width: 22px; height: 0; vertical-align: middle; margin-right: 8px; border-top: 3px solid; } .fys-verbes { display: grid; grid-template-columns: repeat(3, 1fr); gap: 30px; margin-top: 48px; } .fys-verbes h3 { font-size: 17px; } .fys-verbes p { font-size: 15px; } /* ---------- Parcours des offres ---------- */ .fys-parcours { position: relative; } .fys-parcours .fys-carte { position: relative; } .fys-parcours .fys-carte:not(:last-child)::after { content: ""; position: absolute; top: 46px; right: -21px; z-index: 2; width: 20px; height: 20px; background: no-repeat center / contain url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M2 10h14M11 5l5 5-5 5' stroke='%23F26B3A' stroke-width='2.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); } .fys-icone { width: 40px; height: 40px; margin-bottom: 16px; display: block; } /* ---------- Domaines ---------- */ .fys-carte .fys-icone path, .fys-carte .fys-icone rect, .fys-carte .fys-icone circle, .fys-carte .fys-icone line { stroke: var(--orange); fill: none; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; } /* ---------- Apparition au défilement ---------- */ .fys-js .fys-revele { opacity: 0; transform: translateY(18px); transition: opacity .6s ease-out, transform .6s ease-out; } .fys-js .fys-revele.fys-visible { opacity: 1; transform: none; } @media (prefers-reduced-motion: reduce) { .fys-hero-fleche line, .fys-hero-fleche path { animation: none; stroke-dashoffset: 0; } .fys-frise-fys { stroke-dashoffset: 0; animation: none !important; } .fys-js .fys-revele { opacity: 1; transform: none; } } @media (max-width: 1024px) { .fys-verbes { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 860px) { .fys-aiguillage { grid-template-columns: 1fr; } .fys-reponse { position: static; padding: 24px 22px; } } @media (max-width: 768px) { .fys-verbes { grid-template-columns: 1fr; } .fys-frise svg { min-width: 720px; } .fys-frise-indice { display: block; } .fys-parcours .fys-carte:not(:last-child)::after { top: auto; bottom: -21px; right: 50%; transform: translateX(50%) rotate(90deg); } } /* ============================================================ PAGE CONTACT ============================================================ */ .fys-hero.fys-hero-court { padding: 72px 24px 56px; } .fys-grille-reservation { display: grid; grid-template-columns: 1.35fr 1fr; gap: 56px; align-items: start; } .fys-etapes { list-style: none; margin: 18px 0 0; padding: 0; } .fys-etapes li { display: flex; gap: 18px; margin: 0 0 26px; padding: 0; } .fys-etapes-num { flex: 0 0 38px; height: 38px; border-radius: 50%; background: var(--noir); color: #FFF; font-weight: 700; font-size: 16px; display: flex; align-items: center; justify-content: center; } .fys-etapes h3 { color: var(--noir); font-size: 18px; margin-bottom: 4px; } .fys-reservation { background: var(--noir); border-radius: 14px; padding: 34px 32px; position: sticky; top: 90px; text-align: center; box-shadow: 0 20px 40px rgba(28, 28, 36, .15); } .fys-reservation-icone { width: 46px; height: 46px; margin: 0 auto 14px; display: block; stroke: var(--orange); fill: none; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; } .fys-reservation h3 { color: #FFF; font-size: 22px; margin-bottom: 4px; } .fys-reservation-sous { color: var(--gris-clair) !important; margin-bottom: 24px !important; } .fys .fys-cta-large { display: block; font-size: 18px; padding: 17px 24px; } .fys-reservation-note { font-size: 13px !important; color: var(--gris-clair) !important; margin-top: 14px !important; line-height: 1.55; } .fys-reservation-note strong { color: #FFF; } .fys-reservation-alt { margin-top: 26px; padding-top: 22px; border-top: 1px solid var(--bordure); } .fys-reservation-alt-titre { color: #FFF !important; font-weight: 700; font-size: 15px !important; margin-bottom: 6px !important; } .fys-reservation-zone { font-size: 13px !important; color: var(--gris-clair) !important; margin-top: 12px !important; } .fys-faq { margin-top: 22px; } .fys-faq details { border-bottom: 1px solid var(--gris-pale); } .fys-faq summary { list-style: none; cursor: pointer; padding: 20px 40px 20px 0; position: relative; font-size: 17px; font-weight: 700; color: var(--noir); } .fys-faq summary::-webkit-details-marker { display: none; } .fys-faq summary::after { content: ""; position: absolute; right: 8px; top: 26px; width: 9px; height: 9px; border-right: 2px solid var(--orange); border-bottom: 2px solid var(--orange); transform: rotate(45deg); transition: transform .2s; } .fys-faq details[open] summary::after { transform: translateY(4px) rotate(-135deg); } .fys-faq summary:hover { color: var(--orange); } .fys-faq details p { padding: 0 0 20px; } .fys-prescripteur-clair { margin-top: 40px !important; font-size: 15px !important; } @media (max-width: 860px) { .fys-grille-reservation { grid-template-columns: 1fr; gap: 36px; } .fys-reservation { position: static; padding: 28px 22px; } } /* ============================================================ PAGE DIAGNOSTIC CYBER ============================================================ */ .fys-domaines { gap: 16px; } .fys-domaine { padding: 22px 22px 20px; border-radius: 10px; border: 1px solid var(--bordure); background: var(--noir-2); transition: border-color .25s; } .fys-domaine:hover { border-color: var(--orange); } .fys-domaine-num { display: block; font-size: 13px; font-weight: 700; color: var(--orange); letter-spacing: 1px; margin-bottom: 8px; } .fys-domaine h3 { color: #FFF; font-size: 17px; margin-bottom: 10px; } .fys-domaine-q { font-size: 15px !important; font-style: italic; color: var(--gris-clair) !important; } .fys-domaines-note { margin-top: 26px !important; font-size: 13px !important; } .fys-grille-livrables { display: grid; grid-template-columns: 1fr 1.05fr; gap: 48px; align-items: start; margin-top: 10px; } .fys-livrables { list-style: none; margin: 0; padding: 0; } .fys-livrables li { position: relative; margin: 0 0 22px; padding: 0 0 0 34px; font-size: 16px; line-height: 1.6; color: var(--gris); } .fys-livrables li::before { content: ""; position: absolute; left: 0; top: 4px; width: 20px; height: 20px; background: no-repeat center / contain url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M2 10h14M11 5l5 5-5 5' stroke='%23F26B3A' stroke-width='2.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); } .fys-livrables strong { display: block; font-size: 17px; color: var(--noir); margin-bottom: 2px; } .fys-livrable-fort { background: var(--fond-doux); border-radius: 8px; padding: 14px 16px 14px 50px !important; } .fys-livrable-fort::before { left: 16px !important; top: 18px !important; } .fys-rapport { margin: 0; padding: 24px 26px; border-radius: 14px; background: #FFF; border: 1px solid var(--gris-pale); box-shadow: 0 24px 48px rgba(28, 28, 36, .10); position: sticky; top: 90px; } .fys-rapport-entete { display: flex; justify-content: space-between; align-items: center; margin-bottom: 18px; font-size: 13px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: var(--gris); } .fys-rapport-fictif { background: var(--fond-doux); border: 1px dashed var(--gris-clair); color: var(--gris); padding: 3px 10px; border-radius: 12px; font-size: 11px; } .fys-rapport-score { display: flex; align-items: center; gap: 20px; } .fys-rapport-note { font-size: 16px; color: var(--gris); white-space: nowrap; } .fys-rapport-note strong { font-size: 44px; color: var(--noir); line-height: 1; } .fys-rapport-echelle { flex: 1; } .fys-rapport-barre { position: relative; height: 8px; border-radius: 4px; background: linear-gradient(90deg, #D9534F 0%, #D9534F 40%, #F26B3A 40%, #F26B3A 60%, #E8B547 60%, #E8B547 75%, #7DB46C 75%, #7DB46C 90%, #4A9A5C 90%); } .fys-rapport-barre i { position: absolute; top: -5px; width: 4px; height: 18px; margin-left: -2px; background: var(--noir); border-radius: 2px; } .fys-rapport-niveaux { display: flex; justify-content: space-between; margin-top: 6px; font-size: 11px; color: var(--gris-clair); } .fys-rapport-niveaux .actif { color: var(--noir); font-weight: 700; } .fys-radar { display: block; width: 100%; height: auto; margin: 10px 0 4px; } .fys-radar-grille { fill: none; stroke: var(--gris-pale); stroke-width: 1; } .fys-radar-axe { stroke: var(--gris-pale); stroke-width: 1; } .fys-radar-valeur { fill: rgba(242, 107, 58, .18); stroke: var(--orange); stroke-width: 2.5; stroke-linejoin: round; } .fys-radar-libelles text { font-family: Arial, Helvetica, sans-serif; font-size: 13px; fill: var(--gris); } .fys-rapport-constats { list-style: none; margin: 4px 0 0; padding: 14px 0 0; border-top: 1px solid var(--gris-pale); } .fys-rapport-constats li { display: flex; gap: 10px; align-items: baseline; margin: 0 0 9px; padding: 0; font-size: 14px; line-height: 1.45; color: var(--noir); } .fys-rapport-constats li span { flex: 0 0 82px; text-align: center; font-size: 11px; font-weight: 700; padding: 2px 0; border-radius: 10px; } .fys-pastille-critique { background: #FBE3E2; color: #B23B37; } .fys-pastille-ameliorer { background: #FDEBDD; color: #B4531F; } .fys-pastille-ok { background: #E3F1E6; color: #3B7A4A; } .fys-prix-carte { background: var(--fond-doux); border-radius: 14px; padding: 32px 30px; border-top: 4px solid var(--orange); } .fys-prix-montant { font-size: 30px !important; font-weight: 700; color: var(--noir) !important; margin: 4px 0 10px !important; } .fys-prix-garanties { font-size: 14px !important; margin: 14px 0 22px !important; color: var(--noir) !important; } @media (max-width: 860px) { .fys-grille-livrables { grid-template-columns: 1fr; gap: 32px; } .fys-rapport { position: static; padding: 20px 18px; } } @media (max-width: 1024px) { .fys-domaines.fys-grille-3 { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 768px) { .fys-domaines.fys-grille-3 { grid-template-columns: 1fr; } .fys-rapport-note strong { font-size: 36px; } } /* ============================================================ PAGE RSSI À TEMPS PARTAGÉ ============================================================ */ .fys-missions { gap: 34px 40px; } .fys-mission .fys-icone path, .fys-mission .fys-icone circle, .fys-mission .fys-icone line { stroke: var(--orange); fill: none; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; } .fys-mission h3 { color: var(--noir); } .fys-mission p { font-size: 15px; } .fys-annee { list-style: none; margin: 10px 0 0; padding: 0; display: grid; grid-template-columns: repeat(4, 1fr); gap: 0; position: relative; } .fys-annee::before { content: ""; position: absolute; left: 0; right: 0; top: 9px; height: 3px; background: linear-gradient(90deg, var(--orange), var(--orange) 92%, transparent); } .fys-annee li { position: relative; margin: 0; padding: 34px 22px 0 0; } .fys-annee li::before { content: ""; position: absolute; top: 2px; left: 0; width: 17px; height: 17px; border-radius: 50%; background: #FFF; border: 3px solid var(--orange); box-sizing: border-box; } .fys-annee-quand { display: block; font-size: 13px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: var(--orange); margin-bottom: 6px; } .fys-annee h3 { color: var(--noir); font-size: 18px; margin-bottom: 6px; } .fys-annee p { font-size: 15px; } .fys-comparatif-defile { overflow-x: auto; margin-top: 14px; -webkit-overflow-scrolling: touch; } .fys-comparatif { width: 100%; min-width: 680px; border-collapse: separate; border-spacing: 0; font-size: 15px; } .fys-comparatif th, .fys-comparatif td { text-align: left; padding: 16px 18px; border-bottom: 1px solid var(--gris-pale); vertical-align: top; color: var(--gris); line-height: 1.5; font-family: inherit; } .fys-comparatif thead th { font-size: 15px; font-weight: 700; color: var(--noir); border-bottom: 2px solid var(--gris-pale); } .fys-comparatif tbody th { font-weight: 700; color: var(--noir); width: 18%; } .fys-comparatif .fys-comparatif-fys { background: #FFF4EF; color: var(--noir); font-weight: 700; } .fys-comparatif thead .fys-comparatif-fys { background: var(--orange); color: #FFF; border-radius: 8px 8px 0 0; border-bottom-color: var(--orange); } .fys-comparatif-note { margin-top: 22px !important; font-size: 16px !important; color: var(--noir) !important; max-width: 760px; } .fys-visuellement-cache { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; } .fys-tarifs { align-items: stretch; margin-top: 8px; } .fys-tarif { position: relative; padding: 30px 26px 26px; border-radius: 12px; border: 1px solid var(--bordure); background: var(--noir-2); display: flex; flex-direction: column; } .fys-tarif h3 { color: #FFF; font-size: 21px; margin-bottom: 2px; } .fys-tarif-rythme { color: var(--orange) !important; font-weight: 700; font-size: 15px !important; } .fys-tarif-prix { margin: 16px 0 12px !important; font-size: 36px !important; font-weight: 700; color: #FFF !important; line-height: 1; } .fys-tarif-prix span { font-size: 14px; font-weight: 400; color: var(--gris-clair); margin-left: 6px; } .fys-tarif-pour { font-size: 14px !important; min-height: 66px; } .fys-tarif ul { list-style: none; margin: 18px 0 0; padding: 18px 0 0; border-top: 1px solid var(--bordure); } .fys-tarif li { position: relative; margin: 0 0 9px; padding: 0 0 0 22px; font-size: 14px; color: var(--gris-pale); } .fys-tarif li::before { content: ""; position: absolute; left: 2px; top: 4px; width: 10px; height: 6px; border-left: 2px solid var(--orange); border-bottom: 2px solid var(--orange); transform: rotate(-45deg); } .fys-tarif-vedette { border: 2px solid var(--orange); background: #2B2B37; transform: translateY(-8px); } .fys-tarif-badge { position: absolute; top: -13px; left: 26px; background: var(--orange); color: #FFF; font-size: 12px; font-weight: 700; padding: 4px 12px; border-radius: 12px; letter-spacing: .3px; } .fys-ensuite.fys-ensuite-clair { background: var(--noir-2); border: 1px solid var(--bordure); margin-top: 34px; } @media (max-width: 1024px) { .fys-annee { grid-template-columns: repeat(2, 1fr); row-gap: 30px; } .fys-annee::before { display: none; } } @media (max-width: 768px) { .fys-annee { grid-template-columns: 1fr; } .fys-tarif-vedette { transform: none; margin-top: 10px; } .fys-tarif-pour { min-height: 0; } } /* ============================================================ PAGE INTÉGRATION ============================================================ */ .fys-etiquettes.fys-etiquettes-centre { justify-content: center; margin-top: 32px; } .fys-etiquettes-centre span { background: var(--fond-doux); } .fys-chantiers { gap: 22px; align-items: stretch; } .fys-chantier { display: flex; flex-direction: column; padding: 28px 26px; border-radius: 12px; border: 1px solid var(--gris-pale); border-top: 4px solid var(--orange); background: #FFF; } .fys-chantier-num { font-size: 12px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: var(--gris); margin-bottom: 8px; } .fys-chantier h3 { color: var(--noir); font-size: 20px; } .fys-chantier-promesse { font-size: 16px !important; color: var(--noir) !important; font-style: italic; margin-bottom: 16px !important; } .fys-chantier ul { list-style: none; margin: 0 0 16px; padding: 0; flex: 1; } .fys-chantier li { position: relative; margin: 0 0 8px; padding: 0 0 0 20px; font-size: 15px; color: var(--gris); } .fys-chantier li::before { content: ""; position: absolute; left: 1px; top: 5px; width: 9px; height: 5px; border-left: 2px solid var(--orange); border-bottom: 2px solid var(--orange); transform: rotate(-45deg); } .fys-chantier-tech { font-size: 13px !important; color: var(--gris) !important; background: var(--fond-doux); border-radius: 6px; padding: 10px 12px; margin-bottom: 14px !important; } .fys-chantier .fys-lien { font-size: 15px; } .fys-atelier { margin-top: 30px; padding: 28px 30px; border-radius: 12px; background: var(--noir); display: grid; grid-template-columns: 1fr; gap: 10px; } .fys-atelier h3 { color: #FFF; font-size: 20px; } .fys-atelier p { color: var(--gris-clair); } .fys-bases { margin-top: 24px !important; font-size: 15px !important; } .fys-formats { gap: 24px; } .fys-format { background: #FFF; border-radius: 12px; padding: 30px 28px; border: 1px solid var(--gris-pale); } .fys-format .fys-icone rect, .fys-format .fys-icone line, .fys-format .fys-icone path, .fys-format .fys-icone circle { stroke: var(--orange); fill: none; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; } .fys-format h3 { color: var(--noir); font-size: 20px; } /* ============================================================ PAGE PRESCRIPTEURS ============================================================ */ .fys h3.fys-sous-titre-sombre { color: var(--orange); font-size: 18px; margin: 8px 0 0; } .fys-annee-etapes { margin-top: 20px; } .fys-engagements { gap: 30px 48px; margin-top: 10px; } .fys-engagement { display: flex; gap: 18px; align-items: flex-start; } .fys-engagement .fys-icone { flex: 0 0 40px; margin: 2px 0 0; } .fys-engagement .fys-icone path, .fys-engagement .fys-icone circle { stroke: var(--orange); fill: none; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; } .fys-engagement h3 { color: var(--noir); } .fys-prescripteur-mail { margin-top: 14px !important; font-size: 15px !important; } .fys-contact-actions .fys-reservation-note { text-align: right; margin-top: 10px !important; } @media (max-width: 768px) { .fys-contact-actions .fys-reservation-note { text-align: left; } } /* ============================================================ PAGES PILIERS ============================================================ */ .fys-cas-reel { margin: 0; padding: 34px 36px; border-radius: 14px; background: var(--fond-doux); border-left: 5px solid var(--orange); } .fys-cas-reel h2 { font-size: 26px; margin-bottom: 14px; } .fys-cas-reel p { font-size: 17px !important; line-height: 1.7; color: var(--noir) !important; } .fys-cas-reel p + p { margin-top: 10px !important; } .fys-cas-lecon { margin-top: 18px !important; padding-top: 16px; border-top: 1px solid var(--gris-pale); font-weight: 700; color: var(--orange) !important; } .fys-mesures { gap: 20px; } .fys-mesure { padding: 24px 22px; border-radius: 12px; border: 1px solid var(--gris-pale); background: #FFF; display: flex; flex-direction: column; transition: border-color .25s, box-shadow .25s; } .fys-mesure:hover { border-color: var(--orange); box-shadow: 0 12px 28px rgba(28, 28, 36, .07); } .fys-mesure-num { font-size: 13px; font-weight: 700; color: var(--orange); letter-spacing: 1px; margin-bottom: 8px; } .fys-mesure h3 { color: var(--noir); font-size: 18px; } .fys-mesure p { font-size: 15px; flex: 1; } .fys-mesure p.fys-mesure-tech { flex: 0 0 auto; margin-top: 14px !important; font-size: 13px !important; color: var(--gris) !important; background: var(--fond-doux); border-radius: 6px; padding: 8px 10px; } .fys-article { margin-top: 6px; } .fys-article p { font-size: 17px !important; line-height: 1.75; color: var(--noir) !important; } .fys-article p + p, .fys-article ol + p { margin-top: 16px !important; } .fys-article-etapes { margin: 16px 0 0; padding-left: 22px; } .fys-article-etapes li { margin: 0 0 10px; font-size: 17px; line-height: 1.6; color: var(--noir); padding-left: 4px; } .fys-article-etapes li::marker { color: var(--orange); font-weight: 700; } /* Auto-diagnostic */ .fys-quiz { margin-top: 26px; display: grid; grid-template-columns: 1.4fr 1fr; gap: 28px; align-items: start; } .fys-quiz ul { list-style: none; margin: 0; padding: 0; } .fys-quiz li { margin: 0 0 10px; padding: 0; } .fys-quiz label { display: flex; gap: 14px; align-items: flex-start; cursor: pointer; padding: 14px 16px; border-radius: 10px; border: 1px solid var(--bordure); color: var(--gris-clair); font-size: 15px; line-height: 1.5; transition: border-color .2s, background-color .2s, color .2s; } .fys-quiz label:hover { border-color: var(--gris); color: #FFF; } .fys-quiz input { position: absolute; opacity: 0; width: 1px; height: 1px; } .fys-quiz-case { flex: 0 0 22px; height: 22px; border-radius: 6px; border: 2px solid var(--gris); position: relative; margin-top: 1px; transition: background-color .2s, border-color .2s; } .fys-quiz input:checked + .fys-quiz-case { background: var(--orange); border-color: var(--orange); } .fys-quiz input:checked + .fys-quiz-case::after { content: ""; position: absolute; left: 6px; top: 2px; width: 6px; height: 11px; border-right: 2.5px solid #FFF; border-bottom: 2.5px solid #FFF; transform: rotate(45deg); } .fys-quiz input:checked ~ span:last-child { color: #FFF; } .fys-quiz input:focus-visible + .fys-quiz-case { outline: 3px solid var(--orange); outline-offset: 3px; } .fys-quiz-resultat { position: sticky; top: 90px; padding: 24px 24px; border-radius: 12px; background: #FFF; } .fys-quiz-barre { height: 10px; border-radius: 5px; background: var(--gris-pale); overflow: hidden; } .fys-quiz-barre i { display: block; height: 100%; width: 0; background: var(--orange); transition: width .35s ease-out; } .fys-quiz-texte { margin: 16px 0 18px !important; font-size: 16px !important; color: var(--noir) !important; line-height: 1.55; } .fys-quiz-texte strong { display: block; font-size: 22px; margin-bottom: 4px; } .fys .fys-quiz-cta { display: block; text-align: center; font-size: 16px; padding: 13px 20px; } @media (max-width: 860px) { .fys-quiz { grid-template-columns: 1fr; } .fys-quiz-resultat { position: static; } } @media (max-width: 1024px) { .fys-mesures.fys-grille-3 { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 768px) { .fys-mesures.fys-grille-3 { grid-template-columns: 1fr; } .fys-cas-reel { padding: 26px 22px; } } /* ============================================================ ARTICLES DU BANC D'ESSAI (dans un billet de blog Zoho) ============================================================ */ .fys-billet { max-width: 760px; margin: 0 auto; } .fys-billet p { font-size: 17px; line-height: 1.75; color: #33333D; margin: 0 0 16px; } .fys-billet h2 { font-size: 26px; margin: 40px 0 14px; color: var(--noir); } .fys-billet h3 { font-size: 17px; color: var(--noir); margin: 0 0 6px; } .fys-billet code { font-family: Menlo, Consolas, monospace; font-size: 15px; background: var(--fond-doux); padding: 1px 6px; border-radius: 4px; color: var(--noir); } .fys-billet a:not(.fys-cta) { color: var(--orange); font-weight: 700; } .fys-billet-chapo p { font-size: 20px !important; line-height: 1.6; color: var(--noir) !important; } .fys-billet-bref { margin: 26px 0 10px; padding: 22px 26px; border-radius: 12px; background: var(--noir); } .fys-billet-bref-titre { color: var(--orange) !important; font-weight: 700; font-size: 13px !important; letter-spacing: 1px; text-transform: uppercase; margin-bottom: 10px !important; } .fys-billet-bref ul { margin: 0; padding-left: 20px; } .fys-billet-bref li { color: var(--gris-pale); font-size: 16px; line-height: 1.6; margin-bottom: 8px; } .fys-billet-bref li strong { color: #FFF; } .fys-billet-schema { display: grid; gap: 10px; margin: 22px 0 22px; } .fys-billet-etape { display: flex; align-items: center; gap: 14px; padding: 14px 18px; border-radius: 10px; background: var(--fond-doux); font-size: 16px; color: var(--noir); border-left: 4px solid var(--gris-clair); } .fys-billet-etape p { margin: 0 !important; font-size: 16px !important; color: var(--noir) !important; } .fys-billet-etape span { flex: 0 0 28px; height: 28px; border-radius: 50%; background: var(--noir); color: #FFF; font-weight: 700; font-size: 14px; display: flex; align-items: center; justify-content: center; } .fys-billet-ok { border-left-color: #4A9A5C; } .fys-billet-ko { border-left-color: #D9534F; background: #FDF1F0; } .fys-billet-note { margin: 22px 0; padding: 18px 22px; border-radius: 10px; border: 1px dashed var(--gris-clair); } .fys-billet-note p { margin: 0 !important; font-size: 16px !important; } .fys-billet-liste { margin: 0 0 16px; padding-left: 22px; } .fys-billet-liste li { font-size: 17px; line-height: 1.7; color: #33333D; margin-bottom: 12px; } .fys-billet-liste li::marker { color: var(--orange); font-weight: 700; } .fys-billet-mesures { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin: 18px 0 10px; } .fys-billet-mesures > div { padding: 18px 20px; border-radius: 10px; border: 1px solid var(--gris-pale); border-top: 3px solid var(--orange); } .fys-billet-mesures p { font-size: 15px !important; margin: 0 !important; color: var(--gris) !important; } .fys-billet-fys { margin: 36px 0 20px; padding: 26px 28px; border-radius: 12px; background: var(--fond-doux); border-left: 5px solid var(--orange); } .fys-billet-fys-titre { font-weight: 700; color: var(--orange) !important; font-size: 13px !important; letter-spacing: 1px; text-transform: uppercase; } .fys-billet-signature { font-size: 15px !important; color: var(--gris) !important; border-top: 1px solid var(--gris-pale); padding-top: 16px; } @media (max-width: 700px) { .fys-billet-mesures { grid-template-columns: 1fr; } .fys-billet h2 { font-size: 22px; } } </style> p </div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Tue, 27 Oct 2026 23:11:54 +0100</pubDate></item></channel></rss>