:root{--nav:#0d3558;--nav2:#143f64;--bg:#eef3f7;--card:#fff;--text:#102030;--muted:#6b7785;--line:#dce5ed;--ok:#198754;--warn:#c77700;--bad:#c73b32;--accent:#0f5b88}
*{box-sizing:border-box}body{margin:0;font-family:Inter,Segoe UI,Arial,sans-serif;background:var(--bg);color:var(--text);font-size:14px}.top{min-height:58px;background:var(--nav);color:#fff;display:flex;align-items:center;padding:0 18px;gap:18px;position:sticky;top:0;z-index:10;box-shadow:0 2px 8px #0002}.brand{display:flex;align-items:center;gap:9px;white-space:nowrap}.logo{display:inline-grid;place-items:center;width:29px;height:29px;background:#fff;color:var(--nav);border-radius:7px;font-weight:800}.top nav{display:flex;align-items:center;gap:3px;flex:1}.top nav>a,.nav-dd summary{color:#fff;text-decoration:none;padding:12px 10px;border-radius:5px;cursor:pointer;font-size:13px;list-style:none}.top nav>a:hover,.nav-dd summary:hover,.nav-dd[open] summary{background:var(--nav2)}.nav-dd{position:relative}.nav-dd summary::-webkit-details-marker{display:none}.nav-menu{position:absolute;left:0;top:42px;min-width:230px;background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:0 12px 30px #0002;padding:6px}.nav-menu a{display:block;color:var(--text);text-decoration:none;padding:9px 10px;border-radius:5px}.nav-menu a:hover{background:#edf5fb}.userbox{text-align:right;font-size:12px;white-space:nowrap}.userbox small{display:block;opacity:.8}.container{max-width:1460px;margin:18px auto;padding:0 16px 30px}.page-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px}.page-head h1{margin:0;font-size:25px}.page-head p{margin:5px 0 0;color:var(--muted)}.actions{display:flex;gap:8px;flex-wrap:wrap}.btn,button,input[type=submit]{appearance:none;border:0;border-radius:6px;background:var(--nav);color:#fff;padding:9px 12px;font-weight:650;cursor:pointer;text-decoration:none;display:inline-block}.btn.secondary,button.secondary{background:#fff;color:var(--nav);border:1px solid #b8c8d6}.btn.danger,button.danger{background:#fff;color:var(--bad);border:1px solid #efb6b1}.btn.ok{background:var(--ok)}.card{background:var(--card);border:1px solid var(--line);border-radius:9px;padding:16px;margin-bottom:14px;box-shadow:0 1px 2px #00000008}.card h2,.card h3{margin-top:0}.grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}.stat{background:#fff;border:1px solid var(--line);border-radius:9px;padding:14px}.stat small{color:var(--muted);display:block}.stat strong{display:block;font-size:25px;margin-top:6px}.muted{color:var(--muted)}.badge{display:inline-block;padding:4px 7px;border-radius:999px;background:#e9f5ee;color:#166a3e;font-size:11px;font-weight:700}.badge.bad{background:#fdeceb;color:#a8322a}.badge.warn{background:#fff1d8;color:#9b5b00}.alert{border:1px solid #d5e1eb;background:#fff;padding:11px 12px;border-radius:7px;margin-bottom:12px}.alert.success{border-color:#b8dfc8;background:#edf9f1}.alert.error{border-color:#efb9b6;background:#fff0ef}.alert.warning{border-color:#f2cf92;background:#fff7e9}table{width:100%;border-collapse:collapse;background:#fff}th,td{border-bottom:1px solid var(--line);padding:9px 8px;text-align:left;vertical-align:top}th{color:#445363;background:#f8fafc;font-size:12px}tr:hover td{background:#fbfdff}.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:8px}label{font-weight:650;font-size:12px;display:block;margin-bottom:5px}input,select,textarea{width:100%;padding:9px;border:1px solid #cdd9e3;border-radius:6px;background:#fff;color:var(--text)}textarea{min-height:90px;resize:vertical}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.form-grid .full{grid-column:1/-1}.inline{display:flex;gap:8px;align-items:end;flex-wrap:wrap}.inline>div{min-width:150px;flex:1}.question{border:1px solid var(--line);border-radius:8px;padding:13px;margin:10px 0;background:#fff}.question .qtitle{font-weight:760;margin-bottom:10px}.kvs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.kv{border:1px solid var(--line);background:#fbfcfe;padding:10px;border-radius:7px}.kv small{display:block;color:var(--muted);margin-bottom:4px}footer{text-align:center;color:#7a8794;padding:18px;font-size:12px}.login-wrap{max-width:430px;margin:80px auto}.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px;word-break:break-all}.hero{background:linear-gradient(120deg,#0d3558,#19688e);color:#fff;border:0}.hero .muted{color:#d8e8f3}.notice{background:#fff5df;border:1px solid #f2cf88;padding:10px 12px;border-radius:7px;color:#8b5700}.right{text-align:right}.center{text-align:center}.nowrap{white-space:nowrap}
@media(max-width:1000px){.grid{grid-template-columns:repeat(2,1fr)}.top{align-items:flex-start;padding:10px;flex-wrap:wrap}.top nav{order:3;width:100%;overflow:auto}.userbox{margin-left:auto}}
@media(max-width:650px){.grid,.grid.two,.form-grid{grid-template-columns:1fr}.page-head{flex-direction:column}.container{padding:0 9px}.top nav{gap:0}.top nav>a,.nav-dd summary{padding:9px 7px}.kvs{grid-template-columns:1fr}}
@media print{.top,.actions,footer,.no-print{display:none!important}.container{max-width:none;margin:0;padding:0}.card{box-shadow:none;break-inside:avoid}}

.panel{background:#fff;border:1px solid var(--line);border-radius:9px;padding:16px;margin-bottom:14px}.panel h2{margin-top:0}.page-heading{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:16px}.page-heading h1{margin:.2rem 0}.eyebrow{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--accent);font-weight:700}.alert-success{border-color:#b8dfc8;background:#edf9f1}.alert-danger{border-color:#efb9b6;background:#fff0ef}.alert-warning{border-color:#f2cf92;background:#fff7e9}.btn-primary{background:var(--nav);color:#fff}.btn-secondary{background:#fff;color:var(--nav);border:1px solid #b8c8d6}

.qr-box{display:inline-flex;align-items:center;justify-content:center;min-width:240px;min-height:240px;padding:10px;background:#fff;border:1px solid #d9e1ea;border-radius:12px}.qr-box img,.qr-box canvas{max-width:220px;height:auto}

/* V2.7.2 — évaluation visuelle colorée */
.ev-legend{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.ev-legend-item,.ev-choice{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--line);border-radius:7px;padding:7px 9px;font-size:12px;font-weight:750;background:#fff;color:var(--text)}.ev-legend-item.ev-ok,.ev-choice.ev-ok{background:#e7f6ed;border-color:#97d3ae;color:#12633a}.ev-legend-item.ev-warn,.ev-choice.ev-warn{background:#fff2dc;border-color:#e8bc70;color:#8b5200}.ev-legend-item.ev-bad,.ev-choice.ev-bad{background:#fdebea;border-color:#e7a3a0;color:#9b2f29}.ev-legend-item.ev-dark,.ev-choice.ev-dark{background:#e8ebef;border-color:#b6bec8;color:#394553}.ev-legend-item.ev-muted,.ev-choice.ev-muted{background:#f4f6f8;border-color:#d7dde4;color:#687583}.ev-critical{font-weight:800;color:#b82d27}.ev-star{color:#c8322b;font-weight:900}.ev-summary h2{margin-bottom:10px}.ev-summary-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}.ev-summary-tile{display:flex;flex-direction:column;gap:4px;text-decoration:none;border:1px solid var(--line);border-left-width:5px;border-radius:8px;padding:10px;background:#fff;color:var(--text);min-height:80px}.ev-summary-tile span{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.04em}.ev-summary-tile small{color:inherit;opacity:.8}.ev-summary-tile.ev-ok{border-left-color:#198754;background:#f4fbf7}.ev-summary-tile.ev-warn{border-left-color:#d98200;background:#fffaf0}.ev-summary-tile.ev-bad{border-left-color:#c73b32;background:#fff6f5}.ev-summary-tile.ev-dark{border-left-color:#596575;background:#f5f6f8}.ev-summary-tile.ev-muted{border-left-color:#adb6c0}.ev-section{border-top-width:5px}.ev-section.ev-ok{border-top-color:#198754}.ev-section.ev-warn{border-top-color:#d98200}.ev-section.ev-bad{border-top-color:#c73b32}.ev-section.ev-dark{border-top-color:#596575}.ev-section.ev-muted{border-top-color:#bac3cc}.ev-section-head{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;margin-bottom:14px}.ev-section-head h2{margin:.25rem 0 .45rem}.ev-section-head p{margin:.25rem 0;max-width:850px}.ev-section-decision{min-width:350px}.ev-section-decision small{display:block;font-weight:750;margin-bottom:6px;color:var(--muted)}.ev-choice-row{display:flex;gap:6px;flex-wrap:wrap}.ev-choice-stack{display:flex;flex-wrap:wrap;gap:5px;min-width:215px}.ev-radio{position:absolute;opacity:0;pointer-events:none}.ev-radio+label.ev-choice{cursor:pointer;opacity:.46;filter:saturate(.55)}.ev-radio:checked+label.ev-choice{opacity:1;filter:none;box-shadow:0 0 0 2px #10203018}.ev-table th:nth-child(1){width:72px}.ev-table th:nth-child(2){min-width:300px}.ev-table th:nth-child(3){min-width:260px}.ev-table th:nth-child(4){min-width:250px}.ev-table th:nth-child(5){min-width:260px}.ev-table td{vertical-align:middle}.ev-critical-row td:nth-child(2){color:#9f2e29}.ev-critical-row{background:#fffafa}.ev-code{font-weight:850;white-space:nowrap}.ev-comment{min-height:72px}.ev-section-note{margin-top:12px}.ev-final{border-top:5px solid var(--nav)}.ev-final-choice .ev-choice{font-size:13px;padding:10px 14px}.ev-savebar{position:sticky;bottom:10px;z-index:6;background:#ffffffed;border:1px solid var(--line);box-shadow:0 8px 30px #0002;border-radius:10px;padding:10px 12px;display:flex;align-items:center;gap:15px;margin:12px 0}.ev-savebar button{white-space:nowrap}
@media(max-width:1100px){.ev-summary-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.ev-section-head{flex-direction:column}.ev-section-decision{min-width:0;width:100%}}
@media(max-width:650px){.ev-summary-grid{grid-template-columns:1fr 1fr}.ev-savebar{align-items:flex-start;flex-direction:column}.ev-table th:nth-child(2),.ev-table th:nth-child(3),.ev-table th:nth-child(4),.ev-table th:nth-child(5){min-width:220px}}
@media print{.ev-section{break-inside:auto}.ev-table tr{break-inside:avoid}.ev-choice{padding:4px 6px}.ev-choice:not(.ev-ok):not(.ev-warn):not(.ev-bad):not(.ev-dark):not(.ev-muted){display:none}}
/* V2.7.3 — calendrier pédagogique & évaluations collectives */
.participant-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px}.participant-card{display:flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:8px;padding:10px;background:#fff;cursor:pointer}.participant-card input{width:auto}.participant-card small{margin-left:auto;color:var(--muted)}.participant-card:has(input:checked){border-color:#3578b1;background:#edf6ff}.ev-choice:has(input:checked),.ev-choice.selected{outline:3px solid #0d355822;box-shadow:0 0 0 1px currentColor inset}.ev-choice input{width:auto;margin:0 4px 0 0}.member-details summary{cursor:pointer;font-weight:750;color:var(--nav);padding:7px 0}.member-contribution{border-top:1px solid var(--line);padding:9px 0;display:grid;grid-template-columns:minmax(140px,.8fr) minmax(120px,.6fr) minmax(180px,1.5fr);gap:8px;align-items:center}.member-contribution select,.member-contribution input{margin:0}
.calendar-title{display:flex;justify-content:space-between;align-items:center}.calendar-title h2{margin:0 0 12px}.calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));border-left:1px solid var(--line);border-top:1px solid var(--line)}.calendar-head>div{background:#f6f8fb;font-weight:800;text-align:center;padding:8px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.calendar-day{min-height:145px;padding:7px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:#fff}.calendar-day.outside{background:#f7f9fb}.calendar-day.today{background:#f4f9ff;box-shadow:inset 0 0 0 2px #4d8bc2}.calendar-day-number{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.calendar-day-number>a{text-decoration:none;font-size:20px;line-height:1;color:var(--nav)}.calendar-events{display:flex;flex-direction:column;gap:5px}.calendar-event{display:block;text-decoration:none;padding:6px 7px;border-radius:6px;border-left:4px solid currentColor;font-size:11px;line-height:1.25;color:#263545;background:#f4f6f8}.calendar-event span{display:block;font-weight:760}.calendar-event small{display:block;margin-top:2px;opacity:.78}.cal-pill{display:inline-block;border-radius:999px;padding:5px 8px;font-size:11px;font-weight:750;margin:2px}.cal-blue{background:#e8f3ff!important;color:#155f99!important}.cal-red{background:#fdebea!important;color:#9d2f29!important}.cal-orange{background:#fff1dc!important;color:#925700!important}.cal-violet{background:#f1eaff!important;color:#6543a6!important}.cal-green{background:#e8f6ed!important;color:#17663d!important}.cal-teal{background:#e5f7f5!important;color:#136b67!important}.cal-cyan{background:#e7f7fb!important;color:#166779!important}.cal-gray{background:#eef1f4!important;color:#596575!important}.cal-legend{display:flex;align-items:center;gap:5px;flex-wrap:wrap}.cal-filter-types{display:flex;gap:12px;flex-wrap:wrap}.cal-filter-types label{display:inline-flex;align-items:center;gap:5px;font-weight:600}.cal-filter-types input{width:auto}
@media(max-width:1000px){.participant-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.calendar-day{min-height:110px}.member-contribution{grid-template-columns:1fr}.calendar-event{font-size:10px}}
@media(max-width:700px){.participant-grid{grid-template-columns:1fr}.calendar-grid{min-width:900px}.calendar-grid.calendar-head{min-width:900px}.calendar-title+ .calendar-grid,.calendar-grid{overflow:visible}.card:has(.calendar-grid){overflow-x:auto}.calendar-day{min-height:120px}}
/* V2.7.4 — fermetures, 2FA et badges apprenants */
.cal-black{background:#e5e7eb!important;color:#20262d!important;border-left-color:#111827!important}.recovery-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:12px 0}.recovery-grid code{display:block;padding:9px 10px;border:1px dashed #8c98a5;border-radius:6px;background:#f8fafc;text-align:center;font-size:14px}.badge-sheet{display:flex;justify-content:center;padding:25px}.learner-badge{width:min(760px,100%);background:#fff;border:1px solid var(--line);border-radius:16px;padding:28px;box-shadow:0 12px 35px #0001}.learner-badge-head{display:flex;align-items:center;gap:12px}.learner-badge-head small{display:block;color:var(--muted)}.learner-badge h1{margin:22px 0 4px;font-size:34px}.badge-course{font-size:17px;color:#4d5e70}.badge-codes{display:grid;grid-template-columns:minmax(0,1fr) 165px;gap:18px;align-items:center;margin:22px 0}.badge-codes svg{max-width:100%;height:auto}.learner-qr{display:flex;justify-content:center}.badge-id{text-align:center;font-size:22px;font-weight:850;letter-spacing:.08em}.badge-meta{display:flex;justify-content:space-between;gap:20px;border-top:1px solid var(--line);padding-top:14px;color:var(--muted)}
@media(max-width:650px){.recovery-grid{grid-template-columns:1fr}.badge-codes{grid-template-columns:1fr}.badge-meta{flex-direction:column;gap:5px}}
@media print{.badge-sheet{padding:0}.learner-badge{box-shadow:none;border:1px solid #aaa;width:180mm;margin:0 auto}.learner-badge h1{font-size:28px}}


/* V2.7.9 — créneaux journaliers regroupés */
.schedule-block{border:1px solid var(--line);border-radius:10px;padding:12px;background:#fbfcfe}
.schedule-block-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px;flex-wrap:wrap}
.attendance-period-grid{display:grid;grid-template-columns:repeat(2,minmax(170px,1fr));gap:10px}
.attendance-period-grid.compact{grid-template-columns:repeat(4,minmax(150px,1fr))}
.attendance-edit-form{display:flex;flex-direction:column;gap:10px;min-width:560px}
.attendance-edit-head{display:grid;grid-template-columns:minmax(180px,1fr) minmax(120px,.45fr);gap:10px;align-items:end}
.attendance-correction-block{margin-top:0}
.attendance-edit-foot{display:grid;grid-template-columns:minmax(200px,1fr) auto;gap:10px;align-items:end}
.attendance-save{display:flex;justify-content:flex-end}
@media(max-width:1100px){.attendance-period-grid.compact{grid-template-columns:repeat(2,minmax(170px,1fr))}.attendance-edit-form{min-width:460px}}
@media(max-width:700px){.attendance-period-grid,.attendance-period-grid.compact,.attendance-edit-head,.attendance-edit-foot{grid-template-columns:1fr}.attendance-edit-form{min-width:0}}

/* V2.7.10 — présence pilotée par créneaux */
.schedule-preview{border:1px solid var(--line);border-radius:10px;padding:13px 14px;background:#fbfcfe;min-height:48px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}

/* V2.7.12 — fiche de pointage compacte et lisible */
.attendance-section{padding:18px}
.attendance-section-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:14px}
.attendance-section-head h2{margin:0 0 5px;font-size:21px}
.attendance-section-head p{margin:0;max-width:880px}
.attendance-count{display:inline-flex;align-items:center;justify-content:center;min-height:30px;padding:5px 10px;border-radius:999px;background:#edf4fa;color:var(--nav);font-size:12px;font-weight:800;white-space:nowrap}
.attendance-roster{display:flex;flex-direction:column;gap:12px}
.attendance-person-card{overflow:hidden;border:1px solid var(--line);border-radius:12px;background:#fff;box-shadow:0 1px 2px #00000006}
.attendance-person-summary{display:grid;grid-template-columns:minmax(280px,1.8fr) minmax(170px,.9fr) minmax(150px,.75fr) minmax(100px,.5fr);gap:16px;align-items:center;padding:14px 16px;background:#fff}
.attendance-person{display:flex;align-items:center;gap:12px;min-width:0}
.attendance-avatar{display:inline-grid;place-items:center;flex:0 0 42px;width:42px;height:42px;border-radius:50%;background:var(--nav);color:#fff;font-size:14px;font-weight:850;letter-spacing:.02em;box-shadow:inset 0 0 0 1px #ffffff22}
.attendance-person small,.attendance-summary-item small{display:block;margin-bottom:4px;color:var(--muted);font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.055em}
.attendance-person strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:15px}
.attendance-summary-item{min-width:0}
.attendance-summary-item>strong{font-size:14px}
.attendance-status-badge{display:inline-flex;align-items:center;gap:6px;width:max-content;max-width:100%;padding:5px 9px;border-radius:999px;font-size:12px;font-weight:800;line-height:1.2}
.attendance-status-badge:before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor;opacity:.8}
.attendance-status-badge.neutral{background:#eef2f6;color:#627080}
.attendance-status-badge.ok{background:#eaf7ef;color:#14723f}
.attendance-status-badge.warn{background:#fff3dd;color:#9c6000}
.attendance-status-badge.bad{background:#fdeceb;color:#a8322a}
.attendance-pointage{white-space:nowrap;font-variant-numeric:tabular-nums}
.attendance-pointage span{padding:0 4px;color:var(--muted);font-weight:500}
.attendance-edit-panel{display:block;border:0;border-top:1px solid var(--line);border-radius:0;padding:0;background:#fbfcfe}
.attendance-schedule-strip{display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding:10px 16px 0}
.attendance-schedule-label{color:var(--muted);font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.05em}
.attendance-schedule-chip{display:inline-flex;align-items:center;padding:6px 10px;border-radius:7px;background:#eaf3ff;color:#164f7a;font-size:12px;font-weight:800;line-height:1.25}
.attendance-edit-grid{display:grid;grid-template-columns:minmax(145px,.78fr) minmax(245px,1.25fr) minmax(245px,1.25fr) minmax(105px,.55fr) minmax(155px,.85fr) auto;gap:10px;align-items:end;padding:12px 16px 14px}
.attendance-field label,.attendance-time-group legend{display:block;margin:0 0 5px;color:#3c4b5b;font-size:11px;font-weight:800}
.attendance-field label{white-space:nowrap}
.label-optional{color:var(--muted);font-weight:500}
.attendance-edit-grid input,.attendance-edit-grid select{height:38px;padding:8px 10px;border-color:#cbd7e2;background:#fff}
.attendance-time-group{min-width:0;margin:0;padding:0;border:0}
.attendance-time-group legend{padding:0}
.attendance-time-group legend span{color:var(--muted);font-weight:500}
.attendance-time-pair{display:grid;grid-template-columns:minmax(86px,1fr) 20px minmax(86px,1fr);gap:5px;align-items:center}
.attendance-time-pair input{min-width:0;font-variant-numeric:tabular-nums}
.attendance-arrow{display:inline-grid;place-items:center;color:var(--muted);font-size:15px;font-weight:700}
.attendance-time-group.is-empty{min-height:58px}
.attendance-empty-period{height:38px;display:flex;align-items:center;justify-content:center;gap:8px;border:1px dashed #cbd7e2;border-radius:6px;background:#f6f8fa;color:#74808d;font-size:12px;font-weight:700}
.attendance-empty-period span{padding-left:8px;border-left:1px solid #d5dde5;font-size:11px;font-weight:800}
.attendance-unit-input{display:grid;grid-template-columns:minmax(64px,1fr) auto;align-items:stretch}
.attendance-unit-input input{border-radius:6px 0 0 6px}
.attendance-unit-input span{display:grid;place-items:center;min-width:37px;padding:0 8px;border:1px solid #cbd7e2;border-left:0;border-radius:0 6px 6px 0;background:#f4f6f8;color:var(--muted);font-size:11px;font-weight:800}
.attendance-save{display:flex;align-items:flex-end;justify-content:flex-end;height:38px}
.attendance-save button{height:38px;white-space:nowrap;padding-inline:15px}
.attendance-help{margin:12px 2px 0;padding-top:11px;border-top:1px solid #edf1f4;color:var(--muted);font-size:11px}
.attendance-empty-state{padding:28px;text-align:center;border:1px dashed var(--line);border-radius:10px;background:#fbfcfe;color:var(--muted)}
@media(max-width:1220px){
  .attendance-edit-grid{grid-template-columns:minmax(150px,.8fr) minmax(230px,1.2fr) minmax(230px,1.2fr) minmax(105px,.55fr)}
  .attendance-edit-grid .slot-note{grid-column:1/4}
  .attendance-save{grid-column:4}
}
@media(max-width:900px){
  .attendance-person-summary{grid-template-columns:minmax(220px,1.5fr) 1fr 1fr}
  .attendance-person-summary .attendance-summary-item:last-child{grid-column:3}
  .attendance-edit-grid{grid-template-columns:1fr 1fr}
  .attendance-edit-grid .slot-status,.attendance-edit-grid .slot-late{grid-column:auto}
  .attendance-edit-grid .slot-note{grid-column:1/-1}
  .attendance-save{grid-column:1/-1;justify-content:flex-end}
}
@media(max-width:650px){
  .attendance-section{padding:12px}
  .attendance-section-head{flex-direction:column}
  .attendance-person-summary{grid-template-columns:1fr 1fr;gap:12px;padding:13px}
  .attendance-person{grid-column:1/-1}
  .attendance-edit-grid{grid-template-columns:1fr;padding:12px 13px 13px}
  .attendance-edit-grid .slot-note,.attendance-save{grid-column:1}
  .attendance-schedule-strip{padding:10px 13px 0;align-items:flex-start;flex-direction:column;gap:5px}
  .attendance-schedule-chip{width:100%}
  .attendance-time-pair{grid-template-columns:minmax(0,1fr) 18px minmax(0,1fr)}
  .attendance-save{justify-content:stretch}
  .attendance-save button{width:100%}
}

/* V2.7.13 — cahier de présence en grille collective */
.attendance-grid-section{padding:0;overflow:hidden}
.attendance-grid-head{margin:0;padding:16px 18px;border-bottom:1px solid var(--line);background:#fff}
.attendance-grid-tools{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}
.attendance-grid-tools form{margin:0}
.attendance-all-present{white-space:nowrap}
.attendance-grid-scroll{width:100%;overflow-x:auto;background:#fff}
.attendance-grid-table{width:100%;border-collapse:separate;border-spacing:0;table-layout:fixed;font-size:12px}
.attendance-grid-table thead th{position:sticky;top:58px;z-index:3;padding:10px 8px;border-bottom:1px solid #cbd7e2;background:#f4f7fa;color:#32475a;text-align:left;font-size:10px;font-weight:850;text-transform:uppercase;letter-spacing:.035em;white-space:nowrap}
.attendance-grid-table tbody td{padding:8px;border-bottom:1px solid #e5ebf0;vertical-align:middle;background:#fff}
.attendance-grid-table tbody tr:nth-child(even) td{background:#fbfcfd}
.attendance-grid-table tbody tr:hover td{background:#f4f9fd}
.attendance-grid-table tbody tr:last-child td{border-bottom:0}
.attendance-grid-table .col-learner{width:245px}
.attendance-grid-table .col-status{width:128px}
.attendance-grid-table .col-period{width:205px}
.attendance-grid-table .col-late{width:92px}
.attendance-grid-table .col-duration{width:82px}
.attendance-grid-table .col-note{width:180px}
.attendance-grid-table .col-action{width:96px;text-align:right}
.attendance-grid-person{display:flex;align-items:center;gap:9px;min-width:0}
.attendance-grid-person .attendance-avatar{flex-basis:34px;width:34px;height:34px;font-size:11px}
.attendance-grid-person-text{min-width:0;display:grid;grid-template-columns:1fr auto;column-gap:7px;row-gap:2px;align-items:center}
.attendance-grid-person-text>strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}
.attendance-grid-person-text>.attendance-status-badge{font-size:9px;padding:3px 6px}
.attendance-grid-person-text>small{grid-column:1/-1;color:var(--muted);font-size:9px;line-height:1.25;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.attendance-grid-table select,.attendance-grid-table input{width:100%;height:34px;min-width:0;padding:6px 7px;border:1px solid #c8d4df;border-radius:5px;background:#fff;font-size:11px;color:var(--text)}
.attendance-grid-table select:focus,.attendance-grid-table input:focus{outline:2px solid #bcd7ea;outline-offset:0;border-color:#79a8c8}
.attendance-grid-status{font-weight:700}
.attendance-grid-time-pair{display:grid;grid-template-columns:minmax(74px,1fr) 14px minmax(74px,1fr);gap:4px;align-items:center}
.attendance-grid-time-pair span{display:grid;place-items:center;color:#7b8793;font-weight:800}
.attendance-grid-time-pair input{font-variant-numeric:tabular-nums;padding-inline:5px}
.attendance-grid-none{display:flex;justify-content:center;align-items:center;gap:7px;height:34px;border:1px dashed #d4dde5;border-radius:5px;background:#f8fafb;color:#7b8793;font-weight:700}
.attendance-grid-none small{font-size:9px;color:#8a96a2}
.attendance-grid-late{display:grid;grid-template-columns:minmax(42px,1fr) auto;align-items:stretch}
.attendance-grid-late input{border-radius:5px 0 0 5px;text-align:center;padding-inline:3px}
.attendance-grid-late span{display:grid;place-items:center;padding:0 5px;border:1px solid #c8d4df;border-left:0;border-radius:0 5px 5px 0;background:#f4f6f8;color:#657382;font-size:9px;font-weight:800}
.attendance-grid-late input:disabled{background:#f2f4f6;color:#9ca6af}
.attendance-grid-duration{text-align:center;font-variant-numeric:tabular-nums;white-space:nowrap}
.attendance-grid-duration strong{font-size:11px}
.attendance-grid-note{font-size:10px!important}
.attendance-grid-action{text-align:right}
.attendance-row-hidden-form{margin:0}
.attendance-grid-save{height:34px;padding:6px 9px;font-size:10px;white-space:nowrap}
.attendance-grid-legend{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:10px 18px;border-top:1px solid var(--line);background:#f8fafc;font-size:10px;color:#536170}
.attendance-grid-legend span{display:inline-flex;align-items:center;gap:5px}
.attendance-grid-legend .muted{margin-left:auto}
.legend-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:#9aa5af}
.legend-dot.ok{background:var(--ok)}.legend-dot.warn{background:var(--warn)}.legend-dot.bad{background:var(--bad)}

@media(max-width:1200px){
  .attendance-grid-table{min-width:1180px}
  .attendance-grid-table thead th{top:58px}
}
@media(max-width:760px){
  .attendance-grid-section{padding:0;background:transparent;border:0;box-shadow:none}
  .attendance-grid-head{padding:13px;border:1px solid var(--line);border-radius:9px;margin-bottom:10px}
  .attendance-grid-tools{justify-content:flex-start}
  .attendance-grid-scroll{overflow:visible;background:transparent}
  .attendance-grid-table{display:block;min-width:0}
  .attendance-grid-table thead{display:none}
  .attendance-grid-table tbody{display:grid;gap:10px}
  .attendance-grid-table tbody tr{display:block;overflow:hidden;border:1px solid var(--line);border-radius:9px;background:#fff;box-shadow:0 1px 2px #00000008}
  .attendance-grid-table tbody td,.attendance-grid-table tbody tr:nth-child(even) td,.attendance-grid-table tbody tr:hover td{display:grid;grid-template-columns:100px minmax(0,1fr);gap:8px;align-items:center;width:auto!important;padding:7px 10px;border-bottom:1px solid #edf1f4;background:#fff;text-align:left}
  .attendance-grid-table tbody td:before{content:attr(data-label);color:#687684;font-size:9px;font-weight:850;text-transform:uppercase;letter-spacing:.035em}
  .attendance-grid-table tbody td:last-child{border-bottom:0}
  .attendance-grid-table .attendance-grid-learner{display:block;padding:11px 10px;background:#f8fafc}
  .attendance-grid-table .attendance-grid-learner:before{display:none}
  .attendance-grid-person .attendance-avatar{width:36px;height:36px;flex-basis:36px}
  .attendance-grid-person-text>strong{font-size:13px}
  .attendance-grid-person-text>small{font-size:10px}
  .attendance-grid-time-pair{max-width:290px}
  .attendance-grid-late{max-width:150px}
  .attendance-grid-duration{text-align:left}
  .attendance-grid-action{text-align:left}
  .attendance-grid-save{width:100%;height:36px}
  .attendance-grid-legend{border:1px solid var(--line);border-radius:9px;margin-top:10px;padding:10px 12px}
  .attendance-grid-legend .muted{width:100%;margin-left:0}
}

/* V2.7.14 — visibilité complète du groupe dans le cahier de présence */
.attendance-status-badge.off{background:#f3f4f6;color:#6b7280}
.attendance-grid-row.not-expected{background:#fafafa}
.attendance-grid-row.not-expected td{opacity:.92}
.attendance-grid-row.not-expected .attendance-grid-person-text>strong{color:#59636f}

/* V2.7.15 — retard calculé automatiquement */
.attendance-grid-late input[readonly]{background:#f3f6f9;color:#0f172a;font-weight:700;cursor:not-allowed}


/* V2.7.15 — scanner badges formateur */
.scanner-layout{align-items:start}
.scanner-card h2{margin-bottom:10px}
.scanner-video-wrap{position:relative;overflow:hidden;aspect-ratio:4/3;max-height:460px;margin-top:10px;border:1px solid var(--line);border-radius:12px;background:#101820;display:grid;place-items:center}
.scanner-video-wrap video{width:100%;height:100%;object-fit:cover;display:block}
.scanner-video-wrap:not(.active) video{display:none}
.scanner-placeholder{position:absolute;color:#d9e3eb;font-weight:800;letter-spacing:.02em}
.scanner-target{position:absolute;z-index:2;width:min(62%,300px);aspect-ratio:1;border:3px solid #fff;border-radius:18px;box-shadow:0 0 0 999px #0006;pointer-events:none}
.scanner-target:before,.scanner-target:after{content:"";position:absolute;inset:14px;border-top:3px solid #35c56f;border-bottom:3px solid #35c56f;border-radius:10px;opacity:.9}
.scanner-actions{margin-top:12px;justify-content:flex-start}
.scanner-compat{margin-top:9px;font-size:12px;line-height:1.4}
.scanner-manual{margin-top:18px;padding-top:16px;border-top:1px solid var(--line)}
.scanner-manual .inline{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:end}
.scanner-history{display:grid;gap:8px;margin-top:12px}
.scanner-history-row{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(150px,.8fr) auto;gap:12px;align-items:center;padding:11px 12px;border:1px solid var(--line);border-left:4px solid var(--ok);border-radius:9px;background:#fff}
.scanner-history-row.info{border-left-color:#94a3b8}.scanner-history-row.error{border-left-color:var(--bad)}
.scanner-history-row>div{display:flex;flex-direction:column;gap:3px;min-width:0}.scanner-history-row strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.scanner-history-row small{color:var(--muted);font-size:11px}
.scanner-history-row .badge{align-self:flex-start}
@media(max-width:760px){.scanner-layout{grid-template-columns:1fr}.scanner-video-wrap{max-height:none}.scanner-target{width:min(68%,270px)}.scanner-history-row{grid-template-columns:1fr}.scanner-history-row .btn{width:100%;text-align:center}.scanner-manual .inline{grid-template-columns:1fr}.scanner-manual .inline button{width:100%}}

/* V2.7.16 — grille de présence stabilisée : pas de chevauchement de l'en-tête */
@media(min-width:761px){
  .attendance-grid-scroll{position:relative;max-height:min(64vh,650px);overflow:auto;overscroll-behavior:contain}
  .attendance-grid-table{min-width:1260px;table-layout:fixed}
  .attendance-grid-table thead th{position:sticky;top:0;z-index:5;box-shadow:0 1px 0 #cbd7e2}
  .attendance-grid-table tbody tr{height:72px}
  .attendance-grid-table tbody td{padding:9px 8px;vertical-align:middle}
  .attendance-grid-table .col-learner{width:270px}
  .attendance-grid-table .col-status{width:120px}
  .attendance-grid-table .col-period{width:210px}
  .attendance-grid-table .col-late{width:95px}
  .attendance-grid-table .col-duration{width:80px}
  .attendance-grid-table .col-note{width:175px}
  .attendance-grid-table .col-action{width:100px}
  .attendance-grid-person-text{display:flex;flex-direction:column;align-items:flex-start;gap:3px;min-width:0;width:100%}
  .attendance-grid-name-line{display:flex;align-items:center;gap:6px;min-width:0;width:100%}
  .attendance-grid-name-line strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}
  .attendance-grid-person-text>small{display:block;width:100%;font-size:9px;line-height:1.25;white-space:normal;overflow:visible;text-overflow:clip}
  .attendance-grid-time-pair{grid-template-columns:minmax(76px,1fr) 16px minmax(76px,1fr)}
  .attendance-grid-table select,.attendance-grid-table input{height:36px}
  .attendance-grid-save{height:36px}
}
@media(max-width:760px){
  .attendance-grid-scroll{max-height:none;overflow:visible}
  .attendance-grid-name-line{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
  .attendance-grid-person-text{display:flex;flex-direction:column;align-items:flex-start;gap:3px}
  .attendance-grid-person-text>small{white-space:normal;overflow:visible;text-overflow:clip}
}
