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

:root {
  --color-primary: #2563eb;
  --color-primary-dark: #1d4ed8;
  --color-danger: #dc2626;
  --color-success: #16a34a;
  --color-warning: #d97706;
  --color-info: #0891b2;
  --color-bg: #f8fafc;
  --color-surface: #ffffff;
  --color-border: #e2e8f0;
  --color-text: #1e293b;
  --color-text-muted: #64748b;
  --font: 'Segoe UI', system-ui, -apple-system, sans-serif;
  --radius: 6px;
  --shadow: 0 1px 3px rgba(0,0,0,.1), 0 1px 2px rgba(0,0,0,.06);
}

body {
  font-family: var(--font);
  font-size: 14px;
  color: var(--color-text);
  background: var(--color-bg);
  line-height: 1.6;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}

a { color: var(--color-primary); text-decoration: none; }
a:hover { text-decoration: underline; }

/* === HEADER === */
.site-header {
  background: var(--color-surface);
  border-bottom: 1px solid var(--color-border);
  position: sticky;
  top: 0;
  z-index: 100;
  box-shadow: var(--shadow);
}
.header-inner {
  max-width: 1600px;
  margin: 0 auto;
  padding: 0 1.5rem;
  height: 54px;
  display: flex;
  align-items: center;
  gap: 2rem;
}
.brand {
  font-weight: 700;
  font-size: 1.1rem;
  color: var(--color-primary);
  letter-spacing: .5px;
  text-decoration: none;
}
.main-nav { display: flex; gap: 1rem; flex: 1; }
.main-nav a {
  color: var(--color-text-muted);
  font-size: .9rem;
  padding: .25rem .5rem;
  border-radius: var(--radius);
  text-decoration: none;
}
.main-nav a:hover, .main-nav a.active {
  color: var(--color-primary);
  background: #eff6ff;
}
.header-user { display: flex; align-items: center; gap: .75rem; font-size: .85rem; }
.username { font-weight: 600; }
.username--btn {
  background: none; border: none; padding: 0; cursor: pointer;
  font: inherit; font-weight: 600; color: inherit;
  text-decoration: underline dotted; text-underline-offset: 3px;
}
.username--btn:hover { color: var(--color-primary); }
.modal-overlay {
  display: none; position: fixed; inset: 0;
  background: rgba(0,0,0,.45); z-index: 300;
  align-items: center; justify-content: center;
}
.modal-overlay.open { display: flex; }
.modal-box {
  background: var(--color-surface); border-radius: var(--radius);
  padding: 1.5rem; width: 100%; max-width: 480px;
  box-shadow: 0 8px 32px rgba(0,0,0,.18);
  max-height: 90vh; overflow-y: auto;
}
.role-badge {
  padding: 2px 8px;
  border-radius: 12px;
  font-size: .75rem;
  font-weight: 500;
}
.role-chef_projet { background: #dbeafe; color: #1d4ed8; }
.role-ingenieur { background: #f0fdf4; color: #166534; }
.btn-logout {
  color: var(--color-text-muted);
  font-size: .8rem;
  padding: 3px 10px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
}
.btn-logout:hover { background: #f1f5f9; text-decoration: none; }

/* === MAIN === */
.main-content {
  flex: 1;
  max-width: 1600px;
  margin: 0 auto;
  padding: 2rem 1.5rem;
  width: 100%;
}

/* === BREADCRUMB === */
.breadcrumb {
  display: flex;
  align-items: center;
  gap: .4rem;
  font-size: .8rem;
  color: var(--color-text-muted);
  margin-bottom: 1.5rem;
}
.breadcrumb a { color: var(--color-text-muted); }
.breadcrumb a:hover { color: var(--color-primary); }
.breadcrumb .sep { color: #cbd5e1; }
.breadcrumb .current { color: var(--color-text); font-weight: 500; }

/* === FLASH MESSAGES === */
.flash-messages { margin-bottom: 1.5rem; }
.alert {
  padding: .75rem 1rem;
  border-radius: var(--radius);
  margin-bottom: .5rem;
  font-size: .875rem;
}
.alert-success { background: #f0fdf4; border: 1px solid #bbf7d0; color: #166534; }
.alert-danger  { background: #fef2f2; border: 1px solid #fecaca; color: #991b1b; }
.alert-warning { background: #fffbeb; border: 1px solid #fde68a; color: #92400e; }
.alert-info    { background: #f0f9ff; border: 1px solid #bae6fd; color: #0c4a6e; }

/* === PAGE HEADER === */
.page-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  margin-bottom: 1.5rem;
  gap: 1rem;
  flex-wrap: wrap;
}
.page-header h1 { font-size: 1.5rem; font-weight: 700; }
.header-actions { display: flex; gap: .5rem; flex-wrap: wrap; }
.subtitle { color: var(--color-text-muted); font-size: .9rem; margin-top: .25rem; }
.description { color: var(--color-text-muted); margin-bottom: 1.5rem; max-width: 720px; }
.meta { font-size: .85rem; color: var(--color-text-muted); margin-top: .25rem; }
.date { font-size: .8rem; }

/* === BUTTONS === */
.btn {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  padding: .45rem 1rem;
  border-radius: var(--radius);
  font-size: .875rem;
  font-weight: 500;
  border: 1px solid transparent;
  cursor: pointer;
  text-decoration: none;
  transition: background .15s, border-color .15s;
  white-space: nowrap;
}
.btn-primary  { background: var(--color-primary); color: #fff; border-color: var(--color-primary); }
.btn-primary:hover { background: var(--color-primary-dark); text-decoration: none; }
.btn-outline  { background: transparent; color: var(--color-text); border-color: var(--color-border); }
.btn-outline:hover { background: #f8fafc; text-decoration: none; }
.btn-danger   { background: var(--color-danger); color: #fff; border-color: var(--color-danger); }
.btn-danger:hover { background: #b91c1c; text-decoration: none; }
.btn-danger-outline { color: var(--color-danger); border-color: #fca5a5; }
.btn-danger-outline:hover { background: #fef2f2; }
.btn-sm  { padding: .3rem .7rem; font-size: .8rem; }
.btn-xs  { padding: .2rem .5rem; font-size: .75rem; }
.btn-full { width: 100%; justify-content: center; }

/* === CARDS === */
.card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 1rem;
}
.card-header {
  padding: 1rem 1.25rem .75rem;
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  border-bottom: 1px solid var(--color-border);
}
.card-title { font-size: 1rem; font-weight: 600; }
.card-title a { color: var(--color-text); }
.card-title a:hover { color: var(--color-primary); }
.card-body { padding: .75rem 1.25rem; flex: 1; }
.card-footer { padding: .75rem 1.25rem; border-top: 1px solid var(--color-border); background: #f8fafc; margin-top: auto; }

.stats-row { display: flex; gap: 1.5rem; margin: .5rem 0; }
.stat { font-size: .85rem; color: var(--color-text-muted); }
.stat strong { color: var(--color-text); }

/* === SECTION CARD === */
.section-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  margin-bottom: 1.5rem;
  padding: 1rem 1.25rem;
}
/* Variante sans padding pour les cartes purement tableau */
.section-card--flush {
  padding: 0;
}
.section-card--flush .table {
  margin: 0;
  width: 100%;
}
.section-header {
  padding: .75rem 1.25rem;
  border-bottom: 1px solid var(--color-border);
  display: flex;
  align-items: center;
  justify-content: space-between;
  background: #f8fafc;
  border-radius: var(--radius) var(--radius) 0 0;
  /* Annule le padding de la carte pour coller aux bords */
  margin: -1rem -1.25rem 1rem;
}
.section-header h2 { font-size: .95rem; font-weight: 600; }
/* Tables bord-à-bord dans une section-card paddée (exclut --flush qui n'a pas de padding) */
.section-card:not(.section-card--flush) .table {
  margin: 0 -1.25rem;
  width: calc(100% + 2.5rem);
}

/* === TWO COLUMNS === */
.two-columns {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.5rem;
  align-items: start;
}
@media (max-width: 768px) { .two-columns { grid-template-columns: 1fr; } }

/* === TABLE === */
.table {
  width: 100%;
  border-collapse: collapse;
  font-size: .875rem;
}
.table th {
  text-align: left;
  padding: .6rem 1rem;
  background: #f8fafc;
  color: var(--color-text-muted);
  font-weight: 600;
  font-size: .8rem;
  text-transform: uppercase;
  letter-spacing: .03em;
  border-bottom: 1px solid var(--color-border);
}
.table td {
  padding: .6rem 1rem;
  border-bottom: 1px solid var(--color-border);
  vertical-align: middle;
}
.table tr:last-child td { border-bottom: none; }
.table-hover tr:hover td { background: #f8fafc; }
.table .actions { text-align: right; white-space: nowrap; }

/* === BADGES === */
.badge {
  display: inline-flex;
  align-items: center;
  padding: 2px 8px;
  border-radius: 12px;
  font-size: .75rem;
  font-weight: 600;
  line-height: 1.4;
}
.badge-actif    { background: #dcfce7; color: #166534; }
.badge-archive  { background: #f1f5f9; color: #64748b; }
.badge-termine  { background: #dbeafe; color: #1e40af; }

.badge-statut {
  display: inline-block;
  padding: 2px 10px;
  border-radius: 12px;
  font-size: .75rem;
  font-weight: 500;
}
.statut-en_attente           { background: #f1f5f9; color: #64748b; }
.statut-consultations_ouvertes { background: #fef9c3; color: #854d0e; }
.statut-offres_recues        { background: #dbeafe; color: #1e40af; }
.statut-analyse_en_cours     { background: #fef3c7; color: #92400e; }
.statut-termine              { background: #dcfce7; color: #166534; }
.statut-attendue             { background: #f1f5f9; color: #64748b; }
.statut-recue                { background: #dbeafe; color: #1e40af; }
.statut-analysee             { background: #d1fae5; color: #065f46; }
.statut-negociee             { background: #fef3c7; color: #92400e; }
.statut-close                { background: #f1f5f9; color: #94a3b8; }
.statut-invitee              { background: #f1f5f9; color: #64748b; }
.statut-a_recu_dossier       { background: #fef9c3; color: #854d0e; }
.statut-offre_recue          { background: #dbeafe; color: #1e40af; }
.statut-en_negociation       { background: #fef3c7; color: #92400e; }
.statut-retenue              { background: #dcfce7; color: #166534; }
.statut-ecartee              { background: #fee2e2; color: #991b1b; }

/* === FORMS === */
.form-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  padding: 1.5rem;
  max-width: 600px;
  box-shadow: var(--shadow);
}
.form-group { margin-bottom: 1rem; }
.form-group label {
  display: block;
  font-size: .85rem;
  font-weight: 500;
  margin-bottom: .3rem;
  color: var(--color-text);
}
.form-control {
  display: block;
  width: 95%;
  padding: .45rem .75rem;
  font-size: .875rem;
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  background: var(--color-surface);
  color: var(--color-text);
  transition: border-color .15s, box-shadow .15s;
}
.form-control:focus {
  outline: none;
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px #dbeafe;
}
.form-control-sm { padding: .3rem .6rem; font-size: .8rem; }
.form-check { display: flex; align-items: center; gap: .4rem; }
.form-check-input { width: auto; }
.form-actions { display: flex; gap: .5rem; margin-top: 1.25rem; flex-wrap: wrap; }
.required { color: var(--color-danger); }
.inline-form { display: flex; gap: .4rem; align-items: center; flex-wrap: wrap; }
.mt-2 { margin-top: .75rem; }

/* === LOGIN === */
.login-container {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 80vh;
}
.login-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 8px;
  padding: 2.5rem;
  width: 100%;
  max-width: 380px;
  box-shadow: 0 4px 16px rgba(0,0,0,.1);
}
.login-title {
  font-size: 1.75rem;
  font-weight: 800;
  color: var(--color-primary);
  text-align: center;
  margin-bottom: .25rem;
}
.login-subtitle {
  font-size: .8rem;
  color: var(--color-text-muted);
  text-align: center;
  margin-bottom: 1.5rem;
}
.login-form .form-group { margin-bottom: .75rem; }

/* === EMPTY STATE === */
.empty-state {
  text-align: center;
  padding: 3rem 1rem;
  color: var(--color-text-muted);
}
.empty-state p { margin-bottom: 1rem; }
.empty-msg { color: var(--color-text-muted); font-style: italic; padding: 1rem; }

/* === MISC === */
.text-muted { color: var(--color-text-muted); }
.tag {
  display: inline-block;
  background: #fef9c3;
  color: #854d0e;
  border-radius: 4px;
  padding: 1px 6px;
  font-size: .72rem;
  font-weight: 500;
}

/* === PROJET NAV === */
.projet-nav {
  display: flex;
  gap: 1rem;
  margin-bottom: 1.5rem;
  flex-wrap: wrap;
}
.projet-nav-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  padding: .75rem 1.5rem;
  text-decoration: none;
  color: var(--color-text);
  min-width: 100px;
  transition: border-color .15s, box-shadow .15s;
}
.projet-nav-item:hover {
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px #dbeafe;
  text-decoration: none;
}
.nav-count { font-size: 1.5rem; font-weight: 700; color: var(--color-primary); }
.nav-label { font-size: .75rem; color: var(--color-text-muted); margin-top: .1rem; }

/* === ENTREPRISES === */
.lots-tags { display: flex; flex-wrap: wrap; gap: .3rem; }
.fiche-body { padding: .5rem 0 .75rem; }
.info-list { display: grid; grid-template-columns: auto 1fr; gap: .3rem .75rem; font-size: .875rem; }
.info-list dt { color: var(--color-text-muted); font-weight: 500; }
.info-list dd { margin: 0; }
.form-label-inline { font-size: .85rem; font-weight: 500; white-space: nowrap; }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }
.notes-block { border-top: 1px solid var(--color-border); padding-top: .75rem; }
.notes-label { font-size: .85rem; font-weight: 500; display: block; margin-bottom: .25rem; }
.notes-text { font-size: .875rem; color: var(--color-text-muted); white-space: pre-wrap; margin: 0; }
.notes-cell { max-width: 200px; font-size: .8rem; color: var(--color-text-muted); }
.add-participation-form { padding: .75rem 0; border-top: 1px solid var(--color-border); }
.historique-lot { padding: .75rem 1.25rem 0; }
.historique-lot:not(:last-child) { border-bottom: 1px solid var(--color-border); padding-bottom: .75rem; }
.historique-lot-title { font-size: .9rem; font-weight: 600; color: var(--color-text-muted); margin-bottom: .5rem; }
.row-active td { background: #f0fdf4 !important; }
.tag-active { background: #dcfce7; color: #166534; }
.statut-workflow { border-top: 1px solid var(--color-border); padding-top: .75rem; }

/* === RECHERCHE ENTREPRISE === */
.search-result-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: .6rem .75rem;
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  margin-bottom: .4rem;
  gap: 1rem;
}
.search-result-item:hover { background: #f8fafc; }
.result-info { flex: 1; min-width: 0; }
.badge-in-projet {
  background: #dcfce7; color: #166534;
  padding: 2px 8px; border-radius: 12px; font-size: .75rem; font-weight: 500;
  white-space: nowrap;
}

/* === ARCHIVES === */
.archives-section { margin-top: 2rem; }
.archives-title { font-size: .95rem; margin-bottom: .75rem; }
.toggle-archives {
  background: none;
  border: none;
  cursor: pointer;
  color: var(--color-text-muted);
  font-size: .9rem;
  font-weight: 600;
  padding: .25rem 0;
}
.toggle-archives:hover { color: var(--color-text); }
.projet-archive { opacity: .7; }

/* === ERROR PAGES === */
.error-page {
  text-align: center;
  padding: 4rem 1rem;
}
.error-code {
  font-size: 6rem;
  font-weight: 800;
  color: #e2e8f0;
  line-height: 1;
  margin-bottom: 1rem;
}
.error-page h1 { font-size: 1.5rem; margin-bottom: .75rem; }
.error-page p { color: var(--color-text-muted); margin-bottom: 1.5rem; }

/* === IMPORT / OFFRES === */
.table-sm td, .table-sm th { padding: .3rem .6rem; font-size: .82rem; }
.table-striped tbody tr:nth-child(even) td { background: #f8fafc; }
.row-active td { background: #f0fdf4 !important; }
.tag { display:inline-block; padding:1px 7px; border-radius:10px;
       font-size:.72rem; background:#dbeafe; color:#1e40af; font-weight:500; }
.tag-active { background:#dcfce7; color:#166534; }
.form-check-label { font-size:.87rem; }

/* === ALIGNEMENT === */
.statut-alignee      { background:#dcfce7; color:#166534; }
.statut-proposition  { background:#fef3c7; color:#92400e; }
.color-warning       { color: var(--color-warning); }

/* Progress bar */
.progress-bar-wrap { background:transparent }
.progress-bar-bg {
  height: 10px; border-radius: 5px;
  background: #e2e8f0; overflow: hidden;
}
.progress-bar-fill {
  height: 100%; border-radius: 5px;
  background: linear-gradient(90deg, #16a34a, #4ade80);
  transition: width .4s ease;
}

/* Toolbar */
.toolbar-alignement {
  display: flex; align-items: center; gap: .75rem; flex-wrap: wrap;
  background: #fffbeb; border: 1px solid #fbbf24;
  border-radius: var(--radius); padding: .6rem 1rem;
  margin-bottom: 1rem; position: sticky; top: 0; z-index: 10;
}

/* Alignment table */
.alignement-table { table-layout: fixed; }
.alignement-table th, .alignement-table td {
  vertical-align: top; overflow: hidden;
}
.groupe-ref { font-size: .82rem; color: var(--color-text-muted); }
.ligne-presente { background: #f0fdf4; }
.ligne-absente  { background: #fafafa; color: #94a3b8; font-size:.82rem; }
.ligne-cell-content { display:flex; flex-direction:column; gap:2px; }
.ligne-intitule  { font-size:.82rem; }
.ligne-montant   { font-size:.78rem; color: var(--color-text-muted); font-weight:600; }
.suggestion-row  { background: #fffbeb; }
.suggestion-row:hover { background: #fef9c3; }

/* Non-aligned section */
.offre-col-title {
  font-size: .85rem; font-weight: 600;
  padding: .4rem .6rem;
  background: var(--color-bg);
  border-radius: var(--radius);
  margin-bottom: .5rem;
}
.section-mini-header {
  font-size: .72rem; font-weight: 600; color: var(--color-text-muted);
  text-transform: uppercase; letter-spacing: .04em;
  padding: .2rem .5rem; margin: .4rem 0 .2rem;
  border-left: 3px solid var(--color-border);
}
.ligne-na {
  display: flex; align-items: center; justify-content: space-between;
  padding: .3rem .5rem; border-radius: var(--radius);
  border: 1px solid var(--color-border);
  margin-bottom: .25rem; cursor: pointer;
  transition: background .1s, border-color .1s;
}
.ligne-na:hover { background: #f1f5f9; border-color: var(--color-primary); }
.ligne-na.selected {
  background: #dbeafe; border-color: var(--color-primary);
  outline: 2px solid #93c5fd;
}
.orphelin-btn {
  flex-shrink: 0; opacity: .4; font-size: .9rem;
  line-height: 1; padding: 1px 6px;
}
.orphelin-btn:hover { opacity: 1; color: var(--color-danger); }

/* === COMPARAISON === */
.comp-table { font-size:.82rem; min-width:700px; border-collapse:collapse }
.comp-table th, .comp-table td { border:1px solid var(--color-border); padding:.3rem .6rem; }

.comp-header-top th {
  background:#1e3a5f; color:#fff; font-size:.8rem;
  text-align:center; white-space:nowrap; padding:.45rem .6rem;
}
.comp-header-sub th {
  background:#d9e1f2; font-size:.75rem; text-align:center;
  color:var(--color-text); font-weight:600;
}
.col-chap { width:60px; white-space:nowrap; }
.col-des  { min-width:200px; max-width:320px; }
.num-col  { text-align:right; white-space:nowrap; }
/* .ref-col : fond supprimé — le badge "Réf ★" dans l'en-tête suffit */

.comp-section td {
  font-weight:600; font-size:.8rem;
  background:#f0f4fa; color:var(--color-text-muted);
  padding:.3rem .8rem; text-transform:uppercase; letter-spacing:.03em;
}
.comp-section-warn td { background:#fff8e1; color:#92400e; }

/* Alerte couleurs sur les lignes — backgrounds retirés, remplacés par coloration cellule */
.comp-row               { background:#fff; }
.comp-row.alerte-1      { /* remplacé par ecart-l* cellule */ }
.comp-row.alerte-2      { /* remplacé par ecart-l* cellule */ }
.comp-row-orphelin      { opacity:.7; }
.comp-row:hover         { background:#f8fafc !important; }

/* Écarts */
.ecart-header { background:#2d5016 !important; }
.ecart-sub    { background:#e8f5e0 !important; color:#2d5016 !important; }
.ecart-val    { font-weight:600; }
.ecart-pos    { color:#c00000; }
.ecart-neg    { color:#375623; }

/* Pied de tableau */
.comp-total td { background:#ebf3e8; font-size:.88rem; border-top:2px solid #aaa; }

/* Sous-total dans la comparaison */
.comp-row-sstotal { opacity:.65; font-style:italic; }
.comp-row-sstotal td { border-style:dashed; }

/* Tables options / variantes */
.comp-table-options  .comp-header-top th { background:#1d4ed8; }
.comp-table-options  .comp-section td    { background:#eff6ff; color:#1d4ed8; }
.comp-table-variantes .comp-header-top th { background:#7c3aed; }
.comp-table-variantes .comp-section td    { background:#faf5ff; color:#7c3aed; }

/* Ligne extra — présente dans une seule offre (non référence) */
.comp-row-extra { background:#fafafa; }
.comp-row-extra:hover { background:#f1f5f9 !important; }

/* Ligne avec liaison manuelle */
.comp-row-linked { background:#fefce8; }
.cell-linked { background:color-mix(in srgb, #fbbf24 10%, transparent); }

/* Mode fusion */
.fusion-banner {
  display: flex; align-items: center; gap: 1rem;
  background: #eff6ff; border: 1px solid #93c5fd;
  border-radius: var(--radius); padding: .6rem 1rem;
  margin-bottom: 1rem; font-size: .875rem;
}
.btn-fusion-active { background: #dbeafe !important; border-color: var(--color-primary) !important; }
.btn-fusion-src    { display: none; background: none; border: none; cursor: pointer;
                     font-size: 1rem; padding: 0 2px; line-height: 1; opacity: .65; }
.btn-fusion-src:hover { opacity: 1; }
.fusion-source     { outline: 2px solid var(--color-primary) !important;
                     background: #eff6ff !important; }
.fusion-target          { background: #f0fdf4 !important; cursor: pointer; }
.fusion-target:hover    { background: #dcfce7 !important; }
.fusion-target-override { background: #fffbeb !important; cursor: pointer; }
.fusion-target-override:hover { background: #fef3c7 !important; }
.btn-lier-ici      { background: #16a34a; color: #fff; border: none; border-radius: 50%;
                     width: 20px; height: 20px; font-size: .75rem; cursor: pointer;
                     line-height: 20px; text-align: center; padding: 0; display: none; }
.btn-lier-ici:hover { background: #15803d; }
.btn-lier-ici-override      { background: #d97706 !important; }
.btn-lier-ici-override:hover { background: #b45309 !important; }

/* Icônes de liaison */
.liaison-chip { font-size: .75rem; color: #92400e; white-space: nowrap; }
.btn-delier   { background: none; border: none; cursor: pointer; font-size: .7rem;
                color: #9ca3af; padding: 0 1px; line-height: 1; }
.btn-delier:hover { color: var(--color-danger); }

/* Tag référence */
.tag-ref    { background:#fff3cd; color:#856404; }
.tag-active { background:#dcfce7; color:#166534; }

/* Points de légende */
.alerte-dot {
  display:inline-block; width:10px; height:10px; border-radius:50%;
  margin-right:.3rem; vertical-align:middle;
}
.alerte-dot.alerte-0 { background:#d1fae5; border:1px solid #6ee7b7; }
.alerte-dot.alerte-1 { background:#fef3c7; border:1px solid #fbbf24; }
.alerte-dot.alerte-2 { background:#fee2e2; border:1px solid #fca5a5; }

/* ── Colonnes optionnelles masquées via display:none sur les cellules ─────────
   JS applique display:'table-cell' pour les montrer, '' pour les cacher.
   Seul endroit à changer si on veut modifier le comportement par défaut.       */
td.cg-unit,      th.cg-unit,
td.cg-qty,       th.cg-qty,
td.cg-pu,        th.cg-pu,
td.cg-obs,       th.cg-obs,
td.cg-ecart-eur, th.cg-ecart-eur,
td.cg-ecart-pct, th.cg-ecart-pct,
td.cg-total,     th.cg-total { display: none; }

/* Tableau comparatif — scroll interne (horizontal + vertical dans le wrapper).
   max-height adaptatif : remplit l'espace disponible sous les éléments fixes.  */
.comp-scroll-wrapper {
  overflow: auto;
  max-height: calc(100vh - 210px);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
}
.comp-table { font-size:.82rem; border-collapse:collapse; width:max-content; min-width:100%; }
.comp-table th, .comp-table td { border:1px solid var(--color-border); padding:.3rem .55rem; vertical-align:middle; }

/* Sticky header rows — top:0 = bord supérieur du scroll container (le wrapper) */
.comp-header-top th {
  position:sticky; top:0; z-index:4;
  background:#1e3a5f; color:#fff; font-size:.8rem;
  text-align:center; padding:.45rem .6rem;
}
.comp-header-sub th {
  position:sticky; /* top calculé par JS = hauteur de la 1re ligne */ z-index:4;
  background:#d9e1f2; font-size:.75rem; text-align:center;
  color:var(--color-text); font-weight:600;
}

/* Sticky left columns — background EXPLICITE (pas inherit) pour masquer le scroll */
.cell-sticky { position:sticky; z-index:2; background:#fff; }
.cell-s0 { left:0;    width:30px;   min-width:30px; }
.cell-s1 { left:30px; width:58px; }
.cell-s2 { left:88px; min-width:200px; max-width:320px; }
/* Corner (sticky top + left) */
.comp-header-top .cell-sticky,
.comp-header-sub .cell-sticky { z-index:6; background:#1e3a5f; }
.comp-header-sub .cell-sticky { background:#d9e1f2; }
/* Backgrounds par type de ligne — doivent matcher exactement la ligne */
.comp-row        .cell-sticky { background:#fff; }
.comp-row.alerte-1 .cell-sticky { background:#fff; }
.comp-row.alerte-2 .cell-sticky { background:#fff; }
.comp-row-extra  .cell-sticky { background:#fafafa; }
.comp-row-linked .cell-sticky { background:#fefce8; }
.comp-row:hover  .cell-sticky { background:#f8fafc !important; }
.comp-row-sstotal .cell-sticky { color:rgba(0,0,0,0.5); }
.comp-section    .cell-sticky { background:#f0f4fa; }
.comp-total td.cell-sticky    { background:#ebf3e8; }

/* Texte atténué sur les cellules sticky des lignes non alignées — background reste opaque */
.extra-dim { color:var(--color-text-muted); }

/* Offer header avec total */
.offer-header-cell { padding:.4rem .6rem !important; }
.offer-total-hdr { font-size:.8rem; font-weight:600; opacity:.9; margin-top:.2rem; }

/* Ecart — per offer (dans les colonnes de l'offre) */
.ecart-hdr { background:#e8f5e0 !important; color:#2d5016 !important; }
.ecart-cell { font-weight:600; text-align:right; white-space:nowrap; }
.ecart-cell.ecart-pos { color:#c00000; }
.ecart-cell.ecart-neg { color:#375623; }

/* Qté */
.cell-qty { text-align:center; font-size:.78rem; color:var(--color-text-muted); white-space:nowrap; }
/* Différence d'unité — toujours visible car sémantiquement distinct de l'écart % */
td.qty-unit-diff { background:#fff7ed !important; color:#c2410c; font-style:italic; }

/* === COULEURS ÉCARTS CELLULE — 5 bandes configurables via JS (localStorage) === */
:root {
  --ecart-l0-bg: #93c5fd;   /* bleu foncé pastel  — < seuil A  */
  --ecart-l1-bg: #dbeafe;   /* bleu clair pastel  — A à B      */
  --ecart-l2-bg: #ffffff;   /* neutre             — B à C      */
  --ecart-l3-bg: #fecaca;   /* rouge clair pastel — C à D      */
  --ecart-l4-bg: #fca5a5;   /* rouge foncé pastel — > D        */
}
td.ecart-l0 { background: var(--ecart-l0-bg) !important; }
td.ecart-l1 { background: var(--ecart-l1-bg) !important; }
td.ecart-l2 { background: var(--ecart-l2-bg) !important; }
td.ecart-l3 { background: var(--ecart-l3-bg) !important; }
td.ecart-l4 { background: var(--ecart-l4-bg) !important; }

/* Légende 5 bandes */
.ecart-dot {
  display:inline-block; width:10px; height:10px; border-radius:50%;
  margin-right:.3rem; vertical-align:middle; border:1px solid rgba(0,0,0,.1);
}
.ecart-legend-item { display:inline-flex; align-items:center; white-space:nowrap; }

/* Observations */
.cell-obs { min-width:120px; padding:.2rem .4rem !important; vertical-align:top; }
.cell-obs[contenteditable] { cursor:text; }
.cell-obs[contenteditable]:empty::before { content:'…'; color:#cbd5e1; pointer-events:none; }
.cell-obs[contenteditable]:focus { outline:2px solid var(--color-primary); outline-offset:-1px; background:#fefce8; }

/* Toggles colonnes */
.col-toggle-bar {
  display:flex; align-items:center; gap:.5rem; flex-wrap:wrap;
  padding:.5rem 0; margin-bottom:.75rem; font-size:.82rem;
}
.col-toggle-bar span { color:var(--color-text-muted); }
.col-toggle-btn {
  padding:.2rem .65rem; border-radius:999px; font-size:.78rem; cursor:pointer;
  border:1px solid var(--color-border); background:#f8fafc; color:var(--color-text-muted);
  transition:background .15s, color .15s;
}
.col-toggle-btn:hover { background:#e2e8f0; color:var(--color-text); }
.col-toggle-btn.active { background:#1e3a5f; color:#fff; border-color:#1e3a5f; }

/* Btn fusion dans les cellules total */
.total-cell { position:relative; }
.total-cell .btn-fusion-src { position:absolute; top:2px; right:2px; font-size:.75rem; }

/* === ÉDITEUR DE LIGNES === */

/* Sticky page header for the editor (wraps title row + stats bar) */
.editor-header {
  position: sticky;
  top: 54px;          /* height of .site-header */
  z-index: 50;
  background: var(--color-bg);
  border-bottom: 1px solid var(--color-border);
  box-shadow: 0 2px 8px rgba(0,0,0,.07);
  padding: .5rem 0 0;
  margin-bottom: .75rem;
}

.editor-stats-bar {
  display:flex; align-items:center; gap:.6rem; flex-wrap:wrap;
  padding:.45rem 1rem; font-size:.85rem;
  border-top: 1px solid var(--color-border);
  background: var(--color-bg-subtle, #f8f9fa);
}
.stat-sep { color:var(--color-border); }

.editor-legend {
  display:flex; gap:1.2rem; flex-wrap:wrap; align-items:center;
  font-size:.75rem; color:var(--color-text-muted);
  margin-bottom:.5rem; padding:0 .25rem;
}
.leg-swatch {
  display:inline-block; width:12px; height:12px; border-radius:2px;
  margin-right:.3rem; vertical-align:middle; border:1px solid rgba(0,0,0,.1);
}
.leg-base     { background:#fff; }
.leg-option   { background:#dbeafe; }
.leg-variante { background:#f3e8ff; }
.leg-sstotal  { background:#fff; border-style:dashed; opacity:.7; }

/* Table */
.lignes-editor-table { font-size:.8rem; border-collapse:collapse; }
.lignes-editor-table th, .lignes-editor-table td {
  border:1px solid var(--color-border); padding:.2rem .35rem; vertical-align:middle;
}
.editor-thead th {
  background:#f8fafc; font-weight:600; font-size:.75rem;
  position:relative; top:0; z-index:2;  /* top driven by JS scroll handler */
}

/* Section header in editor */
.editor-section-row td {
  background:#f0f4fa; font-weight:600; font-size:.78rem;
  color:var(--color-text-muted); padding:.3rem .8rem;
  text-transform:uppercase; letter-spacing:.04em;
  pointer-events:none;
}

/* Row states */
.ligne-row { cursor:pointer; background:#fff; transition:background .08s; }
.ligne-row:hover { background:#f8fafc; }
.ligne-row.selected { background:#dbeafe !important; outline:1px solid #93c5fd inset; }

/* Categories */
.ligne-row.cat-option   { background:#eff6ff; }
.ligne-row.cat-variante { background:#faf5ff; }
.ligne-row.cat-option.selected   { background:#bfdbfe !important; }
.ligne-row.cat-variante.selected { background:#e9d5ff !important; }

/* Sous-total */
.ligne-row.ligne-sous-total { opacity:.72; font-style:italic; }
.ligne-row.ligne-sous-total td { border-style:dashed; }

/* Inputs */
.cell-input {
  width:100%; border:none; background:transparent; font-size:.8rem;
  font-family:inherit; color:inherit; padding:1px 2px;
  outline:none; box-sizing:border-box;
}
.cell-input:focus {
  background:#fff; outline:2px solid var(--color-primary);
  outline-offset:-1px; border-radius:2px;
}
.cell-textarea {
  resize:none; overflow:hidden; min-height:1.4em; line-height:1.4;
}
.cell-number { text-align:right; }

/* Category select */
.cat-select {
  font-size:.73rem; padding:1px 3px; border-radius:3px;
  border:1px solid var(--color-border); background:#f8fafc;
  cursor:pointer; outline:none;
}
.cat-select:focus { outline:2px solid var(--color-primary); }

/* Tags for categories */
.tag-option   { background:#dbeafe; color:#1d4ed8; }
.tag-variante { background:#f3e8ff; color:#7c3aed; }

/* Floating bulk toolbar */
.bulk-toolbar {
  position:fixed; bottom:1.25rem; left:50%; transform:translateX(-50%);
  background:var(--color-text); color:#fff; border-radius:8px;
  padding:.6rem 1rem; display:flex; align-items:center; gap:.75rem;
  box-shadow:0 4px 16px rgba(0,0,0,.25); z-index:200; font-size:.82rem;
  flex-wrap:wrap; max-width:90vw;
}
.bulk-count { font-weight:600; white-space:nowrap; }
.bulk-actions { display:flex; align-items:center; gap:.4rem; flex-wrap:wrap; }
.bulk-label  { opacity:.7; font-size:.75rem; }
.bulk-sep    { opacity:.4; }

/* Toolbar category buttons */
.cat-btn-base    { background:#e2e8f0; color:#1e293b; }
.cat-btn-option  { background:#dbeafe; color:#1d4ed8; }
.cat-btn-variante { background:#f3e8ff; color:#7c3aed; }

/* === FOOTER === */
.site-footer {
  text-align: center;
  padding: 1rem;
  font-size: .75rem;
  color: var(--color-text-muted);
  border-top: 1px solid var(--color-border);
  margin-top: auto;
}

/* === ORG SWITCHER === */
.org-switcher {
  position: relative;
  display: inline-block;
}

.org-name {
  font-size: .78rem;
  font-weight: 600;
  color: var(--color-text-muted);
  background: none;
  border: 1px solid var(--color-border);
  border-radius: 4px;
  padding: .2rem .5rem;
  cursor: pointer;
  white-space: nowrap;
  line-height: 1.4;
}

.org-name:not(button) {
  cursor: default;
  border: none;
  padding: .2rem .4rem;
}

.org-caret {
  font-size: .7rem;
  margin-left: .2em;
}

.org-dropdown {
  position: absolute;
  top: calc(100% + 4px);
  right: 0;
  background: #fff;
  border: 1px solid var(--color-border);
  border-radius: 6px;
  box-shadow: 0 4px 12px rgba(0,0,0,.12);
  min-width: 180px;
  z-index: 200;
  overflow: hidden;
}

.org-option {
  display: block;
  padding: .5rem .75rem;
  font-size: .82rem;
  color: var(--color-text);
  text-decoration: none;
}

.org-option:hover { background: var(--color-bg-light); }
.org-option--active { font-weight: 600; color: var(--color-primary); }

.badge-org-suspended {
  display: inline-block;
  font-size: .65rem;
  background: #fee2e2;
  color: #b91c1c;
  border-radius: 3px;
  padding: 0 .3em;
  vertical-align: middle;
}

/* === SUSPENDED ORG BANNER === */
.org-suspended-banner {
  background: #fef2f2;
  border-bottom: 2px solid #fca5a5;
  color: #b91c1c;
  font-size: .82rem;
  font-weight: 500;
  padding: .5rem 1.5rem;
  text-align: center;
}

/* === PRESENCE AVATARS === */
.presence-bar {
  display: flex;
  align-items: center;
  gap: .3rem;
  margin-right: .5rem;
}

.presence-avatar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--color-primary);
  color: #fff;
  font-size: .65rem;
  font-weight: 700;
  letter-spacing: .03em;
  border: 2px solid #fff;
  box-shadow: 0 1px 3px rgba(0,0,0,.15);
  cursor: default;
  flex-shrink: 0;
}

.presence-avatar:nth-child(2) { background: #7c3aed; }
.presence-avatar:nth-child(3) { background: #059669; }
.presence-avatar:nth-child(4) { background: #d97706; }
.presence-avatar:nth-child(n+5) { background: #64748b; }

/* === SOCKET STATUS INDICATOR === */
.socket-status {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  flex-shrink: 0;
  margin-right: .25rem;
  transition: background .3s;
}
.socket-status--on  { background: #22c55e; box-shadow: 0 0 4px #22c55e; }
.socket-status--off { background: #ef4444; }

/* === RT RELOAD BANNER === */
.rt-reload-banner {
  position: sticky;
  top: 0;
  z-index: 120;
  background: #fefce8;
  border-bottom: 2px solid #fbbf24;
  color: #92400e;
  font-size: .82rem;
  padding: .45rem 1.25rem;
  display: flex;
  align-items: center;
  gap: .5rem;
  flex-wrap: wrap;
}

/* === UPLOAD SPINNER OVERLAY === */
.upload-overlay {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(255,255,255,.88);
  z-index: 9999;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 1.25rem;
}
.upload-overlay.active { display: flex; }
.spinner-ring {
  width: 52px;
  height: 52px;
  border: 5px solid var(--color-border);
  border-top-color: var(--color-primary);
  border-radius: 50%;
  animation: spin .75s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }
.upload-overlay p {
  font-size: .95rem;
  color: var(--color-text-muted);
  margin: 0;
}

.btn:disabled, .btn[disabled] {
  opacity: .45;
  cursor: not-allowed;
  pointer-events: none;
}

/* Ligne de chapitre hiérarchique sans données financières */
.chap-header-row td,
.comp-row-chap-header td {
  background: var(--color-bg-subtle, #f4f6f9) !important;
  font-weight: 600;
}
.chap-header-row td:not(:first-child):not(.col-chap):not(.col-des) {
  color: var(--color-text-muted);
  font-size: .8rem;
}

/* ── Abonnement expiré : désactivation visuelle des actions ──────────────── */
body.abo-expire form[method="post"]:not(.abo-exempt) button[type="submit"],
body.abo-expire form[method="POST"]:not(.abo-exempt) button[type="submit"],
body.abo-expire form[method="post"]:not(.abo-exempt) input[type="file"],
body.abo-expire form[method="POST"]:not(.abo-exempt) input[type="file"],
body.abo-expire form[method="post"]:not(.abo-exempt) .btn-danger,
body.abo-expire form[method="POST"]:not(.abo-exempt) .btn-danger {
  opacity: .4;
  cursor: not-allowed;
  pointer-events: none;
  position: relative;
}

body.abo-expire form[method="post"]:not(.abo-exempt),
body.abo-expire form[method="POST"]:not(.abo-exempt) {
  position: relative;
}

/* Tooltip au survol des zones bloquées */
body.abo-expire form[method="post"]:not(.abo-exempt)::after,
body.abo-expire form[method="POST"]:not(.abo-exempt)::after {
  content: "Abonnement expiré — action non disponible";
  display: none;
  position: absolute;
  bottom: calc(100% + 6px);
  left: 50%;
  transform: translateX(-50%);
  background: #1e293b;
  color: #fff;
  font-size: .72rem;
  white-space: nowrap;
  padding: .3rem .6rem;
  border-radius: 5px;
  z-index: 9999;
  pointer-events: none;
}
body.abo-expire form[method="post"]:not(.abo-exempt):hover::after,
body.abo-expire form[method="POST"]:not(.abo-exempt):hover::after {
  display: block;
}
