.objectif-modal {
  position: fixed;
  inset: 0;
  z-index: 10040;
  display: flex;
  align-items: flex-start;
  justify-content: center;
  /* La reserve du haut evite que la fenetre passe sous l'heure de l'iPhone. */
  padding-top: var(--mvj-haut, 0px);
}
.objectif-modal.hidden {
  display: none;
}
.objectif-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(20, 22, 30, 0.5);
  backdrop-filter: blur(2px);
}
.objectif-panel {
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: 520px;
  margin: 16px 10px;
  max-height: calc(100vh - 32px);
  overflow-y: auto;
  background: var(--bg-ffffff);
  border-radius: 20px;
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.28);
  padding: 18px 16px calc(22px + env(safe-area-inset-bottom, 0px));
  -webkit-overflow-scrolling: touch;
}
/* Meme regle que « .card-modal-close » : le panneau des objectifs defile,
   la croix ne doit pas partir avec lui. */
.objectif-close {
  position: sticky;
  top: 0;
  z-index: 3;
  /* Voir « .card-modal-close » : collante, en bloc, et sans hauteur de ligne. */
  display: grid;
  place-items: center;
  margin: 0 -4px -34px auto;
  width: 34px;
  height: 34px;
  flex: none;
  border-radius: 999px;
  border: 1px solid rgba(0, 0, 0, 0.1);
  background: var(--bg-ffffff);
  font-size: 1rem;
  cursor: pointer;
  z-index: 2;
}

.objectif-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  min-height: 30px;
  padding-right: 40px;
  margin-bottom: 6px;
}
.objectif-h2 {
  font-size: 1.1875rem;
  font-weight: 900;
  margin: 0;
  color: var(--text, var(--fg-23252d));
}
.objectif-detail-title {
  margin: 8px 0 4px;
  font-size: 1.25rem;
}
.objectif-back,
.objectif-edit {
  border: none;
  background: none;
  color: var(--primary, var(--fg-e07a3f));
  font-weight: 800;
  font-size: 0.875rem;
  cursor: pointer;
  padding: 4px 0;
}
.objectif-edit {
  font-size: 1.125rem;
}

.objectif-loading,
.objectif-empty {
  color: var(--muted, var(--fg-7a8090));
  font-size: 0.875rem;
  padding: 18px 4px;
  text-align: center;
}

/* Liste */
.objectif-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-bottom: 14px;
}
.objectif-card {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 8px;
  width: 100%;
  padding: 11px 12px;
  border: 1px solid rgba(0, 0, 0, 0.09);
  border-radius: 14px;
  background: var(--bg-ffffff);
  cursor: pointer;
  text-align: left;
}
.objectif-card:active {
  transform: scale(0.99);
}
.objectif-card-head {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}
.objectif-card-title {
  flex: 1;
  font-weight: 800;
  font-size: 0.9375rem;
  color: var(--text, var(--fg-23252d));
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* Coche ronde "fait aujourd'hui" a droite du titre (cartes fait/pas fait). */
.objectif-card-check-round {
  flex-shrink: 0;
  width: 34px;
  height: 34px;
  border-radius: 999px;
  border: 2px solid var(--bd-cdd2da);
  background: var(--bg-f4f6f8);
  color: var(--fg-b7bcc6);
  font-size: 1rem;
  font-weight: 800;
  line-height: 1;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: transform 0.08s ease, background 0.15s ease, border-color 0.15s ease;
}
.objectif-card-check-round:active {
  transform: scale(0.92);
}
.objectif-card-check-round.is-done {
  background: var(--bg-3fb56d);
  border-color: var(--bd-3fb56d);
  color: #fff;
}
/* Crayon "modifier" / corbeille "supprimer" a droite du titre (carte quotidienne). */
.objectif-card-edit {
  flex-shrink: 0;
  border: none;
  background: none;
  color: var(--fg-b0b6c0);
  font-size: 1rem;
  line-height: 1;
  cursor: pointer;
  padding: 4px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.objectif-card-edit:active {
  transform: scale(0.92);
}
.objectif-card-del,
.objectif-annual-del {
  color: var(--fg-cf7a7a);
}
/* Coche "J'ai fait aujourd'hui" directement sur la carte (objectif a 2 choix). */
.objectif-card-check {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  width: 100%;
  min-height: 46px;
  padding: 10px 14px;
  border-radius: 12px;
  border: 2px solid var(--bd-cdd2da);
  background: var(--bg-f4f6f8);
  color: var(--fg-5a616d);
  font-size: 0.9375rem;
  font-weight: 800;
  cursor: pointer;
  transition: transform 0.08s ease, background 0.15s ease, border-color 0.15s ease;
}
.objectif-card-check:active {
  transform: scale(0.99);
}
.objectif-card-check .objectif-check-mark {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  border-radius: 999px;
  border: 2px solid var(--bd-b7bcc6);
  font-size: 0.875rem;
  line-height: 1;
  color: var(--fg-b7bcc6);
}
.objectif-card-check.is-done {
  background: var(--bg-e6f6ec);
  border-color: var(--bd-3fb56d);
  color: var(--fg-1e7d45);
}
.objectif-card-check.is-done .objectif-check-mark {
  background: var(--bg-3fb56d);
  border-color: var(--bd-3fb56d);
  color: #fff;
}

.objectif-card-actions {
  display: flex;
  gap: 8px;
}
.objectif-card-btn {
  flex: 1 1 0;
  min-height: 34px;
  padding: 7px 10px;
  border-radius: 10px;
  border: none;
  font-weight: 800;
  font-size: 0.8125rem;
  cursor: pointer;
  background: var(--bg-ffe3cc);
  color: var(--fg-c8681f);
}
.objectif-card-btn--ghost {
  background: var(--bg-eef1f5);
  color: var(--fg-4a4f5a);
}
.objectif-card-btn:active {
  transform: scale(0.98);
}
/* Fleches pour repositionner un objectif quotidien (monter / descendre). */
.objectif-card-reorder {
  flex: 0 0 auto;
  display: inline-flex;
  gap: 4px;
}
.objectif-card-move {
  min-width: 34px;
  min-height: 34px;
  padding: 0;
  border-radius: 10px;
  border: none;
  background: var(--bg-eef1f5);
  color: var(--fg-4a4f5a);
  font-size: 0.75rem;
  line-height: 1;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  touch-action: manipulation;
}
.objectif-card-move:active {
  transform: scale(0.94);
}
.objectif-card-move:disabled {
  opacity: 0.3;
  cursor: default;
}

/* Vue Remplir : bloc "un autre jour" + bouton vers l'annee */
.objectif-fill-other {
  margin-top: 16px;
  padding-top: 14px;
  border-top: 1px solid rgba(0, 0, 0, 0.08);
}
.objectif-fill-subtitle {
  font-weight: 800;
  font-size: 0.875rem;
  margin-bottom: 10px;
  color: var(--text, var(--fg-23252d));
}
.objectif-goto-year,
.objectif-goto-fill {
  width: 100%;
  margin-top: 18px;
}

/* Mois glissant : 30 dernieres cases jour par jour. */
.objectif-card-strip {
  display: grid;
  grid-template-columns: repeat(30, 1fr);
  gap: 2px;
}
.objectif-strip-cell {
  aspect-ratio: 1 / 1;
  border-radius: 2px;
  background: var(--bg-e9ecf1);
}
.objectif-strip-cell.is-empty {
  background-color: var(--bg-edeff3);
  background-image: linear-gradient(45deg, transparent 44%, var(--bg-b7bcc6) 44%, var(--bg-b7bcc6) 56%, transparent 56%),
    linear-gradient(-45deg, transparent 44%, var(--bg-b7bcc6) 44%, var(--bg-b7bcc6) 56%, transparent 56%);
}
.objectif-new-btn {
  width: 100%;
}

/* Sections (objectifs de l'annee / suivi quotidien) */
.objectif-sec-title {
  font-weight: 900;
  font-size: 0.9375rem;
  margin: 24px 2px 12px;
  color: var(--text, var(--fg-23252d));
}
.objectif-sec-title:first-child {
  margin-top: 16px;
}
.objectif-annual-list {
  display: flex;
  flex-direction: column;
  gap: 7px;
  margin-bottom: 6px;
}
.objectif-daily-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

/* Ligne objectif de l'annee (compacte) */
.objectif-annual-row {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 10px;
  border: 1px solid rgba(0, 0, 0, 0.09);
  border-radius: 12px;
  background: var(--bg-ffffff);
}
.objectif-annual-row.is-atteint .objectif-annual-title {
  text-decoration: line-through;
  color: var(--muted, var(--fg-9a9fab));
}
.objectif-annual-fav {
  flex-shrink: 0;
  border: none;
  background: none;
  font-size: 1.125rem;
  line-height: 1;
  color: var(--fg-cdd2da);
  cursor: pointer;
  padding: 2px;
}
.objectif-annual-fav.is-fav {
  color: var(--fg-f0b429);
}
.objectif-annual-main {
  flex: 1;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 8px;
  border: none;
  background: none;
  cursor: pointer;
  text-align: left;
  padding: 0;
}
.objectif-annual-title {
  flex: 1;
  min-width: 0;
  font-weight: 800;
  font-size: 0.9375rem;
  color: var(--text, var(--fg-23252d));
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.objectif-annual-status {
  flex-shrink: 0;
  font-size: 0.75rem;
  font-weight: 800;
  padding: 3px 9px;
  border-radius: 999px;
  background: var(--bg-fff0dc);
  color: var(--fg-c8681f);
  max-width: 90px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* Crayon "modifier" / corbeille "supprimer" sur la ligne d'objectif de l'annee. */
.objectif-annual-edit {
  flex-shrink: 0;
  border: none;
  background: none;
  color: var(--fg-b0b6c0);
  font-size: 0.9375rem;
  line-height: 1;
  cursor: pointer;
  padding: 3px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.objectif-annual-edit:active {
  transform: scale(0.92);
}
.objectif-annual-check {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
}
.objectif-annual-check input {
  width: 20px;
  height: 20px;
  accent-color: var(--fg-3fb56d);
  cursor: pointer;
}
.objectif-see-all {
  width: 100%;
  border: 1px dashed rgba(0, 0, 0, 0.16);
  background: var(--bg-fbfbfd);
  border-radius: 12px;
  padding: 9px;
  font-weight: 800;
  font-size: 0.8125rem;
  color: var(--primary, var(--fg-e07a3f));
  cursor: pointer;
  margin-bottom: 6px;
}

/* Choix du type d'objectif */
.objectif-type-choice {
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  text-align: left;
  padding: 14px;
  margin-top: 10px;
  border: 1px solid rgba(0, 0, 0, 0.12);
  border-radius: 14px;
  background: var(--bg-ffffff);
  cursor: pointer;
}
.objectif-type-choice:active {
  transform: scale(0.99);
}
.objectif-type-text {
  display: flex;
  flex-direction: column;
  gap: 3px;
  min-width: 0;
}
.objectif-type-title {
  font-weight: 900;
  font-size: 1rem;
  color: var(--text, var(--fg-23252d));
}
.objectif-type-desc {
  font-size: 0.8125rem;
  color: var(--muted, var(--fg-7a8090));
  line-height: 1.35;
}

.objectif-check-inline {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 6px 0 4px;
  font-weight: 700;
  font-size: 0.875rem;
  color: var(--text, var(--fg-23252d));
  cursor: pointer;
}
.objectif-check-inline input {
  width: 20px;
  height: 20px;
  accent-color: var(--primary, var(--fg-e07a3f));
}

/* Formulaire */
.objectif-field {
  display: block;
  margin: 14px 0;
}
.objectif-label {
  display: block;
  font-weight: 800;
  font-size: 0.8125rem;
  margin-bottom: 6px;
  color: var(--text, var(--fg-23252d));
}
.objectif-input {
  width: 100%;
  border: 1px solid rgba(0, 0, 0, 0.14);
  border-radius: 12px;
  padding: 11px 12px;
  /* Jamais sous 1rem dans un champ : en dessous, iOS zoome des qu'on le
     touche, et la page reste agrandie apres. */
  font-size: 1rem;
  background: var(--bg-ffffff);
  box-sizing: border-box;
}
.objectif-hint {
  font-size: 0.75rem;
  color: var(--muted, var(--fg-7a8090));
  margin: 8px 0 0;
  line-height: 1.4;
}
.objectif-hint--avant {
  margin: 0 0 8px;
}
.objectif-count {
  display: flex;
  gap: 8px;
}
.objectif-count-btn {
  flex: 1;
  padding: 10px 0;
  border-radius: 12px;
  border: 1px solid rgba(0, 0, 0, 0.14);
  background: var(--bg-ffffff);
  font-weight: 800;
  font-size: 0.9375rem;
  cursor: pointer;
}
.objectif-count-btn.is-active {
  background: var(--primary, var(--bg-e07a3f));
  border-color: var(--primary, var(--bd-e07a3f));
  color: #fff;
}
.objectif-levels {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin: 6px 0 4px;
}
.objectif-level-row {
  display: flex;
  align-items: center;
  gap: 10px;
}
.objectif-level-swatch {
  width: 22px;
  height: 22px;
  border-radius: 6px;
  flex-shrink: 0;
  border: 1px solid rgba(0, 0, 0, 0.12);
}
.objectif-level-input {
  flex: 1;
  min-width: 0;
}
.objectif-level-count {
  flex-shrink: 0;
  font-size: 0.6875rem;
  font-weight: 700;
  color: var(--muted, var(--fg-9a9fab));
  min-width: 38px;
  text-align: right;
}
.objectif-form-actions {
  display: flex;
  gap: 10px;
  margin-top: 18px;
}
.objectif-form-actions .objectif-save {
  flex: 1;
}
.objectif-form-msg {
  color: var(--fg-9f1239);
  font-size: 0.8125rem;
  margin-top: 10px;
  min-height: 16px;
}
.objectif-year-btn {
  width: 32px;
  height: 32px;
  border-radius: 999px;
  border: 1px solid rgba(0, 0, 0, 0.12);
  background: var(--bg-ffffff);
  font-size: 1rem;
  cursor: pointer;
}

/* Detail : recap "annee glissante" (mois par mois + stats) */
.objectif-recap {
  margin: 6px 0 4px;
}
.objectif-recap-block {
  margin-bottom: 20px;
}
.objectif-recap-title {
  font-weight: 900;
  font-size: 0.875rem;
  color: var(--text, var(--fg-23252d));
  margin: 0 2px 10px;
}
.objectif-recap-stats {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.objectif-recap-stat {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  border: 1px solid rgba(0, 0, 0, 0.08);
  border-radius: 10px;
  background: var(--bg-ffffff);
}
.objectif-recap-swatch {
  flex-shrink: 0;
  width: 14px;
  height: 14px;
  border-radius: 4px;
}
.objectif-recap-stat-label {
  flex: 1;
  min-width: 0;
  font-size: 0.875rem;
  font-weight: 700;
  color: var(--text, var(--fg-23252d));
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.objectif-recap-stat-count {
  flex-shrink: 0;
  font-size: 0.875rem;
  font-weight: 800;
  color: var(--fg-23252d);
}
.objectif-recap-stat-pct {
  flex-shrink: 0;
  min-width: 42px;
  text-align: right;
  font-size: 0.8125rem;
  font-weight: 800;
  color: var(--muted, var(--fg-7a8090));
}
.objectif-recap-months {
  display: flex;
  flex-direction: column;
}
.objectif-recap-month {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 7px 4px;
  border-bottom: 1px solid rgba(0, 0, 0, 0.06);
}
.objectif-recap-month:last-child {
  border-bottom: none;
}
.objectif-recap-month-label {
  flex-shrink: 0;
  width: 74px;
  font-size: 0.8125rem;
  font-weight: 700;
  color: var(--fg-4a4f5a);
  text-transform: capitalize;
}
.objectif-recap-month-vals {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
}
.objectif-recap-chip {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 0.8125rem;
  font-weight: 800;
  color: var(--fg-23252d);
}
.objectif-recap-chip i {
  width: 12px;
  height: 12px;
  border-radius: 3px;
  display: inline-block;
}
.objectif-recap-chip small {
  font-weight: 600;
  color: var(--muted, var(--fg-7a8090));
}
.objectif-recap-mpct {
  margin-left: auto;
  font-size: 0.8125rem;
  font-weight: 800;
  color: var(--muted, var(--fg-7a8090));
}
.objectif-recap-none {
  font-size: 0.8125rem;
  color: var(--muted, var(--fg-9a9fab));
}

/* Saisie du jour + boutons de niveau */
.objectif-today {
  margin-top: 14px;
  padding-top: 14px;
  border-top: 1px solid rgba(0, 0, 0, 0.08);
}
.objectif-today-q {
  font-size: 0.875rem;
  margin-bottom: 8px;
  color: var(--text, var(--fg-23252d));
}
.objectif-level-btns {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.objectif-level-btn {
  border: 2px solid transparent;
  border-radius: 11px;
  padding: 9px 12px;
  font-size: 0.8125rem;
  font-weight: 800;
  color: var(--fg-2c2c2c);
  cursor: pointer;
  min-width: 40px;
}
.objectif-level-btn.is-selected {
  border-color: var(--bd-24262e);
  box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.08);
}

/* Objectif a 2 choix : grosse coche verte a cocher. */
.objectif-check-btn {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 12px 20px;
  border-radius: 14px;
  border: 2px solid var(--bd-cdd2da);
  background: var(--bg-f4f6f8);
  color: var(--fg-5a616d);
  font-size: 1rem;
  font-weight: 800;
  cursor: pointer;
  transition: transform 0.08s ease, background 0.15s ease, border-color 0.15s ease;
}
.objectif-check-btn:active {
  transform: scale(0.97);
}
.objectif-check-btn .objectif-check-mark {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  border-radius: 999px;
  border: 2px solid var(--bd-b7bcc6);
  font-size: 0.9375rem;
  line-height: 1;
  color: var(--fg-b7bcc6);
}
.objectif-check-btn.is-done {
  background: var(--bg-e6f6ec);
  border-color: var(--bd-3fb56d);
  color: var(--fg-1e7d45);
}
.objectif-check-btn.is-done .objectif-check-mark {
  background: var(--bg-3fb56d);
  border-color: var(--bd-3fb56d);
  color: #fff;
}

/* Correction : mini-calendrier */
.objectif-correct {
  margin-top: 16px;
}
.objectif-correct-panel {
  margin-top: 12px;
}
.objectif-correct-panel.hidden {
  display: none;
}
.objectif-mini-nav {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 14px;
  font-weight: 800;
  margin-bottom: 8px;
}
.objectif-mini-month {
  min-width: 120px;
  text-align: center;
}
.objectif-mini-weekdays {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 4px;
  margin-bottom: 4px;
  font-size: 0.6875rem;
  color: var(--muted, var(--fg-7a8090));
  text-align: center;
  font-weight: 700;
}
.objectif-mini-grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 4px;
}
.objectif-mini-cell {
  aspect-ratio: 1 / 1;
  border-radius: 8px;
  border: 1px solid rgba(0, 0, 0, 0.08);
  background: var(--bg-f4f5f8);
  font-size: 0.75rem;
  font-weight: 700;
  color: var(--fg-4a4f5a);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
}
.objectif-mini-cell.is-empty {
  border: none;
  background: transparent;
  cursor: default;
}
/* Jour en cours de saisie : contour marque + fond gris plus fonce
   (le fond est conserve pour les jours deja colores grace au style inline). */
.objectif-mini-cell.is-selected {
  background: var(--bg-cfd4dd);
  border-color: var(--bd-24262e);
  box-shadow: 0 0 0 2px #24262e;
  color: var(--fg-24262e);
}

/* Relance quand l'échéance d'un objectif est dépassée. */
.objectif-relance {
  border: 1px solid var(--bd-e9c06a);
  background: var(--bg-fff8e9);
  border-radius: 12px;
  padding: 10px 12px;
  margin: 8px 0;
}
.objectif-relance-txt {
  font-size: 0.84375rem;
  font-weight: 700;
  color: var(--fg-8a6414);
  margin-bottom: 8px;
}
.objectif-relance-actions {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  align-items: center;
}
.objectif-relance-btn {
  font-size: 0.8125rem;
  padding: 5px 10px;
  min-height: 0;
}
