:root{--bg:#f6f7f8;--fg:#1d2024;--mut:#666d75;--line:#dcdfe3;--ph:#e6e8eb;--ac:#2f4b63}
*{box-sizing:border-box}
html{scrollbar-gutter:stable}
body{margin:0;background:var(--bg);color:var(--fg);font:17px/1.65 Georgia,"Times New Roman",serif}
a{color:inherit}
a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--ac);outline-offset:3px}
.top{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.5rem 2rem;padding:1.3rem clamp(1rem,4vw,3rem);border-bottom:1px solid var(--line)}
.logo{font:300 1.7rem/1 "Avenir Next","Helvetica Neue",Arial,sans-serif;letter-spacing:.12em;text-decoration:none}
nav a{font:.95rem "Avenir Next","Helvetica Neue",Arial,sans-serif;margin-left:1.5rem;text-decoration:none;color:var(--mut)}
nav a:hover{color:var(--fg)}
main{max-width:1400px;margin:0 auto;padding:2rem clamp(1rem,4vw,3rem) 3rem}
h1{font:300 2rem/1.2 "Avenir Next","Helvetica Neue",Arial,sans-serif;margin:0 0 1.6rem}
.txt{max-width:40rem}.txt h2{font:500 1.1rem/1.3 "Avenir Next","Helvetica Neue",Arial,sans-serif;margin:2rem 0 .4rem}
img{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}

.cats{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:1.4rem}
.cat{text-decoration:none}
.cover{display:block;aspect-ratio:4/3;background:var(--ph);overflow:hidden}
.cover img{display:block;width:100%;height:100%;object-fit:cover}
.name{display:block;margin-top:.55rem}
.name small{margin-left:.4rem;color:var(--mut);font:.85rem "Avenir Next","Helvetica Neue",Arial,sans-serif}

/* Galerie justifiée : hauteur de rangée commune, ratio réservé => aucun décalage au chargement */
.gal{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px}
.gal::after{content:"";flex-grow:1000000}
.gal a{display:block}
.gal img{display:block;width:100%;height:auto;background:var(--ph)}

.big{width:min(100%,calc(78vh*var(--r)));margin:0 auto}
.big img{display:block;width:100%;height:auto;background:var(--ph)}
.pn{display:flex;justify-content:space-between;gap:1rem;margin-top:1.1rem;font:.95rem "Avenir Next","Helvetica Neue",Arial,sans-serif}

form{display:grid;gap:1.1rem;margin-top:1.2rem}
label{display:grid;gap:.3rem;font:.95rem "Avenir Next","Helvetica Neue",Arial,sans-serif}
input,textarea{font:inherit;padding:.65rem .75rem;border:1px solid var(--line);background:#fff;color:var(--fg)}
button{justify-self:start;font:500 1rem "Avenir Next","Helvetica Neue",Arial,sans-serif;padding:.7rem 1.4rem;border:0;background:var(--ac);color:#fff;cursor:pointer}
button:hover{background:#243b4e}
.err{color:#a02020}
.hp{position:absolute;left:-9999px}

footer{padding:1.6rem clamp(1rem,4vw,3rem);border-top:1px solid var(--line);color:var(--mut);font:.85rem "Avenir Next","Helvetica Neue",Arial,sans-serif}
footer p{margin:.2rem 0}

.intro{max-width:40rem;margin:-.8rem 0 1.8rem;color:var(--mut)}
.row{padding:1.1rem;border:1px solid var(--line);background:#fff;margin:0 0 1.2rem}
.row .meta{margin:0;color:var(--mut);font:.85rem "Avenir Next","Helvetica Neue",Arial,sans-serif}
.chk{display:flex;align-items:center;gap:.5rem}
.acts{display:flex;flex-wrap:wrap;gap:.5rem}
button.sec{background:#fff;color:var(--fg);border:1px solid var(--line)}
button.sec:hover{background:var(--ph)}
.ok{color:#1f6b3a}
