:root{
  --bg:#f4f7fb;
  --panel:rgba(255,255,255,.95);
  --line:#d9e2ef;
  --text:#0f172a;
  --muted:#64748b;
  --blue:#11347a;
  --blue-2:#1c4fc5;
  --blue-soft:#eef4ff;
  --red:#d92332;
  --red-soft:#fff1f3;
  --green:#0f9f6e;
  --green-soft:#ecfdf5;
  --shadow:0 14px 36px rgba(15,23,42,.08);
  --radius:22px;
}

*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  min-height:100vh;
  font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  color:var(--text);
  background:
    radial-gradient(circle at top left, rgba(17,52,122,.08), transparent 24%),
    radial-gradient(circle at top right, rgba(217,35,50,.08), transparent 18%),
    linear-gradient(180deg,#fbfdff 0%,#f2f6fb 100%);
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}

button,input,select,textarea{font:inherit}
button{cursor:pointer}

.hidden{display:none !important}
.section{display:none}
.section.active{display:block}

.app-shell{min-height:100vh}
.content{
  width:min(1120px,100%);
  margin:0 auto;
  padding:12px 14px 24px;
}

.menu-backdrop{
  position:fixed;
  inset:0;
  background:rgba(15,23,42,.32);
  backdrop-filter:blur(4px);
  z-index:49;
}
body.menu-open .menu-backdrop{display:block !important}

.sidebar,
.hero,
.card,
.stat-card,
.modal-card{
  background:var(--panel);
  border:1px solid rgba(255,255,255,.65);
  box-shadow:var(--shadow);
  backdrop-filter:blur(14px);
}

.sidebar{
  position:fixed;
  inset:0 auto 0 0;
  width:min(86vw,290px);
  padding:16px 14px 18px;
  z-index:50;
  transform:translateX(-102%);
  transition:transform .22s ease;
  border-radius:0 24px 24px 0;
  display:grid;
  grid-template-rows:auto 1fr;
  gap:18px;
}
body.menu-open .sidebar{transform:translateX(0)}

.sidebar-head{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:10px;
}
.sidebar-brand{
  display:flex;
  align-items:center;
  gap:12px;
}
.sidebar-logo{
  width:44px;
  height:44px;
  object-fit:contain;
}
.sidebar-copy{display:grid;gap:2px}
.sidebar-copy strong{font-size:1rem}
.sidebar-copy span{color:var(--muted);font-size:.9rem}

.nav{
  display:grid;
  gap:8px;
  align-content:start;
}
.nav-btn{
  border:0;
  border-radius:16px;
  padding:14px 16px;
  text-align:left;
  font-weight:700;
  color:var(--text);
  background:#fff;
  border:1px solid var(--line);
  transition:.16s ease;
}
.nav-btn.active{
  background:linear-gradient(90deg,var(--blue),var(--blue-2));
  color:#fff;
  border-color:transparent;
}
.nav-btn:hover{transform:translateY(-1px)}

.hero{
  position:sticky;
  top:10px;
  z-index:40;
  border-radius:22px;
  padding:10px 12px;
  margin-bottom:14px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
}
.topbar-left{
  min-width:0;
  display:flex;
  align-items:center;
  gap:12px;
}
.menu-toggle,
.icon-btn,
.icon-action-btn,
.modal-close{
  border:0;
  width:44px;
  height:44px;
  border-radius:14px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  background:#fff;
  color:var(--text);
  border:1px solid var(--line);
  padding:0;
}
.menu-toggle{font-size:1.15rem}
.topbar-brand{
  display:flex;
  align-items:center;
  gap:10px;
  min-width:0;
}
.topbar-logo{
  width:42px;
  height:42px;
  object-fit:contain;
  flex:0 0 auto;
}
.topbar-copy{
  display:grid;
  gap:1px;
  min-width:0;
}
.topbar-copy strong{
  font-size:1rem;
  line-height:1.05;
}
.topbar-copy span{
  color:var(--muted);
  font-size:.9rem;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}

.stats-grid,
.two-cols,
.notes-grid{
  display:grid;
  gap:14px;
}
.stats-grid{grid-template-columns:repeat(4,minmax(0,1fr))}
.two-cols{grid-template-columns:repeat(2,minmax(0,1fr))}
.notes-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}

.section > .stats-grid + .two-cols,
.section > .stats-grid + .card,
.section > .card + .two-cols,
.section > .two-cols + .card,
.section > .card + .card,
.section > .two-cols + .two-cols{margin-top:14px}

.two-cols > *,
.stats-grid > *{min-width:0}

.card{
  border-radius:var(--radius);
  padding:16px;
}
.stat-card{
  border-radius:20px;
  padding:16px;
  display:grid;
  gap:10px;
}
.stat-card span{color:var(--muted);font-weight:600}
.stat-card strong{font-size:1.35rem;line-height:1.05}
.stat-blue{background:linear-gradient(180deg,#fff 0%,var(--blue-soft) 100%)}
.stat-red{background:linear-gradient(180deg,#fff 0%,var(--red-soft) 100%)}
.stat-white{background:linear-gradient(180deg,#fff 0%,#fafcff 100%)}

.card-head,
.section-toolbar,
.calendar-toolbar,
.archive-head,
.modal-head,
.mini-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  flex-wrap:wrap;
}
.card-head h3,
.section-toolbar h3,
.modal-head h3,
.mini-head h4{
  margin:0;
}
.section-toolbar{margin-bottom:8px}
.toolbar-actions{display:flex;gap:8px;flex-wrap:wrap}
.advances-grid{align-items:start}

.list,
.archive-list,
.archive-list-inner{
  display:grid;
  gap:10px;
}
.archive-list{margin-top:10px}

.item{
  background:#fff;
  border:1px solid var(--line);
  border-radius:18px;
  padding:14px;
}
.item-row{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:12px;
}
.item-title{margin:0 0 4px;font-weight:800}
.item-meta,.item-text,.archive-summary,.selection-line{
  margin:0;
  color:var(--muted);
  line-height:1.45;
}
.item-text{margin-top:8px;white-space:pre-wrap;word-break:break-word}
.item-actions{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
  justify-content:flex-end;
}
.chantier-list .item{padding:14px}
.note-card{
  min-height:160px;
  display:grid;
  gap:12px;
}
.note-preview{
  display:-webkit-box;
  -webkit-line-clamp:7;
  -webkit-box-orient:vertical;
  overflow:hidden;
}
.empty{
  color:var(--muted);
  padding:10px 4px;
}

.primary-btn,
.secondary-btn,
.small-btn,
.view-btn{
  border:0;
  border-radius:14px;
  padding:11px 14px;
  font-weight:800;
  transition:.16s ease;
}
.primary-btn{
  color:#fff;
  background:linear-gradient(90deg,var(--blue),var(--blue-2));
}
.secondary-btn,
.small-btn,
.view-btn{
  background:#fff;
  border:1px solid var(--line);
  color:var(--text);
}
.small-btn.delete{
  background:var(--red-soft);
  color:var(--red);
  border-color:rgba(217,35,50,.16);
}
.compact-btn{padding:10px 12px}
.icon-action-btn{
  background:linear-gradient(90deg,var(--blue),var(--blue-2));
  color:#fff;
  font-size:1.4rem;
}
.view-btn.active{
  background:var(--blue);
  color:#fff;
  border-color:var(--blue);
}
.primary-btn:hover,
.secondary-btn:hover,
.small-btn:hover,
.icon-btn:hover,
.icon-action-btn:hover,
.view-btn:hover,
.menu-toggle:hover{
  transform:translateY(-1px);
}

.price-pill,
.percent-pill,
.badge{
  display:inline-flex;
  align-items:center;
  border-radius:12px;
  padding:7px 10px;
  font-size:.82rem;
  font-weight:800;
}
.price-pill{background:#f3f6fb}
.percent-pill{background:rgba(17,52,122,.08);color:var(--blue)}
.badge.en_attente_signature{background:#fff4e8;color:#b45309}
.badge.signe_sans_acompte{background:rgba(17,52,122,.10);color:var(--blue)}
.badge.acompte_envoye{background:rgba(17,52,122,.16);color:var(--blue)}
.badge.en_attente_fin_paiement{background:rgba(17,52,122,.20);color:var(--blue)}
.badge.paye{background:rgba(16,185,129,.12);color:#047857}

.calendar-card{padding:14px}
.calendar-toolbar{
  margin-bottom:10px;
  flex-wrap:wrap;
}
.calendar-toolbar-left,
.calendar-toolbar-right,
.calendar-nav-arrows{
  display:flex;
  align-items:center;
  gap:8px;
  flex-wrap:wrap;
}
.calendarRangeLabel,
#calendarRangeLabel{margin:0}
.calendar-surface{display:grid;gap:12px}
.calendar-weekdays,
.month-grid{
  display:grid;
  grid-template-columns:repeat(7,minmax(0,1fr));
  gap:8px;
}
.weekday-head{
  color:var(--muted);
  font-size:.84rem;
  font-weight:700;
  padding:0 4px 2px;
}
.month-cell{
  min-height:110px;
  border:1px solid var(--line);
  background:#fff;
  border-radius:16px;
  padding:8px;
  display:grid;
  align-content:flex-start;
  gap:6px;
}
.month-cell.outside{opacity:.38}
.month-cell.today{border-color:rgba(17,52,122,.45);box-shadow:inset 0 0 0 1px rgba(17,52,122,.16)}
.month-cell.selected{background:linear-gradient(180deg,#fff 0%,var(--blue-soft) 100%)}
.day-number{font-weight:800}
.day-events{display:grid;gap:6px}
.event-chip,
.slot-event,
.mobile-event,
.calendar-dot{
  border:0;
  text-align:left;
  width:100%;
}
.event-chip,
.slot-event,
.mobile-event{
  border-radius:12px;
  padding:8px 10px;
  background:rgba(17,52,122,.1);
  color:var(--blue);
}
.event-chip.red,
.slot-event.red{background:rgba(217,35,50,.1);color:var(--red)}
.more-chip{
  display:inline-flex;
  font-size:.8rem;
  color:var(--muted);
  padding-left:2px;
}
.time-scroll{
  overflow:auto;
  -webkit-overflow-scrolling:touch;
  padding-bottom:2px;
}

.week-view,
.day-view{display:grid;gap:10px}
.sticky-week-view{min-width:max-content}
.week-header,
.time-row{
  display:grid;
  grid-template-columns:68px repeat(7,minmax(104px,1fr));
  gap:8px;
}
.day-body .time-row{grid-template-columns:68px minmax(0,1fr)}
.week-day-title,
.time-slot,
.header-spacer{
  border:1px solid var(--line);
  background:#fff;
  border-radius:16px;
}
.header-spacer{
  position:sticky;
  left:0;
  z-index:4;
  min-height:100%;
}
.week-day-title{
  padding:10px 8px;
  display:grid;
  gap:2px;
  justify-items:center;
  color:var(--muted);
}
.week-day-title.selected{background:linear-gradient(180deg,#fff 0%,var(--blue-soft) 100%);color:var(--text)}
.time-label{
  position:sticky;
  left:0;
  z-index:3;
  color:var(--muted);
  font-size:.84rem;
  padding:10px 10px 0 0;
  background:linear-gradient(180deg, rgba(251,253,255,.98), rgba(242,246,251,.98));
  min-height:72px;
}
.time-slot{
  min-height:72px;
  padding:8px;
  display:grid;
  gap:6px;
}
.time-slot.selected{background:linear-gradient(180deg,#fff 0%,var(--blue-soft) 100%)}
.mini-time{display:block;font-size:.75rem;opacity:.85}
.day-header{display:flex;justify-content:space-between}
.day-title-block{display:grid;gap:4px}
.day-title-block span{color:var(--muted)}

.mobile-calendar{
  display:grid;
  gap:12px;
}
.mobile-month-grid{
  display:grid;
  grid-template-columns:repeat(7,minmax(0,1fr));
  gap:6px;
}
.mobile-day-cell{
  min-height:54px;
  border:1px solid var(--line);
  background:#fff;
  border-radius:14px;
  padding:6px 4px;
  display:grid;
  align-content:space-between;
  justify-items:center;
}
.mobile-day-cell.outside{opacity:.35}
.mobile-day-cell.today{border-color:rgba(17,52,122,.45)}
.mobile-day-cell.selected{background:linear-gradient(180deg,#fff 0%,var(--blue-soft) 100%)}
.mobile-day-num{font-size:.85rem;font-weight:800}
.mobile-count{
  min-width:20px;
  height:20px;
  padding:0 6px;
  border-radius:999px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  background:rgba(17,52,122,.1);
  color:var(--blue);
  font-size:.72rem;
  font-weight:800;
}
.mobile-agenda-list{display:grid;gap:8px}
.mobile-agenda-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:8px;
}
.mobile-agenda-head strong{font-size:.98rem}
.mobile-week-strip{
  display:grid;
  grid-template-columns:repeat(7,minmax(0,1fr));
  gap:6px;
}
.mobile-week-pill{
  border:1px solid var(--line);
  background:#fff;
  border-radius:14px;
  padding:8px 4px;
  display:grid;
  justify-items:center;
  gap:3px;
}
.mobile-week-pill.selected{
  background:linear-gradient(180deg,#fff 0%,var(--blue-soft) 100%);
  border-color:rgba(17,52,122,.28);
}
.mobile-week-pill span{font-size:.72rem;color:var(--muted)}
.mobile-week-pill strong{font-size:.86rem}
.mobile-event{
  background:#fff;
  border:1px solid var(--line);
  color:var(--text);
}
.mobile-event-title{font-weight:800}
.mobile-event-meta{color:var(--muted);font-size:.86rem;margin-top:4px}

.modal-overlay{
  position:fixed;
  inset:0;
  background:rgba(15,23,42,.32);
  backdrop-filter:blur(6px);
  z-index:70;
}
.modal{
  position:fixed;
  inset:0;
  display:grid;
  place-items:center;
  padding:18px;
  z-index:71;
}
.modal-card{
  width:min(760px,100%);
  border-radius:28px;
  padding:18px;
}
.modal-card-small{width:min(520px,100%)}
.form-grid{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:14px;
}
.form-grid.one-col{grid-template-columns:1fr}
.form-grid label{display:grid;gap:8px;font-weight:700}
.form-grid .full,
.modal-actions{grid-column:1 / -1}
input,textarea,select{
  border:1px solid var(--line);
  border-radius:16px;
  padding:13px 14px;
  background:#fff;
  color:var(--text);
  outline:none;
}
input:focus,textarea:focus,select:focus{
  border-color:rgba(17,52,122,.45);
  box-shadow:0 0 0 4px rgba(17,52,122,.08);
}
textarea{resize:vertical;min-height:120px}
.modal-actions{
  display:flex;
  justify-content:flex-end;
  gap:10px;
  margin-top:6px;
}

.archive-month{
  background:#fff;
  border:1px solid var(--line);
  border-radius:20px;
  padding:14px;
}
.person-total{
  color:var(--blue);
  font-weight:900;
}

@media (max-width: 980px){
  .stats-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .two-cols{grid-template-columns:1fr}
}

@media (max-width: 760px){
  .content{padding:10px 10px 20px}
  .hero{
    top:6px;
    padding:10px;
    border-radius:18px;
  }
  .topbar-logo{width:38px;height:38px}
  .topbar-copy strong{font-size:.95rem}
  .topbar-copy span{font-size:.82rem}
  .stats-grid,
  .form-grid,
  .notes-grid{grid-template-columns:1fr}
  .calendar-toolbar{display:grid;gap:8px}
  .calendar-toolbar-left,.calendar-toolbar-right{justify-content:space-between}
  .item-row{flex-direction:column}
  .item-actions{justify-content:flex-start}
  .toolbar-actions{width:100%}
  .toolbar-actions .primary-btn,
  .toolbar-actions .secondary-btn{flex:1}
  .card,.stat-card,.item,.archive-month{border-radius:18px}
  .week-header,
  .time-row{grid-template-columns:64px repeat(7, 92px);gap:6px}
  .time-label{min-height:68px;padding:8px 8px 0 0;font-size:.78rem}
  .time-slot{min-height:68px;padding:6px}
  .week-day-title{padding:8px 4px;font-size:.8rem}
  .week-day-title span{font-size:.72rem}
}

@media (max-width: 540px){
  .hero{gap:8px}
  #installAppBtn{padding:10px 12px}
  .calendar-toolbar-right .view-btn{
    flex:1;
    min-width:0;
    text-align:center;
  }
  .calendar-toolbar-right{width:100%}
  .calendar-toolbar-left{width:100%}
  .month-cell{
    min-height:86px;
    padding:6px;
  }
  .event-chip{padding:6px 8px;font-size:.76rem}
  .weekday-head{font-size:.75rem}
  .mobile-week-scroll{margin-inline:-2px}
  .week-header,
  .time-row{grid-template-columns:58px repeat(7, 84px)}
  .time-label{font-size:.74rem;padding-right:6px}
  .slot-event{padding:6px 7px;font-size:.78rem}
}
