:root{
  --bg:#f5f3f0;--card:#fff;--text:#1f2328;--muted:#6b7280;--primary:#7a1111;--primary2:#9d1c1c;
  --border:#e5e1dc;--success:#1f7a4c;--warn:#a16207;--danger:#b42318;--shadow:0 10px 30px rgba(0,0,0,.06)
}
*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif}
body{padding-bottom:92px}button,input,select,textarea{font:inherit}button{cursor:pointer}
.topbar{position:sticky;top:0;z-index:20;display:flex;justify-content:space-between;align-items:center;padding:14px 18px;background:rgba(255,255,255,.95);backdrop-filter:blur(12px);border-bottom:1px solid var(--border)}
.brand{font-weight:800;font-size:1.15rem}.subtitle{font-size:.82rem;color:var(--muted)}
main{max-width:980px;margin:0 auto;padding:18px}.view{display:none}.view.active{display:block}
.card{background:var(--card);border:1px solid var(--border);border-radius:18px;padding:18px;box-shadow:var(--shadow);margin-bottom:16px}
.hero{display:flex;gap:18px;align-items:center;justify-content:space-between}.hero h1,.section-head h1{margin:.2rem 0 .4rem}.hero p{margin:0;color:var(--muted)}
.eyebrow{font-size:.78rem;text-transform:uppercase;letter-spacing:.08em;color:var(--primary);font-weight:800}
.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.stat span{display:block;color:var(--muted);font-size:.9rem}.stat strong{display:block;font-size:2rem;margin-top:.25rem}
.quick-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.tile{border:1px solid var(--border);background:#faf9f7;border-radius:16px;padding:18px 10px;font-size:1.6rem}.tile span{display:block;font-size:.9rem;margin-top:8px}
.section-head{display:flex;justify-content:space-between;align-items:end;margin-bottom:14px}.section-head.compact{align-items:center;margin-bottom:10px}.section-head.compact h2{margin:0}
.primary,.secondary,.ghost,.danger,.file-button{border-radius:12px;padding:11px 14px;border:0;font-weight:700}.primary{background:var(--primary);color:white}.primary:hover{background:var(--primary2)}
.secondary{background:#efeae5;color:var(--text)}.ghost{background:transparent;border:1px solid var(--border)}.danger{background:#fff1f0;color:var(--danger);border:1px solid #f4c7c3}.full{width:100%;margin-top:14px}
.filters,.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}input,select,textarea{width:100%;border:1px solid var(--border);border-radius:12px;background:#fff;padding:11px 12px;color:var(--text)}
label{display:block;font-weight:700;font-size:.9rem}label input,label select,label textarea{margin-top:6px;font-weight:400}
.list{display:flex;flex-direction:column;gap:10px;margin-top:12px}.member-row,.attendance-row,.skill-row,.session-row,.competition-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px;border:1px solid var(--border);border-radius:14px;background:#fff}
.member-main{flex:1}.member-main strong{display:block}.member-main small{display:block;color:var(--muted);margin-top:3px}.badge{display:inline-flex;align-items:center;padding:5px 9px;border-radius:999px;background:#f2efeb;font-size:.78rem;font-weight:700;margin:2px}
.row-actions{display:flex;gap:7px;flex-wrap:wrap}.row-actions button{padding:8px 10px}
.attendance-actions{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:14px}.status-buttons{display:flex;gap:4px;flex-wrap:nowrap;margin-left:auto}.status-buttons button{border:1px solid var(--border);background:#fff;border-radius:8px;padding:5px 7px;font-weight:700;font-size:.76rem;white-space:nowrap}
.status-buttons button.active[data-status="present"]{background:#e8f5ee;color:var(--success);border-color:#a7d7bd}.status-buttons button.active[data-status="excused"]{background:#fff6df;color:var(--warn);border-color:#ead39b}.status-buttons button.active[data-status="absent"]{background:#fff0ef;color:var(--danger);border-color:#efbbb6}
.muted{color:var(--muted)}.profile-card{display:flex;align-items:center;justify-content:space-between}.score-circle{width:92px;height:92px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-direction:column;border:8px solid #efeae5}
.score-circle strong{font-size:1.8rem;line-height:1}.score-circle span{font-size:.8rem;color:var(--muted)}
.progress-bar{height:16px;background:#eee9e3;border-radius:999px;overflow:hidden}.progress-bar>div{height:100%;width:0;background:var(--primary);transition:width .25s ease}.progress-legend{display:flex;justify-content:space-between;gap:10px;margin-top:10px}
.skill-row .skill-info{flex:1}.skill-row .skill-info strong{display:block}.skill-row .skill-info small{color:var(--muted)}.skill-controls{display:flex;align-items:center;gap:6px}.skill-controls button{width:38px;height:38px;border-radius:10px;border:1px solid var(--border);background:#fff;font-weight:900}.skill-score{min-width:58px;text-align:center;font-weight:800}
.button-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px}.preview{white-space:pre-wrap;border:1px dashed var(--border);border-radius:12px;padding:12px;margin-top:12px;max-height:220px;overflow:auto;background:#faf9f7}pre{overflow:auto;background:#1f2328;color:#f6f8fa;padding:12px;border-radius:12px;font-size:.8rem}
.file-button{display:inline-block;position:relative;overflow:hidden}.file-button input{position:absolute;left:-9999px}
.bottom-nav{position:fixed;z-index:30;left:0;right:0;bottom:0;display:grid;grid-template-columns:repeat(6,1fr);background:rgba(255,255,255,.97);border-top:1px solid var(--border);padding:7px max(8px,env(safe-area-inset-right)) calc(7px + env(safe-area-inset-bottom)) max(8px,env(safe-area-inset-left));backdrop-filter:blur(14px)}
.nav-btn{border:0;background:transparent;padding:5px 2px;color:var(--muted)}.nav-btn span{display:block;font-size:1.25rem}.nav-btn small{font-size:.7rem}.nav-btn.active{color:var(--primary);font-weight:800}
.toast{position:fixed;left:50%;bottom:100px;transform:translateX(-50%);z-index:80;background:#1f2328;color:white;padding:10px 14px;border-radius:12px;box-shadow:var(--shadow);max-width:90vw}.hidden{display:none!important}.empty{padding:22px;text-align:center;color:var(--muted)}
.modal{position:fixed;z-index:60;inset:0;background:rgba(20,20,20,.48);display:flex;align-items:center;justify-content:center;padding:18px}.modal-card{width:min(720px,100%);max-height:92vh;overflow:auto;background:var(--card);border-radius:20px;padding:18px;box-shadow:0 25px 70px rgba(0,0,0,.22)}
.check-row{display:flex;align-items:center;gap:12px}.check-row input{width:22px;height:22px}.check-row .member-main{flex:1}
.session-date{min-width:84px;text-align:center;border-radius:12px;background:#f4efea;padding:10px}.session-date strong{display:block;font-size:1.35rem}.session-date small{display:block;color:var(--muted)}
@media(max-width:720px){
  main{padding:12px}.stats-grid{grid-template-columns:repeat(2,1fr)}.quick-grid{grid-template-columns:repeat(2,1fr)}.hero{align-items:flex-start;flex-direction:column}.hero .primary{width:100%}
  .filters,.form-grid{grid-template-columns:1fr}.member-row,.session-row,.competition-row{align-items:flex-start;flex-direction:column}.attendance-row{display:flex;align-items:center;flex-direction:row;gap:6px;padding:8px 9px}.attendance-row .member-main{flex:1 1 auto;min-width:0}.attendance-row .member-main strong{font-size:.92rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.attendance-row .member-main small{font-size:.70rem}.attendance-row .status-buttons{width:auto;margin-left:auto;display:flex;flex:0 0 auto;flex-wrap:nowrap;gap:3px}.attendance-row .status-buttons button{flex:0 0 auto;min-width:0;height:28px;padding:3px 6px;font-size:.67rem;line-height:1;white-space:nowrap;border-radius:7px}.attendance-row .status-buttons button[data-status="present"]{width:28px}.attendance-row .status-buttons button[data-status="absent"]{width:36px}.attendance-row .status-buttons button[data-status="excused"]{width:30px}
  .profile-card{align-items:flex-start}.progress-legend{flex-direction:column}.row-actions{width:100%}.row-actions button{flex:1}.session-date{width:100%}
}

.lesson-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:12px;border:1px solid var(--border);border-radius:14px;background:#fff}.lesson-date{min-width:84px;text-align:center;border-radius:12px;background:#f4efea;padding:10px}.lesson-date strong{display:block;font-size:1.35rem}.lesson-date small{display:block;color:var(--muted)}.lesson-excerpt{margin:.45rem 0 0;color:var(--muted);font-size:.88rem;line-height:1.35}@media(max-width:720px){.lesson-row{align-items:flex-start;flex-direction:column}.lesson-date{width:100%}.bottom-nav .nav-btn small{font-size:.62rem}}


/* Authentication */
body.auth-locked{padding-bottom:0;overflow:auto}
body.auth-locked>.topbar,body.auth-locked>main,body.auth-locked>.bottom-nav,body.auth-locked>.modal{display:none!important}
.auth-gate{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;background:radial-gradient(circle at top,#fff 0,#f5f3f0 55%,#eee8e1 100%)}
.auth-card{width:min(460px,100%);background:var(--card);border:1px solid var(--border);border-radius:24px;padding:26px;box-shadow:0 24px 70px rgba(0,0,0,.12)}
.auth-logo{width:68px;height:68px;display:flex;align-items:center;justify-content:center;border-radius:20px;background:var(--primary);color:#fff;font-size:2rem;margin-bottom:16px}
.auth-card h1{margin:.25rem 0 .45rem}.auth-panel{margin-top:18px}.auth-panel label{margin-top:12px}.auth-help,.auth-local-warning{font-size:.8rem;color:var(--muted);line-height:1.4;text-align:center}.auth-local-warning{margin:20px 0 0}
.security-note{background:#f7f2ed;border:1px solid var(--border);padding:12px;border-radius:12px;font-size:.88rem;line-height:1.45}
.totp-input{font-size:1.35rem;letter-spacing:.28em;text-align:center;font-weight:800;font-variant-numeric:tabular-nums}
.copy-row{display:flex;gap:8px;margin-top:6px}.copy-row input{margin-top:0}.copy-row button{flex:0 0 auto}.secret-key{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;letter-spacing:.08em}
.authenticator-link{display:block;margin:14px 0;padding:10px 12px;border:1px solid var(--border);border-radius:12px;text-align:center;color:var(--primary);font-weight:700;text-decoration:none}
.auth-error{margin-top:14px;padding:10px 12px;border-radius:12px;background:#fff0ef;border:1px solid #efbbb6;color:var(--danger);font-size:.88rem;font-weight:700}
.topbar-actions{display:flex;align-items:center;gap:8px}
@media(max-width:520px){.auth-card{padding:20px}.copy-row{flex-direction:column}.copy-row button{width:100%}.topbar-actions .ghost{padding:9px 10px;font-size:.78rem}}

.version-label{font-size:.72rem;color:var(--muted);margin-top:2px}.server-status{font-size:.72rem;color:var(--muted)}


/* Attendance matrix */
.attendance-table-help{margin:10px 0 12px;font-size:.84rem}
.attendance-table-wrap{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--border);border-radius:14px;background:#fff}
.attendance-matrix{border-collapse:separate;border-spacing:0;width:max-content;min-width:100%;font-size:.82rem}
.attendance-matrix th,.attendance-matrix td{border-right:1px solid var(--border);border-bottom:1px solid var(--border);background:#fff}
.attendance-matrix tr:last-child th,.attendance-matrix tr:last-child td{border-bottom:0}.attendance-matrix th:last-child,.attendance-matrix td:last-child{border-right:0}
.attendance-name-head,.attendance-name-cell{position:sticky;left:0;z-index:3;min-width:150px;max-width:190px;text-align:left;padding:8px 10px;background:#faf9f7!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.attendance-name-head{z-index:5;vertical-align:bottom;font-weight:800}
.attendance-date-head{width:34px;min-width:34px;height:92px;vertical-align:bottom;text-align:center;padding:0;background:#faf9f7!important}
.attendance-date-head span{display:inline-block;writing-mode:vertical-rl;transform:rotate(180deg);white-space:nowrap;padding:7px 0;font-size:.70rem;letter-spacing:.02em}
.attendance-presence-cell{width:34px;min-width:34px;height:36px;text-align:center;padding:0}.presence-check{font-size:1rem;font-weight:900;color:var(--success)}
.attendance-total-head,.attendance-total-cell{position:sticky;right:0;z-index:2;width:46px;min-width:46px;text-align:center;background:#f7f2ed!important;font-weight:800}.attendance-total-head{z-index:4}
@media(max-width:720px){.attendance-name-head,.attendance-name-cell{min-width:118px;max-width:145px;padding:7px 8px;font-size:.76rem}.attendance-date-head{width:29px;min-width:29px;height:82px}.attendance-date-head span{font-size:.64rem}.attendance-presence-cell{width:29px;min-width:29px;height:32px}.attendance-total-head,.attendance-total-cell{width:38px;min-width:38px}.attendance-table-wrap{border-radius:10px}}


/* V1.5.2 */
.checkbox-line{display:flex;align-items:center;gap:9px;margin:12px 0;font-weight:700}.checkbox-line input{width:20px;height:20px;margin:0;flex:0 0 auto}.checkbox-line span{font-size:.9rem}
.attendance-table-actions{margin-top:0;justify-content:flex-end}
.button-link{display:inline-flex;align-items:center;justify-content:center;text-decoration:none}
.course-photo-field{margin-top:12px;padding:12px;border:1px solid var(--border);border-radius:14px;background:#faf9f7}.course-photo-field code{font-size:.8rem}.session-image-existing{margin-top:10px}.course-photo-thumb{display:block;max-width:180px;max-height:180px;object-fit:cover;border-radius:12px;border:1px solid var(--border);background:#fff}
@media(max-width:720px){.course-photo-thumb{max-width:130px;max-height:130px}.attendance-table-actions{width:auto}.attendance-table-actions button{flex:0 0 auto}}

/* V1.6.0 */
.role-hidden{display:none!important}
.sync-badge,.role-badge{display:inline-flex;align-items:center;border-radius:999px;padding:5px 8px;font-size:.68rem;font-weight:800;white-space:nowrap;background:#f2efeb;color:var(--muted)}
.sync-badge.online{background:#e8f5ee;color:var(--success)}.sync-badge.offline{background:#fff0ef;color:var(--danger)}.sync-badge.pending{background:#fff6df;color:var(--warn)}
.today-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-bottom:16px}.today-session{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:0}.today-session h3{margin:.15rem 0}.compact-list{margin-top:8px}.compact-row{padding:8px 10px}.archived-row{opacity:.65}.filters-3{grid-template-columns:2fr 1fr 1fr}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:14px}.season-kpis .stat strong{font-size:1.35rem}.wide-modal{width:min(960px,100%)}
.table-scroll{width:100%;overflow:auto}.simple-table{width:100%;border-collapse:collapse;font-size:.84rem}.simple-table th,.simple-table td{padding:8px 10px;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap}.simple-table th{background:#faf9f7;font-weight:800}
.month-bars{display:flex;flex-direction:column;gap:10px}.month-bar-row{display:grid;grid-template-columns:92px 1fr 44px;align-items:center;gap:10px;font-size:.82rem}.month-bar{height:10px;background:#eee9e3;border-radius:999px;overflow:hidden}.month-bar i{display:block;height:100%;background:var(--primary);border-radius:999px}
.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:10px;margin-top:10px}.photo-item{position:relative}.photo-item img{width:100%;height:110px;object-fit:cover;border:1px solid var(--border);border-radius:12px;background:#fff}.tiny-btn{position:absolute;right:5px;top:5px;padding:4px 7px;border-radius:8px;font-size:.7rem}
.tag-list{display:flex;gap:7px;flex-wrap:wrap;margin-top:10px}.tag{display:inline-flex;align-items:center;gap:5px;background:#efeae5;border-radius:999px;padding:6px 9px;font-size:.78rem;font-weight:700}.tag button{border:0;background:transparent;font-size:1rem;line-height:1;padding:0;cursor:pointer}
.competency-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 0;border-bottom:1px solid var(--border)}.competency-row:last-child{border-bottom:0}.segmented{display:flex;gap:4px;flex-wrap:nowrap}.segmented button{border:1px solid var(--border);background:#fff;padding:7px 9px;border-radius:9px;font-size:.72rem;font-weight:700;white-space:nowrap}.segmented button.active[data-comp-status="review"]{background:#fff0ef;color:var(--danger);border-color:#efbbb6}.segmented button.active[data-comp-status="progress"]{background:#fff6df;color:var(--warn);border-color:#ead39b}.segmented button.active[data-comp-status="acquired"]{background:#e8f5ee;color:var(--success);border-color:#a7d7bd}
.competition-member-row{padding:10px;border:1px solid var(--border);border-radius:14px;background:#fff}.competition-fields{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:7px;margin-top:8px}.competition-fields input,.competition-fields select{padding:8px;font-size:.78rem}

/* Pointage ultra compact smartphone : nom a gauche, boutons colles a droite */
@media(max-width:720px){
  .topbar{padding:10px 12px}.topbar-actions{gap:4px}.role-badge{display:none}.sync-badge{font-size:.62rem;padding:4px 6px}.topbar-actions .ghost{font-size:.7rem;padding:7px 8px}
  .today-grid{grid-template-columns:1fr}.today-session{align-items:flex-start}.filters-3{grid-template-columns:1fr}.two-col{grid-template-columns:1fr}
  .attendance-row{display:flex!important;flex-direction:row!important;align-items:center!important;gap:4px!important;padding:6px 7px!important;min-height:38px}.attendance-row .member-main{flex:1 1 auto;min-width:0}.attendance-row .member-main strong{font-size:.84rem!important}.attendance-row .member-main small{font-size:.62rem!important;margin-top:1px!important}.attendance-row .status-buttons{display:flex!important;flex:0 0 auto!important;width:auto!important;margin-left:auto!important;gap:2px!important;flex-wrap:nowrap!important}.attendance-row .status-buttons button{height:24px!important;min-width:0!important;padding:2px 3px!important;font-size:.61rem!important;line-height:1!important;border-radius:6px!important}.attendance-row .status-buttons button[data-status="present"]{width:23px!important}.attendance-row .status-buttons button[data-status="absent"]{width:30px!important}.attendance-row .status-buttons button[data-status="excused"]{width:24px!important}
  .competency-row{align-items:flex-start;flex-direction:column}.segmented{width:100%}.segmented button{flex:1;padding:7px 4px}.competition-fields{grid-template-columns:1fr 1fr}.photo-grid{grid-template-columns:repeat(3,1fr)}.photo-item img{height:85px}.month-bar-row{grid-template-columns:70px 1fr 34px}
}
