
:root{font-family:system-ui,-apple-system,Segoe UI,sans-serif;color:#1d2939;background:#f6f8fb}body{margin:0}header{background:#17365d;color:white;padding:16px 28px}header div{display:flex;gap:16px;align-items:baseline}header span{opacity:.8;font-size:.9rem}nav{display:flex;gap:18px;margin-top:12px;flex-wrap:wrap}nav a{color:white;text-decoration:none}main{max-width:1150px;margin:28px auto;padding:0 20px}.cards{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.card,.sheet{background:white;border:1px solid #dce3ec;border-radius:10px;padding:22px}.card strong{display:block;font-size:2rem}.card span{color:#667085}.button,button{display:inline-block;background:#245b92;color:white;border:0;border-radius:6px;padding:9px 14px;text-decoration:none;cursor:pointer}.danger{background:#9b1c1c}.actions{display:flex;gap:10px;flex-wrap:wrap;margin:18px 0}table{width:100%;border-collapse:collapse;background:white;margin-top:18px}th,td{text-align:left;padding:10px;border-bottom:1px solid #e4e7ec}th{background:#eef3f8}.form{display:grid;grid-template-columns:1fr 1fr;gap:16px;background:white;padding:22px;border-radius:10px}.form label{display:grid;gap:6px}.inline{display:flex;gap:8px;flex-wrap:wrap}.inline input,.inline select,input,select{padding:9px;border:1px solid #cbd5e1;border-radius:5px}.flash{background:#e9f7ef;padding:12px;border-radius:6px;margin-bottom:15px}.top{display:flex;justify-content:space-between;align-items:center}.note{background:#fff8e5;padding:12px;border-radius:6px}@media(max-width:800px){.cards{grid-template-columns:1fr 1fr}.form{grid-template-columns:1fr}}@media print{header,.button,button,form{display:none}main{margin:0;max-width:none}}

.six{grid-template-columns:repeat(3,1fr)}.alert strong{color:#9b1c1c}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:20px}.wide{grid-column:1/-1}.form textarea{padding:9px;border:1px solid #cbd5e1;border-radius:5px}.check{display:flex!important;grid-template-columns:auto 1fr!important;align-items:center;gap:8px!important}@media(max-width:800px){.six,.grid2{grid-template-columns:1fr 1fr}}
.card-link{display:block;color:inherit;text-decoration:none;transition:transform .12s ease,box-shadow .12s ease}.card-link:hover{transform:translateY(-2px);box-shadow:0 5px 18px rgba(23,54,93,.12)}.card-link small{display:block;margin-top:12px;color:#245b92}.muted{color:#667085}.secondary{background:#667085}.nav-group{display:block!important;margin-top:12px}.nav-group nav{margin-top:4px}.nav-label{font-size:.72rem!important;text-transform:uppercase;letter-spacing:.08em;opacity:.7!important}.admin-nav{border-top:1px solid rgba(255,255,255,.22);padding-top:9px}.admin-nav nav a{opacity:.82}.scolarite-actions{grid-template-columns:repeat(3,1fr);margin-bottom:24px}@media(max-width:800px){.scolarite-actions{grid-template-columns:1fr}}

/* Évaluations v0.15.1 */
.eval-classes,.eval-domaines{grid-template-columns:repeat(3,1fr)}
.eval-summary{display:flex;gap:10px;flex-wrap:wrap;margin:14px 0 20px}.eval-summary span{background:white;border:1px solid #dce3ec;border-radius:999px;padding:8px 12px}
.eval-selector{background:white;border:1px solid #dce3ec;border-radius:10px;padding:14px;margin:16px 0}.eval-selector label{display:grid;gap:6px}.eval-selector select{width:100%}
.eval-item-head{display:flex;gap:22px;align-items:flex-start;margin:14px 0}.eval-icon{width:112px;height:112px;object-fit:contain;flex:0 0 112px;background:white;border:1px solid #e4e7ec;border-radius:10px}.eval-icon.placeholder{display:flex;align-items:center;justify-content:center;text-align:center;color:#667085;font-size:.8rem;background:#f8fafc}.eval-icon-mini{width:42px;height:42px;object-fit:contain}.eval-code{font-size:.78rem;color:#667085;font-weight:700;letter-spacing:.03em}.eval-item-head h2{margin:.25rem 0}.eval-item-head h3{margin-bottom:.25rem}
.eval-table th,.eval-table td{text-align:center}.eval-table th:first-child,.eval-table td:first-child{text-align:left}.eval-choice input{width:22px;height:22px}.current-state{display:block;color:#667085;margin-top:3px}.orange{background:#c96b00}.blue{background:#2463a2}.table-scroll{overflow:auto;max-width:100%}
.matrix-wrap{overflow:auto;max-height:72vh;border:1px solid #dce3ec;border-radius:8px;background:white}.eval-matrix{margin:0;min-width:max-content}.eval-matrix th,.eval-matrix td{border-right:1px solid #e4e7ec}.eval-matrix .sticky-col{position:sticky;left:0;z-index:2;background:#fff;min-width:330px;max-width:430px}.eval-matrix th.sticky-col{background:#eef3f8;z-index:4}.pupil-head{min-width:86px;text-align:center!important;position:sticky;top:0;z-index:3}.matrix-state{text-align:center!important;font-size:1.35rem}.matrix-legend{margin:12px 0;color:#475467}.referentiel-item{display:flex;gap:18px;margin:12px 0;padding:16px}.referentiel-item h3{margin:.2rem 0 .5rem}.referentiel-item ul{margin-top:.25rem}.level-tabs{margin-bottom:8px}
@media(max-width:800px){.eval-classes,.eval-domaines{grid-template-columns:1fr 1fr}.eval-item-head,.referentiel-item{align-items:flex-start}.eval-icon{width:82px;height:82px;flex-basis:82px}.eval-matrix .sticky-col{min-width:250px}.eval-table{min-width:650px}}

/* v0.15.3 — navigation matière > sous-entrée */
.eval-help{margin-top:-4px;margin-bottom:14px}
.eval-subjects{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin:16px 0 28px}
.eval-subject{background:#fff;border:1px solid #dce3ec;border-radius:12px;overflow:hidden;box-shadow:0 1px 2px rgba(16,24,40,.03)}
.eval-subject summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:18px;padding:18px 20px;min-height:62px;user-select:none}
.eval-subject summary::-webkit-details-marker{display:none}
.eval-subject summary:hover{background:#f8fafc}
.eval-subject-title{display:flex;align-items:baseline;gap:12px;min-width:0}
.eval-subject-title strong{font-size:1.7rem;color:#17365d;line-height:1}
.eval-subject-title span{font-size:1.08rem;font-weight:650;color:#344054}
.eval-subject-action{white-space:nowrap;color:#245b92;font-size:.9rem}
.eval-chevron{display:inline-block;font-size:1.25rem;transition:transform .15s ease}
.eval-subject[open] .eval-chevron{transform:rotate(180deg)}
.eval-subject[open] summary{border-bottom:1px solid #e4e7ec;background:#f8fafc}
.eval-subentries{display:grid;grid-template-columns:1fr;gap:8px;padding:12px}
.eval-subentry{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 13px;border:1px solid #e4e7ec;border-radius:8px;text-decoration:none;color:#344054;background:#fff}
.eval-subentry:hover{border-color:#9bb7d4;background:#f7fbff}
.eval-subentry strong{display:inline-flex;align-items:center;justify-content:center;min-width:30px;height:26px;padding:0 7px;border-radius:999px;background:#eef3f8;color:#245b92;font-size:.85rem}
@media(max-width:800px){.eval-subjects{grid-template-columns:1fr}.eval-subject summary{padding:15px}.eval-subject-title strong{font-size:1.45rem}.eval-subject-action{font-size:.82rem}}

/* v0.15.4 — bilans périodiques et archives */
.period-toolbar,.bilan-card{margin:16px 0}.period-toolbar{display:grid;grid-template-columns:1.2fr 1fr;gap:14px;align-items:end}.period-toolbar .actions{margin:0}.inline-form{display:flex;gap:8px;align-items:center}.inline-form select{min-width:230px}.top.compact{align-items:flex-start}.top.compact h2{margin-top:0}.appreciation-form{margin:14px 0;padding:0;background:transparent;grid-template-columns:1fr}.appreciation-form textarea{width:100%;box-sizing:border-box}.success-note{background:#edf8ee;border:1px solid #b7ddb8}.archive-list{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:14px 0 24px}.archive-item{display:grid;gap:4px;padding:14px;border:1px solid #dce3ec;border-radius:9px;background:white;color:inherit;text-decoration:none}.archive-item:hover{border-color:#9bb7d4;background:#f7fbff}.archive-item span,.archive-item small{color:#667085}.compact-form{padding:14px;margin-bottom:14px}.period-form{grid-template-columns:1fr}.period-grid{display:grid;grid-template-columns:70px 1.2fr 1fr 1fr 120px;gap:8px;align-items:center}.period-head{font-weight:700;background:#eef3f8;padding:8px;border-radius:5px}.period-row-marker{font-weight:700;color:#17365d}.period-grid input{width:100%;box-sizing:border-box}.badge{display:inline-block;padding:5px 8px;border-radius:999px;background:#eef3f8;color:#245b92;font-size:.82rem}
@media(max-width:800px){.period-toolbar{grid-template-columns:1fr}.archive-list{grid-template-columns:1fr}.period-grid{grid-template-columns:55px 1fr}.period-head{display:none}.period-grid>div:nth-child(5n+3),.period-grid>div:nth-child(5n+4),.period-grid>div:nth-child(5n+5){grid-column:2}.inline-form select{min-width:0;width:100%}}
.period-config-row{display:contents}.period-config-row[hidden]{display:none}


/* v0.15.6 — compétence personnelle dans un sous-groupe */
.eval-custom-add{margin-top:14px;margin-bottom:14px;padding:14px 16px;}
.eval-custom-add h3{margin:0 0 10px 0;}
.custom-competence-form{display:flex;gap:10px;align-items:center;flex-wrap:wrap;}
.custom-competence-form input[type=text]{flex:1 1 520px;min-width:260px;padding:10px 12px;border:1px solid #cfd8e3;border-radius:7px;font-size:1rem;background:#fff;}
.custom-competence-form button{white-space:nowrap;}
@media(max-width:700px){.custom-competence-form input[type=text],.custom-competence-form button{width:100%;}}

/* v0.15.7 — périodes générales, envoi PDF et courrier familles */
.period-grid-v2{grid-template-columns:70px 65px 1.2fr 1fr 1fr 165px}
.period-grid-v2 .period-active{width:22px;height:22px}
.period-inactive>div{opacity:.52}
.period-inactive>div:first-child{opacity:1}
.family-note-table textarea{width:100%;min-width:320px;box-sizing:border-box;padding:8px;border:1px solid #cbd5e1;border-radius:5px}
.inline-note-form{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:end}
@media(max-width:800px){
  .period-grid-v2{grid-template-columns:70px 1fr}
  .period-grid-v2 .period-head{display:none}
  .period-grid-v2 .period-config-row>div:nth-child(n+3){grid-column:2}
  .family-note-table{display:block;overflow:auto}
  .inline-note-form{grid-template-columns:1fr}
}

/* v0.15.8 — préremplissage collectif et livret PDF de la classe */
.green{background:#2f7d32}
.bulk-fill-bar{margin:18px 0;padding:16px 18px;border-left:5px solid #245b92}
.bulk-fill-bar .actions{margin:10px 0 4px}
.bulk-help{margin:4px 0 0}
.bulk-hint{min-height:1.2em;margin-top:7px;font-weight:600;color:#245b92}
.pdf-booklet-note{display:flex;align-items:center;font-size:.92rem}

/* v0.15.14 — traces photographiques PS/MS/GS */
.eval-photo-help{margin:14px 0;background:#f4f9ff;border:1px solid #cfe1f2}.eval-photo-cell{min-width:180px}.photo-capture-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 10px;border-radius:7px;background:#245b92;color:#fff;font-weight:650;cursor:pointer;white-space:nowrap}.photo-file-input{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}.photo-pdf-check{display:flex;align-items:center;gap:6px;margin-top:7px;font-size:.82rem;color:#475467;white-space:nowrap}.photo-pdf-check input{width:18px;height:18px}.eval-photo-thumbs{display:flex;gap:7px;flex-wrap:wrap;align-items:flex-start}.eval-photo-thumb{width:70px;height:54px;object-fit:cover;border-radius:7px;border:1px solid #cbd5e1;background:#f8fafc}.eval-photo-card{display:grid;gap:3px;justify-items:start;padding:5px;border:1px solid #e4e7ec;border-radius:8px;background:#fff}.photo-inline-form{margin:0;font-size:.76rem}.photo-inline-form label{display:flex;align-items:center;gap:4px}.photo-inline-form input[type=checkbox]{width:16px;height:16px}.photo-delete{background:transparent;color:#9b1c1c;padding:2px 0;font-size:.74rem;text-decoration:underline}.photo-add-form{display:flex;gap:7px;align-items:center;flex-wrap:wrap;margin-top:8px}.photo-add-form .photo-pdf-check{margin:0}.photo-send-button{padding:7px 10px}.eval-history-table td{vertical-align:top}.eval-photo-manage{min-width:245px}.eval-photo-saved{margin-bottom:8px;padding:6px;border:1px solid #b7dfc3;border-radius:8px;background:#f4fbf6}.photo-saved-label{display:block;margin-bottom:5px;font-size:.78rem;font-weight:700;color:#18713a}.eval-photo-preview{display:none;align-items:center;gap:7px;margin-bottom:8px;padding:6px;border:1px dashed #d29b28;border-radius:8px;background:#fffaf0}.eval-photo-preview:not(:empty){display:flex}.eval-photo-preview-img{flex:0 0 auto}.photo-pending-label{font-size:.78rem;font-weight:650;color:#815d0a;line-height:1.25}.photo-more{display:inline-flex;align-items:center;justify-content:center;min-width:36px;height:54px;padding:0 5px;border-radius:7px;background:#eef2f6;color:#475467;font-size:.78rem;font-weight:700}
@media(max-width:800px){.eval-photo-cell{min-width:170px}.eval-photo-thumb{width:62px;height:48px}.eval-photo-manage{min-width:220px}.photo-capture-button{padding:9px 10px}}

.security-warning{padding:10px 12px;border-left:4px solid #b36b00;background:#fff7e6;margin:8px 0}.card table{max-width:100%;overflow-wrap:anywhere}

/* v0.15.21 — espace parents avec activation papier / QR */
.family-main{max-width:920px}.family-auth{max-width:620px;margin:30px auto}.family-auth h1{margin-top:0}.family-form{display:grid;gap:15px;margin-top:18px}.family-form label{display:grid;gap:6px;font-weight:600}.family-form input{font-size:1rem;padding:11px}.family-form button{justify-self:start}.family-nav-button{background:transparent;padding:0;color:white;font:inherit}.family-child-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.family-child-card h2{margin-top:0}.family-bilans{display:grid;gap:9px}.family-privacy{margin-top:24px}.parent-actions{display:flex;gap:6px;flex-wrap:wrap}.parent-actions form{margin:0}.parent-actions .button,.parent-actions button{font-size:.82rem;padding:6px 9px}.green-badge{background:#edf8ee;color:#18713a}code{background:#eef3f8;padding:2px 5px;border-radius:4px}@media(max-width:800px){.family-child-grid{grid-template-columns:1fr}.family-auth{margin:12px auto}.family-main{padding:0 12px}}

/* v0.15.25 : QR d’activation parent visible directement dans l’administration */
.parent-activation-box{display:grid;gap:5px;justify-items:start;min-width:132px}
.parent-qr{width:118px;height:118px;object-fit:contain;background:#fff;border:1px solid #d7dde5;border-radius:8px;padding:6px}
@media(max-width:800px){.parent-qr{width:104px;height:104px}}

/* v0.15.35 — refonte Élèves / portraits / entrée Évaluations */
.student-class-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin:22px 0}.student-class-card{display:grid;gap:5px;min-height:118px;padding:20px;border:1px solid #d8e2ee;border-radius:14px;background:linear-gradient(145deg,#fff,#f7fbff);color:#1d2939;text-decoration:none;box-shadow:0 2px 8px rgba(23,54,93,.05);transition:.15s ease}.student-class-card:hover{transform:translateY(-2px);border-color:#91b4d6;box-shadow:0 6px 18px rgba(23,54,93,.12)}.student-class-card strong{font-size:1.15rem;color:#17365d}.student-class-card small{color:#667085}.student-class-card .class-icon{font-size:1.8rem}.student-class-card.all{background:linear-gradient(145deg,#eaf5ff,#fff)}.student-class-card.test{border-style:dashed}.student-class-card.warning{background:#fff9ea}.student-filter-bar{display:grid;grid-template-columns:2fr 1.2fr 1fr auto;gap:10px;align-items:end;background:#fff;border:1px solid #dce3ec;border-radius:10px;padding:14px;margin:14px 0}.student-filter-bar label{display:grid;gap:5px;font-size:.85rem;font-weight:650}.student-list-table td{vertical-align:middle}.student-thumb{display:inline-flex;width:52px;height:52px;object-fit:cover;border-radius:50%;border:2px solid #d9e5f0;background:#f4f7fa;align-items:center;justify-content:center;font-weight:750;color:#667085}.student-thumb.placeholder{font-size:.9rem}.image-right-badge{display:inline-block;padding:4px 8px;border-radius:999px;font-size:.78rem;font-weight:700}.image-right-badge.yes{background:#eaf7ed;color:#196b34}.image-right-badge.no{background:#fdebec;color:#9b1c1c}.image-right-badge.unknown{background:#eef2f6;color:#667085}.student-profile-head{display:grid;grid-template-columns:160px 1fr;gap:24px;align-items:start}.student-portrait{width:150px;height:180px;object-fit:cover;border-radius:15px;border:1px solid #d5dee8;background:#f3f6f9;box-shadow:0 3px 12px rgba(23,54,93,.08)}.student-portrait.placeholder{display:flex;align-items:center;justify-content:center;font-size:2.4rem;font-weight:800;color:#6d7f93}.student-photo-actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin:16px 0 22px}.student-photo-actions form{display:flex;gap:8px;align-items:center;margin:0}
.school-banner{display:flex;align-items:center;justify-content:center;gap:22px;margin:18px 0;padding:14px 18px;border-radius:16px;background:linear-gradient(90deg,#fff5d9,#eaf6ff,#f1ecff);border:1px solid #e3e6ec}.school-banner>span{font-size:2rem}.school-banner div{display:grid;text-align:center}.school-banner strong{font-size:1.15rem;color:#17365d}.school-banner small{color:#667085}.selected-card{outline:3px solid #8bb9e2}.evaluation-class-header{display:flex;justify-content:space-between;align-items:center;gap:16px;margin:24px 0 12px;padding:16px 18px;border-radius:14px;background:#fff;border-left:6px solid #e9b949}.evaluation-class-header h2{margin:0}.evaluation-class-header p{margin:4px 0 0}.pupil-gallery{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:16px;margin:16px 0 28px}.pupil-card{position:relative;display:grid;justify-items:center;gap:4px;padding:15px 10px 13px;border-radius:16px;text-decoration:none;color:#1d2939;background:linear-gradient(160deg,#fff,#f8fbff);border:1px solid #dbe4ee;box-shadow:0 2px 8px rgba(23,54,93,.06);transition:.15s ease;overflow:hidden}.pupil-card:before{content:"";position:absolute;left:0;right:0;top:0;height:6px;background:linear-gradient(90deg,#f2c94c 0 25%,#6fcf97 25% 50%,#56ccf2 50% 75%,#bb6bd9 75%)}.pupil-card:hover{transform:translateY(-3px);box-shadow:0 8px 22px rgba(23,54,93,.14)}.pupil-card strong{font-size:1.08rem;margin-top:4px}.pupil-card span{color:#475467}.pupil-card small{color:#667085}.pupil-photo-wrap{position:relative;margin-top:5px}.pupil-photo-wrap img,.pupil-photo-placeholder{width:100px;height:100px;border-radius:50%;object-fit:cover;border:4px solid #fff;box-shadow:0 0 0 2px #cddbea;background:#eef3f8}.pupil-photo-placeholder{display:flex;align-items:center;justify-content:center;font-size:1.7rem;font-weight:800;color:#667085}.pencil-dot{position:absolute;right:-5px;bottom:1px;display:flex!important;width:29px;height:29px;align-items:center;justify-content:center;border-radius:50%;background:#f2c94c;color:#5d4a00!important;border:2px solid white}.eval-ref-summary{margin-top:24px}.evaluation-pupil-heading{gap:18px}.evaluation-pupil-ident{display:flex;align-items:center;gap:14px}.evaluation-pupil-avatar{width:72px;height:72px;object-fit:cover;border-radius:50%;border:3px solid white;box-shadow:0 0 0 2px #cbd9e6;background:#eef3f8}.evaluation-pupil-avatar.placeholder{display:flex;align-items:center;justify-content:center;font-weight:800;color:#667085}.dictation-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.dictation-row button.dictating{background:#9b1c1c}.previous-year-cell{text-align:center!important;min-width:105px}.previous-year-badge{display:inline-flex;align-items:center;gap:5px;padding:6px 8px;border-radius:999px;background:#f5f7fa;border:1px solid #dfe5ec;font-size:.78rem;white-space:nowrap}.previous-year-badge span{color:#475467}.eval-empty-radio{position:absolute!important;opacity:0!important;pointer-events:none!important;width:1px!important;height:1px!important}.status-en_cours{background:#fff5e8;border-color:#efd1a8}.status-acquis{background:#edf8ee;border-color:#b7ddb8}.status-depasse{background:#edf5ff;border-color:#bdd3ec}
@media(max-width:900px){.student-class-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.pupil-gallery{grid-template-columns:repeat(3,minmax(0,1fr))}.student-filter-bar{grid-template-columns:1fr 1fr}.student-filter-bar button{align-self:end}.student-profile-head{grid-template-columns:120px 1fr}.student-portrait{width:112px;height:140px}}
@media(max-width:600px){.student-class-grid{grid-template-columns:1fr}.pupil-gallery{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.pupil-photo-wrap img,.pupil-photo-placeholder{width:82px;height:82px}.student-filter-bar{grid-template-columns:1fr}.student-profile-head{grid-template-columns:1fr}.student-portrait{width:130px;height:155px}.school-banner{gap:12px}.school-banner>span{font-size:1.5rem}.evaluation-class-header{align-items:flex-start;flex-direction:column}.evaluation-pupil-heading{align-items:flex-start;flex-direction:column}}
.eval-row-reset{margin-left:6px;padding:1px 5px;border-radius:5px;background:#eef2f6;color:#667085;font-size:.75rem;vertical-align:middle}.eval-row-reset:hover{background:#dde5ed;color:#17365d}

/* v0.15.36 — historique N-1 : icônes rondes simples */
.previous-year-dot{display:inline-block;width:18px;height:18px;border-radius:50%;vertical-align:middle;box-shadow:0 0 0 2px rgba(0,0,0,.08);cursor:help}
.previous-year-dot.prev-acquis{background:#2e9d50}
.previous-year-dot.prev-en-cours{background:#f2c94c}
.previous-year-dot.prev-depasse{background:#2f80ed}

/* v0.15.37 — évaluation tactile par élève */
.blue-star-inline{color:#2f80ed;font-size:1.35em;line-height:1}
.tactile-help{border-left:5px solid #7b61ff;background:#f5f2ff}
.eval-pupil-cell{min-width:205px;text-align:left!important}
.eval-pupil-row{display:flex;align-items:center;gap:10px}
.eval-pupil-name{min-width:0}
.tactile-pupil-trigger{display:flex;align-items:center;justify-content:center;padding:0;border:0;background:transparent;box-shadow:none;border-radius:50%;cursor:pointer;touch-action:manipulation}
.tactile-pupil-trigger:hover,.tactile-pupil-trigger:focus-visible{background:transparent;outline:4px solid #7b61ff;outline-offset:3px}
.eval-pupil-thumb{display:flex;width:64px;height:64px;flex:0 0 64px;border-radius:50%;object-fit:cover;align-items:center;justify-content:center;border:3px solid #fff;box-shadow:0 0 0 2px #cddbea;background:#eef3f8;color:#667085;font-weight:800;font-size:1.1rem}
.eval-pupil-thumb.placeholder{letter-spacing:.02em}
body.tactile-modal-open{overflow:hidden}
.tactile-modal[hidden]{display:none!important}
.tactile-modal{position:fixed;inset:0;z-index:2000;display:flex;align-items:center;justify-content:center;padding:18px}
.tactile-modal-backdrop{position:absolute;inset:0;background:rgba(16,24,40,.72);backdrop-filter:blur(3px)}
.tactile-modal-panel{position:relative;z-index:1;width:min(980px,96vw);max-height:94vh;overflow:auto;border-radius:26px;background:#fff;padding:24px 28px 28px;text-align:center;box-shadow:0 28px 80px rgba(0,0,0,.34)}
.tactile-close{position:absolute;right:14px;top:10px;width:52px;height:52px;border-radius:50%;padding:0;font-size:2.2rem;line-height:1;background:#f2f4f7;color:#344054;border:0;box-shadow:none}
.tactile-close:hover{background:#e4e7ec}
.tactile-pupil-visual{display:flex;justify-content:center;margin:0 auto 7px}
.tactile-pupil-visual .tactile-avatar-large{width:118px;height:118px;flex-basis:118px;font-size:2rem;box-shadow:0 0 0 3px #d8e2ee}
.tactile-modal-panel h2{margin:4px 55px 5px;font-size:2rem}
.tactile-question{max-width:800px;margin:7px auto 4px;font-size:1.08rem;font-weight:650;color:#344054}
.tactile-instruction{margin:10px 0 14px;font-size:1.15rem;color:#667085}
.tactile-status-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;margin:10px 0 16px}
.tactile-status{min-height:220px;border:4px solid transparent;border-radius:28px;padding:18px 12px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;box-shadow:0 6px 18px rgba(16,24,40,.10);cursor:pointer;touch-action:manipulation;transition:transform .08s ease,box-shadow .08s ease,border-color .08s ease}
.tactile-status:active{transform:scale(.97)}
.tactile-status:focus-visible{outline:5px solid #7b61ff;outline-offset:4px}
.tactile-status strong{font-size:1.45rem}
.tactile-en-cours{background:#fffbe8;color:#594b00;border-color:#f4df75}
.tactile-acquis{background:#edfaef;color:#175c2d;border-color:#8bd49f}
.tactile-depasse{background:#eef6ff;color:#174f8a;border-color:#8bbbea}
.tactile-circle{display:block;width:104px;height:104px;border-radius:50%;background:#f2c94c;box-shadow:inset 0 -5px 0 rgba(126,99,0,.12),0 4px 12px rgba(0,0,0,.12)}
.tactile-thumb{display:block;font-size:7rem;line-height:.95;filter:drop-shadow(0 4px 4px rgba(0,0,0,.14))}
.tactile-star{display:block;font-size:8rem;line-height:.85;color:#2f80ed;text-shadow:0 4px 5px rgba(0,0,0,.13)}
.tactile-status.saved-choice{border-color:#12b76a;box-shadow:0 0 0 6px rgba(18,183,106,.18)}
.tactile-save-state{min-height:30px;margin:8px 0 10px;font-size:1.2rem;font-weight:800}
.tactile-save-state.saving{color:#475467}.tactile-save-state.success{color:#137333}.tactile-save-state.error{color:#b42318}
.tactile-cancel{min-width:180px}
@media(max-width:650px){
  .tactile-modal{padding:7px}.tactile-modal-panel{width:100%;max-height:98vh;border-radius:20px;padding:17px 13px 18px}
  .tactile-pupil-visual .tactile-avatar-large{width:92px;height:92px;flex-basis:92px}
  .tactile-modal-panel h2{font-size:1.6rem;margin-right:48px;margin-left:48px}.tactile-question{font-size:.98rem}
  .tactile-status-grid{grid-template-columns:1fr;gap:10px}.tactile-status{min-height:126px;flex-direction:row;gap:24px;border-radius:22px;padding:10px 24px}
  .tactile-status strong{font-size:1.5rem}.tactile-circle{width:78px;height:78px;flex:0 0 78px}.tactile-thumb{font-size:5.7rem;width:92px}.tactile-star{font-size:6.3rem;width:92px}
  .eval-pupil-thumb{width:58px;height:58px;flex-basis:58px}
}

/* v0.15.38 — photo rapide depuis la galerie de classe + continuité N-1 */
.pupil-card-main{display:grid;justify-items:center;gap:4px;width:100%;color:inherit;text-decoration:none}
.pupil-quick-photo{position:absolute;right:9px;top:12px;z-index:4;margin:0}
.pupil-camera-button{display:flex;width:42px;height:42px;align-items:center;justify-content:center;border-radius:50%;background:#245b92;color:#fff;font-size:1.2rem;border:3px solid #fff;box-shadow:0 2px 8px rgba(23,54,93,.25);cursor:pointer;touch-action:manipulation}
.pupil-camera-button:hover{background:#173f69;transform:scale(1.05)}
.pupil-camera-button.image-refused{background:#b42318}
.pupil-camera-input{position:absolute!important;left:-9999px!important;width:1px!important;height:1px!important;opacity:0!important}
.class-photo-hint{margin:10px 0 14px;background:#f4f9ff;border:1px solid #cfe1f2}
.confirmed-current{color:#0d6b2e!important;font-weight:800}.confirmed-thumb-small{font-size:1.15em;filter:drop-shadow(0 0 3px #ffe066)}
.confirmed-summary{background:linear-gradient(90deg,#e6f7e9,#fff6bf);border:1px solid #74c687!important;font-weight:800!important}
.acquis-confirme-badge{display:inline-flex;align-items:center;gap:5px;padding:5px 9px;border-radius:999px;background:linear-gradient(110deg,#dff6e5,#fff2a8,#dff6e5);border:2px solid #4cad68;color:#0f6329;font-weight:800;box-shadow:0 0 8px rgba(242,201,76,.35);white-space:nowrap}
.continuity-help{margin:8px 0 12px;background:#f7fbff;border:1px solid #cfe1f2}.continuity-table td{vertical-align:middle}.continuity-label{margin-left:6px;font-size:.86rem}.previous-inline{color:#667085;font-weight:650}
.tactile-acquis.confirmable{background:linear-gradient(145deg,#e9faec,#fff8b7);border-color:#63c174;box-shadow:0 0 0 5px rgba(242,201,76,.18),0 8px 22px rgba(16,24,40,.12)}
.tactile-status.confirmed-choice{background:linear-gradient(135deg,#dff7e4,#fff1a6,#dff7e4);border-color:#2f9e50;box-shadow:0 0 0 8px rgba(242,201,76,.30),0 8px 28px rgba(47,158,80,.24)}
.tactile-status.confirmed-choice .tactile-thumb{filter:drop-shadow(0 0 8px #ffe066) drop-shadow(0 4px 4px rgba(0,0,0,.18));transform:scale(1.08)}
@media(max-width:600px){.pupil-camera-button{width:46px;height:46px;font-size:1.3rem}.pupil-quick-photo{right:6px;top:10px}.acquis-confirme-badge{white-space:normal}}

/* Programmation des évaluations par période */
.planning-toolbar,.planning-tools{margin:16px 0;padding:16px}.planning-toolbar>.actions{margin-top:12px}.planning-domain{margin:12px;padding:12px;border:1px solid #dae2eb;border-radius:10px}.planning-domain>summary{font-weight:600;cursor:pointer}.planning-item{display:flex;gap:12px;align-items:flex-start;padding:12px;margin:4px 0;border-radius:8px;background:#f6f8fc;cursor:pointer}.planning-item input[type=checkbox]{width:22px;height:22px;flex:none;margin-top:4px}.planning-item small{color:#576574}.planning-item[hidden],.planning-domain[hidden],.planning-subject[hidden]{display:none}.planning-save{position:sticky;bottom:0;padding:16px;background:white;border-top:1px solid #dce3ed;display:flex;gap:16px;align-items:center;flex-wrap:wrap}.planning-pupil-items{display:grid;gap:8px;max-height:380px;overflow:auto}.planning-pupil-items>a{padding:10px;background:#f6f8fc;border-radius:8px}.planning-subject>.actions{padding:12px}

/* v0.15.43 — aperçu immédiat et retour d'enregistrement des portraits. */
.student-photo-actions form{flex-wrap:wrap;min-width:0}
.photo-save-state{font-size:.85rem;color:#475467;line-height:1.4}
.photo-save-state.saved{color:#196b34}.photo-save-state.failed{color:#9b1c1c}
.pupil-photo-state{min-height:1.2em;text-align:center;max-width:100%}
.student-photo-actions [hidden]{display:none!important}
