first commit

This commit is contained in:
julien committed 2026-10-22 01:07:27 +02:00
commit 82f8b28353
28 files changed
+1210

No files matched your search

+551
View File
@@ -0,0 +1,551 @@
/* Polices
------------------------------------------------------------------------ */
@font-face {
font-family: "TitilliumWeb";
src: url("/fonts/TitilliumWeb-Regular.woff2") format("woff2");
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "TitilliumWeb";
src: url("/fonts/TitilliumWeb-Bold.woff2") format("woff2");
font-weight: 700;
font-style: normal;
font-display: swap;
}
/* Couleurs
------------------------------------------------------------------------ */
:root {
/* Fonds */
--color-background: #2f3e46;
--color-surface: #354f52;
--color-surface-dark: #243138;
/* Texte et accents */
--color-text: #cad2c5;
--color-link: #a9cecf;
--color-accent: #a8c9a5;
--color-highlight: #ebdbb2;
--color-heading-soft: #c7d9c9;
/* Messages */
--color-flash-notice-background: #294e43;
--color-flash-error-background: #2c4647;
--color-flash-error-border: #e6afa2;
/* Ombres */
--color-shadow-light: rgb(202 210 197 / 20%);
--color-shadow-dark: rgb(0 0 0 / 8%);
}
/* Structure et mise en page
------------------------------------------------------------------------ */
*,
*::before,
*::after {
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
}
body {
display: flex;
flex-direction: column;
min-height: 100vh;
min-height: 100dvh;
margin: 0;
background: var(--color-background);
color: var(--color-text);
font-family: "TitilliumWeb", sans-serif;
font-size: 1.4rem;
}
main {
display: flex;
flex: 1;
min-width: 0;
flex-direction: column;
}
/* Image sur les sections alternées de l'accueil et les pages intérieures. */
main > section {
background-color: var(--color-background);
}
main > section:nth-of-type(odd):not(:only-of-type),
.page-section {
background-color: var(--color-surface);
background-image:
linear-gradient(rgb(15 40 55 / 74%), rgb(15 40 55 / 74%)),
url("/images/background.webp");
background-position: center;
background-size: cover;
background-repeat: no-repeat;
}
.content {
width: 100%;
max-width: 1200px;
margin-inline: auto;
padding: 20px;
}
.prose {
max-width: 72ch;
line-height: 1.6;
}
/* Une seule feuille de lecture sur les pages intérieures. */
.page-section {
flex: 1;
padding: clamp(24px, 5vw, 72px) 20px;
}
.page-panel {
max-width: 1000px;
padding: clamp(24px, 4vw, 48px);
border-radius: 16px;
background: var(--color-background);
}
.page-panel.prose {
max-width: 72ch;
}
.section-services,
.section-hosting {
padding-bottom: 100px;
}
/* Typographie et liens
------------------------------------------------------------------------ */
h1,
h2,
h3,
h4 {
color: var(--color-text);
font-weight: 700;
text-align: left;
}
h1 {
margin-block: 0.67em;
font-size: 2.8rem;
line-height: 1.1;
}
h2 {
padding-left: 14px;
border-left: 4px solid var(--color-highlight);
color: var(--color-highlight);
font-size: 2.6rem;
line-height: 1.15;
}
h3 {
width: fit-content;
padding-bottom: 0.25rem;
border-bottom: 2px solid var(--color-accent);
color: var(--color-highlight);
font-size: 1.9rem;
line-height: 1.2;
}
h4 {
color: var(--color-heading-soft);
font-size: 1.4rem;
line-height: 1.25;
}
a {
color: var(--color-link);
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
a:focus-visible,
button:focus-visible,
input:focus-visible,
textarea:focus-visible,
select:focus-visible,
summary:focus-visible {
outline: 3px solid var(--color-accent);
outline-offset: 3px;
}
.skip-link {
position: fixed;
top: 10px;
left: 10px;
z-index: 100;
padding: 8px 12px;
background: var(--color-text);
color: var(--color-background);
transform: translateY(-200%);
}
.skip-link:focus {
transform: translateY(0);
}
/* En-tête et navigation
------------------------------------------------------------------------ */
.topbar {
display: flex;
min-height: 70px;
flex-wrap: wrap;
align-items: center;
text-align: left;
background: var(--color-surface);
border-bottom: 1px solid rgb(202 210 197 / 18%);
}
.topbar a {
padding-left: 20px;
}
.topbar a:hover {
color: var(--color-text);
}
.topbar a.topbar__account {
margin-left: auto;
margin-right: 20px;
padding: 8px 14px;
border: 1px solid var(--color-accent);
color: var(--color-accent);
}
.topbar a.topbar__account:hover {
background: var(--color-accent);
color: var(--color-background);
text-decoration: none;
}
.topbar img {
display: block;
width: 48px;
height: 48px;
}
.logo {
display: flex;
align-items: center;
justify-content: center;
}
.logo img {
display: block;
width: 100%;
max-width: 340px;
height: auto;
}
.hero p {
font-size: 1.6rem;
}
.hero h1 {
font-size: clamp(2.8rem, 6vw, 4rem);
}
.hero__lead {
margin-bottom: 0;
}
.hero__actions {
display: flex;
flex-wrap: wrap;
gap: 12px;
margin-top: 28px;
}
/* Boutons et cartes
------------------------------------------------------------------------ */
.button {
display: inline-block;
padding: 10px 16px;
border: 2px solid var(--color-accent);
background: var(--color-accent);
color: var(--color-background);
font-weight: 700;
transition: filter 0.2s ease;
}
.button:hover {
filter: brightness(1.12);
text-decoration: none;
}
.button--secondary {
display: inline-flex;
align-items: center;
gap: 8px;
border-color: var(--color-link);
background: transparent;
color: var(--color-link);
}
.box {
display: flex;
min-width: 0;
flex-direction: column;
justify-content: space-between;
margin-top: 80px;
padding: 20px 20px 40px;
border: 2px solid var(--color-text);
box-shadow: 0 0 5px var(--color-shadow-light), 0 4px 4px var(--color-shadow-dark);
}
.box img {
display: block;
max-width: 96px;
margin-inline: auto;
}
.box__title {
margin-block: 0;
padding: 10px;
border-bottom: 0;
background: var(--color-background);
color: var(--color-text);
translate: 0 -55px;
}
/* Bordure supérieure interrompue autour des titres, sans masquer la photo. */
.section-hosting .box {
border-top: 0;
background: rgb(15 40 55 / 30%);
}
.section-hosting .box__title {
display: flex;
align-items: center;
gap: 8px;
width: auto;
margin-inline: -22px;
padding: 10px 0;
background: transparent;
translate: 0 calc(-50% - 20px);
}
.section-hosting .box__title::before,
.section-hosting .box__title::after {
content: "";
flex: 1;
border-top: 2px solid var(--color-text);
}
.section-hosting .box__title::before {
flex: 0 0 20px;
}
.box__link {
padding: 20px;
color: var(--color-text);
text-align: center;
transition: transform 0.2s ease, border-color 0.2s ease;
}
.box__link:hover {
text-decoration: none;
}
.service-icon {
margin-top: -20px;
margin-bottom: 10px;
}
/* Couleur des cartes selon leur position. */
.section-services .box:nth-child(3n + 1) {
--service-accent: var(--color-link);
}
.section-services .box:nth-child(3n + 2) {
--service-accent: var(--color-accent);
}
.section-services .box:nth-child(3n + 3) {
--service-accent: var(--color-highlight);
}
.section-services .box__title {
color: var(--service-accent);
}
.section-services .box__link:focus-visible {
border-color: var(--service-accent);
}
/* Formulaires et messages
------------------------------------------------------------------------ */
.contact-form {
display: grid;
gap: 10px;
font-size: 1rem;
font-weight: 700;
}
.contact-form input,
.contact-form textarea {
width: 100%;
margin: 0;
padding: 10px;
border: 0;
font-family: inherit;
font-size: 1rem;
}
/* Ne pas appliquer le fond clair au bouton d'envoi. */
.contact-form input:not([type="submit"]),
.contact-form textarea {
background: var(--color-text);
color: var(--color-background);
}
.contact-form textarea {
min-height: 150px;
resize: vertical;
box-shadow: 0 0 10px var(--color-surface-dark);
}
.contact-form input:not([type="submit"]):focus-visible,
.contact-form textarea:focus-visible {
outline-color: var(--color-surface);
}
.submit {
width: 100%;
background: var(--color-accent);
color: var(--color-background);
font-weight: 700;
cursor: pointer;
}
.honeypot {
position: absolute;
left: -10000px;
width: 1px;
height: 1px;
overflow: hidden;
}
.flash {
margin: 0 0 1rem;
padding: 0.75rem 1rem;
border-left: 3px solid;
}
.flash--notice {
background-color: var(--color-flash-notice-background);
border-color: var(--color-accent);
color: var(--color-text);
}
.flash--error {
background-color: var(--color-flash-error-background);
border-color: var(--color-flash-error-border);
color: var(--color-text);
}
/* Pied de page
------------------------------------------------------------------------ */
footer {
padding: 40px 20px;
background: var(--color-surface-dark);
box-shadow: 0 0 20px var(--color-surface-dark);
}
.botbar {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
font-size: 1rem;
text-align: center;
}
.botbar p {
margin-inline: auto;
}
/* Adaptations et accessibilité
------------------------------------------------------------------------ */
@media screen and (min-width: 1080px) {
.col--1-1,
.col--1-2,
.col--1-1-1 {
display: grid;
gap: 40px;
}
.col--1-1 {
grid-template-columns: repeat(2, 1fr);
}
.col--1-2 {
grid-template-columns: 1fr 2fr;
}
.col--1-1-1 {
grid-template-columns: repeat(3, 1fr);
}
}
/* Effets au survol sur les écrans et périphériques adaptés. */
@media (hover: hover) and (min-width: 1080px) {
.box__link:hover {
transform: scale(1.04);
}
.section-services .box__link:hover {
border-color: var(--service-accent);
}
}
@media screen and (max-width: 600px) {
.box {
margin-top: 60px;
padding: 20px;
}
.section-services,
.section-hosting {
padding-bottom: 60px;
}
footer {
padding: 24px 20px;
}
}
@media (prefers-reduced-motion: reduce) {
html {
scroll-behavior: auto;
}
.box__link,
.button {
transition: none;
}
.box__link:hover {
transform: none;
}
}