This commit is contained in:
parent
f63128a68f
commit
ca60e3088d
11 changed files with 557 additions and 148 deletions
20
config.yml
20
config.yml
|
|
@ -34,14 +34,12 @@ languages:
|
||||||
DefaultDescription: "L'interface qui vous rend heureux de gérer vos noms de domaines."
|
DefaultDescription: "L'interface qui vous rend heureux de gérer vos noms de domaines."
|
||||||
|
|
||||||
others_links:
|
others_links:
|
||||||
- text: "S'inscrire"
|
|
||||||
href: "//app.happydomain.org/register"
|
|
||||||
class: "btn btn-secondary"
|
|
||||||
icon: "bi-person-plus-fill"
|
|
||||||
- text: "S'identifier"
|
- text: "S'identifier"
|
||||||
href: "//app.happydomain.org/login"
|
href: "//app.happydomain.org/login"
|
||||||
class: "btn btn-outline-primary"
|
class: "btn btn-link text-dark"
|
||||||
icon: "bi-person-check-fill"
|
- text: "Essayer en ligne →"
|
||||||
|
href: "//try.happydomain.org/"
|
||||||
|
class: "btn btn-primary btn-sm"
|
||||||
|
|
||||||
carousel:
|
carousel:
|
||||||
- title: "domains-lists"
|
- title: "domains-lists"
|
||||||
|
|
@ -90,14 +88,12 @@ params:
|
||||||
tryit: "https://try.happydomain.org/"
|
tryit: "https://try.happydomain.org/"
|
||||||
|
|
||||||
others_links:
|
others_links:
|
||||||
- text: "Sign up"
|
|
||||||
href: "//app.happydomain.org/register"
|
|
||||||
class: "btn btn-secondary"
|
|
||||||
icon: "bi-person-plus-fill"
|
|
||||||
- text: "Sign in"
|
- text: "Sign in"
|
||||||
href: "//app.happydomain.org/login"
|
href: "//app.happydomain.org/login"
|
||||||
class: "btn btn-outline-primary"
|
class: "btn btn-link text-dark"
|
||||||
icon: "bi-person-check-fill"
|
- text: "Try it online →"
|
||||||
|
href: "//try.happydomain.org/"
|
||||||
|
class: "btn btn-primary btn-sm"
|
||||||
|
|
||||||
carousel:
|
carousel:
|
||||||
- title: "domains-lists"
|
- title: "domains-lists"
|
||||||
|
|
|
||||||
|
|
@ -8,12 +8,12 @@ id = "registrar"
|
||||||
en = "Choose your provider"
|
en = "Choose your provider"
|
||||||
|
|
||||||
[features.title]
|
[features.title]
|
||||||
fr = "Gérer les zones hébergées chez des prestataires d'hébergement"
|
fr = "Gérer les zones de votre fournisseur de noms de domaine"
|
||||||
en = "Manage your zones hosted on hosting providers"
|
en = "Manage zones at your registrar"
|
||||||
|
|
||||||
[features.content]
|
[features.content]
|
||||||
fr = "happyDomain peut regrouper les domaines que vous possédez dans différents bureaux d'enregistrement. Nous supportons aujourd'hui plus de 55 fournisseurs tels que OVH, Gandi, DigitalOcean, ..."
|
fr = "Connectez OVH, Gandi, DigitalOcean, Cloudflare et plus de 50 autres. happyDomain lit, édite et synchronise les zones pour vous."
|
||||||
en = "happyDomain can group the domains you own in different registrars. We currently support 55+ providers like OVH, Gandi, DigitalOcean, ..."
|
en = "Connect OVH, Gandi, DigitalOcean, Cloudflare and 50+ more. happyDomain reads, edits and synchronizes their zones for you."
|
||||||
|
|
||||||
[features.link]
|
[features.link]
|
||||||
link = "https://app.happydomain.org/providers/features"
|
link = "https://app.happydomain.org/providers/features"
|
||||||
|
|
@ -32,16 +32,16 @@ id = "dynamicDNS"
|
||||||
[features.img]
|
[features.img]
|
||||||
src = "/img/screenshots/features/dyndns.png"
|
src = "/img/screenshots/features/dyndns.png"
|
||||||
[features.img.alt]
|
[features.img.alt]
|
||||||
fr = "Une interface au dessus de votre serveur existant"
|
fr = "Gérez votre propre serveur de noms"
|
||||||
en = "An interface on top of your existing server"
|
en = "Drive your own name server"
|
||||||
|
|
||||||
[features.title]
|
[features.title]
|
||||||
fr = "Gérer les zones de vos serveurs BIND, Knot, PowerDNS, ..."
|
fr = "Gérer les zones de vos serveurs BIND, Knot, PowerDNS, ..."
|
||||||
en = "Manage your zones backed by BIND, Knot, PowerDNS, ..."
|
en = "Manage your zones backed by BIND, Knot, PowerDNS, ..."
|
||||||
|
|
||||||
[features.content]
|
[features.content]
|
||||||
fr = "happyDomain peut s'utiliser comme interface au dessus d'un serveur faisant autorité. Il utilise pour cela le Dynamic DNS (RFC 2136), implémenté dans de nombreux serveurs."
|
fr = "Utilisez happyDomain comme interface conviviale devant BIND, Knot ou PowerDNS via le DNS dynamique (RFC 2136). Implémenté dans de nombreux serveurs faisant autorité."
|
||||||
en = "happyDomain can be used as an interface above an authoritative name server. It uses the Dynamic DNS (RFC 2136), implemented in many server software."
|
en = "Use happyDomain as a friendly UI in front of BIND, Knot or PowerDNS via Dynamic DNS (RFC 2136). Implemented in many authoritative servers."
|
||||||
|
|
||||||
[features.link]
|
[features.link]
|
||||||
link = "https://help.happydomain.org/fr/deploy/"
|
link = "https://help.happydomain.org/fr/deploy/"
|
||||||
|
|
@ -59,12 +59,12 @@ id = "diff"
|
||||||
en = "Sample diff"
|
en = "Sample diff"
|
||||||
|
|
||||||
[features.title]
|
[features.title]
|
||||||
fr = "Visualiser clairement les changements"
|
fr = "Visualiser chaque changement"
|
||||||
en = "Clearly visualize changes"
|
en = "Visualize every change"
|
||||||
|
|
||||||
[features.content]
|
[features.content]
|
||||||
fr = "Avant de publier vos modifications, happyDomain vous montre quels seront exactement les changements (ajouts, modifications, suppressions, ...) qui seront effectués sur la zone. C'est le bon moment pour se relire."
|
fr = "Avant de publier, vérifiez précisément quels enregistrements seront ajoutés, modifiés ou supprimés. Vous pouvez relire attentivement les changements avant d'appuyer sur le bouton."
|
||||||
en = "Before publishing your changes, happyDomain shows you exactly what changes (additions, modifications, deletions, ...) will be made to your zone. This is a good time to reread."
|
en = "Before publishing, see exactly which records will be added, modified or deleted. Read-through your zone before you press the button."
|
||||||
|
|
||||||
|
|
||||||
[[features]]
|
[[features]]
|
||||||
|
|
@ -77,8 +77,8 @@ id = "resolver"
|
||||||
en = "DNS Resolver"
|
en = "DNS Resolver"
|
||||||
|
|
||||||
[features.title]
|
[features.title]
|
||||||
fr = "Tester ou déboguer votre zone en ligne"
|
fr = "Tester et déboguer votre zone"
|
||||||
en = "Test or debug your zone online"
|
en = "Test & debug your zone"
|
||||||
|
|
||||||
[features.content]
|
[features.content]
|
||||||
fr = "happyDomain intégre un résolveur DNS simple d'utilisation, qui vous permet de vous connecter sans effort à une cinquantaine de résolveurs publics. Vous pouvez facilement voir la propagation de vos modifications."
|
fr = "happyDomain intégre un résolveur DNS simple d'utilisation, qui vous permet de vous connecter sans effort à une cinquantaine de résolveurs publics. Vous pouvez facilement voir la propagation de vos modifications."
|
||||||
|
|
@ -90,29 +90,6 @@ id = "resolver"
|
||||||
en = "I want to test this now!"
|
en = "I want to test this now!"
|
||||||
|
|
||||||
|
|
||||||
[[features]]
|
|
||||||
id = "rest"
|
|
||||||
|
|
||||||
[features.img]
|
|
||||||
src = "/img/screenshots/features/rest.png"
|
|
||||||
[features.img.alt]
|
|
||||||
fr = "API REST"
|
|
||||||
en = "REST API"
|
|
||||||
|
|
||||||
[features.title]
|
|
||||||
fr = "Utiliser happyDomain comme API REST"
|
|
||||||
en = "Use happyDomain as a API REST"
|
|
||||||
|
|
||||||
[features.content]
|
|
||||||
fr = "happyDomain expose une API REST que vous pouvez utiliser pour automatiser des tâches de création de sous-domaine à la volée, par exemple dans votre système de déploiement continu."
|
|
||||||
en = "happyDomain exposes a REST API that you can use to automate sub-domain creation tasks on the fly, for example in your continuous deployment system."
|
|
||||||
|
|
||||||
[features.link]
|
|
||||||
link = "https://app.happydomain.org/swagger/index.html"
|
|
||||||
fr = "Montrez-moi l'API !"
|
|
||||||
en = "Show me the API!"
|
|
||||||
|
|
||||||
|
|
||||||
[[features]]
|
[[features]]
|
||||||
id = "history"
|
id = "history"
|
||||||
|
|
||||||
|
|
@ -124,8 +101,31 @@ id = "history"
|
||||||
|
|
||||||
[features.title]
|
[features.title]
|
||||||
fr = "Garder une trace des modifications"
|
fr = "Garder une trace des modifications"
|
||||||
en = "Keeping track of changes"
|
en = "Versioned, undoable"
|
||||||
|
|
||||||
[features.content]
|
[features.content]
|
||||||
fr = "happyDomain ne se contente pas de vous montrer votre zone telle qu'elle est publiée. Chaque modification est enregistrée afin de garder un historique de vos changements. En cas de problème, revenez à une version précédente en 2 clics."
|
fr = "Chaque modification publiée est enregistrée. Revenez à n'importe quelle version précédente de votre zone en deux clics. Auditez qui a effectué quelles modifications."
|
||||||
en = "happyDomain doesn't just show you your zone as it is published. Every modification is saved to keep a history of your changes. In case of problem, go back to a previous version in 2 clicks."
|
en = "Every published change is saved. Roll back to any previous version of your zone in two clicks. Audit who did what."
|
||||||
|
|
||||||
|
|
||||||
|
[[features]]
|
||||||
|
id = "rest"
|
||||||
|
|
||||||
|
[features.img]
|
||||||
|
src = "/img/screenshots/features/rest.png"
|
||||||
|
[features.img.alt]
|
||||||
|
fr = "API REST"
|
||||||
|
en = "REST API"
|
||||||
|
|
||||||
|
[features.title]
|
||||||
|
fr = "API REST, scripter vos domaines"
|
||||||
|
en = "REST API, ready to script"
|
||||||
|
|
||||||
|
[features.content]
|
||||||
|
fr = "Automatisez la création de domaines à la volée : idéal pour le déploiement continu et la mise en place de locataires."
|
||||||
|
en = "Automate domain creation tasks on the fly: perfect for continuous deployment and tenant provisioning."
|
||||||
|
|
||||||
|
[features.link]
|
||||||
|
link = "https://app.happydomain.org/swagger/index.html"
|
||||||
|
fr = "Montrez-moi l'API !"
|
||||||
|
en = "Show me the API!"
|
||||||
|
|
|
||||||
|
|
@ -45,12 +45,15 @@
|
||||||
- id: press-kit
|
- id: press-kit
|
||||||
translation: "Press Kit"
|
translation: "Press Kit"
|
||||||
|
|
||||||
- id: features-title
|
- id: features-eyebrow
|
||||||
translation: "Main features"
|
translation: "Main features"
|
||||||
|
|
||||||
|
- id: features-title
|
||||||
|
translation: "Everything DNS, calm and connected."
|
||||||
|
|
||||||
- id: features-lead
|
- id: features-lead
|
||||||
translation: |
|
translation: |
|
||||||
Find out how happyDomain can simplify your domain name management.
|
happyDomain works as a smart layer above your existing infrastructure: connecting to registrars, hosting providers and authoritative servers so you can manage them all from one place.
|
||||||
|
|
||||||
- id: features-grid-title
|
- id: features-grid-title
|
||||||
translation: What can happyDomain do for you today?
|
translation: What can happyDomain do for you today?
|
||||||
|
|
|
||||||
|
|
@ -45,9 +45,12 @@
|
||||||
- id: press-kit
|
- id: press-kit
|
||||||
translation: "Dossier de presse"
|
translation: "Dossier de presse"
|
||||||
|
|
||||||
- id: features-title
|
- id: features-eyebrow
|
||||||
translation: "Principales fonctionnalités"
|
translation: "Principales fonctionnalités"
|
||||||
|
|
||||||
|
- id: features-title
|
||||||
|
translation: "Tout le DNS, sereinement connecté."
|
||||||
|
|
||||||
- id: features-lead
|
- id: features-lead
|
||||||
translation: "Découvrez comment happyDomain peut faciliter la gestion de vos noms de domaine."
|
translation: "Découvrez comment happyDomain peut faciliter la gestion de vos noms de domaine."
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,10 +13,14 @@
|
||||||
|
|
||||||
{{ partial "jumbo.html" . }}
|
{{ partial "jumbo.html" . }}
|
||||||
|
|
||||||
{{ partial "carousel.html" . }}
|
{{ partial "work-with.html" . }}
|
||||||
|
|
||||||
|
{{ partial "big-idea.html" . }}
|
||||||
|
|
||||||
{{ partial "features.html" . }}
|
{{ partial "features.html" . }}
|
||||||
|
|
||||||
|
{{ partial "carousel.html" . }}
|
||||||
|
|
||||||
{{ partial "discover.html" . }}
|
{{ partial "discover.html" . }}
|
||||||
|
|
||||||
{{/* partial "testimonials.html" . */}}
|
{{/* partial "testimonials.html" . */}}
|
||||||
|
|
|
||||||
72
layouts/partials/big-idea.html
Normal file
72
layouts/partials/big-idea.html
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
<!-- ── The big idea: services not records ─────────────── -->
|
||||||
|
<section class="section section--paper" id="idea">
|
||||||
|
<div class="container">
|
||||||
|
<div class="section-head">
|
||||||
|
<span class="eyebrow"><span class="dot"></span>The big idea</span>
|
||||||
|
<h2 class="h2">Stop reading zone files.<br>Start managing services.</h2>
|
||||||
|
<p class="lede">DNS records are an implementation detail. happyDomain groups them by what they actually <em>do</em> — your email, your website, your delegation — so you can edit with intent instead of decoding RFCs.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="idea-grid">
|
||||||
|
<div class="idea-col">
|
||||||
|
<div class="idea-tag"><span class="num">A</span>Without happyDomain</div>
|
||||||
|
<h3><span class="strike">happydomain.org</span> · zone file</h3>
|
||||||
|
<pre class="zone-pre"><span class="c">; Zone: happydomain.org.</span>
|
||||||
|
<span class="c">; TTL = 3600</span>
|
||||||
|
|
||||||
|
@ IN <span class="k">SOA</span> ns1 admin 2024010101 3600 900 604800 300
|
||||||
|
@ IN <span class="k">NS</span> ns1.happydomain.org.
|
||||||
|
@ IN <span class="k">NS</span> ns2.happydomain.org.
|
||||||
|
@ IN <span class="k">A</span> <span class="v">93.184.216.34</span>
|
||||||
|
@ IN <span class="k">AAAA</span> <span class="v">2606:2800:220:1:248:1893:25c8:1946</span>
|
||||||
|
@ IN <span class="k">MX</span> 10 mail.happydomain.org.
|
||||||
|
@ IN <span class="k">TXT</span> <span class="v">"v=spf1 include:_spf.eu ~all"</span>
|
||||||
|
_dmarc IN <span class="k">TXT</span> <span class="v">"v=DMARC1; p=none; rua=…"</span>
|
||||||
|
mail IN <span class="k">A</span> <span class="v">93.184.216.40</span>
|
||||||
|
www IN <span class="k">CNAME</span> @
|
||||||
|
@ IN <span class="k">CAA</span> <span class="v">0 issue "letsencrypt.org"</span></pre>
|
||||||
|
</div>
|
||||||
|
<div class="idea-col">
|
||||||
|
<div class="idea-tag"><span class="num">B</span>With happyDomain</div>
|
||||||
|
<h3>happydomain.org · services</h3>
|
||||||
|
<div class="svc">
|
||||||
|
<div class="svc-row">
|
||||||
|
<div class="svc-l">
|
||||||
|
<div class="svc-ico"><i class="bi bi-globe2"></i></div>
|
||||||
|
<div><div class="svc-name">Website</div><div class="svc-desc">A, AAAA on @ · CNAME on www</div></div>
|
||||||
|
</div>
|
||||||
|
<div class="svc-r"><span class="svc-cnt">3</span><span class="svc-ok"><i class="bi bi-check-circle-fill"></i> OK</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="svc">
|
||||||
|
<div class="svc-row">
|
||||||
|
<div class="svc-l">
|
||||||
|
<div class="svc-ico"><i class="bi bi-envelope"></i></div>
|
||||||
|
<div><div class="svc-name">Email</div><div class="svc-desc">MX, SPF and DMARC policy</div></div>
|
||||||
|
</div>
|
||||||
|
<div class="svc-r"><span class="svc-cnt">3</span><span class="svc-ok"><i class="bi bi-check-circle-fill"></i> OK</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="svc">
|
||||||
|
<div class="svc-row">
|
||||||
|
<div class="svc-l">
|
||||||
|
<div class="svc-ico"><i class="bi bi-diagram-3"></i></div>
|
||||||
|
<div><div class="svc-name">Delegation</div><div class="svc-desc">2 nameservers</div></div>
|
||||||
|
</div>
|
||||||
|
<div class="svc-r"><span class="svc-cnt">2</span><span class="svc-ok"><i class="bi bi-check-circle-fill"></i> OK</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="svc">
|
||||||
|
<div class="svc-row">
|
||||||
|
<div class="svc-l">
|
||||||
|
<div class="svc-ico"><i class="bi bi-shield-check"></i></div>
|
||||||
|
<div><div class="svc-name">TLS / Security</div><div class="svc-desc">CAA · Let's Encrypt only</div></div>
|
||||||
|
</div>
|
||||||
|
<div class="svc-r"><span class="svc-cnt">1</span><span class="svc-ok"><i class="bi bi-check-circle-fill"></i> OK</span></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p style="font-size:12.5px; color: var(--fg-3); margin: 16px 0 0;">Same zone. Edit by intent, not by record type.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
@ -1,48 +1,11 @@
|
||||||
<section id="features" class="bg-light" style="scroll-margin-top: 2em">
|
<section id="features" class="section" style="scroll-margin-top: 2em">
|
||||||
<div class="container py-4">
|
<div class="container">
|
||||||
<div class="section-title text-center mt-5 mb-5">
|
<div class="section-head">
|
||||||
<h2 class="mb-3 display-4">{{ i18n "features-title" }}</h2>
|
<span class="eyebrow"
|
||||||
<div class="row">
|
><span class="dot"></span>{{ i18n "features-eyebrow" }}</span
|
||||||
<p
|
|
||||||
class="offset-sm-1 col-sm-10 offset-md-2 col-md-8 text-muted"
|
|
||||||
style="font-size: 1.15rem"
|
|
||||||
>
|
>
|
||||||
{{ i18n "features-lead" }}
|
<h2 class="h2">{{ i18n "features-title" }}</h2>
|
||||||
</p>
|
<p class="lede">{{ i18n "features-lead" }}</p>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="alert alert-warning my-5 d-flex">
|
|
||||||
<div class="display-2">🏗️</div>
|
|
||||||
<div class="ms-2 flex-fill">
|
|
||||||
<p class="lead">{{ i18n "features-wip-lead" }}</p>
|
|
||||||
<p>
|
|
||||||
{{ i18n "features-wip-p1-start" }}
|
|
||||||
<strong
|
|
||||||
>{{ i18n "features-wip-p1-strong" }}
|
|
||||||
<a
|
|
||||||
href="https://github.com/happyDomain/happydomain/"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener"
|
|
||||||
data-umami-event="goto-issue"
|
|
||||||
>{{ i18n "features-wip-p1-link" }}</a
|
|
||||||
>.</strong
|
|
||||||
>
|
|
||||||
{{ i18n "features-wip-p1-end" }}
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<a
|
|
||||||
href="https://feedback.happydomain.org"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener"
|
|
||||||
data-umami-event="goto-feedback"
|
|
||||||
>{{ i18n "features-wip-p2-feedback" }}</a
|
|
||||||
>
|
|
||||||
{{ i18n "features-wip-p2-start" }}
|
|
||||||
<u>{{ i18n "features-wip-p2-emph" }}</u>{{ i18n
|
|
||||||
"features-wip-p2-end" }}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row row-cols-1 row-cols-md-2 row-cols-lg-3">
|
<div class="row row-cols-1 row-cols-md-2 row-cols-lg-3">
|
||||||
|
|
@ -86,5 +49,38 @@
|
||||||
</div>
|
</div>
|
||||||
{{ end }} {{ end }}
|
{{ end }} {{ end }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="alert alert-warning mt-5 d-flex">
|
||||||
|
<div class="display-2">🏗️</div>
|
||||||
|
<div class="ms-2 flex-fill">
|
||||||
|
<p class="lead">{{ i18n "features-wip-lead" }}</p>
|
||||||
|
<p>
|
||||||
|
{{ i18n "features-wip-p1-start" }}
|
||||||
|
<strong
|
||||||
|
>{{ i18n "features-wip-p1-strong" }}
|
||||||
|
<a
|
||||||
|
href="https://github.com/happyDomain/happydomain/"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
data-umami-event="goto-issue"
|
||||||
|
>{{ i18n "features-wip-p1-link" }}</a
|
||||||
|
>.</strong
|
||||||
|
>
|
||||||
|
{{ i18n "features-wip-p1-end" }}
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<a
|
||||||
|
href="https://feedback.happydomain.org"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
data-umami-event="goto-feedback"
|
||||||
|
>{{ i18n "features-wip-p2-feedback" }}</a
|
||||||
|
>
|
||||||
|
{{ i18n "features-wip-p2-start" }}
|
||||||
|
<u>{{ i18n "features-wip-p2-emph" }}</u>{{ i18n
|
||||||
|
"features-wip-p2-end" }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
<style>
|
<style>
|
||||||
.jumbo-hero {
|
.jumbo-hero {
|
||||||
padding: 5rem 0 4rem;
|
padding: 8rem 0 5rem;
|
||||||
margin-top: -1px;
|
|
||||||
background: linear-gradient(135deg, var(--hd-accent-subtle, #f0fdf4) 0%, var(--hd-bg-canvas, white) 60%);
|
background: linear-gradient(135deg, var(--hd-accent-subtle, #f0fdf4) 0%, var(--hd-bg-canvas, white) 60%);
|
||||||
}
|
}
|
||||||
.hero-eyebrow {
|
.hero-eyebrow {
|
||||||
|
|
@ -35,7 +34,7 @@
|
||||||
}
|
}
|
||||||
.hero-meta .check { color: var(--hd-accent, #22c55e); margin-right: .25rem; }
|
.hero-meta .check { color: var(--hd-accent, #22c55e); margin-right: .25rem; }
|
||||||
/* Browser mockup */
|
/* Browser mockup */
|
||||||
.hero-stack { position: relative; padding: 0 20px 20px 0; }
|
.hero-stack { position: relative; }
|
||||||
.hero-stack .browser:last-child {
|
.hero-stack .browser:last-child {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0; right: 0;
|
bottom: 0; right: 0;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,4 @@
|
||||||
<nav
|
<nav class="navbar navbar-expand-md fixed-top" id="mainnav">
|
||||||
class="navbar navbar-expand-md sticky-top navbar-light bg-light"
|
|
||||||
id="mainnav"
|
|
||||||
>
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<a
|
<a
|
||||||
class="h1 navbar-brand d-flex align-items-top gap-2 mb-0"
|
class="h1 navbar-brand d-flex align-items-top gap-2 mb-0"
|
||||||
|
|
@ -55,7 +52,29 @@
|
||||||
</li>
|
</li>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</ul>
|
</ul>
|
||||||
<div class="d-flex">
|
<div class="d-flex align-items-center">
|
||||||
|
<div class="nav-item dropdown">
|
||||||
|
<a
|
||||||
|
class="btn btn-sm btn-outline-secondary dropdown-toggle"
|
||||||
|
href="#"
|
||||||
|
id="navbarLangDropdown"
|
||||||
|
role="button"
|
||||||
|
data-bs-toggle="dropdown"
|
||||||
|
aria-expanded="false"
|
||||||
|
>
|
||||||
|
<i class="bi bi-translate"></i> {{ .Language.Lang | upper }}
|
||||||
|
</a>
|
||||||
|
<div
|
||||||
|
class="dropdown-menu dropdown-menu-end"
|
||||||
|
aria-labelledby="navbarLangDropdown"
|
||||||
|
>
|
||||||
|
{{ range .Site.Home.AllTranslations }}
|
||||||
|
<a href="{{ .Permalink }}" class="dropdown-item">
|
||||||
|
{{ .Language }}
|
||||||
|
</a>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="nav-item nav-ext-links">
|
<div class="nav-item nav-ext-links">
|
||||||
{{ if .Site.Params.others_links }} {{ range
|
{{ if .Site.Params.others_links }} {{ range
|
||||||
.Site.Params.others_links }}
|
.Site.Params.others_links }}
|
||||||
|
|
@ -65,33 +84,13 @@
|
||||||
class="nav-icon-link {{ .class }}"
|
class="nav-icon-link {{ .class }}"
|
||||||
data-umami-event="nav-{{ .id }}"
|
data-umami-event="nav-{{ .id }}"
|
||||||
>
|
>
|
||||||
|
{{ if .icon }}
|
||||||
<i class="bi {{ .icon }}"></i>
|
<i class="bi {{ .icon }}"></i>
|
||||||
|
{{ end }}
|
||||||
{{ .text }}
|
{{ .text }}
|
||||||
</a>
|
</a>
|
||||||
{{ end }} {{ end }}
|
{{ end }} {{ end }}
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-item dropdown">
|
|
||||||
<a
|
|
||||||
class="btn btn-outline-secondary dropdown-toggle"
|
|
||||||
href="#"
|
|
||||||
id="navbarLangDropdown"
|
|
||||||
role="button"
|
|
||||||
data-bs-toggle="dropdown"
|
|
||||||
aria-expanded="false"
|
|
||||||
>
|
|
||||||
<i class="bi bi-globe"></i> {{ .Language.Lang | upper }}
|
|
||||||
</a>
|
|
||||||
<div
|
|
||||||
class="dropdown-menu dropdown-menu-end"
|
|
||||||
aria-labelledby="navbarLangDropdown"
|
|
||||||
>
|
|
||||||
{{ range .Site.Home.AllTranslations }}
|
|
||||||
<a href="{{ .Permalink }}" class="dropdown-item"
|
|
||||||
>{{ .Language.LanguageName }}</a
|
|
||||||
>
|
|
||||||
{{ end }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
18
layouts/partials/work-with.html
Normal file
18
layouts/partials/work-with.html
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
<!-- ── Trust strip ──────────────────────────────────────── -->
|
||||||
|
<section class="trust">
|
||||||
|
<div class="container trust-grid">
|
||||||
|
<div class="trust-tag"><span class="dot"></span>Works with</div>
|
||||||
|
<div class="trust-list">
|
||||||
|
<span><i class="bi bi-globe2"></i>OVH</span>
|
||||||
|
<span><i class="bi bi-leaf"></i>Gandi</span>
|
||||||
|
<span><i class="bi bi-droplet"></i>DigitalOcean</span>
|
||||||
|
<span><i class="bi bi-cloud"></i>Cloudflare</span>
|
||||||
|
<span><i class="bi bi-server"></i>Hetzner</span>
|
||||||
|
<span><i class="bi bi-tag"></i>Namecheap</span>
|
||||||
|
<span><i class="bi bi-terminal"></i>BIND</span>
|
||||||
|
<span><i class="bi bi-hdd-network"></i>Knot DNS</span>
|
||||||
|
<span><i class="bi bi-cpu"></i>PowerDNS</span>
|
||||||
|
</div>
|
||||||
|
<a class="trust-more" href="https://app.happydomain.org/providers/features" target="_blank" rel="noopener">+ 46 more →</a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
@ -1,21 +1,19 @@
|
||||||
nav.navbar {
|
nav.navbar {
|
||||||
background: var(--hd-bg-subtle);
|
background: var(--hd-bg-canvas);
|
||||||
box-shadow: 0 0px 3px 0 var(--hd-accent);
|
box-shadow: 0 0px 3px 0 var(--hd-accent);
|
||||||
border-bottom: 1px solid var(--hd-accent);
|
border-bottom: 1px solid var(--hd-accent);
|
||||||
z-index: 1024;
|
z-index: 1024;
|
||||||
transition: background 1s linear;
|
transition: background 1s linear;
|
||||||
}
|
}
|
||||||
nav.navbar.beginscroll {
|
nav.navbar.beginscroll {
|
||||||
background: linear-gradient(
|
background:
|
||||||
90deg,
|
linear-gradient(90deg, var(--hd-accent-subtle) 0%, white 100%),
|
||||||
var(--hd-accent-subtle) 0%,
|
var(--hd-accent-subtle);
|
||||||
white 150%
|
|
||||||
);
|
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
}
|
}
|
||||||
nav.navbar.scrolled {
|
nav.navbar.scrolled {
|
||||||
background: var(--hd-bg-subtle);
|
background: var(--hd-bg-canvas);
|
||||||
box-shadow: 0 0px 3px 0 var(--hd-accent);
|
box-shadow: 0 0px 3px 0 var(--hd-accent);
|
||||||
border-bottom: 1px solid var(--hd-accent);
|
border-bottom: 1px solid var(--hd-accent);
|
||||||
}
|
}
|
||||||
|
|
@ -97,23 +95,6 @@ img {
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#features .card {
|
|
||||||
background-color: var(--hd-bg-canvas);
|
|
||||||
border-radius: 10px;
|
|
||||||
padding-top: 3px;
|
|
||||||
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.05);
|
|
||||||
transition: transform 0.3s;
|
|
||||||
border-top: 4px solid var(--hd-accent);
|
|
||||||
}
|
|
||||||
|
|
||||||
#features .col:nth-child(even) .card {
|
|
||||||
border-top: 4px solid var(--hd-brand-dark);
|
|
||||||
}
|
|
||||||
|
|
||||||
#features .card:hover {
|
|
||||||
transform: translateY(-10px);
|
|
||||||
}
|
|
||||||
|
|
||||||
#discover .steps {
|
#discover .steps {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
|
@ -267,7 +248,10 @@ footer {
|
||||||
color: rgba(255, 255, 255, 0.6);
|
color: rgba(255, 255, 255, 0.6);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
transition: color 0.2s, border-color 0.2s, background-color 0.2s;
|
transition:
|
||||||
|
color 0.2s,
|
||||||
|
border-color 0.2s,
|
||||||
|
background-color 0.2s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer-social a:hover {
|
.footer-social a:hover {
|
||||||
|
|
@ -336,6 +320,104 @@ footer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ── Trust strip ── */
|
||||||
|
.trust {
|
||||||
|
padding: 20px 0;
|
||||||
|
border-top: 1px solid var(--bs-border-color);
|
||||||
|
border-bottom: 1px solid var(--bs-border-color);
|
||||||
|
background: var(--hd-bg-canvas);
|
||||||
|
}
|
||||||
|
|
||||||
|
.trust-grid {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 24px;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.trust-tag {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
font-weight: 600;
|
||||||
|
letter-spacing: 0.08em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--hd-accent);
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.trust-tag .dot {
|
||||||
|
display: inline-block;
|
||||||
|
width: 8px;
|
||||||
|
height: 8px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: var(--hd-accent);
|
||||||
|
animation: pulse-dot 2s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes pulse-dot {
|
||||||
|
0%,
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
transform: scale(1);
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
opacity: 0.5;
|
||||||
|
transform: scale(0.75);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.trust-list {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.trust-list span {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
padding: 4px 12px;
|
||||||
|
border-radius: 20px;
|
||||||
|
border: 1px solid color-mix(in srgb, currentColor 20%, transparent);
|
||||||
|
font-size: 0.85rem;
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--hd-fg-3);
|
||||||
|
background: transparent;
|
||||||
|
transition:
|
||||||
|
border-color 0.2s,
|
||||||
|
color 0.2s,
|
||||||
|
background 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.trust-list span:hover {
|
||||||
|
border-color: var(--hd-accent);
|
||||||
|
color: var(--hd-accent);
|
||||||
|
background: color-mix(in srgb, var(--hd-accent) 8%, transparent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.trust-list span i {
|
||||||
|
font-size: 0.9em;
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.trust-more {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--hd-accent);
|
||||||
|
white-space: nowrap;
|
||||||
|
text-decoration: none;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.trust-more:hover {
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
@media (min-width: 768px) {
|
@media (min-width: 768px) {
|
||||||
#community > div > div {
|
#community > div > div {
|
||||||
width: 50% !important;
|
width: 50% !important;
|
||||||
|
|
@ -344,3 +426,240 @@ footer {
|
||||||
border-right: 1px solid var(--hd-plum-400);
|
border-right: 1px solid var(--hd-plum-400);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ── Big idea section ── */
|
||||||
|
.section {
|
||||||
|
padding: 96px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section--paper {
|
||||||
|
background: var(--hd-bg-subtle);
|
||||||
|
border-top: 1px solid var(--hd-border-1);
|
||||||
|
border-bottom: 1px solid var(--hd-border-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-head {
|
||||||
|
margin-bottom: 56px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-head .eyebrow {
|
||||||
|
display: flex;
|
||||||
|
margin-bottom: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.eyebrow {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
font-size: 0.6875rem;
|
||||||
|
font-weight: 600;
|
||||||
|
letter-spacing: 0.1em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--hd-fg-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.eyebrow .dot {
|
||||||
|
display: inline-block;
|
||||||
|
width: 6px;
|
||||||
|
height: 6px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: var(--hd-accent);
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.h2 {
|
||||||
|
font-size: clamp(1.5rem, 4vw, 2.25rem);
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 1.15;
|
||||||
|
letter-spacing: -0.02em;
|
||||||
|
color: var(--hd-fg-1);
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-head .h2 {
|
||||||
|
max-width: 720px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lede {
|
||||||
|
font-size: 1.0625rem;
|
||||||
|
line-height: 1.65;
|
||||||
|
color: var(--hd-fg-2);
|
||||||
|
margin-top: 14px;
|
||||||
|
max-width: 640px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.idea-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
gap: 0;
|
||||||
|
border: 1px solid var(--hd-border-1);
|
||||||
|
border-radius: 12px;
|
||||||
|
overflow: hidden;
|
||||||
|
background: var(--hd-bg-canvas);
|
||||||
|
}
|
||||||
|
|
||||||
|
.idea-col {
|
||||||
|
padding: 28px 28px 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.idea-col + .idea-col {
|
||||||
|
border-left: 1px solid var(--hd-border-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.idea-tag {
|
||||||
|
font-family: var(--hd-font-mono, monospace);
|
||||||
|
font-size: 10px;
|
||||||
|
letter-spacing: 0.12em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--hd-fg-4);
|
||||||
|
margin-bottom: 12px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.idea-tag .num {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 18px;
|
||||||
|
height: 18px;
|
||||||
|
border-radius: 4px;
|
||||||
|
background: var(--hd-bg-subtle);
|
||||||
|
color: var(--hd-fg-3);
|
||||||
|
font-size: 9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.idea-col h3 {
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 1.25rem;
|
||||||
|
color: var(--hd-fg-1);
|
||||||
|
letter-spacing: -0.015em;
|
||||||
|
margin: 0 0 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.idea-col h3 .strike {
|
||||||
|
text-decoration: line-through;
|
||||||
|
color: var(--hd-fg-4);
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zone-pre {
|
||||||
|
font-family: var(--hd-font-mono, monospace);
|
||||||
|
font-size: 11.5px;
|
||||||
|
line-height: 1.7;
|
||||||
|
color: var(--hd-fg-3);
|
||||||
|
background: var(--hd-bg-subtle);
|
||||||
|
border: 1px solid var(--hd-border-1);
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 14px 16px;
|
||||||
|
margin: 0;
|
||||||
|
white-space: pre;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.zone-pre .k {
|
||||||
|
color: var(--hd-fg-1);
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
.zone-pre .v {
|
||||||
|
color: var(--hd-fg-2);
|
||||||
|
}
|
||||||
|
.zone-pre .c {
|
||||||
|
color: var(--hd-fg-4);
|
||||||
|
}
|
||||||
|
.zone-pre .a {
|
||||||
|
color: var(--hd-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.svc {
|
||||||
|
border: 1px solid var(--hd-border-1);
|
||||||
|
border-radius: 8px;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
background: var(--hd-bg-canvas);
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.svc-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 9px 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.svc-row + .svc-row {
|
||||||
|
border-top: 1px solid var(--hd-bg-subtle);
|
||||||
|
}
|
||||||
|
|
||||||
|
.svc-l {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.svc-ico {
|
||||||
|
width: 26px;
|
||||||
|
height: 26px;
|
||||||
|
border-radius: 6px;
|
||||||
|
background: var(--hd-accent-subtle);
|
||||||
|
border: 1px solid var(--hd-accent-border);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
color: var(--hd-accent);
|
||||||
|
font-size: 13px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-bs-theme="dark"] .svc-ico {
|
||||||
|
background: var(--hd-accent-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
.svc-name {
|
||||||
|
font-size: 12.5px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--hd-fg-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.svc-desc {
|
||||||
|
font-size: 10.5px;
|
||||||
|
color: var(--hd-fg-3);
|
||||||
|
margin-top: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.svc-r {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.svc-cnt {
|
||||||
|
font-family: var(--hd-font-mono, monospace);
|
||||||
|
font-size: 10px;
|
||||||
|
color: var(--hd-fg-4);
|
||||||
|
background: var(--hd-bg-subtle);
|
||||||
|
padding: 2px 6px;
|
||||||
|
border-radius: 9999px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.svc-ok {
|
||||||
|
font-size: 10px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--hd-accent);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.idea-grid {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
.idea-col + .idea-col {
|
||||||
|
border-left: none;
|
||||||
|
border-top: 1px solid var(--hd-border-1);
|
||||||
|
}
|
||||||
|
.section {
|
||||||
|
padding: 64px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue