/* =====================================================================
   app.css — remplace Bootstrap. Réécriture maison, ZÉRO build, limitée
   aux classes réellement utilisées dans les templates.
   Compatible Bootstrap 5 (breakpoints sm=576, md=768, lg=992) pour que
   styles.css (palette + dark mode, qui cible ces mêmes classes) et le
   markup existant fonctionnent sans modification.
   Rollback : repointer le <link> du layout vers css/bootstrap.min.css.
   ===================================================================== */

*,
*::before,
*::after { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.5;
  color: #212529;
  background-color: #fff;
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4, h5, h6 { margin: 0 0 .5rem; font-weight: 500; line-height: 1.2; }
h1 { font-size: 2.5rem; }
h2 { font-size: 2rem; }
h3 { font-size: 1.75rem; }
.h4, h4 { font-size: 1.5rem; }
.h5, h5 { font-size: 1.25rem; }
.h6, h6 { font-size: 1rem; }
p { margin: 0 0 1rem; }
ul, ol, dl { margin: 0 0 1rem; }
dd { margin-left: 0; }
hr { margin: 1rem 0; border: 0; border-top: 1px solid rgba(0,0,0,.15); opacity: 1; }
a { color: #0d6efd; text-decoration: underline; }
a:hover { color: #0a58ca; }
img, svg { vertical-align: middle; }
img { max-width: 100%; }

.display-1 { font-size: 5rem; font-weight: 300; line-height: 1.2; }

/* ---------- Container ---------- */
.container, .container-fluid {
  width: 100%;
  padding-right: .75rem;
  padding-left: .75rem;
  margin-right: auto;
  margin-left: auto;
}
@media (min-width: 576px)  { .container { max-width: 540px; } }
@media (min-width: 768px)  { .container { max-width: 720px; } }
@media (min-width: 992px)  { .container { max-width: 960px; } }
@media (min-width: 1200px) { .container { max-width: 1140px; } }
@media (min-width: 1400px) { .container { max-width: 1320px; } }

/* ---------- Grille ---------- */
.row {
  --gx: 1.5rem;
  display: flex;
  flex-wrap: wrap;
  margin-right: calc(-.5 * var(--gx));
  margin-left: calc(-.5 * var(--gx));
}
.row > * {
  box-sizing: border-box;
  flex-shrink: 0;
  width: 100%;
  max-width: 100%;
  padding-right: calc(.5 * var(--gx));
  padding-left: calc(.5 * var(--gx));
  margin-top: var(--gy, 0);
}
.g-3 { --gx: 1rem; --gy: 1rem; }
.g-4 { --gx: 1.5rem; --gy: 1.5rem; }
.g-5 { --gx: 3rem; --gy: 3rem; }
.row > * { margin-top: 0; }
.g-3 > *, .g-4 > *, .g-5 > * { margin-top: var(--gy); }

.col { flex: 1 0 0%; }
.col-12 { width: 100%; }
.col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8 { width: 100%; }
.col-lg-3, .col-lg-4, .col-lg-5, .col-lg-7 { width: 100%; }

@media (min-width: 768px) {
  .col-md-4 { width: 33.33333%; }
  .col-md-5 { width: 41.66667%; }
  .col-md-6 { width: 50%; }
  .col-md-7 { width: 58.33333%; }
  .col-md-8 { width: 66.66667%; }
}
@media (min-width: 992px) {
  .col-lg-3 { width: 25%; }
  .col-lg-4 { width: 33.33333%; }
  .col-lg-5 { width: 41.66667%; }
  .col-lg-7 { width: 58.33333%; }
}

/* ---------- Display / flex ---------- */
.d-none { display: none !important; }
.d-flex { display: flex !important; }
@media (min-width: 768px) {
  .d-md-block { display: block !important; }
  .d-none.d-md-block { display: block !important; }
}
.align-items-center { align-items: center !important; }
.align-items-start { align-items: flex-start !important; }
.justify-content-center { justify-content: center !important; }
.justify-content-start { justify-content: flex-start !important; }
.flex-wrap { flex-wrap: wrap !important; }
.flex-shrink-0 { flex-shrink: 0 !important; }
.gap-2 { gap: .5rem !important; }

/* ---------- Spacing (0=0,1=.25,2=.5,3=1,4=1.5,5=3 rem) ---------- */
.m-0{margin:0!important}.mb-0{margin-bottom:0!important}.mb-2{margin-bottom:.5rem!important}
.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}
.mt-1{margin-top:.25rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}
.me-2{margin-right:.5rem!important}.ms-1{margin-left:.25rem!important}.ms-auto{margin-left:auto!important}
.pt-4{padding-top:1.5rem!important}.pb-4{padding-bottom:1.5rem!important}
.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}
.px-2{padding-right:.5rem!important;padding-left:.5rem!important}
.py-5{padding-top:3rem!important;padding-bottom:3rem!important}
@media (min-width: 576px){ .text-sm-end{text-align:right!important} }
@media (min-width: 768px){
  .mb-md-0{margin-bottom:0!important}.mt-md-0{margin-top:0!important}
  .p-md-5{padding:3rem!important}
}
@media (min-width: 992px){
  .ms-lg-2{margin-left:.5rem!important}
  .p-lg-5{padding:3rem!important}
}

/* ---------- Typo utils ---------- */
.text-center{text-align:center!important}.text-end{text-align:right!important}
.text-uppercase{text-transform:uppercase!important}
.text-decoration-none{text-decoration:none!important}
.fw-bold{font-weight:700!important}
.fs-1{font-size:2.5rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}
.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}
.small{font-size:.875em}
.text-secondary{color:#6c757d!important}.text-muted{color:#6c757d!important}
.text-danger{color:#dc3545!important}.text-light{color:#f8f9fa!important}
.text-dark{color:#212529!important}.text-warning{color:#ffc107!important}
.list-unstyled{padding-left:0;list-style:none;margin:0}
.visually-hidden{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* ---------- Couleurs de fond ---------- */
.bg-white{background-color:#fff!important}
.bg-light{background-color:#f8f9fa!important}
.bg-primary{background-color:#0d6efd!important}
.bg-secondary{background-color:#6c757d!important}
.bg-warning{background-color:#ffc107!important}
.bg-transparent{background-color:transparent!important}

/* ---------- Liens utilitaires ---------- */
.link-dark{color:#212529!important}
.link-light{color:#f8f9fa!important}
.link-secondary{color:#6c757d!important}
.link-primary{color:#0d6efd!important}
.link-dark,.link-light,.link-secondary,.link-primary{text-decoration:none}
.link-dark:hover,.link-light:hover,.link-secondary:hover,.link-primary:hover{text-decoration:underline}

/* ---------- Bordures / formes / ombres ---------- */
.border{border:1px solid #dee2e6!important}
.border-0{border:0!important}
.rounded{border-radius:.375rem!important}
.rounded-circle{border-radius:50%!important}
.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}
.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}
.overflow-hidden{overflow:hidden!important}
.img-fluid{max-width:100%;height:auto}
.h-100{height:100%!important}
.w-100{width:100%!important}
@media (min-width:768px){ .w-md-50{width:50%!important} }
.sticky-top{position:sticky;top:0;z-index:1020}

/* ---------- Boutons ---------- */
.btn{
  display:inline-block;font-weight:400;line-height:1.5;text-align:center;
  text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;
  border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;
  border-radius:.375rem;transition:color .15s,background-color .15s,border-color .15s;
}
.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}
.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}
.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}
.btn-outline-secondary{color:#6c757d;border-color:#6c757d;background-color:transparent}
.btn-outline-secondary:hover{color:#fff;background-color:#6c757d}

/* ---------- Card ---------- */
.card{
  position:relative;display:flex;flex-direction:column;min-width:0;
  word-wrap:break-word;background-color:#fff;background-clip:border-box;
  border:1px solid rgba(0,0,0,.175);border-radius:.375rem;
}
.card-body{flex:1 1 auto;padding:1rem}
.card-img-top{width:100%;border-top-left-radius:calc(.375rem - 1px);border-top-right-radius:calc(.375rem - 1px)}

/* ---------- Badge ---------- */
.badge{
  display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;
  line-height:1;color:#fff;text-align:center;white-space:nowrap;
  vertical-align:baseline;border-radius:.375rem;
}

/* ---------- Alert ---------- */
.alert{position:relative;padding:1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.375rem}
.alert-success{color:#0a3622;background-color:#d1e7dd;border-color:#a3cfbb}
.alert-danger{color:#58151c;background-color:#f8d7da;border-color:#f1aeb5}
.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffe69c}

/* ---------- Breadcrumb ---------- */
.breadcrumb{display:flex;flex-wrap:wrap;padding:0;margin-bottom:1rem;list-style:none}
.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}
.breadcrumb-item+.breadcrumb-item::before{content:"/";float:left;padding-right:.5rem;color:#6c757d}
.breadcrumb-item.active{color:#6c757d}

/* ---------- Formulaire ---------- */
.form-label{margin-bottom:.5rem}
.form-control{
  display:block;width:100%;padding:.375rem .75rem;font-size:1rem;
  line-height:1.5;color:#212529;background-color:#fff;
  border:1px solid #ced4da;border-radius:.375rem;
  transition:border-color .15s,box-shadow .15s;
}
.form-control:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}
.form-control.is-invalid{border-color:#dc3545}
textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}

/* ---------- Navbar ---------- */
.navbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.5rem 0}
.navbar .container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;width:100%}
.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;color:inherit;white-space:nowrap}
.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin:0;list-style:none}
.nav-item{display:block}
.nav-link{display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background:none;border:0}
.nav-link:hover{color:#0a58ca}
.navbar-toggler{
  padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;
  border:1px solid rgba(0,0,0,.15);border-radius:.375rem;cursor:pointer;
}
.navbar-toggler-icon{
  display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba%2833,37,41,.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:center;background-size:100%;
}
.collapse:not(.show){display:none}
.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}

@media (min-width:992px){
  .navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}
  .navbar-expand-lg .navbar-nav{flex-direction:row}
  .navbar-expand-lg .navbar-toggler{display:none}
  .navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}
}

/* ---------- Divers ---------- */
.stretched-link::after{
  position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""
}
.bi{display:inline-block}
