:root { --sidebar-w: 248px; }
body { font-size: .925rem; }
.app-shell { min-height: 100vh; }
.sidebar { width: var(--sidebar-w); flex: 0 0 var(--sidebar-w); background: var(--bs-tertiary-bg); position: sticky; top: 0; height: 100vh; overflow-y: auto; }
.sidebar .brand { color: var(--bs-emphasis-color); }
.sidebar .nav-link { color: var(--bs-body-color); border-radius: .375rem; padding: .4rem .65rem; display: flex; gap: .55rem; align-items: center; }
.sidebar .nav-link:hover { background: var(--bs-secondary-bg); }
.sidebar .nav-link.active { background: var(--bs-primary-bg-subtle); color: var(--bs-primary-text-emphasis); font-weight: 600; }
.sidebar .nav-section { font-size: .72rem; text-transform: uppercase; letter-spacing: .06em; color: var(--bs-secondary-color); padding: .9rem .65rem .25rem; }
.min-w-0 { min-width: 0; }
.stat .value { font-size: 1.6rem; font-weight: 600; line-height: 1.1; font-variant-numeric: tabular-nums; }
.stat .label { color: var(--bs-secondary-color); font-size: .8rem; }
.num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.table-sm td, .table-sm th { vertical-align: middle; }
.avatar { width: 40px; height: 50px; object-fit: cover; border-radius: .3rem; background: var(--bs-secondary-bg); }
.avatar-lg { width: 120px; height: 150px; object-fit: cover; border-radius: .5rem; background: var(--bs-secondary-bg); }
.avatar-placeholder { display: inline-flex; align-items: center; justify-content: center; color: var(--bs-secondary-color); }
.status-paye { color: var(--bs-success-text-emphasis); }
.status-partiel { color: var(--bs-warning-text-emphasis); }
.status-du { color: var(--bs-danger-text-emphasis); }
.status-non { color: var(--bs-secondary-color); }
.sticky-head thead th { position: sticky; top: 0; background: var(--bs-body-bg); z-index: 1; }
.htmx-indicator { display: none; }
.htmx-request .htmx-indicator, .htmx-request.htmx-indicator { display: inline-block; }
.card-title-sm { font-size: .8rem; text-transform: uppercase; letter-spacing: .05em; color: var(--bs-secondary-color); margin-bottom: .5rem; }
@media (min-width: 992px) {
  .sidebar { transition: margin-left .2s; }
  html.sidebar-hidden .sidebar { margin-left: calc(-1 * var(--sidebar-w)); visibility: hidden; }
}
@media (max-width: 991.98px) {
  .sidebar { position: fixed; z-index: 1040; left: calc(-1 * var(--sidebar-w)); transition: left .2s; }
  .sidebar.open { left: 0; box-shadow: 0 0 2rem rgba(0,0,0,.3); }
  .sidebar-backdrop { position: fixed; inset: 0; z-index: 1039; background: rgba(0,0,0,.35); opacity: 0; pointer-events: none; transition: opacity .2s; }
  .sidebar.open ~ .sidebar-backdrop { opacity: 1; pointer-events: auto; }
  body.sidebar-open { overflow: hidden; }
}
@media print {
  body { font-size: 10pt; }
  main { padding: 0 !important; }
  .card { border: 0 !important; }
}
/* Feuille de présence imprimable */
.sheet { border-collapse: collapse; width: 100%; font-size: 9pt; }
.sheet th, .sheet td { border: 1px solid #888; padding: 2px 3px; }
.sheet .day { width: 1.4em; text-align: center; font-size: 8pt; }
.sheet .name { white-space: nowrap; }
@page { size: A4 landscape; margin: 10mm; }

/* Logo : version bleue et rouge en thème clair, version éclaircie en thème sombre */
.logo-dark { display: none; }
[data-bs-theme="dark"] .logo-light { display: none; }
[data-bs-theme="dark"] .logo-dark { display: inline; }
.sheet .off { background: #d9d9d9; }
/* Nouvelle inscription : une colonne, des blocs les uns sous les autres */
.registration { max-width: 860px; }
.registration-steps { position: sticky; top: 0; z-index: 10; display: flex; flex-wrap: wrap; gap: .25rem 1rem; padding: .5rem .75rem; background: var(--bs-body-bg); border-bottom: 1px solid var(--bs-border-color); font-size: .875rem; }
.registration-steps a { text-decoration: none; }
.registration section { scroll-margin-top: 3rem; }
/* Pédagogie */
.timetable td { vertical-align: top; min-width: 9rem; }
.timetable .slot { border-left: 4px solid var(--bs-secondary-border-subtle); padding: .15rem .4rem; margin-bottom: .25rem; background: var(--bs-tertiary-bg); border-radius: .25rem; }
.timetable .slot-break { font-style: italic; opacity: .75; }
.session { border-left: 4px solid var(--bs-secondary-border-subtle); }
.grid-eval select { min-width: 4.5rem; }
.grid-eval .lvl-A { background: var(--bs-success-bg-subtle); }
.grid-eval .lvl-EC { background: var(--bs-warning-bg-subtle); }
.grid-eval .lvl-NA { background: var(--bs-danger-bg-subtle); }
.grid-eval th.comp { font-weight: normal; font-size: .8rem; min-width: 7rem; max-width: 12rem; white-space: normal; }

/* Évaluation par compétences : intitulés en diagonale, cases carrées colorées */
.grid-comp thead th { background: transparent; }
.grid-comp th.comp-rot { height: 14rem; min-width: 2.9rem; max-width: 2.9rem; padding: 0; position: relative; vertical-align: bottom; font-weight: 500; }
.grid-comp th.comp-rot > div { position: absolute; left: 1.45rem; bottom: .5rem; width: 15rem; transform-origin: bottom left; transform: rotate(-45deg); }
.grid-comp th.comp-rot span { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; font-size: .78rem; line-height: 1.15; }
.grid-comp th.app-col { padding-left: 9rem; }
.grid-comp td.cell { padding: .25rem .2rem; text-align: center; }
.grid-comp .name { position: sticky; left: 0; z-index: 2; background: var(--bs-body-bg); min-width: 9rem; max-width: 13rem; color: var(--bs-link-color); }
.grid-comp thead th.name { z-index: 3; color: inherit; }
.grid-comp tbody tr + tr td { border-top: 1px solid var(--bs-border-color-translucent); }
.grid-comp .lvl { display: inline-flex; align-items: center; justify-content: center; width: 2.5rem; height: 2.5rem; padding: 0; font-size: .8rem; font-weight: 700; border: 1px solid var(--bs-border-color); border-radius: .6rem; background: var(--bs-body-bg); color: var(--bs-body-color); cursor: pointer; }
.grid-comp span.lvl { cursor: default; }
.grid-comp .lvl:hover, .grid-comp .lvl.open { background: var(--bs-secondary-bg); }
.grid-comp .lvl:focus-visible { outline: 2px solid var(--bs-primary); outline-offset: 1px; }
/* Couleurs des niveaux (cases et sélecteur) */
.lvl[data-v="NE"], .lvl-pick [data-v="NE"] { --lv: var(--bs-secondary-color); --lv-bg: var(--bs-tertiary-bg); --lv-bd: var(--bs-border-color); }
.lvl[data-v="Abs"], .lvl-pick [data-v="Abs"] { --lv: #8a93a6; --lv-bg: var(--bs-tertiary-bg); --lv-bd: #b7bfcc; }
.lvl[data-v="NA"], .lvl-pick [data-v="NA"] { --lv: #d63333; --lv-bg: rgba(214, 51, 51, .12); --lv-bd: #d63333; }
.lvl[data-v="PA"], .lvl-pick [data-v="PA"] { --lv: #d39a34; --lv-bg: rgba(211, 154, 52, .14); --lv-bd: #d39a34; }
.lvl[data-v="A"], .lvl-pick [data-v="A"] { --lv: #5fb87a; --lv-bg: rgba(95, 184, 122, .14); --lv-bd: #5fb87a; }
.lvl[data-v="D"], .lvl-pick [data-v="D"] { --lv: #2e9e6e; --lv-bg: rgba(46, 158, 110, .16); --lv-bd: #2e9e6e; }
.grid-comp .lvl[data-v]:not([data-v=""]) { color: var(--lv); background: var(--lv-bg); border-color: var(--lv-bd); }
.lvl-pick { position: absolute; z-index: 1080; display: flex; padding: .6rem; background: var(--bs-body-bg); border-radius: .9rem; box-shadow: 0 .4rem 1.5rem rgba(0, 0, 0, .15); }
.lvl-pick[hidden] { display: none; }
.lvl-pick button { min-width: 3.4rem; height: 2.6rem; padding: 0 .7rem; font-weight: 700; font-size: 1.05rem; color: var(--lv); background: var(--bs-body-bg); border: 1px solid var(--lv-bd); margin-left: -1px; cursor: pointer; }
.lvl-pick button:first-child { border-radius: .6rem 0 0 .6rem; margin-left: 0; }
.lvl-pick button:last-child { border-radius: 0 .6rem .6rem 0; }
.lvl-pick button:hover, .lvl-pick button:focus-visible { background: var(--lv-bg); position: relative; z-index: 1; outline: none; }
.lvl-pick button.on { background: var(--lv-bg); box-shadow: inset 0 0 0 1px var(--lv-bd); }

/* Fournitures : vue de classe et fiche élève */
.grid-sup .sup { display: inline-flex; align-items: center; justify-content: center; width: 2.5rem; height: 2.5rem; border-radius: .6rem; font-size: .8rem; font-weight: 700; text-decoration: none; border: 1px solid var(--bs-border-color); color: var(--bs-secondary-color); }
.sup.complete, .sup-key.complete { background: rgba(95, 184, 122, .16); border-color: #5fb87a; color: #2e8a50; }
.sup.partial, .sup-key.partial { background: rgba(211, 154, 52, .16); border-color: #d39a34; color: #a66f10; }
.sup.missing { background: var(--bs-body-bg); }
.sup-key { display: inline-block; padding: 0 .4rem; border-radius: .4rem; border: 1px solid; font-size: .75rem; }
.sup-key.missing { border-color: var(--bs-border-color); }
.sup-sheet .qty { width: 4.5rem; margin: auto; }
.sup-sheet tr.complete td:first-child { box-shadow: inset 3px 0 0 #5fb87a; }
.sup-sheet tr.partial td:first-child { box-shadow: inset 3px 0 0 #d39a34; }

/* Registre d'appel */
.att { display: inline-flex; align-items: center; gap: .25rem; padding: .15rem .55rem; border-radius: .45rem; font-size: .85rem; font-weight: 500; white-space: nowrap; }
.att .btn-close { width: .5em; height: .5em; padding: .1em; }
.att-present { background: rgba(46, 158, 110, .15); color: #1f7a52; }
.att-absent { background: rgba(214, 51, 51, .15); color: #b42323; }
.att-justified { background: rgba(70, 110, 220, .15); color: #3554b5; }
.att-medical { background: rgba(140, 90, 210, .16); color: #6e3fb5; }
.att-late { background: rgba(230, 160, 40, .18); color: #a1650a; }
.att-todo { background: var(--bs-tertiary-bg); color: var(--bs-secondary-color); }
.att-implicit { opacity: .65; }
[data-bs-theme="dark"] .att-present { color: #6fd3a3; } [data-bs-theme="dark"] .att-absent { color: #f08a8a; }
[data-bs-theme="dark"] .att-justified { color: #9db4f5; } [data-bs-theme="dark"] .att-medical { color: #c7a6f2; } [data-bs-theme="dark"] .att-late { color: #f2c46d; }
.register td { padding-top: .45rem; padding-bottom: .45rem; }
.no-caret::after { display: none; }
/* Tri des tableaux (voir app.js) : flèche discrète au survol, nette sur la colonne triée */
table.table:not([data-nosort]) > thead > tr:last-child > th:not([data-nosort]) { cursor: pointer; user-select: none; }
table.table:not([data-nosort]) > thead > tr:last-child > th:not([data-nosort])::after { content: "\2195"; opacity: 0; margin-left: .25rem; font-size: .8em; }
table.table:not([data-nosort]) > thead > tr:last-child > th:not([data-nosort]):hover::after { opacity: .4; }
table.table > thead th[aria-sort="ascending"]::after { content: "\2191"; opacity: .9 !important; }
table.table > thead th[aria-sort="descending"]::after { content: "\2193"; opacity: .9 !important; }

/* Graphique en anneau (situation d'un élève). Couleurs : palette de référence validée (catégories à place fixe),
   « payé » = statut bon, « reste » = piste neutre. Le texte reste en couleurs de texte, jamais en couleur de série. */
.donut-card { --dn-1: #2a78d6; --dn-2: #eb6834; --dn-3: #1baf7a; --dn-4: #eda100; --dn-5: #e87ba4; --dn-6: #008300; --dn-7: #6250d6;
  --dn-other: #898781; --dn-paid: #0ca30c; --dn-track: #c3c2b7; }
[data-bs-theme="dark"] .donut-card { --dn-1: #3987e5; --dn-2: #d95926; --dn-3: #199e70; --dn-4: #c98500; --dn-5: #d55181; --dn-6: #008300; --dn-7: #9085e9;
  --dn-other: #898781; --dn-paid: #0ca30c; --dn-track: #383835; }
.donut-layout { display: flex; flex-wrap: wrap; align-items: center; gap: 1.25rem; }
.donut-wrap { position: relative; width: 190px; height: 190px; flex: 0 0 auto; margin: 0 auto; }
.donut-svg { width: 100%; height: 100%; display: block; }
.donut-seg { fill: none; cursor: pointer; transition: opacity .15s, stroke-width .15s; }
.donut-seg.dim, .donut-legend li.dim { opacity: .3; }
.donut-center { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; pointer-events: none; padding: 0 2.6rem; }
.donut-big { font-size: 1.35rem; font-weight: 600; line-height: 1.15; font-variant-numeric: tabular-nums; }
.donut-small { font-size: .75rem; color: var(--bs-secondary-color); line-height: 1.2; margin-top: .15rem; }
.donut-tip { position: absolute; z-index: 5; pointer-events: none; display: none; width: max-content; max-width: 17rem; padding: .4rem .55rem; font-size: .78rem;
  background: var(--bs-body-bg); color: var(--bs-body-color); border: 1px solid var(--bs-border-color); border-radius: .4rem; box-shadow: 0 .25rem .75rem rgba(0,0,0,.15); }
.donut-tip .tip-row { display: flex; justify-content: space-between; gap: .75rem; font-variant-numeric: tabular-nums; }
.donut-tip .tip-row span:last-child { white-space: nowrap; }
.donut-legend { flex: 1 1 12rem; min-width: 12rem; font-size: .85rem; }
.donut-legend li { display: flex; align-items: baseline; gap: .5rem; padding: .2rem .25rem; border-radius: .3rem; cursor: default; transition: opacity .15s; }
.donut-legend li:hover, .donut-legend li:focus { background: var(--bs-tertiary-bg); outline: none; }
.donut-legend .sw { width: .7rem; height: .7rem; border-radius: 2px; flex: 0 0 auto; transform: translateY(.05rem); }
.donut-legend .lbl { flex: 1 1 auto; }
.donut-legend .lbl small { display: block; color: var(--bs-secondary-color); font-size: .72rem; }
.donut-legend .amt { font-variant-numeric: tabular-nums; white-space: nowrap; text-align: right; }
.donut-legend .amt small { display: block; color: var(--bs-secondary-color); font-size: .72rem; }

/* Priorité des tâches */
.prio-urgent { background-color: rgba(220, 53, 69, .16); color: #b02a37; font-weight: 600; }
.prio-high { background-color: rgba(230, 160, 40, .2); color: #a1650a; font-weight: 500; }
.prio-low { color: var(--bs-secondary-color); }
[data-bs-theme="dark"] .prio-urgent { color: #f1aeb5; } [data-bs-theme="dark"] .prio-high { color: #f2c46d; }

/* Impayés : taux par classe et par frais, accordéon */
.heat-cell { padding: .15rem .3rem; text-decoration: none; font-weight: 600; }
.heat-low { background: rgba(220, 53, 69, .16); color: #b02a37; }
.heat-mid { background: rgba(230, 160, 40, .2); color: #a1650a; }
.heat-high { background: rgba(25, 135, 84, .12); color: #146c43; }
.heat-full { background: rgba(25, 135, 84, .24); color: #0f5132; }
[data-bs-theme="dark"] .heat-low { color: #f1aeb5; } [data-bs-theme="dark"] .heat-mid { color: #f2c46d; }
[data-bs-theme="dark"] .heat-high, [data-bs-theme="dark"] .heat-full { color: #75b798; }
.recovery .accordion-button { gap: .5rem; }
.recovery .accordion-button:not(.collapsed) { background: var(--bs-tertiary-bg); color: inherit; box-shadow: none; }
.recovery .accordion-body .table td, .recovery .accordion-body .table th { padding: .2rem .35rem; }

/* Notifications */
.notif .dot { width: .55rem; height: .55rem; border-radius: 50%; background: var(--bs-secondary-bg); flex: none; }
.notif-danger .dot { background: var(--bs-danger); } .notif-warning .dot { background: var(--bs-warning); }
.notif-success .dot { background: var(--bs-success); } .notif-info .dot { background: var(--bs-info); }
.notif:hover { background: var(--bs-tertiary-bg); }

/* Cases à cocher multiples (équipe directe d'un employé) : liste défilante */
div.team-box { max-height: 14rem; overflow-y: auto; border: 1px solid var(--bs-border-color); border-radius: .375rem; padding: .35rem .6rem; }
div.team-box > div { padding: .1rem 0; }
div.team-box label { display: flex; gap: .4rem; align-items: center; font-size: .9rem; }

/* Fenêtres (modals) : en-tête et boutons toujours visibles, le formulaire défile entre les deux quand il est long.
   Le <form> qui enveloppe en-tête, corps et pied doit lui aussi être une colonne flexible, sinon le corps ne défile pas. */
.modal-dialog-scrollable .modal-content > form { display: flex; flex-direction: column; min-height: 0; max-height: 100%; overflow: hidden; }
.modal-dialog-scrollable .modal-content > form > .modal-body { overflow-y: auto; min-height: 0; }

/* SweetAlert2 aux couleurs de la plateforme (thème clair et sombre) */
.swal2-popup.ui-swal { background: var(--bs-body-bg); color: var(--bs-body-color); border: 1px solid var(--bs-border-color);
                       border-radius: .75rem; font-family: var(--bs-body-font-family); font-size: 1rem; }
.swal2-popup.ui-swal .swal2-title { color: var(--bs-emphasis-color); font-size: 1.25rem; }
.swal2-popup.ui-swal .swal2-html-container { color: var(--bs-body-color); font-size: 1rem; }
.swal2-popup.ui-swal .swal2-actions { gap: .25rem; }
.swal2-popup.ui-toast { padding: .6rem .9rem; box-shadow: 0 .5rem 1.5rem rgba(0, 0, 0, .25); }
.swal2-popup.ui-toast .swal2-html-container { margin: .2rem .5rem; font-size: .92rem; }
.swal2-popup.ui-swal .swal2-close { color: var(--bs-secondary-color); }
.swal2-container.swal2-backdrop-show { background: rgba(0, 0, 0, .45); }
.swal2-container { z-index: 2000; }
.modal .swal2-container { position: fixed; }
#id_classes { display: flex; flex-wrap: wrap; gap: .25rem 1.25rem; }
/* Rubriques du menu repliables */
.sidebar .nav-section { padding: .55rem .2rem .1rem; }
.nav-section-toggle { display: flex; align-items: center; width: 100%; gap: .4rem; padding: .3rem .45rem; border: 0; background: none; border-radius: .4rem;
                      font: inherit; text-transform: inherit; letter-spacing: inherit; color: inherit; text-align: left; }
.nav-section-toggle:hover { background: var(--bs-tertiary-bg); color: var(--bs-body-color); }
.nav-section-toggle i { margin-left: auto; font-size: .7rem; transition: transform .15s; }
.nav-section-toggle[aria-expanded="false"] i { transform: rotate(-90deg); }
.nav-section-toggle .nav-dot { width: .45rem; height: .45rem; border-radius: 50%; background: var(--bs-danger); }
.sidebar .nav-group { padding: 0; }
.sidebar .nav-group[hidden] { display: none !important; }

/* Registre d'appel sur téléphone : une demi-journée à la fois, grands boutons */
.att-m-sessions { display: flex; gap: .5rem; margin-bottom: .75rem; }
.att-m-sessions button { flex: 1; border: 1px solid var(--bs-border-color); background: var(--bs-body-bg); border-radius: .75rem; padding: .5rem;
                         font-weight: 600; line-height: 1.2; color: var(--bs-body-color); }
.att-m-sessions button small { display: block; font-weight: 400; font-size: .75rem; color: var(--bs-secondary-color); }
.att-m-sessions button.active { background: var(--bs-primary); border-color: var(--bs-primary); color: #fff; }
.att-m-sessions button.active small { color: rgba(255,255,255,.85); }
.att-m-list { display: flex; flex-direction: column; gap: .5rem; padding-bottom: 5.5rem; }
.att-m-row { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; padding: .55rem .6rem; border: 1px solid var(--bs-border-color);
             border-left: 4px solid var(--bs-border-color); border-radius: .75rem; background: var(--bs-body-bg); }
.att-m-row.is-present { border-left-color: var(--bs-success); }
.att-m-row.is-absent { border-left-color: var(--bs-danger); background: var(--bs-danger-bg-subtle); }
.att-m-row.is-late { border-left-color: var(--bs-warning); background: var(--bs-warning-bg-subtle); }
.att-m-who { display: flex; align-items: center; gap: .55rem; flex: 1 1 0; min-width: 0; text-decoration: none; color: inherit; }
.att-m-photo { width: 2.6rem; height: 2.6rem; flex: 0 0 2.6rem; border-radius: 50%; object-fit: cover; background: var(--bs-secondary-bg);
               display: inline-flex; align-items: center; justify-content: center; font-weight: 700; font-size: .85rem; color: var(--bs-secondary-color); }
.att-m-name { min-width: 0; line-height: 1.15; }
.att-m-name b { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.att-m-name span { display: block; font-size: .78rem; color: var(--bs-secondary-color); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.att-m-btns { display: flex; gap: .3rem; }
.att-m-btns button { width: 3.3rem; height: 3.1rem; border-radius: .7rem; border: 1px solid var(--bs-border-color); background: var(--bs-body-bg);
                     display: flex; flex-direction: column; align-items: center; justify-content: center; line-height: 1; color: var(--bs-secondary-color); }
.att-m-btns button i { font-size: 1.25rem; }
.att-m-btns button small { font-size: .62rem; margin-top: .15rem; }
.att-m-btns .att-ok.on { background: var(--bs-success); border-color: var(--bs-success); color: #fff; }
.att-m-btns .att-ko.on { background: var(--bs-danger); border-color: var(--bs-danger); color: #fff; }
.att-m-btns .att-late.on { background: var(--bs-warning); border-color: var(--bs-warning); color: #000; }
.att-m-more { flex: 1 0 100%; display: flex; flex-wrap: wrap; gap: .3rem; padding-left: 3.15rem; }
.att-m-more .chip { border: 1px solid var(--bs-border-color); background: var(--bs-body-bg); border-radius: 1rem; padding: .15rem .6rem; font-size: .8rem;
                    color: var(--bs-body-color); }
.att-m-more .chip.on { background: var(--bs-body-color); color: var(--bs-body-bg); border-color: var(--bs-body-color); }
.att-m-bar { position: fixed; left: 0; right: 0; bottom: var(--bottom-nav-h, 0px); z-index: 1020; display: flex; align-items: center; gap: .5rem;
             padding: .6rem .9rem calc(.6rem + env(safe-area-inset-bottom)); background: var(--bs-body-bg); border-top: 1px solid var(--bs-border-color);
             box-shadow: 0 -4px 12px rgba(0,0,0,.06); }
.att-m-count { display: flex; flex-wrap: wrap; gap: .25rem .7rem; font-weight: 600; margin-right: auto; font-size: .95rem; }
.att-m-done { color: var(--bs-success); font-weight: 600; }
.att-daynav input[type=date] { min-width: 0; }

/* Ma journée (enseignants) */
.tday-calls { display: flex; flex-direction: column; gap: .2rem; font-size: .92rem; color: var(--bs-secondary-color); }
.tday-calls .ok { color: var(--bs-success); }
.tday-calls .todo { color: var(--bs-danger); font-weight: 600; }
.tday-actions { display: grid; grid-template-columns: 1fr 1fr; gap: .5rem; }
.tday-actions .btn { display: flex; flex-direction: column; align-items: center; gap: .15rem; padding: .7rem .4rem; font-size: .95rem; border-radius: .9rem; }
.tday-actions .btn i { font-size: 1.5rem; }
.tday-slot { display: flex; gap: .75rem; padding: .55rem .6rem; margin-bottom: .4rem; border-radius: .6rem; border-left: 4px solid var(--sc, #adb5bd);
             background: var(--bs-tertiary-bg); }
.tday-slot.now { background: var(--bs-primary-bg-subtle); outline: 2px solid var(--bs-primary); }
.tday-slot.past { opacity: .55; }
.tday-time { font-weight: 700; font-size: .9rem; line-height: 1.15; min-width: 3rem; }
.tday-time span { display: block; font-weight: 400; color: var(--bs-secondary-color); }

/* Barre du bas des enseignants (téléphone et tablette) */
.teacher-nav { display: none; }
@media (max-width: 991.98px) {
  body.has-bottom-nav { --bottom-nav-h: 3.6rem; }
  body.has-bottom-nav main, body.has-bottom-nav .app-main { padding-bottom: calc(var(--bottom-nav-h) + 1rem); }
  .teacher-nav { position: fixed; left: 0; right: 0; bottom: 0; z-index: 1030; display: flex; height: calc(var(--bottom-nav-h) + env(safe-area-inset-bottom));
                 padding-bottom: env(safe-area-inset-bottom); background: var(--bs-body-bg); border-top: 1px solid var(--bs-border-color); }
  .teacher-nav a, .teacher-nav button { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: .1rem;
                 border: 0; background: none; color: var(--bs-secondary-color); text-decoration: none; font-size: .7rem; min-width: 0; }
  .teacher-nav i { font-size: 1.35rem; line-height: 1; }
  .teacher-nav .active { color: var(--bs-primary); font-weight: 600; }
  body.has-bottom-nav .topbar .theme-switch { display: none !important; }
}

/* Bouton PDF verrouillé (livret) : au survol, « Voir l'administration » */
.pdf-locked { position: relative; opacity: .6; cursor: not-allowed; }
.pdf-locked::after { content: attr(data-tip); position: absolute; right: 0; bottom: calc(100% + .4rem); z-index: 10; white-space: nowrap;
                     padding: .3rem .6rem; border-radius: .4rem; background: var(--bs-dark); color: #fff; font-size: .8rem;
                     opacity: 0; pointer-events: none; transition: opacity .12s; }
.pdf-locked:hover, .pdf-locked:focus { opacity: 1; }
.pdf-locked:hover::after, .pdf-locked:focus::after { opacity: 1; }
@media (min-width: 768px) { #club-roll .att-m-bar { position: sticky; bottom: 0; margin-top: .5rem; border-radius: .75rem; border: 1px solid var(--bs-border-color); }
                            #club-roll .att-m-list { padding-bottom: 0 !important; } }
.club-card:hover { border-color: var(--bs-primary); }
