:root{--bg:#ffffff;--fg:#111418;--muted:#5a636e;--accent:#0a5cd6;--ok:#157a3b;--warn:#b3610a;--err:#c22424;--border:#d4d9df}*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--fg);font-size:16px}main{padding:16px;max-width:1100px;margin:0 auto}nav.topnav{display:flex;gap:4px;flex-wrap:wrap;align-items:center;padding:8px 16px;border-bottom:2px solid var(--border);position:-webkit-sticky;position:sticky;top:0;background:var(--bg);z-index:10}nav.topnav a{display:inline-flex;align-items:center;min-height:48px;padding:0 14px;text-decoration:none;color:var(--fg);border-radius:8px;font-weight:500}nav.topnav a:hover{background:#eef2f7}.btn,button{min-height:48px;padding:0 18px;font-size:16px;font-weight:600;border-radius:8px;border:2px solid var(--accent);background:var(--accent);color:#fff;cursor:pointer}button.secondary{background:#fff;color:var(--accent)}button.danger{background:var(--err);border-color:var(--err)}button:disabled{opacity:.45;cursor:not-allowed}input,select,textarea{min-height:48px;padding:8px 12px;font-size:16px;border:2px solid var(--border);border-radius:8px;width:100%}textarea{min-height:80px}label{display:block;margin:12px 0 4px;font-weight:600}table.grid{border-collapse:collapse;width:100%}table.grid td,table.grid th{border:1px solid var(--border);padding:10px;text-align:left}.badge{display:inline-block;padding:4px 10px;border-radius:999px;font-size:13px;font-weight:700}.badge.brouillon{background:#f2f4f7;color:var(--muted)}.badge.complet{background:#e8f3ec;color:var(--ok)}.badge.en_ligne{background:#e5efff;color:var(--accent)}.badge.suspendu,.badge.warn{background:#fdf0e3;color:var(--warn)}.badge.err{background:#fbe9e9;color:var(--err)}.badge.ok{background:#e8f3ec;color:var(--ok)}.card{border:2px solid var(--border);border-radius:12px;padding:16px;margin:12px 0}.row{display:flex;gap:12px;flex-wrap:wrap;align-items:end}.row>*{flex:1 1;min-width:180px}.progress{height:10px;background:#eef1f4;border-radius:6px;overflow:hidden}.progress>div{height:100%;background:var(--ok)}.planning{display:grid;grid-template-columns:140px repeat(7,1fr);grid-gap:4px;gap:4px}.planning .cell{border:1px solid var(--border);border-radius:6px;min-height:56px;padding:4px;font-size:13px}.t-non-assigne{background:#fbe9e9}.t-assigne{background:#fdf0e3}.t-confirme{background:#e8f3ec}.t-flexible{border-style:dashed!important;border-width:2px}.error{color:var(--err);font-weight:600}.muted{color:var(--muted)}