:root{--bg:#f5f5f5;--card:#ffffff;--text:#1a1a1a;--muted:#666;--border:#d0d0d0;--action:#2563eb;--action-text:#fff;--danger:#b91c1c;--ok:#15803d;--warn:#a16207;--closed:#64748b;--radius:8px;--font:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}*{box-sizing:border-box}body,html{margin:0;padding:0;min-height:100%;font-family:var(--font);background:var(--bg);color:var(--text)}a{color:var(--action);text-decoration:none}a:hover{text-decoration:underline}.shell{max-width:480px;margin:0 auto;min-height:100vh;display:flex;flex-direction:column}.topbar{background:var(--card);border-bottom:1px solid var(--border);padding:14px 16px;display:flex;align-items:center;justify-content:space-between;font-size:15px;font-weight:600}.topbar a.ghost,.topbar button.ghost{font-size:13px;font-weight:500;color:var(--action);background:none;border:none;cursor:pointer;padding:0;font-family:inherit}.content{padding:20px 16px 40px;flex:1 1}.title{font-size:22px;font-weight:700;margin:0 0 6px}.lead{font-size:14px;color:var(--muted);margin:0 0 20px;line-height:1.45}label.field{display:block;font-size:13px;font-weight:600;margin:0 0 6px}.input,.select,.textarea{width:100%;border:1px solid var(--border);border-radius:var(--radius);padding:12px;font-size:16px;background:var(--card);margin-bottom:14px;color:var(--text);font-family:inherit}.textarea{min-height:72px;resize:vertical}.hint{font-size:12px;color:var(--muted);margin:-8px 0 14px}.err{color:var(--danger);background:#fef2f2;border:1px solid #fecaca;border-radius:var(--radius)}.err,.ok-box{font-size:13px;padding:10px 12px;margin-bottom:14px}.ok-box{color:var(--ok);background:#f0fdf4;border:1px solid #bbf7d0;border-radius:var(--radius)}.btn{display:block;width:100%;text-align:center;background:var(--action);color:var(--action-text);border:none;border-radius:var(--radius);padding:14px 16px;font-size:16px;font-weight:600;margin-top:8px;cursor:pointer;font-family:inherit}.btn.secondary{background:var(--card);color:var(--action);border:1px solid var(--border)}.btn:disabled{background:#94a3b8;color:#fff;cursor:not-allowed}.link-center{display:block;text-align:center;margin-top:16px;font-size:14px}.footer-links{text-align:center;font-size:12px;color:var(--muted);padding:16px;border-top:1px solid var(--border)}.footer-links a{color:var(--muted);margin:0 8px}.card-list{display:flex;flex-direction:column;gap:10px}.devoir-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:14px;display:block;color:inherit;text-decoration:none}.devoir-card:hover{border-color:var(--action);text-decoration:none}.devoir-card .row{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}.devoir-card h3{margin:0;font-size:15px;font-weight:600}.devoir-card .meta{font-size:12px;color:var(--muted);margin-top:6px}.badge{font-size:11px;font-weight:600;padding:3px 8px;border-radius:999px;white-space:nowrap}.badge.a-rendre,.badge.a_rendre{background:#dbeafe;color:#1d4ed8}.badge.rendu{background:#dcfce7;color:var(--ok)}.badge.depot_ferme,.badge.ferme{background:#f1f5f9;color:var(--closed)}.badge.date_depassee,.badge.depasse{background:#fef3c7;color:var(--warn)}.section{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:14px;margin-bottom:14px}.section h3{margin:0 0 8px;font-size:14px}.section p{margin:0;font-size:14px;line-height:1.45}.section .muted{color:var(--muted);font-size:13px}.drop{border:2px dashed var(--border);border-radius:var(--radius);padding:20px 12px;text-align:center;background:#fafafa;margin-bottom:14px}.drop strong{display:block;font-size:14px;margin-bottom:4px}.drop span{font-size:12px;color:var(--muted)}.otp-input{text-align:center;font-size:22px;letter-spacing:.2em;font-weight:600}.countdown{font-size:13px;color:var(--muted);text-align:center;margin:12px 0}.prose{font-size:14px;line-height:1.55;color:var(--text)}.prose h2{font-size:16px;margin:20px 0 8px}.muted{color:var(--muted)}