/* Densité « compacte » (1.17) : interface plus fine et plus professionnelle, site public ET administration.
   Chargé en dernier : il ne fait que réduire les échelles (rem), les hauteurs et les marges. Les thèmes et couleurs ne changent pas. */
html { font-size: 80%; }
:root {
    --sidebar-w: 216px;
    --text-sm: .875rem; --text-xl: 1.55rem; --text-2xl: 1.95rem;
    --space-5: 1.25rem; --space-6: 1.6rem; --space-7: 2.4rem;
    --radius-lg: 18px;
}
@media (pointer: fine) { :root { --touch-min: 36px; } }   /* souris : boutons plus fins ; le tactile garde 44 px */

/* ---------- Administration ---------- */
.topbar { padding-block: var(--space-2); }
.sidebar { padding: var(--space-3); }
.sidebar ul { gap: 4px; }
.sidebar a, .nav-soon { min-block-size: 36px; padding-block: .25rem; padding-inline: var(--space-3); border-radius: 14px; --nav-depth: 2px; }
.sidebar .brand { padding-block-end: var(--space-3); margin-block-end: var(--space-2); }
.nav-group { margin-block-start: var(--space-3); }
.kpi-grid { gap: var(--space-3); grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); margin-block: var(--space-4); }
.kpi { padding: var(--space-3); }
.kpi-icon { inline-size: 32px; block-size: 32px; margin-block-end: var(--space-1); }
.kpi-value { font-size: 1.8rem; }
h1 { margin-block: var(--space-2); }
h2 { margin-block-start: var(--space-4); }
.table-wrap th, .table-wrap td, table th, table td { padding-block: .5rem; }

/* ---------- Site public ---------- */
.header-row { min-block-size: 54px; }
.public-body .site-header .header-row { min-block-size: 54px; }
.brand-link { font-size: var(--text-md); }
.btn-lg { min-block-size: 44px; padding-inline: var(--space-5); font-size: var(--text-md); }
.hero h1 { font-size: clamp(1.8rem, 3.6vw, 2.7rem); margin-block-end: var(--space-3); }
.hero-sub { font-size: var(--text-md); margin-block-end: var(--space-4); }
.hero-arch { inline-size: min(100%, 300px); }
.public-body .hero .hero-sub { font-size: clamp(.95rem, 1.3vw, 1.1rem); }
@media (min-width: 901px) {
    .public-body .hero { margin-block-start: calc(-1 * (54px + 1.25rem)); padding-block: calc(54px + 1.25rem + 2.5rem) 6.25rem; }
    .public-body .site-header { margin-block-start: 1rem; }
}
.public-body .search-form select, .public-body .search-form input { min-block-size: 40px; }
.category-tile { min-block-size: 150px; }
.promo-banner { padding-block: clamp(1.75rem, 5vw, 3.25rem); }

/* Portail : bannière plus basse */
html[data-hero="compact"] { --hero-h: 300px; }
html[data-hero="normal"]  { --hero-h: 400px; }
html[data-hero="tall"]    { --hero-h: 520px; }
html[data-layout="portal"] .public-body .hero h1 { font-size: clamp(1.9rem, 4vw, 3rem); }
html[data-header="solid"][data-layout="portal"] .public-body .hero { padding-block: 2.5rem 6rem; }
@media (max-width: 640px) {
    .public-body .hero { padding-block: var(--space-5) 4.5rem; }
    html[data-layout="portal"] .public-body .hero { min-block-size: min(var(--hero-h, 400px), 340px); }
}

/* ---------- 1.18 : 80 % + ordre cohérent des champs de toute la plateforme ---------- */
@media (min-width: 901px) { :root { --sidebar-w: 208px; } }
.sidebar a, .nav-soon { min-block-size: 34px; }
.kpi-grid { grid-template-columns: repeat(auto-fit, minmax(135px, 1fr)); }
.hero h1 { font-size: clamp(1.6rem, 3.2vw, 2.3rem); }
@media (min-width: 901px) {
    .public-body .hero { padding-block: calc(54px + 1.25rem + 1.75rem) 5rem; }
    .public-body .search-form select, .public-body .search-form input { min-block-size: 36px; }
}
html[data-hero="compact"] { --hero-h: 240px; }
html[data-hero="normal"]  { --hero-h: 320px; }
html[data-hero="tall"]    { --hero-h: 420px; }

/* Même gabarit pour tous les contrôles : hauteur, rayon, remplissage ; libellé toujours AU-DESSUS du champ, mêmes marges. */
input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]):not([type="file"]):not([type="range"]), select { min-block-size: 36px; padding: .4rem .65rem; }
textarea { padding: .5rem .65rem; min-block-size: 4.5rem; }
label { margin-block: var(--space-3) var(--space-1); font-size: var(--text-sm); }
input[type="checkbox"], input[type="radio"] { inline-size: 1.05rem; block-size: 1.05rem; margin-inline-end: var(--space-2); vertical-align: middle; }
label.check, .check { display: flex; align-items: center; gap: var(--space-2); font-weight: 500; margin-block: var(--space-1); }
.form-grid { gap: var(--space-3) var(--space-4); grid-template-columns: repeat(auto-fill, minmax(min(100%, 210px), 1fr)); }
.form-grid > div > label, .form-grid > .field > label { margin-block: 0; }
.form-grid > .span-2, .form-grid > .span-all, .form-grid > div:has(> textarea), .form-grid > div:has(> .muted.small + textarea) { grid-column: 1 / -1; }
.se-form, .entity-form { max-inline-size: 1040px; gap: var(--space-4); }
/* Formulaires « libellé + champ » empilés (sans grille) : colonne unique, largeur lisible, boutons alignés. */
form:has(> label):not(.row):not(.filters):not(.form-grid) { display: grid; gap: 0; max-inline-size: 680px; align-content: start; }
form:has(> label):not(.row) > .muted.small, form:has(> label):not(.row) > .field-error { margin-block: var(--space-1) 0; }
form:has(> label):not(.row) > :is(.btn, button, .se-actions, .row) { justify-self: start; margin-block-start: var(--space-4); }
fieldset.se-group { padding: var(--space-3) var(--space-4); border-radius: var(--radius-sm); }
fieldset.se-group > legend { font-weight: 700; font-size: var(--text-sm); padding-inline: var(--space-2); }
.se-actions { margin-block-start: var(--space-3); gap: var(--space-2); }
/* Libellés de longueurs différentes : les champs d'une même rangée restent alignés. */
.split-line .form-grid { align-items: stretch; }
.split-line .form-grid > div { display: grid; grid-template-rows: 2.6em auto; align-content: start; gap: var(--space-1); }
.split-line .form-grid > div > label { align-self: end; line-height: 1.25; }
