@import url('https://fonts.googleapis.com/css2?family=Sora:wght@500;600;700;800&family=Public+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@500;600&display=swap');

:root{
  --paper:#F5F3EE; --paper-raised:#FFFFFF; --ink:#1C2321; --ink-soft:#5B6360;
  --line:#DDD7C9; --primary:#1F5C52; --primary-dark:#143D37; --primary-tint:#E4EEE9;
  --accent:#C97A1F; --accent-tint:#F6E7D3;
  --danger:#B3452F; --danger-tint:#F5E3DD;
  --success:#2F7D5E; --success-tint:#E1F0E8;
  --warn:#B98A1A; --warn-tint:#F7EBCB;
  --shadow: 0 1px 2px rgba(20,25,20,.06), 0 6px 20px -8px rgba(20,25,20,.18);
  --radius:12px;
  font-size:15px;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --paper:#12161A; --paper-raised:#1A2024; --ink:#E9E7DF; --ink-soft:#9AA3A0;
    --line:#2B3330; --primary:#4E9C8E; --primary-dark:#3B7C71; --primary-tint:#1B2C28;
    --accent:#E4A857; --accent-tint:#2E2416;
    --danger:#E07A5F; --danger-tint:#301E1A;
    --success:#5FBF97; --success-tint:#152922;
    --warn:#E4C067; --warn-tint:#2E2712;
    --shadow: 0 1px 2px rgba(0,0,0,.4), 0 8px 24px -8px rgba(0,0,0,.6);
  }
}
*{box-sizing:border-box;}
body{margin:0;background:var(--paper);color:var(--ink);font-family:'Public Sans',system-ui,sans-serif;-webkit-font-smoothing:antialiased;}
h1,h2,h3,.disp{font-family:'Sora',system-ui,sans-serif;text-wrap:balance;}
.mono{font-family:'IBM Plex Mono',ui-monospace,monospace;font-variant-numeric:tabular-nums;}
a{color:var(--primary);}
button{font-family:inherit;}

#app{display:flex;min-height:100vh;}
.sidebar{width:232px;flex:none;background:var(--primary-dark);color:#F2F6F4;display:flex;flex-direction:column;padding:18px 14px;gap:4px;position:sticky;top:0;height:100vh;overflow-y:auto;}
.brand{display:flex;align-items:center;gap:10px;padding:6px 8px 18px;}
.brand .mark{width:34px;height:34px;border-radius:9px;background:var(--accent);display:flex;align-items:center;justify-content:center;font-family:'Sora';font-weight:800;color:#231404;flex:none;}
.brand .name{font-family:'Sora';font-weight:700;font-size:16.5px;letter-spacing:.2px;}
.brand .sub{font-size:11px;color:#B9CFC7;margin-top:-2px;}
.nav-group-label{font-size:10.5px;text-transform:uppercase;letter-spacing:.09em;color:#8FADA4;padding:14px 10px 6px;}
.nav-item{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:9px;color:#DCE9E4;font-size:14px;font-weight:500;cursor:pointer;border:none;background:none;width:100%;text-align:left;}
.nav-item:hover{background:rgba(255,255,255,.07);}
.nav-item.active{background:var(--accent);color:#241404;font-weight:600;}
.sidebar-foot{margin-top:auto;padding-top:14px;border-top:1px solid rgba(255,255,255,.12);}

.main{flex:1;min-width:0;display:flex;flex-direction:column;}
.topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 26px;border-bottom:1px solid var(--line);background:var(--paper-raised);position:sticky;top:0;z-index:5;}
.topbar h1{font-size:19px;margin:0;font-weight:700;}
.topbar .meta{font-size:12.5px;color:var(--ink-soft);margin-top:1px;}
.userchip{display:flex;align-items:center;gap:9px;background:var(--primary-tint);border:1px solid var(--line);padding:6px 12px 6px 6px;border-radius:100px;cursor:pointer;}
.userchip .av{width:26px;height:26px;border-radius:100px;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;font-family:'Sora';}
.userchip .who{font-size:12.5px;font-weight:600;line-height:1.15;}
.userchip .role{font-size:10.5px;color:var(--ink-soft);}
.content{padding:22px 26px 60px;flex:1;}
.view{display:none;}
.view.active{display:block;}

.grid-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin-bottom:22px;}
.stat{background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow);}
.stat .lbl{font-size:11.5px;color:var(--ink-soft);text-transform:uppercase;letter-spacing:.06em;font-weight:600;}
.stat .val{font-family:'Sora';font-size:26px;font-weight:700;margin-top:4px;}
.stat .sub{font-size:12px;color:var(--ink-soft);margin-top:2px;}
.stat.warn .val{color:var(--warn);}
.stat.accent .val{color:var(--accent);}

.panel{background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:18px;}
.panel-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line);flex-wrap:wrap;}
.panel-head h2{font-size:15.5px;margin:0;font-weight:700;}
.panel-head .desc{font-size:12px;color:var(--ink-soft);margin-top:1px;}
.panel-body{padding:16px 18px;}

.btn{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:600;padding:8px 14px;border-radius:8px;border:1px solid var(--line);background:var(--paper-raised);color:var(--ink);cursor:pointer;white-space:nowrap;}
.btn:hover{border-color:var(--primary);}
.btn.primary{background:var(--primary);color:#fff;border-color:var(--primary);}
.btn.primary:hover{background:var(--primary-dark);}
.btn.accent{background:var(--accent);color:#241404;border-color:var(--accent);}
.btn.danger{background:var(--danger-tint);color:var(--danger);border-color:transparent;}
.btn.ghost{background:none;}
.btn.sm{padding:5px 10px;font-size:12px;}
.btn:disabled{opacity:.45;cursor:not-allowed;}

.pill{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:100px;}
.pill.green{background:var(--success-tint);color:var(--success);}
.pill.amber{background:var(--warn-tint);color:var(--warn);}
.pill.red{background:var(--danger-tint);color:var(--danger);}
.pill.grey{background:var(--line);color:var(--ink-soft);}
.pill.gold{background:var(--accent-tint);color:var(--accent);}

table{width:100%;border-collapse:collapse;font-size:13.5px;}
th{text-align:left;font-size:11.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-soft);font-weight:600;padding:8px 10px;border-bottom:1px solid var(--line);}
td{padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:middle;}
tr:last-child td{border-bottom:none;}
tbody tr:hover{background:var(--primary-tint);}
.tbl-wrap{overflow-x:auto;}
.num{text-align:right;font-family:'IBM Plex Mono';font-variant-numeric:tabular-nums;}

.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;}
label{display:block;font-size:12px;font-weight:600;color:var(--ink-soft);margin-bottom:4px;}
input,select,textarea{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--paper);color:var(--ink);font-family:inherit;font-size:13.5px;}
input:focus,select:focus,textarea:focus{outline:2px solid var(--primary);outline-offset:1px;border-color:var(--primary);}
.field{margin-bottom:2px;}
.field.rel{position:relative;}
.suggest-box{position:absolute;left:0;right:0;top:calc(100% + 4px);background:var(--paper-raised);border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);max-height:240px;overflow-y:auto;z-index:20;}
.suggest-item{padding:9px 12px;font-size:13.5px;cursor:pointer;border-bottom:1px solid var(--line);}
.suggest-item:last-child{border-bottom:none;}
.suggest-item:hover,.suggest-item.active{background:var(--primary-tint);}
.suggest-item .sub{color:var(--ink-soft);font-size:12px;}
.suggest-empty{padding:10px 12px;font-size:13px;color:var(--ink-soft);}

.empty{padding:30px 10px;text-align:center;color:var(--ink-soft);font-size:13px;}
.banner{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:10px;font-size:13px;margin-bottom:16px;}
.banner.info{background:var(--primary-tint);color:var(--primary-dark);}
.banner.locked{background:var(--line);color:var(--ink-soft);}
.banner.error{background:var(--danger-tint);color:var(--danger);}

.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:14px;flex-wrap:wrap;}
.tab{padding:8px 12px;font-size:13px;font-weight:600;color:var(--ink-soft);cursor:pointer;border-bottom:2px solid transparent;}
.tab.active{color:var(--primary);border-color:var(--primary);}

.modal-back{position:fixed;inset:0;background:rgba(10,14,12,.45);display:flex;align-items:flex-start;justify-content:center;padding:5vh 16px;z-index:50;overflow-y:auto;}
.modal{background:var(--paper-raised);border-radius:14px;max-width:640px;width:100%;box-shadow:var(--shadow);border:1px solid var(--line);}
.modal-head{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--line);}
.modal-head h3{margin:0;font-size:16px;}
.modal-body{padding:18px 20px;max-height:70vh;overflow-y:auto;}
.modal-foot{display:flex;justify-content:flex-end;gap:8px;padding:14px 20px;border-top:1px solid var(--line);}
.x-close{background:none;border:none;font-size:18px;color:var(--ink-soft);cursor:pointer;line-height:1;padding:4px;}

.receipt{font-family:'IBM Plex Mono';width:340px;margin:0 auto;background:#fff;color:#111;padding:22px 20px;border:1px dashed #999;}
.receipt h4{margin:0 0 2px;font-size:15px;text-align:center;font-family:'Sora';}
.receipt .rsub{text-align:center;font-size:10.5px;color:#555;margin-bottom:12px;}
.receipt .rline{display:flex;justify-content:space-between;font-size:12px;padding:3px 0;border-bottom:1px dotted #ccc;}
.receipt .rtot{display:flex;justify-content:space-between;font-size:14px;font-weight:700;padding-top:8px;margin-top:6px;border-top:1px solid #333;}
.receipt .rfoot{text-align:center;font-size:10px;color:#666;margin-top:14px;}

.toast{position:fixed;bottom:20px;right:20px;background:var(--ink);color:var(--paper);padding:10px 16px;border-radius:9px;font-size:13px;font-weight:600;box-shadow:var(--shadow);z-index:80;opacity:0;transform:translateY(8px);transition:.25s;pointer-events:none;}
.toast.show{opacity:1;transform:translateY(0);}

@media print{ .sidebar,.topbar,.no-print{display:none!important;} .content{padding:0;} body{background:#fff;} }
@media (max-width: 820px){
  .sidebar{position:fixed;left:0;top:0;bottom:0;transform:translateX(-100%);transition:.2s;z-index:60;box-shadow:var(--shadow);}
  .sidebar.open{transform:translateX(0);}
  .menu-btn{display:inline-flex!important;}
  .topbar{padding:12px 14px;}
  .content{padding:16px 14px 50px;}
}
.menu-btn{display:none;align-items:center;justify-content:center;width:34px;height:34px;border-radius:8px;border:1px solid var(--line);background:var(--paper-raised);cursor:pointer;}

/* ---------- Site public ---------- */
#publicSite{min-height:100vh;display:flex;flex-direction:column;}
.pub-header{position:sticky;top:0;z-index:10;background:var(--paper-raised);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:12px 26px;gap:16px;flex-wrap:wrap;}
.pub-brand{display:flex;align-items:center;gap:10px;}
.pub-brand .mark{width:36px;height:36px;border-radius:9px;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;font-family:'Sora';font-weight:800;flex:none;}
.pub-brand .name{font-family:'Sora';font-weight:700;font-size:16px;}
.pub-brand .sub{font-size:11px;color:var(--ink-soft);margin-top:-2px;}
.pub-nav{display:flex;gap:2px;flex-wrap:wrap;}
.pub-nav-item{padding:8px 12px;border-radius:8px;font-size:13px;font-weight:600;color:var(--ink-soft);background:none;border:none;cursor:pointer;}
.pub-nav-item:hover{background:var(--primary-tint);}
.pub-nav-item.active{color:var(--primary);background:var(--primary-tint);}
.pub-main{flex:1;}
.pub-section{display:none;padding:40px 26px 60px;max-width:1040px;margin:0 auto;}
.pub-section.active{display:block;}
.pub-hero{display:flex;flex-direction:column;align-items:flex-start;gap:16px;padding:36px 0 8px;}
.pub-hero h1{font-size:clamp(26px,4vw,38px);margin:0;max-width:600px;}
.pub-hero p{font-size:15px;color:var(--ink-soft);max-width:520px;margin:0;}
.pub-hero-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:6px;}
.pub-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin-top:30px;width:100%;}
.pub-stat{background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow);}
.pub-stat b{display:block;font-family:'Sora';font-size:24px;color:var(--primary);}
.pub-stat span{font-size:12px;color:var(--ink-soft);}
.pub-h2{font-size:22px;margin:0 0 6px;}
.pub-lead{color:var(--ink-soft);font-size:14px;max-width:640px;margin:0 0 22px;}
.pub-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;}
.pub-card{background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow);}
.pub-card .news-photo{width:100%;max-height:260px;object-fit:cover;border-radius:9px;margin-bottom:12px;display:block;}
.pub-card .tag{display:inline-block;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--accent);margin-bottom:8px;}
.pub-card h3{margin:0 0 6px;font-size:16px;}
.pub-card p{margin:0;font-size:13px;color:var(--ink-soft);}
.pub-obj{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-top:8px;}
.pub-obj div{background:var(--primary-tint);border-radius:10px;padding:14px 16px;font-size:13.5px;}
.pub-form{max-width:560px;background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius);padding:22px;box-shadow:var(--shadow);}
.pub-contact-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;}
.pub-contact-grid .item{background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius);padding:16px;overflow-wrap:anywhere;}
.pub-contact-grid .item b{display:block;font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-soft);margin-bottom:4px;}
.pub-footer{border-top:1px solid var(--line);padding:16px 26px;font-size:12px;color:var(--ink-soft);display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;}
.pub-confirm{background:var(--success-tint);color:var(--success);border-radius:10px;padding:16px 18px;font-size:13.5px;}
.pub-confirm b{font-family:'IBM Plex Mono';font-size:16px;}
.pub-h3{font-size:18px;margin:0 0 4px;}
.pub-echec{background:var(--danger-tint);color:var(--danger);border-radius:10px;padding:16px 18px;font-size:13.5px;}
#pubContactResult .pub-confirm,#pubContactResult .pub-echec{max-width:560px;margin-bottom:12px;}

/* ---------- Carte d'étudiant ---------- */
.idcard{width:340px;margin:0 auto;border-radius:14px;overflow:hidden;background:#fff;color:#16201c;box-shadow:0 10px 30px -8px rgba(0,0,0,.35);border:1px solid #d8d2c2;}
.idcard-head{background:linear-gradient(135deg,#1F5C52,#143D37);color:#fff;padding:12px 16px;display:flex;align-items:center;gap:10px;}
.idcard-head .mk{width:26px;height:26px;border-radius:7px;background:#C97A1F;color:#241404;display:flex;align-items:center;justify-content:center;font-family:'Sora';font-weight:800;font-size:13px;flex:none;}
.idcard-head .nm{font-family:'Sora';font-weight:700;font-size:13px;line-height:1.2;}
.idcard-head .nm small{display:block;font-weight:500;font-size:10px;opacity:.85;}
.idcard-body{display:flex;gap:14px;padding:16px;}
.idcard-photo{width:72px;height:88px;border-radius:8px;background:#E4EEE9;color:#1F5C52;display:flex;align-items:center;justify-content:center;font-family:'Sora';font-weight:800;font-size:22px;flex:none;border:1px solid #d8d2c2;}
.idcard-info{flex:1;min-width:0;}
.idcard-info .who{font-family:'Sora';font-weight:700;font-size:15px;}
.idcard-info .row{font-size:11.5px;color:#5B6360;margin-top:3px;}
.idcard-info .mat{font-family:'IBM Plex Mono';font-size:12px;font-weight:600;color:#C97A1F;margin-top:6px;}
.idcard-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 16px;border-top:1px dashed #d8d2c2;}

/* ---------- Document officiel (attestations) ---------- */
.doc-official{width:100%;max-width:520px;margin:0 auto;background:#fff;color:#16201c;padding:32px 30px;border:1px solid #d8d2c2;font-family:'Public Sans',serif;}
.doc-official .doc-head{text-align:center;border-bottom:2px solid #1F5C52;padding-bottom:14px;margin-bottom:22px;}
.doc-official .doc-head b{font-family:'Sora';font-size:16px;display:block;}
.doc-official .doc-head small{color:#5B6360;font-size:11px;}
.doc-official h4{text-align:center;text-transform:uppercase;letter-spacing:.06em;font-size:15px;margin:0 0 20px;font-family:'Sora';}
.doc-official p{font-size:13.5px;line-height:1.7;text-align:justify;white-space:pre-line;}
.doc-official .doc-sign{margin-top:36px;text-align:right;font-size:13px;}
.doc-official .doc-sign .cachet{width:70px;height:70px;border:1.5px dashed #C97A1F;border-radius:100px;display:inline-flex;align-items:center;justify-content:center;font-size:9px;color:#C97A1F;margin-top:10px;text-align:center;}

.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;}
.login-card{width:100%;max-width:400px;background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:28px 26px;}
.login-card h1{font-size:20px;margin:0 0 4px;}
.login-card p{font-size:13px;color:var(--ink-soft);margin:0 0 20px;}
.login-toggle{display:flex;gap:6px;margin-bottom:18px;background:var(--paper);border:1px solid var(--line);border-radius:9px;padding:3px;}
.login-toggle button{flex:1;padding:7px;border-radius:7px;border:none;background:none;font-size:12.5px;font-weight:600;color:var(--ink-soft);cursor:pointer;}
.login-toggle button.active{background:var(--primary);color:#fff;}

/* ---- Récupération de mot de passe ---- */
.lien-oubli{margin:0 0 12px;text-align:right;font-size:13px;font-weight:600;}
.lien-oubli a{text-decoration:underline;}
.recup-info{font-size:12.5px;color:var(--ink-soft);margin:0 0 12px;line-height:1.45;}
.recup-code{font-size:22px;letter-spacing:.4em;text-align:center;font-family:'IBM Plex Mono',ui-monospace,monospace;}

/* ---- Cloche de notifications ---- */
.topbar-actions{display:flex;align-items:center;gap:10px;}
.cloche-wrap{position:relative;}
.cloche{position:relative;width:38px;height:38px;border-radius:100px;border:1px solid var(--line);background:var(--paper-raised);font-size:17px;cursor:pointer;display:flex;align-items:center;justify-content:center;}
.cloche:hover{background:var(--primary-tint);}
.cloche-badge{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 5px;border-radius:100px;background:var(--danger);color:#fff;font-size:10.5px;font-weight:700;display:flex;align-items:center;justify-content:center;}
.cloche-pop{position:absolute;right:0;top:calc(100% + 8px);width:min(380px,calc(100vw - 32px));background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);z-index:30;overflow:hidden;}
.cloche-pop .cp-head{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;border-bottom:1px solid var(--line);font-weight:700;font-size:13.5px;}
.cloche-pop .cp-list{max-height:360px;overflow-y:auto;}
.cloche-pop .cp-foot{padding:8px 14px;border-top:1px solid var(--line);text-align:center;}
.notif-item{display:block;width:100%;text-align:left;padding:10px 14px;border:none;border-bottom:1px solid var(--line);background:none;cursor:pointer;color:var(--ink);font-size:12.5px;}
.notif-item:last-child{border-bottom:none;}
.notif-item:hover{background:var(--paper);}
.notif-item.non-lue{background:var(--primary-tint);}
.notif-item .ni-titre{font-weight:600;font-size:13px;margin:3px 0 2px;}
.notif-item .ni-meta{color:var(--ink-soft);font-size:11.5px;}
.notif-item .ni-msg{color:var(--ink-soft);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.pill.urgente{background:var(--danger-tint);color:var(--danger);}
.notif-row.non-lue td:first-child{box-shadow:inset 3px 0 0 var(--primary);}
.notif-row.non-lue .ni-titre{font-weight:700;}

/* ---- Contact de communication ---- */
.contact-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px 18px;}
.contact-grid .v{font-size:13.5px;margin-top:2px;overflow-wrap:anywhere;}
.check-row{display:flex;gap:8px;align-items:flex-start;font-size:13px;font-weight:500;margin:6px 0;}
.check-row input{width:auto;margin-top:2px;}
.fiche-recup{border:2px dashed var(--line);border-radius:var(--radius);padding:18px;}
.fiche-recup .code{font-family:'IBM Plex Mono',ui-monospace,monospace;font-size:26px;letter-spacing:.3em;font-weight:700;text-align:center;margin:10px 0;}
@media (max-width:640px){ .topbar .userchip > div:last-child{display:none;} .topbar .userchip{padding:4px;} .cloche-pop{position:fixed;left:16px;right:16px;top:64px;width:auto;} }

/* Mot de passe : bouton afficher/masquer et règles vérifiées en direct */
.mdp-wrap{position:relative;}
.mdp-wrap input{padding-right:42px;}
.mdp-oeil{position:absolute;right:4px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;font-size:15px;padding:4px 8px;opacity:.7;}
.mdp-oeil[aria-pressed="true"]{opacity:1;}
.regles-mdp{list-style:none;padding:0;margin:8px 0 12px;font-size:12.5px;}
.regles-mdp li{padding:2px 0;color:var(--ink-soft);}
.regles-mdp li::before{content:"○ ";}
.regles-mdp li.ok{color:var(--accent,#1c6b52);}
.regles-mdp li.ok::before{content:"✓ ";}
.regles-mdp li.ko{color:#b3261e;}
.regles-mdp li.ko::before{content:"✗ ";}

/* Reçu : mentions DUPLICATA / ANNULÉ (visibles aussi à l'impression) */
.receipt{position:relative;}
.recu-mention{text-align:center;font-weight:800;letter-spacing:.3em;font-size:15px;border:2px solid #111;padding:3px 0;margin-bottom:10px;}
.recu-mention.annule{color:#b3261e;border-color:#b3261e;}

/* Horaire : grille hebdomadaire */
.grille-horaire{display:grid;gap:8px;overflow-x:auto;}
.gh-jour{background:var(--paper);border:1px solid var(--line);border-radius:10px;padding:8px;min-width:0;}
.gh-titre{font-weight:700;font-size:13px;margin-bottom:6px;text-align:center;}
.gh-seance{display:block;width:100%;text-align:left;background:var(--paper-raised);border:1px solid var(--line);border-left:4px solid var(--accent,#1c6b52);border-radius:8px;padding:6px 8px;margin-bottom:6px;font:inherit;color:inherit;}
button.gh-seance{cursor:pointer;}
.gh-seance.brouillon{border-left-color:#999;opacity:.8;}
.gh-seance.modifie{border-left-color:#c98a00;}
.gh-seance.annule{border-left-color:#b3261e;text-decoration:line-through;opacity:.6;}
.gh-heure{font-size:11.5px;color:var(--ink-soft);}
.gh-cours{font-weight:700;font-size:13px;}
.gh-detail{font-size:11.5px;color:var(--ink-soft);}
.gh-vide{text-align:center;color:var(--ink-soft);font-size:12px;padding:8px 0;}
@media (max-width:700px){.grille-horaire{grid-template-columns:1fr !important;}}

/* Cases à cocher avec libellé sur la même ligne (documents officiels, autorisations). */
label.case-a-cocher{display:flex;gap:8px;align-items:flex-start;margin:8px 0;font-weight:400;font-size:13.5px;text-transform:none;letter-spacing:0;color:var(--ink);cursor:pointer;}
label.case-a-cocher input[type=checkbox]{width:auto;flex:none;margin:2px 0 0;}
