:root{
  --bg:#0b1320;
  --panel:#0f1b2f;
  --card:#ffffff;
  --muted:#6b7280;
  --text:#111827;
  --primary:#1b3c59;
  --primary2:#2f5d82;
  --border:#e5e7eb;
  --shadow-sm:0 1px 2px rgba(0,0,0,.04);
  --shadow-md:0 4px 12px rgba(0,0,0,.06),0 2px 4px rgba(0,0,0,.04);
  --shadow-lg:0 8px 24px rgba(0,0,0,.08),0 2px 8px rgba(0,0,0,.04);
  --radius-sm:10px;
  --radius-md:12px;
  --radius-lg:16px;
}
*{box-sizing:border-box}
body{margin:0;font-family:"Segoe UI",system-ui,-apple-system,sans-serif;background:linear-gradient(180deg,#f0f4f8 0%,#e8eef4 100%);color:var(--text);-webkit-font-smoothing:antialiased}
.app{display:grid;grid-template-columns:260px 1fr;min-height:100vh;min-height:100dvh}
.app-mobile-header{display:none}
.sidebar-backdrop{display:none}
.sidebar{background:linear-gradient(180deg,var(--bg),#08101b);color:#fff;padding:14px;display:flex;flex-direction:column;height:100vh;overflow:hidden}
.brand{padding:8px 8px 12px;border-bottom:1px solid rgba(255,255,255,.08)}
.brand-top-row{display:flex;align-items:flex-start;gap:10px;min-width:0}
.brand-titles{min-width:0;flex:1}
.brand-company-logo{
  flex-shrink:0;
  width:56px;
  height:56px;
  object-fit:contain;
  border-radius:12px;
  background:rgba(255,255,255,.08);
  border:1px solid rgba(255,255,255,.14);
}
.brand-company-logo.hidden{display:none!important}
.brand-title{font-size:20px;font-weight:700}
.brand-sub{opacity:.75;font-size:12px;margin-top:6px}
.module-notif-wrap{position:relative;display:inline-flex}
.module-notif-wrap .notif-btn{position:relative;background:#fff;border:1px solid var(--border);color:var(--text);width:38px;height:38px;border-radius:9px;cursor:pointer;display:flex;align-items:center;justify-content:center}
.module-notif-wrap .notif-btn:hover{background:#f8fafc;border-color:var(--primary)}
.module-notif-wrap .notif-badge{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 5px;background:#dc2626;color:#fff;font-size:11px;font-weight:700;border-radius:999px;display:flex;align-items:center;justify-content:center}
.module-notif-wrap .notif-badge.hidden{display:none}
.module-notif-wrap .notif-panel{position:absolute;top:100%;left:0;margin-top:6px;width:min(380px,calc(100vw - 24px));max-height:min(420px,70vh);background:#fff;border:1px solid var(--border);border-radius:12px;box-shadow:0 10px 40px rgba(0,0,0,.2);z-index:100;overflow:hidden;display:flex;flex-direction:column}
.module-notif-wrap .notif-panel.hidden{display:none}
.module-notif-wrap .notif-panel-header{font-weight:700;padding:12px 14px;background:#f8fafc;border-bottom:1px solid var(--border);font-size:14px}
.module-notif-wrap .notif-list{overflow-y:auto;max-height:min(320px,58vh);flex:1;min-height:0}
.module-notif-wrap .notif-empty{padding:20px;text-align:center;color:var(--muted);font-size:13px}
.module-notif-wrap .notif-item{display:block;width:100%;text-align:left;padding:10px 14px;border:0;border-bottom:1px solid var(--border);background:#fff;cursor:pointer;font:inherit;transition:background .15s;white-space:normal}
.module-notif-wrap .notif-item:hover{background:#f8fafc}
.module-notif-wrap .notif-item:last-child{border-bottom:0}
.module-notif-wrap .notif-item-titre{display:block;font-weight:600;font-size:13px;color:#111}
.module-notif-wrap .notif-item-msg{display:block;font-size:12px;color:var(--muted);margin-top:4px;line-height:1.45;white-space:normal;word-break:break-word}
.module-notif-wrap .notif-item.notif-warning .notif-item-titre{color:#b26a00}
.module-notif-wrap .notif-item.notif-warning .notif-item-msg{color:#92400e}
.module-notif-banner{display:grid;gap:8px;margin-bottom:12px}
.module-notif-banner.hidden{display:none}
.notif-banner-item{padding:10px 14px;border-radius:10px;border:1px solid var(--border);background:#fff;font-size:13px}
.notif-banner-item.notif-info{border-left:4px solid var(--primary);background:#f8fbff}
.notif-banner-item.notif-warning{border-left:4px solid #d97706;background:#fffbeb}
.notif-banner-titre{display:block;font-weight:600;color:#111}
.notif-banner-msg{display:none}
.nav{display:grid;gap:2px;margin-top:8px;overflow-y:auto;flex:1;min-height:0;padding-right:4px}
.nav-section-toggle{
  margin-top:0;
  width:100%;
  background:transparent;
  color:rgba(255,255,255,.88);
  border:0;
  padding:2px 8px 2px;
  font-size:10px;
  letter-spacing:.6px;
  text-transform:uppercase;
  opacity:.85;
  cursor:pointer;
  display:flex;
  align-items:center;
  justify-content:space-between;
}
.nav-section-toggle:hover{opacity:1}
.nav-section-toggle::after{
  content:"▾";
  font-size:12px;
  line-height:1;
  opacity:.9;
  transform:rotate(0deg);
  transition:transform .15s ease;
}
.nav-section-toggle[aria-expanded="false"]::after{
  transform:rotate(-90deg);
}
.nav-section-body{display:grid;gap:2px}
.nav-section-body.is-collapsed{display:none}
.nav-sep{
  height:1px;
  background:rgba(255,255,255,.10);
  margin:2px 0;
}
.nav-item{background:rgba(255,255,255,.08);color:#fff;border:1px solid rgba(255,255,255,.06);padding:6px 8px;border-radius:9px;text-align:left;cursor:pointer}
.nav-item:hover{background:rgba(255,255,255,.14)}
.nav-item.active{background:rgba(255,255,255,.2);border-color:rgba(255,255,255,.18)}
.nav-item-notif{position:relative;display:flex;align-items:center;justify-content:space-between;gap:6px}
.nav-notif-badge{flex-shrink:0;width:16px;height:16px;color:#fff;display:flex;align-items:center;justify-content:center}
.nav-notif-badge svg{display:block}
.nav-notif-badge.hidden{display:none}
.nav-item.nav-icon{
  width:44px;
  height:38px;
  padding:0;
  display:flex;
  align-items:center;
  justify-content:center;
}
.sr-only{
  position:absolute;
  width:1px;
  height:1px;
  padding:0;
  margin:-1px;
  overflow:hidden;
  clip:rect(0,0,0,0);
  white-space:nowrap;
  border:0;
}
.main{display:flex;flex-direction:column;height:100vh;overflow:hidden}
.topbar{
  border-bottom:1px solid var(--border);
  padding:28px 22px;
  min-height:110px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  background:
    linear-gradient(90deg, rgba(0,0,0,.55), rgba(0,0,0,.10)),
    url("/photo%20couverture.png");
  background-size:cover;
  background-position:center;
  background-repeat:no-repeat;
  color:#fff;
}
.page-title{font-size:20px;font-weight:800;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.35)}
.page-subtitle{color:var(--muted);font-size:12px;margin-top:2px}
.topbar-right{display:flex;gap:10px;align-items:center}
.pill{display:inline-block;padding:7px 10px;border:1px solid rgba(255,255,255,.35);border-radius:999px;text-decoration:none;color:#fff;background:rgba(0,0,0,.28)}
.view{padding:18px 22px;flex:1;min-height:0;overflow-y:auto}
#dashboard{display:flex;flex-direction:column;gap:0}
.hidden{display:none !important}
.dash-zone{margin-bottom:28px;padding-bottom:24px;border-bottom:1px solid rgba(0,0,0,.06)}
.dash-zone:last-of-type{border-bottom:none;margin-bottom:0}
.dash-zone-title{font-size:12px;font-weight:800;color:var(--primary);margin-bottom:14px;letter-spacing:.6px;text-transform:uppercase;display:flex;align-items:center;gap:10px}
.dash-zone-title::before{content:"";display:inline-block;width:4px;height:18px;background:linear-gradient(180deg,var(--primary),var(--primary2));border-radius:2px;flex-shrink:0}
.cards{display:grid;grid-template-columns:repeat(4,minmax(160px,1fr));gap:12px;margin-bottom:14px}
.dash-zone .cards:last-of-type{margin-bottom:0}
#dash-polymere-row{grid-column:1/-1}
#dash-zone-appro .dashboard-row .panel{grid-column:1/-1}
#dash-zone-appro .dashboard-row-two-cols .panel{grid-column:auto}
.cards-section{grid-column:1/-1;font-weight:900;color:#111827;margin-top:6px;letter-spacing:.2px}
.cards-section:first-child{margin-top:0}
.card{background:#fff;border:1px solid rgba(0,0,0,.06);border-radius:var(--radius-md);padding:16px;box-shadow:var(--shadow-sm);transition:box-shadow .2s,border-color .2s,transform .15s}
.card-ca-mois{border-left:4px solid}
.card-ca-mois .card-v{font-size:26px}
.card-ca-mois.card-ca-ok{border-left-color:#059669;background:#fff}
.card-ca-mois.card-ca-ok .card-v,.card-ca-mois.card-ca-ok .ca-mois-pct{color:#047857}
.card-ca-mois.card-ca-warn{border-left-color:#d97706;background:#fff}
.card-ca-mois.card-ca-warn .card-v,.card-ca-mois.card-ca-warn .ca-mois-pct{color:#b45309}
.card-ca-mois.card-ca-bad{border-left-color:#dc2626;background:#fff}
.card-ca-mois.card-ca-bad .card-v,.card-ca-mois.card-ca-bad .ca-mois-pct{color:#b91c1c}
.card-ca-mois.card-ca-neutral{border-left-color:#6b7280;background:#fff}
.card-ca-mois.card-ca-neutral .card-v,.card-ca-mois.card-ca-neutral .ca-mois-pct{color:#374151}
.card-ca-mois .ca-mois-sub{margin-top:12px;padding-top:10px;border-top:1px solid rgba(0,0,0,.06);display:flex;flex-direction:column;gap:8px}
.card-ca-mois .ca-mois-gauge-wrap{display:flex;align-items:center;gap:10px}
.card-ca-mois .ca-mois-gauge{flex:1;margin-top:0}
.card-ca-mois .ca-mois-pct{font-size:13px;font-weight:700;min-width:42px;text-align:right}
.card:hover{box-shadow:var(--shadow-md);border-color:rgba(0,0,0,.08)}
#dash-cards-appro .card.card-appro-gauge{grid-column:span 2}
#dash-cards-appro .card.card-appro-delay{grid-column:span 2}
#dash-zone-appro .dashboard-row .dash-valeur-stock-wrap{grid-column:1/-1}
.card-k{color:var(--muted);font-size:11px;font-weight:600;letter-spacing:.3px;text-transform:uppercase}
.card-v{font-size:24px;font-weight:800;margin-top:8px;letter-spacing:-.02em;color:#111827;line-height:1.2}
.card-v-split{display:flex;flex-direction:column;gap:8px;font-size:16px;font-weight:600}
.card-v-split span{display:block}
.card-v-split small{font-size:11px;font-weight:500}
.card-production-mois{display:flex;flex-direction:column;gap:10px;margin-top:6px}
.card-production-mois .prod-mois-row{display:flex;align-items:center;gap:10px;padding:6px 0;border-bottom:1px solid rgba(0,0,0,.05);font-size:13px}
.card-production-mois .prod-mois-row:last-child{border-bottom:none;padding-bottom:0}
.card-production-mois .prod-mois-label{color:var(--muted);font-weight:600;min-width:56px}
.card-production-mois .prod-mois-val{font-weight:800;font-size:18px;color:#111827;min-width:36px}
.card-production-mois .prod-mois-pct{display:flex;gap:6px;flex-wrap:wrap;margin-left:auto}
.card-production-mois .prod-mois-pct .chip{font-size:10px;padding:3px 8px}
.card-production-mois-wrap{border-left:4px solid var(--primary)}
.card-production-mois-wrap .card-v{font-size:14px;font-weight:600;margin-top:0}
.prod-mois-unit{font-size:11px;font-weight:500;color:var(--muted)}
.card-sub{margin-top:10px;display:flex;gap:6px;flex-wrap:wrap;font-size:11px}
.card-sub .chip{border:none;background:rgba(0,0,0,.04);border-radius:6px;padding:4px 10px;color:var(--muted);font-weight:500}
.card-sub .chip.ok{background:rgba(22,163,74,.12);color:#15803d}
.card-sub .chip.warn{background:rgba(217,119,6,.12);color:#b45309}
.card-sub .chip.info{background:rgba(27,60,89,.1);color:var(--primary)}
.card-sub .chip.bad{background:rgba(220,38,38,.1);color:#b91c1c}
.card-sub .chip.neutral{background:rgba(55,65,81,.08);color:#374151}
.kpi-gauge{margin-top:10px;height:6px;border-radius:999px;background:rgba(0,0,0,.06);overflow:hidden}
.kpi-gauge-bar{height:100%;border-radius:999px;transition:width .4s ease}
.kpi-gauge-bar.ok{background:linear-gradient(90deg,#16a34a,#22c55e)}
.kpi-gauge-bar.warn{background:linear-gradient(90deg,#d97706,#f59e0b)}
.kpi-gauge-bar.bad{background:linear-gradient(90deg,#dc2626,#ef4444)}
.kpi-list{margin-top:10px;display:grid;gap:8px}
.kpi-list-item{display:flex;justify-content:space-between;align-items:center;gap:10px;font-size:13px;padding:6px 0;border-bottom:1px solid rgba(0,0,0,.04)}
.kpi-list-item:last-child{border-bottom:none}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:14px}
.dashboard-row{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:14px;align-items:stretch}
.dashboard-row-tresorerie-top5 .panel{display:flex;flex-direction:column}
.dashboard-row-tresorerie-top5 .panel.dashboard-tresorerie{align-self:start}
.dashboard-row-tresorerie-top5 .dash-tresorerie-body{flex:0}
.dashboard-tresorerie .dash-tresorerie-body{display:grid;gap:4px;font-size:12px}
.dash-tresorerie-body .tresorerie-line{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:4px 0;border-bottom:1px solid rgba(0,0,0,.04);font-size:12px}
.dash-tresorerie-body .tresorerie-line.solde{font-weight:700;font-size:14px;margin-top:4px;padding-top:8px;border-top:2px solid var(--primary);border-bottom:none}
.dash-sorties-chart{min-height:150px;display:flex;align-items:flex-end;gap:6px;padding:12px 0}
.dash-sorties-chart .bar-wrap{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;min-width:0}
.dash-sorties-chart .bar-wrap .bar-container-sorties{position:relative;width:100%;display:flex;flex-direction:column;justify-content:flex-end;align-items:center}
.dash-sorties-chart .bar-wrap .bar-group{display:flex;flex-direction:column-reverse;align-items:center;gap:2px;width:100%}
.dash-sorties-chart .bar{width:100%;min-height:3px;border-radius:4px 4px 0 0}
.dash-sorties-chart .bar.bar-achats{background:linear-gradient(180deg,#fca5a5,#ef4444)}
.dash-sorties-chart .bar.bar-paie{background:linear-gradient(180deg,#dc2626,#b91c1c)}
.dash-sorties-chart .bar.bar-charges{background:linear-gradient(180deg,#991b1b,#7f1d1d)}
.dash-sorties-chart .bar-wrap .label{font-size:9px;font-weight:500;color:var(--muted)}
.sorties-chart-legend{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:8px;font-size:11px;font-weight:500;color:var(--muted)}
.sorties-chart-legend .legend-dot{display:inline-block;width:10px;height:10px;border-radius:4px;margin-right:6px;vertical-align:middle}
.sorties-chart-legend .legend-dot.bar-achats{background:linear-gradient(135deg,#fca5a5,#ef4444)}
.sorties-chart-legend .legend-dot.bar-paie{background:linear-gradient(135deg,#dc2626,#b91c1c)}
.sorties-chart-legend .legend-dot.bar-charges{background:linear-gradient(135deg,#991b1b,#7f1d1d)}
.dash-flux-chart{min-height:180px;display:flex;align-items:center;justify-content:center;padding:12px 0}
.dash-flux-chart .flux-donut-wrap{display:flex;flex-direction:column;align-items:center;gap:10px}
.dash-flux-chart .flux-donut-ring{width:140px;height:140px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.dash-flux-chart .flux-donut-hole{width:96px;height:96px;border-radius:50%;background:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-size:11px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.04)}
.dash-flux-chart .flux-donut-label{font-weight:600;color:var(--muted);font-size:10px}
.dash-flux-chart .flux-donut-entrees{color:#16a34a;font-weight:600}
.dash-flux-chart .flux-donut-sorties{color:#ef4444;font-weight:600}
.dash-flux-chart .flux-donut-legend{display:flex;gap:12px;font-size:11px;font-weight:500;color:var(--muted)}
.dash-flux-chart .flux-donut-legend .legend-dot{display:inline-block;width:8px;height:8px;border-radius:4px;margin-right:4px;vertical-align:middle}
.dash-flux-chart .flux-donut-legend .legend-dot.flux-entree{background:#22c55e}
.dash-flux-chart .flux-donut-legend .legend-dot.flux-sortie{background:#ef4444}
.dash-ca-chart{min-height:150px;display:flex;align-items:flex-end;gap:6px;padding:12px 0}
.dash-ca-chart .bar-wrap{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;min-width:0}
.dash-ca-chart .bar{width:100%;min-height:4px;border-radius:6px 6px 0 0;background:linear-gradient(180deg,#22c55e,#16a34a);transition:height .35s cubic-bezier(.4,0,.2,1)}
.dash-polymere-chart{min-height:0;padding:4px 0}
.dash-polymere-chart .bar{background:linear-gradient(180deg,#0d9488,#0f766e)}
#dash-polymere-12-chart .dash-polymere-line-wrap{min-height:0;display:flex;flex-direction:column;padding:4px 0}
#dash-polymere-12-chart .dash-polymere-line-svg-wrap{position:relative;width:100%;aspect-ratio:1;max-height:100px;flex-shrink:0}
#dash-polymere-12-chart .dash-polymere-line-svg{width:100%;height:100%;display:block;overflow:visible}
#dash-polymere-12-chart .polymere-points-overlay{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none}
#dash-polymere-12-chart .polymere-points-overlay .polymere-point{pointer-events:auto}
#dash-polymere-12-chart .polymere-point{position:absolute;width:6px;height:6px;margin-left:-3px;margin-top:-3px;border-radius:50%;background:#0f766e;cursor:pointer;display:flex;flex-direction:column;align-items:center}
#dash-polymere-12-chart .polymere-point-value{position:absolute;bottom:100%;left:50%;transform:translate(-50%,-4px);font-size:8px;font-weight:600;color:#0f766e;white-space:nowrap;pointer-events:none}
#dash-polymere-12-chart .polymere-grid{pointer-events:none;visibility:hidden}
#dash-polymere-12-chart .polymere-grid-line{stroke:rgba(15,118,110,.22);stroke-width:.4;stroke-dasharray:3 3}
#dash-polymere-12-chart .polymere-area{transition:opacity .25s ease}
#dash-polymere-12-chart .polymere-line{transition:opacity .2s ease;stroke-linecap:round;stroke-linejoin:round}
#dash-polymere-12-chart .polymere-point{fill:#0f766e;stroke:none;cursor:pointer}
#dash-polymere-12-chart .dash-polymere-line-labels{display:flex;justify-content:space-between;gap:2px;margin-top:4px;padding-top:0;font-size:9px;font-weight:600;color:var(--muted);letter-spacing:.02em;overflow:hidden;font-variant-numeric:tabular-nums}
#dash-polymere-12-chart .polymere-line-label{flex:1;min-width:0;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:default;transition:color .2s ease}
#dash-polymere-12-chart .polymere-line-label:hover{color:#0f766e}
.dash-flux-chart .bar-wrap .label,.dash-ca-chart .bar-wrap .label{font-size:9px;font-weight:500;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.dash-ca-chart .bar-wrap .bar-value{font-size:10px;font-weight:600;color:var(--text);white-space:nowrap;overflow:visible;text-align:center;min-width:0}
.dash-ca-chart .bar-container{position:relative;width:100%;min-height:100px;display:flex;flex-direction:column;justify-content:flex-end;align-items:center}
.dash-ca-chart .bar-container .bar{position:relative;z-index:1}
.dash-ca-chart .bar-objectif{position:absolute;left:0;right:0;display:flex;flex-direction:column;align-items:center;z-index:2;padding-bottom:2px}
.dash-ca-chart .bar-objectif::after{content:"";display:block;width:100%;height:2px;background:#2563eb;border-radius:1px;box-shadow:0 0 0 1px rgba(255,255,255,.8)}
.dash-ca-chart .bar-objectif .bar-objectif-value{font-size:9px;font-weight:600;color:#2563eb;white-space:nowrap;margin-bottom:2px;text-align:center}
.ca-chart-legend{display:flex;gap:12px;margin-bottom:8px;font-size:11px;font-weight:500;color:var(--muted)}
.ca-chart-legend .legend-dot{display:inline-block;width:10px;height:10px;border-radius:4px;margin-right:6px;vertical-align:middle}
.ca-chart-legend .legend-dot.bar-ca{background:linear-gradient(135deg,#22c55e,#16a34a)}
.ca-chart-legend .legend-dot.bar-objectif{background:#2563eb}
.rebut-legend{display:flex;gap:12px;margin-bottom:10px;font-size:11px;font-weight:500;color:var(--muted)}
.rebut-legend .legend-dot{display:inline-block;width:10px;height:10px;border-radius:4px;margin-right:6px;vertical-align:middle}
.rebut-legend .legend-dot.bar-total{background:linear-gradient(135deg,var(--primary),var(--primary2))}
.rebut-legend .legend-dot.bar-rebut{background:linear-gradient(135deg,#dc2626,#ef4444)}
#dash-polymere-row.dashboard-row-polymere-rebut{display:grid;grid-template-columns:repeat(4,minmax(160px,1fr));gap:12px;margin-top:14px;align-items:stretch}
#dash-polymere-row .panel-polymere,#dash-polymere-row .panel-rebut{grid-column:span 2;padding:10px 12px;display:flex;flex-direction:column;min-height:0}
#dash-polymere-row .panel-polymere .panel-title,#dash-polymere-row .panel-rebut .panel-title{font-size:13px;margin-bottom:6px}
#dash-polymere-row .panel-rebut .rebut-charts{flex:1;min-height:0}
#dash-polymere-row .dash-polymere-chart{flex:1;min-height:0;display:flex;flex-direction:column}
#dash-polymere-row .dash-polymere-line-wrap{flex:1;min-height:0;display:flex;flex-direction:column}
.panel-rebut .panel-title{font-size:13px;margin-bottom:6px}
.panel-rebut .rebut-charts{display:grid;grid-template-columns:1fr;gap:0;margin-top:4px}
.rebut-chart-pct-full{width:100%}
.dash-rebut-pct-chart{min-height:60px;padding:6px 0}
.dash-rebut-pct-chart .rebut-pct-grid{display:grid;grid-template-columns:auto repeat(3, minmax(50px, 1fr));grid-template-rows:auto auto auto;gap:4px 8px;align-items:stretch}
.dash-rebut-pct-chart .rebut-pct-axis{font-size:10px;font-weight:600;color:var(--muted);display:flex;align-items:center}
.dash-rebut-pct-chart .rebut-pct-label{font-size:10px}
.dash-rebut-pct-chart .rebut-pct-col-header{font-size:10px;font-weight:700;color:var(--primary);text-align:center;display:flex;align-items:center;justify-content:center}
.dash-rebut-pct-chart .rebut-pct-cell{display:flex;align-items:stretch;gap:6px;min-width:55px}
.dash-rebut-pct-chart .rebut-pct-track{flex:1;max-width:100px;min-height:22px;min-width:40px;background:rgba(0,0,0,.06);border-radius:4px;position:relative;overflow:visible}
.dash-rebut-pct-chart .rebut-pct-fill{display:block;height:100%;border-radius:4px;transition:width .35s ease;min-width:3px;position:absolute;left:0;top:0;overflow:hidden}
.dash-rebut-pct-chart .rebut-pct-value-inner{position:absolute;right:6px;top:50%;transform:translateY(-50%);font-size:9px;font-weight:700;color:#111827;white-space:nowrap;z-index:2;pointer-events:none;min-width:24px}
.dash-rebut-pct-chart .rebut-pct-fill.rebut-pct-ok{background:linear-gradient(90deg,#059669,#10b981)}
.dash-rebut-pct-chart .rebut-pct-fill.rebut-pct-warn{background:linear-gradient(90deg,#d97706,#f59e0b)}
.dash-rebut-pct-chart .rebut-pct-fill.rebut-pct-bad{background:linear-gradient(90deg,#dc2626,#ef4444)}
.dash-rebut-pct-chart .rebut-pct-data{position:absolute;right:-2px;top:50%;transform:translate(100%,-50%);font-size:9px;font-weight:600;color:var(--muted);white-space:nowrap;z-index:2;pointer-events:none;margin-left:2px}
.panel-rebut .rebut-chart-block{border:none;border-radius:0;padding:8px 10px;background:#fff;box-shadow:none}
.panel-rebut .rebut-chart-title{font-size:12px;font-weight:600;color:var(--muted);margin-bottom:8px;text-align:center;letter-spacing:.2px}
.dash-rebut-chart{min-height:100px;display:flex;align-items:flex-end;justify-content:center;gap:0;padding:8px 0}
.dash-rebut-chart .bar-group{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:2px;min-width:0;margin:0 8px}
.dash-rebut-chart .bar-group .bar-row{display:flex;justify-content:center;align-items:flex-end;gap:4px;width:100%}
.dash-rebut-chart .bar-group .bar-wrap{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;min-width:0;gap:0}
.dash-rebut-chart .bar-group .bar-value{font-size:10px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;text-align:center}
.dash-rebut-chart .bar{width:100%;max-width:52px;min-height:3px;border-radius:6px 6px 0 0;transition:height .3s cubic-bezier(.4,0,.2,1)}
.dash-rebut-chart .bar.bar-total{background:linear-gradient(180deg,var(--primary),var(--primary2))}
.dash-rebut-chart .bar.bar-rebut{background:linear-gradient(180deg,#dc2626,#ef4444)}
.dash-rebut-chart .bar-group .label{font-size:10px;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;text-align:center}
.panel{background:#fff;border:1px solid rgba(0,0,0,.06);border-radius:var(--radius-lg);padding:18px;box-shadow:var(--shadow-sm);transition:box-shadow .2s}
.panel:hover{box-shadow:var(--shadow-md)}
.panel-title{font-weight:700;font-size:15px;margin-bottom:12px;color:#111827;letter-spacing:-.01em}
.panel-subtitle{font-size:12px;margin-top:-4px;margin-bottom:10px;color:var(--muted)}
.toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}
.toolbar-title{font-size:16px;font-weight:800}
.toolbar-actions{display:flex;gap:10px;align-items:center}
.toolbar-filter{display:flex;align-items:center;gap:6px;font-size:13px;white-space:nowrap}
.toolbar-filter .muted{font-size:12px}
.toolbar-filter select{min-width:9rem;max-width:16rem}
input,select,textarea{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:10px;font:inherit}
textarea{min-height:90px}
input:focus,select:focus,textarea:focus{outline:2px solid rgba(27,60,89,.18);border-color:var(--primary)}
.btn{border:1px solid var(--border);background:#fff;padding:9px 12px;border-radius:10px;cursor:pointer}
.btn:hover{background:#f9fafb}
.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}
.btn.primary:hover{background:var(--primary2)}
.btn.danger{background:#b91c1c;border-color:#b91c1c;color:#fff}
.btn.danger:hover{background:#991b1b;border-color:#991b1b}
.icon-btn{padding:8px 10px;min-width:38px;display:inline-flex;align-items:center;justify-content:center;gap:6px}
.icon-btn svg{display:block}
.icon-btn[data-action="delete"]{color:#b91c1c}
.icon-btn[data-action="delete"]:hover{background:#fef2f2;border-color:#fecaca}
.table-wrap{background:#fff;border:1px solid rgba(0,0,0,.06);border-radius:var(--radius-lg);overflow:auto;max-height:calc(100vh - 140px);box-shadow:var(--shadow-sm)}
.opportunites-timeline-wrap{padding:0;background:linear-gradient(180deg,#f8fafc 0%,#fff 48%);border:1px solid rgba(15,23,42,.07)}
.opportunites-timeline{max-width:920px;margin:0 auto;padding:22px 20px 32px}
.opp-tl-empty{padding:40px 24px;text-align:center}
.opp-tl-empty-title{margin:0 0 8px;font-size:16px;font-weight:700;color:#334155}
.opp-tl-empty-hint{margin:0;font-size:13px;color:var(--muted);max-width:360px;margin-inline:auto;line-height:1.5}
.opp-tl-err{padding:24px;color:#b91c1c;font-size:14px}
.opp-tl-day-group{margin-bottom:4px}
.opp-tl-day{display:flex;align-items:center;gap:10px;margin:32px 0 16px;padding:2px 0;border-bottom:1px solid #e2e8f0}
.opp-tl-day-group:first-child .opp-tl-day{margin-top:4px}
.opp-tl-day-title{margin:0;padding-bottom:10px;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#64748b;flex:1;border-bottom:none}
.opp-tl-day::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--primary);flex-shrink:0;opacity:.9}
.opp-tl-stream{position:relative;padding-left:0}
.opp-tl-stream::before{content:"";position:absolute;left:35px;top:8px;bottom:20px;width:2px;background:linear-gradient(180deg,var(--primary) 0%,rgba(27,60,89,.12) 55%,#e2e8f0 100%);border-radius:2px;opacity:.55}
.opp-tl-row{--opp-accent:var(--primary);--opp-ring:rgba(27,60,89,.18);display:grid;grid-template-columns:72px minmax(0,1fr);gap:0 18px;align-items:stretch;position:relative;z-index:0}
.opp-tl-row[data-statut="nouveau"]{--opp-accent:#64748b;--opp-ring:rgba(100,116,139,.22)}
.opp-tl-row[data-statut="qualifie"]{--opp-accent:#6366f1;--opp-ring:rgba(99,102,241,.22)}
.opp-tl-row[data-statut="proposition"]{--opp-accent:#7c3aed;--opp-ring:rgba(124,58,237,.2)}
.opp-tl-row[data-statut="negociation"]{--opp-accent:#2563eb;--opp-ring:rgba(37,99,235,.22)}
.opp-tl-row[data-statut="gagne"]{--opp-accent:#15803d;--opp-ring:rgba(21,128,61,.22)}
.opp-tl-row[data-statut="perdu"]{--opp-accent:#b91c1c;--opp-ring:rgba(185,28,28,.2)}
.opp-tl-row[data-statut="abandonne"]{--opp-accent:#78716c;--opp-ring:rgba(120,113,108,.22)}
.opp-tl-gutter{display:flex;flex-direction:column;align-items:center;padding-top:18px;padding-bottom:4px;position:relative;z-index:1}
.opp-tl-time-only{font-size:12px;font-weight:700;font-variant-numeric:tabular-nums;color:#475569;letter-spacing:.02em;line-height:1}
.opp-tl-node{width:11px;height:11px;margin-top:12px;border-radius:50%;background:var(--card);border:2px solid var(--opp-accent);box-shadow:0 0 0 4px #fff,0 0 0 5px var(--opp-ring);flex-shrink:0}
.opp-tl-card{position:relative;text-align:left;border:1px solid #e2e8f0;border-radius:14px;background:var(--card);box-shadow:0 1px 2px rgba(15,23,42,.05),0 10px 28px -8px rgba(15,23,42,.08);margin-bottom:14px;border-left:3px solid var(--opp-accent);transition:box-shadow .2s ease,border-color .2s ease,transform .15s ease}
.opp-tl-card:hover{box-shadow:0 4px 12px rgba(15,23,42,.07),0 16px 40px -12px rgba(15,23,42,.12);border-color:#cbd5e1}
.opp-tl-card-inner{padding:16px 18px 14px}
.opp-tl-card-hd{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:12px 16px;margin-bottom:2px}
.opp-tl-card-hd-main{min-width:0;flex:1}
.opp-tl-card-hd-aside{display:flex;flex-direction:column;align-items:flex-end;gap:8px;flex-shrink:0}
.opp-tl-title{margin:0 0 6px;font-size:16px;font-weight:700;line-height:1.3;color:#0f172a;letter-spacing:-.02em}
.opp-tl-client-line{margin:0;display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 14px;font-size:13px;line-height:1.4}
.opp-tl-client{font-weight:600;color:#334155}
.opp-tl-updated-hint{font-size:12px;color:#94a3b8;font-variant-numeric:tabular-nums}
.opp-tl-ref{font-size:11px;font-weight:800;font-variant-numeric:tabular-nums;color:#cbd5e1;letter-spacing:.04em}
.opp-tl-meta{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.opp-tl-pill{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:999px;background:#f1f5f9;border:1px solid #e2e8f0;font-size:12px;color:#334155;line-height:1.25}
.opp-tl-pill-k{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#64748b}
.opp-tl-pill--value{background:#eff6ff;border-color:#bfdbfe;color:#1e3a5f}
.opp-tl-pill--value .opp-tl-pill-k{color:#3b82f6}
.opp-tl-pill--devis{background:#f0fdf4;border-color:#bbf7d0}
.opp-tl-pill--devis .opp-tl-pill-k{color:#15803d}
.opp-tl-pill--freq{background:#faf5ff;border-color:#e9d5ff}
.opp-tl-pill--freq .opp-tl-pill-k{color:#7c3aed}
.opp-tl-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:16px;padding-top:14px;border-top:1px solid #f1f5f9}
.opp-tl-actions .btn.icon-btn{min-width:38px}
.opp-tl-actions .btn:not(.icon-btn){font-size:12px;padding:7px 12px}
@media (max-width:640px){
  .opp-tl-stream::before{left:26px}
  .opp-tl-row{grid-template-columns:52px minmax(0,1fr);gap:0 12px}
  .opp-tl-gutter{padding-top:14px}
  .opp-tl-time-only{font-size:11px}
  .opp-tl-node{margin-top:10px;box-shadow:0 0 0 3px #fff,0 0 0 4px var(--opp-ring)}
  .opp-tl-card-hd-aside{flex-direction:row;align-items:center;width:100%;justify-content:space-between}
  .opportunites-timeline{padding:16px 12px 24px}
}
table{width:100%;border-collapse:collapse}
th,td{padding:10px 12px;border-bottom:1px solid var(--border);text-align:left;font-size:13px}
th{background:#f0f3f7;font-weight:700;position:sticky;top:0;z-index:1;box-shadow:0 1px 0 var(--border)}
tr:hover td{background:#fafbfd}
.list{display:grid;gap:10px;font-size:13px}
#dashboard .list > div{padding:10px 14px;border-radius:var(--radius-sm);background:rgba(0,0,0,.02);border:1px solid transparent;transition:background .15s,border-color .15s}
#dashboard .list > div:hover{background:rgba(0,0,0,.04);border-color:rgba(0,0,0,.06)}
#dash-top-clients{display:flex;flex-direction:column;gap:6px}
.top-clients-header,.top-client-line{display:grid;grid-template-columns:14px 1fr 50px 90px;align-items:center;gap:10px;font-size:13px}
.top-clients-header{font-size:11px;font-weight:600;color:var(--muted);padding:0 0 4px 0 !important;border-bottom:1px solid rgba(0,0,0,.06);background:transparent}
.top-clients-header .top-clients-cmd,.top-clients-header .top-clients-ca{text-align:right}
.top-clients-cmd,.top-clients-ca{text-align:right;font-variant-numeric:tabular-nums}
.top-client-nom{font-weight:600;color:#111827}
.delai-dot{display:inline-block;width:10px;height:10px;border-radius:50%;flex-shrink:0}
.delai-dot.delai-vert{background:#22c55e}
.delai-dot.delai-orange{background:#f97316}
.delai-dot.delai-rouge{background:#ef4444}
.delai-dot.delai-neutral{background:#9ca3af}
.muted{color:var(--muted);font-size:12px}
.thumb{width:44px;height:44px;border-radius:10px;object-fit:cover;border:1px solid var(--border);background:#fff}
.thumb:hover{box-shadow:0 6px 18px rgba(0,0,0,.12)}
.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px}
.b-ok{background:#e8f7ef;color:#1c7f4d}
.b-warn{background:#fff4e5;color:#b26a00}
.b-info{background:#e8f1ff;color:#2c60c9}
.modal{position:fixed;inset:0;background:rgba(0,0,0,.45);display:grid;place-items:center;z-index:10}
.modal.hidden{display:none !important}
.modal-card{width:min(720px,92vw);background:#fff;border-radius:16px;padding:14px;border:1px solid rgba(255,255,255,.35);box-shadow:0 20px 60px rgba(0,0,0,.25)}
.modal-title{font-weight:800;font-size:16px;margin-bottom:10px}
.modal-card{max-height:90vh;display:flex;flex-direction:column}
#modal-body{overflow-y:auto;max-height:70vh;padding-right:6px}
.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:12px}
.modal-card.doc-modal{width:min(1060px,96vw)}
.doc-preview{display:flex;flex-direction:column;gap:10px}
.doc-toolbar{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.doc-toolbar .muted{margin:0}
.doc-frame{width:100%;height:72vh;border:1px solid var(--border);border-radius:12px;background:#fff}
.form{display:grid;gap:10px}
.form label{display:grid;gap:6px;font-size:12px;color:var(--muted)}
.form-row{display:flex;gap:12px;align-items:flex-end}
.form-row>label{flex:1;min-width:0}
.divider{height:1px;background:var(--border);margin:12px 0}
.toast{position:fixed;right:18px;bottom:18px;background:#111;color:#fff;padding:10px 12px;border-radius:10px;z-index:11}
.money-field{position:relative}
.money-field input{padding-right:56px}
.money-field span{
  position:absolute;
  right:8px;
  top:50%;
  transform:translateY(-50%);
  font-size:10px;
  color:var(--muted);
  pointer-events:none;
}
.unit-field{position:relative}
.unit-field input{padding-right:34px}
.unit-field span{
  position:absolute;
  right:8px;
  top:50%;
  transform:translateY(-50%);
  font-size:10px;
  color:var(--muted);
  pointer-events:none;
}
/* Champs quantité: retirer les spinners natifs pour libérer l'espace */
input.it-quantite[type="number"]{
  -moz-appearance:textfield;
  appearance:textfield;
}
input.it-quantite[type="number"]::-webkit-outer-spin-button,
input.it-quantite[type="number"]::-webkit-inner-spin-button{
  -webkit-appearance:none;
  appearance:none;
  margin:0;
}
input.it-prix,
input.it-quantite,
input.st-mp-quantite,
input[name="quantite"],
input[name="quantite_produite"],
input[name="prix_achat"],
input[name="montant_paye"],
input[name="cout"],
input[name="prix_unitaire"]{
  font-size:15px;
  font-weight:600;
  color:#111827;
}
input.it-prix::placeholder,
input.it-quantite::placeholder,
input.st-mp-quantite::placeholder,
input[name="quantite"]::placeholder,
input[name="quantite_produite"]::placeholder,
input[name="prix_achat"]::placeholder,
input[name="montant_paye"]::placeholder,
input[name="cout"]::placeholder,
input[name="prix_unitaire"]::placeholder{
  color:#4b5563;
  opacity:.95;
  font-weight:500;
}
.text-danger{color:#b91c1c;font-weight:600}
/* Ancien breakpoint fusionné — voir fin de fichier « Responsive » */

/* Connexion */
.login-screen{
  position:relative;
  min-height:100vh;
  min-height:100dvh;
  display:flex;
  align-items:center;
  justify-content:flex-end;
  padding:clamp(20px,4vw,40px) clamp(24px,6vw,72px) clamp(20px,4vw,40px) clamp(20px,4vw,40px);
  overflow:hidden;
  isolation:isolate;
}
@media (max-width:640px){
  .login-screen{
    justify-content:center;
    padding:clamp(20px,4vw,40px);
  }
}
.login-bg{
  position:absolute;
  inset:0;
  z-index:0;
  overflow:hidden;
  /* Fond si aucune image ne charge (voir login-bg-photo dans index.html) */
  background:linear-gradient(165deg,#070d14 0%,#0b1320 35%,#122a45 70%,#0d1f33 100%);
}
.login-bg-photo{
  position:absolute;
  left:clamp(12px,4vw,48px);
  top:50%;
  transform:translateY(-50%);
  width:min(72vw,1100px);
  height:min(68vh,780px);
  max-width:min(92%,calc(100vw - 24px));
  max-height:88%;
  object-fit:cover;
  object-position:left center;
  border-radius:clamp(8px,1.2vw,16px);
  z-index:0;
  display:block;
  pointer-events:none;
  box-shadow:0 24px 80px rgba(0,0,0,.35);
}
.login-bg-photo.login-bg-photo--missing{
  display:none!important;
}
/* Voile léger uniquement quand une photo est chargée (.login-bg--has-photo via app.js) */
.login-bg.login-bg--has-photo::before{
  content:"";
  position:absolute;
  inset:0;
  z-index:1;
  background:linear-gradient(165deg,rgba(7,13,20,.45) 0%,rgba(11,19,32,.38) 50%,rgba(13,31,51,.55) 100%);
  pointer-events:none;
}
.login-bg::after{
  content:"";
  position:absolute;
  inset:0;
  z-index:2;
  background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E");
  opacity:.45;
  pointer-events:none;
}
.login-wrap{
  position:relative;
  z-index:1;
  width:100%;
  max-width:420px;
  flex-shrink:0;
}
.login-card{
  width:100%;
  margin:0;
  padding:clamp(28px,5vw,2.25rem) clamp(22px,4vw,2rem);
  background:linear-gradient(180deg,#fff 0%,#fafbfc 100%);
  border-radius:20px;
  border:1px solid rgba(255,255,255,.65);
  box-shadow:
    0 0 0 1px rgba(255,255,255,.08) inset,
    0 1px 2px rgba(15,23,42,.04),
    0 24px 48px -12px rgba(15,23,42,.18),
    0 12px 24px -8px rgba(0,0,0,.12);
}
.login-card-head{
  margin-bottom:1.75rem;
}
.login-brand-row{
  display:flex;
  align-items:center;
  gap:14px;
  text-align:left;
}
.login-brand-text{
  flex:1;
  min-width:0;
}
.login-company-logo{
  flex-shrink:0;
  width:96px;
  height:96px;
  object-fit:contain;
  border:0;
  background:transparent;
  box-shadow:none;
  border-radius:0;
}
.login-company-logo.hidden{display:none!important}
.login-company-name{
  margin:0 0 .2rem;
  font-size:clamp(1.2rem,3vw,1.4rem);
  font-weight:700;
  letter-spacing:-.02em;
  color:var(--primary);
  line-height:1.25;
  word-wrap:break-word;
}
.login-product-name{
  margin:0;
  font-size:12px;
  font-weight:600;
  letter-spacing:.06em;
  text-transform:uppercase;
  color:#94a3b8;
}
.login-tagline{
  margin:.85rem 0 0;
  text-align:center;
  font-size:13px;
  font-weight:500;
  color:#64748b;
  letter-spacing:.01em;
}
.login-fields{
  display:grid;
  gap:1rem;
}
.login-field{
  display:grid;
  gap:.4rem;
}
.login-label{
  display:block;
  font-size:12px;
  font-weight:600;
  letter-spacing:.04em;
  text-transform:uppercase;
  color:#475569;
}
.login-field input{
  width:100%;
  padding:12px 14px;
  font:inherit;
  font-size:15px;
  color:var(--text);
  background:#fff;
  border:1px solid #e2e8f0;
  border-radius:11px;
  transition:border-color .15s ease,box-shadow .15s ease,background .15s ease;
}
.login-field input::placeholder{
  color:#94a3b8;
}
.login-field input:hover{
  border-color:#cbd5e1;
}
.login-field input:focus{
  outline:none;
}
.login-field input:focus-visible{
  border-color:var(--primary2);
  box-shadow:0 0 0 3px rgba(47,93,130,.22);
  background:#fff;
}
.login-password-wrap{
  position:relative;
  width:100%;
}
.login-password-wrap input{
  padding-right:44px;
}
.login-password-toggle{
  position:absolute;
  right:4px;
  top:50%;
  transform:translateY(-50%);
  box-sizing:border-box;
  height:36px;
  width:40px;
  padding:0;
  border:none;
  border-radius:8px;
  background:transparent;
  color:#64748b;
  cursor:pointer;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  transition:background .15s ease,color .15s ease;
}
.login-password-toggle:hover{
  background:rgba(15,23,42,.06);
  color:#334155;
}
.login-password-toggle:focus{
  outline:none;
}
.login-password-toggle:focus-visible{
  outline:2px solid var(--primary2);
  outline-offset:2px;
}
.login-password-icon{display:block}
.login-error{
  margin:0 0 .25rem;
  padding:10px 12px;
  font-size:13px;
  font-weight:500;
  line-height:1.4;
  color:#b91c1c;
  background:#fef2f2;
  border:1px solid #fecaca;
  border-radius:10px;
}
.login-error:not(.hidden){margin-top:.25rem}
.login-submit{
  width:100%;
  margin-top:1.25rem;
  padding:13px 18px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:.5rem;
  font-size:15px;
  font-weight:600;
  letter-spacing:.01em;
  border-radius:11px;
  border:1px solid rgba(255,255,255,.12);
  background:linear-gradient(180deg,var(--primary2) 0%,var(--primary) 100%);
  box-shadow:0 0 0 1px rgba(0,0,0,.06) inset,0 2px 4px rgba(0,0,0,.08),0 8px 20px -4px rgba(27,60,89,.45);
  transition:transform .12s ease,box-shadow .15s ease,filter .15s ease;
}
.login-submit:hover{
  filter:brightness(1.05);
  box-shadow:0 0 0 1px rgba(0,0,0,.06) inset,0 4px 8px rgba(0,0,0,.1),0 12px 28px -6px rgba(27,60,89,.5);
}
.login-submit:active{
  transform:translateY(1px);
  filter:brightness(.98);
}
.login-submit-icon{
  flex-shrink:0;
  opacity:.85;
  transition:transform .2s ease;
}
.login-submit:hover .login-submit-icon{transform:translateX(1px)}
.login-foot{
  margin:1.25rem 0 0;
  text-align:center;
  font-size:11px;
  letter-spacing:.02em;
  color:#94a3b8;
}
.login-screen .muted{color:#64748b}
.brand-user-row{
  display:flex;
  align-items:center;
  gap:10px;
  margin-top:10px;
  min-width:0;
}
.logout-btn-round{
  flex-shrink:0;
  width:36px;
  height:36px;
  padding:0;
  border-radius:50%;
  border:1px solid rgba(255,255,255,.22);
  background:rgba(255,255,255,.1);
  color:#fff;
  cursor:pointer;
  display:flex;
  align-items:center;
  justify-content:center;
  transition:background .15s ease,border-color .15s ease,transform .1s ease;
}
.logout-btn-round:hover{
  background:rgba(255,255,255,.18);
  border-color:rgba(255,255,255,.38);
}
.logout-btn-round:active{transform:scale(.96)}
.logout-btn-round svg{display:block}
.brand-user-name{
  font-size:12px;
  line-height:1.35;
  opacity:.88;
  min-width:0;
  flex:1;
  word-break:break-word;
}

/* Changement mot de passe obligatoire (première connexion / reset admin) */
.password-change-overlay{
  position:fixed;
  inset:0;
  z-index:100000;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:clamp(16px,4vw,32px);
  background:rgba(7,13,20,.88);
  backdrop-filter:blur(8px);
}
.password-change-overlay.hidden{display:none!important}
.password-change-card{
  width:100%;
  max-width:420px;
  background:#fff;
  border-radius:16px;
  padding:clamp(22px,4vw,28px) clamp(20px,4vw,26px);
  box-shadow:0 24px 56px rgba(0,0,0,.35);
  border:1px solid rgba(255,255,255,.2);
}
.password-change-card h2{
  margin:0 0 10px;
  font-size:clamp(1.15rem,3vw,1.35rem);
  color:var(--primary);
}
.password-change-intro{
  font-size:14px;
  line-height:1.45;
  margin:0 0 18px;
}
.password-change-form{
  display:grid;
  gap:10px;
}
.password-change-form .login-label{margin-top:4px}
.password-change-form input{
  width:100%;
  padding:12px 14px;
  border:1px solid #e2e8f0;
  border-radius:10px;
  font:inherit;
  font-size:15px;
}
.password-change-form .login-password-wrap input{
  padding-right:44px;
}
.password-change-form .login-submit{margin-top:8px}

/* Matrice droits utilisateur (modal) */
.perm-matrix-scroll{overflow:auto;max-height:min(60vh,420px);border:1px solid var(--border);border-radius:8px}
.perm-matrix{width:100%;border-collapse:collapse;font-size:12px}
.perm-matrix th,.perm-matrix td{padding:6px 8px;border-bottom:1px solid var(--border);text-align:left}
.perm-matrix th{background:#f8fafc;font-weight:600}
.perm-matrix td.c{text-align:center}
.perm-matrix input[type=checkbox]{cursor:pointer}

/* ========== Responsive : tablette & mobile ========== */
@media (max-width: 1200px){
  .cards{grid-template-columns:repeat(2,minmax(140px,1fr))}
  #dash-polymere-row.dashboard-row-polymere-rebut{grid-template-columns:repeat(2,minmax(140px,1fr))}
  #dash-polymere-row .panel-polymere,#dash-polymere-row .panel-rebut{grid-column:span 1}
}

@media (max-width: 1024px){
  .app{
    display:flex;
    flex-direction:column;
    min-height:100vh;
    min-height:100dvh;
    overflow-x:hidden;
  }
  .app-mobile-header{
    display:flex;
    align-items:center;
    gap:12px;
    flex-shrink:0;
    padding:10px 14px;
    min-height:52px;
    background:linear-gradient(180deg,var(--bg),#08101b);
    color:#fff;
    border-bottom:1px solid rgba(255,255,255,.08);
    position:sticky;
    top:0;
    z-index:150;
  }
  .sidebar-menu-btn{
    flex-shrink:0;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    width:44px;
    height:44px;
    padding:0;
    border:1px solid rgba(255,255,255,.2);
    border-radius:10px;
    background:rgba(255,255,255,.1);
    color:#fff;
    cursor:pointer;
    -webkit-tap-highlight-color:transparent;
    touch-action:manipulation;
  }
  .sidebar-menu-btn:hover{background:rgba(255,255,255,.16)}
  .sidebar-menu-btn:focus-visible{outline:2px solid #fff;outline-offset:2px}
  .app-mobile-title{
    font-size:clamp(15px,3.5vw,17px);
    font-weight:700;
    letter-spacing:.02em;
    min-width:0;
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
  }
  .sidebar-backdrop{
    display:block;
    position:fixed;
    inset:0;
    z-index:190;
    background:rgba(0,0,0,.5);
    opacity:0;
    visibility:hidden;
    pointer-events:none;
    transition:opacity .22s ease,visibility .22s ease;
  }
  .app.sidebar-open .sidebar-backdrop{
    opacity:1;
    visibility:visible;
    pointer-events:auto;
  }
  .sidebar{
    position:fixed;
    left:0;
    top:0;
    width:min(288px,88vw);
    height:100vh;
    height:100dvh;
    max-height:100dvh;
    z-index:200;
    transform:translateX(-100%);
    transition:transform .28s cubic-bezier(.4,0,.2,1);
    box-shadow:none;
    border-right:1px solid rgba(255,255,255,.08);
  }
  .app.sidebar-open .sidebar{
    transform:translateX(0);
    box-shadow:8px 0 40px rgba(0,0,0,.35);
  }
  .main{
    flex:1;
    min-height:0;
    height:auto;
    overflow:hidden;
  }
  .view{padding:clamp(12px,3vw,18px) clamp(12px,3vw,20px)}
  .cards{grid-template-columns:repeat(2,minmax(120px,1fr))}
  .grid-2{grid-template-columns:1fr}
  .dashboard-row{grid-template-columns:1fr}
  .dashboard-row-tresorerie-top5{grid-template-columns:1fr}
  #dash-polymere-row.dashboard-row-polymere-rebut{grid-template-columns:1fr}
  #dash-polymere-row .panel-polymere,#dash-polymere-row .panel-rebut{grid-column:1/-1}
  #dash-cards-appro .card.card-appro-gauge,#dash-cards-appro .card.card-appro-delay{grid-column:1/-1}
  .toolbar{flex-wrap:wrap;gap:10px;align-items:flex-start}
  .toolbar-actions{flex-wrap:wrap;width:100%;justify-content:flex-start}
  .form-row{flex-direction:column;align-items:stretch}
  .form-row>label{width:100%}
  .table-wrap{max-height:min(70vh,calc(100dvh - 200px))}
  .modal-card{width:min(720px,96vw);max-height:92dvh}
  #modal-body{max-height:min(65vh,70dvh)}
  .doc-frame{height:min(72vh,60dvh)}
  .module-notif-wrap .notif-panel{
    left:auto;
    right:0;
    width:min(380px,calc(100vw - 24px));
    z-index:210;
  }
  .modal{z-index:300}
  .toast{z-index:310}
}

@media (max-width: 640px){
  .cards{grid-template-columns:1fr}
  .page-title{font-size:clamp(16px,4.5vw,20px)}
  .topbar{padding:18px 14px;min-height:88px}
  th,td{padding:8px 10px;font-size:12px}
  .btn,.sidebar-menu-btn{min-height:44px;touch-action:manipulation}
  .nav-item{padding:10px 10px;font-size:14px}
  .dash-sorties-chart,.dash-ca-chart{gap:4px}
  .dash-sorties-chart .bar-wrap .label,.dash-ca-chart .bar-wrap .label{font-size:8px}
  .top-clients-header,.top-client-line{
    grid-template-columns:10px 1fr 40px 72px;
    gap:6px;
    font-size:12px;
  }
}

@media (max-width: 380px){
  .card-v{font-size:clamp(18px,6vw,24px)}
  .card-ca-mois .card-v{font-size:clamp(20px,6.5vw,26px)}
}
