/* 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); 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; } /* Liens dans les paragraphes et le pied de page. */ main p a:not(.button), footer a { text-decoration: underline; text-underline-offset: 0.15em; } 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 > form { margin: 0 20px 0 auto; } .topbar a.topbar__account { margin-left: auto; margin-right: 20px; } .topbar .topbar__account { display: inline-block; padding: 8px 14px; border: 1px solid var(--color-accent); background: transparent; color: var(--color-accent); font: inherit; line-height: normal; text-decoration: none; } .topbar .topbar__account:hover { background: var(--color-accent); color: var(--color-background); text-decoration: none; } .topbar button.topbar__account { appearance: none; border-radius: 0; cursor: pointer; } .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: 1.2rem; } /* 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); } /* Admin ------------------------------------------------------------------------ */ .members-table { width: 100%; border-collapse: collapse; text-align: left; } .members-table th, .members-table td { padding: 10px 16px; border-bottom: 1px solid var(--color-shadow-light); } .members-table th { color: var(--color-highlight); } .members-table td { vertical-align: top; } /* 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; } }