:root{
  --blue:#0d6efd; --blue-hover:#0b5ed7;
  --bg:#f4f6f9; --card:#fff; --border:#e1e5ea;
  --danger:#dc3545; --warning:#ffc107; --success:#198754;
  font-family:"Segoe UI",Roboto,Arial,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
body{background:var(--bg);color:#111;line-height:1.5}

a.btn,button.btn{
  padding:.5rem 1.2rem;border-radius:4px;font-size:.9rem;
  border:1px solid var(--blue);background:var(--blue);color:#fff;
  text-decoration:none;cursor:pointer
}
a.btn:hover,button.btn:hover{background:var(--blue-hover)}
a.btn.outline{background:#fff;color:var(--blue)}
a.btn.outline:hover{background:var(--blue);color:#fff}

.top-nav{display:flex;justify-content:space-between;align-items:center;
  background:var(--card);padding:1rem;border-bottom:1px solid var(--border)}
.controls{padding:1rem;display:flex;gap:1rem}
.presence-grid{padding:1rem;display:grid;grid-template-columns:1fr auto;gap:2rem}

.scan-card{max-width:400px;margin:4rem auto;padding:2rem;background:var(--card);
  border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.05);text-align:center}

input[type=text],input[type=date]{
  padding:.5rem;border:1px solid var(--border);border-radius:4px;width:100%;max-width:260px}
input[type=text]{font-size:1rem;margin-top:1rem}

table{width:100%;border-collapse:collapse;background:var(--card)}
th,td{padding:.6rem;border-bottom:1px solid var(--border);text-align:left}
th{background:var(--bg);font-weight:600}
.late{color:var(--warning)} .early{color:var(--danger)}

.status{margin-top:1rem}
.status.ok{color:var(--success)} .status.warn{color:var(--danger)}

.card-sm{max-width:420px;margin:4rem auto;padding:2rem;background:var(--card);
  border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.05)}
.card-sm label{display:block;margin:.8rem 0 .4rem}
.card-sm input{width:100%}
/* … reste du fichier identique … */
canvas#pie{max-width:200px;margin:auto}
/* couleurs tard/early déjà en place */
