/* =============================================================================
 * Novalyz · base.css — Couche 2 : reset + éléments HTML génériques
 * Sélecteurs d'éléments uniquement (pas de classes métier).
 * =========================================================================== */

/* ===== Reset ===== */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

/* ===== Corps ===== */
body {
  background: var(--bg);
  color: var(--text);
  font-family: var(--font);
  min-height: 100vh;
  padding-bottom: 0;
  overflow-x: hidden;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

/* ===== Titres ===== */
h1, h2, h3 {
  font-family: var(--font-heading);
  font-weight: 400;
  line-height: 1.2;
  color: var(--text);
}
h4, h5, h6 {
  font-family: var(--font);
  font-weight: 600;
  line-height: 1.4;
  color: var(--text);
}
h1 { font-size: var(--text-h1); }
h2 { font-size: var(--text-h2); }
h3 { font-size: var(--text-h3); }
h4 { font-size: var(--text-h4); }
h5 { font-size: var(--text-h5); }
h6 { font-size: var(--text-h6); }

/* ===== Icônes SVG (sprite Lucide) ===== */
.ico     { width:15px; height:15px; display:inline-block; vertical-align:-2px; fill:none; stroke:currentColor; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; flex-shrink:0; }
.ico-btn { width:16px; height:16px; vertical-align:-3px; margin-right:4px; }
.ico-lg  { width:34px; height:34px; }
.dash-label .ico, .card-title .ico { margin-right:5px; vertical-align:-2px; }

/* ===== Accessibilité — mouvement réduit ===== */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration:0.001ms !important; transition-duration:0.001ms !important; }
}

/* ===== Formulaires ===== */
label {
  display:block;
  font-size:12px;
  color:var(--text-muted);
  margin-bottom:4px;
  font-weight:600;
  text-transform:uppercase;
  letter-spacing:0.5px;
}
select,
input[type="number"],
input[type="date"],
input[type="text"],
input[type="email"],
input[type="password"],
textarea {
  width:100%;
  background:var(--surface2);
  border:1px solid var(--border);
  border-radius:var(--radius-sm);
  color:var(--text);
  font-size:15px;
  padding:10px 12px;
  outline:none;
  appearance:none;
  -webkit-appearance:none;
  margin-bottom:10px;
  transition:border-color 0.15s, box-shadow 0.15s, background 0.15s;
}
select:hover, input:hover  { border-color:var(--text-muted); }
select:focus, input:focus, textarea:focus { border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-a15); }
input::placeholder, textarea::placeholder { color:var(--text-muted); opacity:0.7; }

/* Champ mot de passe avec bouton œil (afficher/masquer) */
.pwd-wrap { position:relative; margin-bottom:10px; }
.pwd-wrap > input { margin-bottom:0 !important; padding-right:44px; }
.pwd-eye { position:absolute; right:4px; top:0; height:100%; width:38px; display:flex; align-items:center; justify-content:center; background:none; border:none; color:var(--text-muted); cursor:pointer; font-size:16px; line-height:1; padding:0; }

/* ===== Grilles utilitaires ===== */
.row2 { display:grid; grid-template-columns:1fr 1fr;     gap:10px; }
.row3 { display:grid; grid-template-columns:1fr 1fr 1fr; gap:8px;  }

/* ===== Loader générique ===== */
.loader { text-align:center; padding:24px; color:var(--text-muted); font-size:13px; }
