:root{--neon:#5ee7ff;--neon2:#1e90ff;--bg:#070b16;--card:#0d1526;--txt:#dfe9f5}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
/* la barre de menu est fixe : les ancres (#carte-...) doivent atterrir
   en dessous, sinon le haut de la carte reste masque par le menu. */
[id]{scroll-margin-top:130px}
body{font-family:'Segoe UI',system-ui,'Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji','Twemoji Mozilla','Apple Color Emoji',sans-serif;background:var(--bg);color:var(--txt);
 padding-top:calc(var(--topbar-h,66px) + 10px)}   /* hauteur reelle du menu, mesuree en JS */
.topbar{position:fixed;top:0;left:0;right:0;z-index:100;display:flex;align-items:center;justify-content:space-between;
 flex-wrap:wrap;gap:8px;padding:14px 28px;background:rgba(7,11,22,.92);backdrop-filter:blur(8px);
 border-bottom:1px solid rgba(94,231,255,.25);box-shadow:0 0 24px rgba(94,231,255,.15)}
h1.neon{font-size:1.5rem;letter-spacing:2px;color:#fff;text-transform:uppercase;
 text-shadow:0 0 6px var(--neon),0 0 18px var(--neon),0 0 40px var(--neon2),0 0 70px var(--neon2);
 animation:pulse 2.5s infinite alternate}
@keyframes pulse{from{text-shadow:0 0 6px var(--neon),0 0 18px var(--neon),0 0 40px var(--neon2)}to{text-shadow:0 0 10px var(--neon),0 0 30px var(--neon),0 0 60px var(--neon2),0 0 90px var(--neon2)}}
.menu{display:flex;flex-wrap:wrap;gap:4px}
.menu a{color:var(--txt);text-decoration:none;padding:8px 14px;border-radius:8px;font-size:.95rem;transition:.25s}
.menu a:hover{color:var(--neon);background:rgba(94,231,255,.08);box-shadow:0 0 12px rgba(94,231,255,.35)}
.menu .admin-link{border:1px solid rgba(94,231,255,.3)}
.logout-form{display:inline;margin:0}
.logout-btn{background:transparent;border:1px solid #ff5e7a;color:#ff5e7a;padding:8px 14px;border-radius:8px;
 font-size:.95rem;cursor:pointer;font-family:inherit;white-space:normal;text-align:left}
.logout-btn:hover{background:rgba(255,94,122,.12);box-shadow:0 0 12px rgba(255,94,122,.35)}
.menu .login-admin{display:none}            /* lien de connexion Admin masque sur tous les ecrans */
main{max-width:1500px;margin:0 auto;padding:14px 20px 30px}
/* liste des eleves : page elargie pour accueillir toutes les colonnes */
main.wide{max-width:1500px}
h2{color:var(--neon);margin:10px 0 18px;text-shadow:0 0 10px rgba(94,231,255,.5)}
h3{margin:14px 0 8px;color:#fff}
h4{margin:12px 0 8px;color:var(--neon)}
a{color:var(--neon)}
.hero{display:flex;gap:28px;flex-wrap:wrap;align-items:center;margin-bottom:36px}
.video-accueil{flex:1;min-width:280px;border-radius:14px;box-shadow:0 0 25px rgba(94,231,255,.25);border:1px solid rgba(94,231,255,.3)}
.hero-text{flex:1;min-width:280px}
.btn{display:inline-block;background:transparent;border:1px solid var(--neon);color:var(--neon);padding:10px 20px;
 border-radius:10px;cursor:pointer;text-decoration:none;font-size:.95rem;margin-top:10px;transition:.25s}
.btn:hover{background:var(--neon);color:#03121e;box-shadow:0 0 18px var(--neon)}
.btn-main{font-weight:600}
/* bouton bascule « vue active » : sembla eteint (gris) quand sa vue est affichee */
.btn.vue-active{border-color:#4a5468;color:#7d879b;font-weight:400;background:transparent;box-shadow:none;cursor:default}
.btn.vue-active:hover{background:transparent;color:#7d879b;box-shadow:none}
.btn.small{padding:5px 12px;font-size:.85rem}
/* boutons dans les tables : jamais de retour a la ligne ni de rognage */
table .btn,table form .btn{white-space:nowrap;max-width:none;margin-top:0}
.ok-btn{border-color:#37e08a;color:#37e08a}.ko-btn{border-color:#ff5e7a;color:#ff5e7a}.warn-btn{border-color:#ffb43a;color:#ffb43a}
.widget-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:22px;margin-top:16px}
.sejour-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,430px));justify-content:center;gap:22px;margin-top:16px}
.widget,.sejour-cadre{background:var(--card);border:1px solid rgba(94,231,255,.25);border-radius:14px;padding:16px;
 box-shadow:0 0 14px rgba(94,231,255,.1)}
/* cartes consecutives d'un dossier (prive ou admin) : espacees entre elles */
.sejour-cadre + .sejour-cadre,.enfant-admin + .enfant-admin{margin-top:26px}
.sejour-cadre.cliquable{cursor:pointer;transition:.25s}
.sejour-cadre.cliquable:hover{transform:translateY(-4px);box-shadow:0 0 26px rgba(94,231,255,.4);border-color:var(--neon)}
.widget img,.sejour-cadre img{width:100%;height:150px;object-fit:cover;border-radius:10px}
/* ---------- PAGE SEJOURS PUBLIQUE : cartes modernes ---------- */
.sej-card{position:relative;display:flex;flex-direction:column;overflow:hidden;
 background:var(--card);border:1px solid rgba(94,231,255,.25);border-radius:16px;padding:0;
 box-shadow:0 0 14px rgba(94,231,255,.1)}
.sej-card.cliquable{cursor:pointer;transition:.25s}
.sej-card.cliquable:hover{transform:translateY(-4px);box-shadow:0 0 26px rgba(94,231,255,.4);border-color:var(--neon)}
.sej-card .sej-hero{position:relative;height:170px;overflow:hidden}
.sej-card .sej-hero img{width:100%;height:100%;object-fit:cover;display:block;border-radius:0;
 transition:transform .3s}
.sej-card.cliquable:hover .sej-hero img{transform:scale(1.05)}
.sej-card .sej-hero::after{content:'';position:absolute;inset:0;
 background:linear-gradient(180deg,rgba(7,11,22,0) 30%,rgba(7,11,22,.85) 100%)}
.sej-card .sej-titre{position:absolute;left:16px;right:16px;bottom:10px;margin:0;color:#fff;
 font-size:1.15rem;text-shadow:0 1px 6px rgba(0,0,0,.6)}
.sej-card .sej-body{display:flex;flex-direction:column;gap:10px;padding:14px 16px 16px;flex:1}
.sej-chips{display:flex;flex-wrap:wrap;gap:6px}
.sej-chip{display:inline-flex;align-items:center;gap:4px;font-size:.78rem;color:#c9d4e3;
 padding:3px 10px;border:1px solid rgba(94,231,255,.3);border-radius:20px;background:rgba(94,231,255,.06)}
.sej-prix{display:flex;align-items:baseline;gap:6px;margin:0}
.sej-prix strong{font-size:1.45rem;color:var(--neon)}
.sej-prix span{font-size:.8rem;color:#8b93a7}
.sej-places{display:flex;flex-direction:column;gap:4px}
.sej-places .sej-places-txt{display:flex;justify-content:space-between;font-size:.78rem;color:#8b93a7;margin:0}
.sej-barre{height:7px;border-radius:6px;background:rgba(94,231,255,.12);overflow:hidden}
.sej-barre>div{height:100%;border-radius:6px;background:var(--neon);transition:width .3s}
.sej-barre.pleine>div{background:#ff5e7a}
.sej-card .sej-cta{margin-top:auto;display:flex;justify-content:flex-end}
.sej-card .sej-cta .btn{margin:0}
.sej-ligne-meta{display:flex;justify-content:space-between;gap:10px;font-size:.8rem;
 padding:6px 0;border-bottom:1px dashed rgba(94,231,255,.18);margin:0}
.sej-ligne-meta:last-of-type{border-bottom:0}
.sej-ligne-meta span:first-child{color:#8b93a7}
.prix{color:var(--neon);font-size:1.2rem;font-weight:700}
.badge{display:inline-block;padding:3px 12px;border-radius:20px;font-size:.8rem;border:1px solid var(--neon);color:var(--neon);margin:6px 0}
.badge.ok{border-color:#37e08a;color:#37e08a}.badge.ko{border-color:#ff5e7a;color:#ff5e7a}
.badge.absent{border-color:#8b93a7;color:#8b93a7}
.badge.attente{border-color:#ffb43a;color:#ffb43a;background:rgba(255,180,58,.08)}
/* nombre de participations (enfants des anciens sejours) : une couleur par valeur 1 a 9 */
.badge.n1{border-color:#8b93a7;color:#8b93a7}
.badge.n2{border-color:#5ee7ff;color:#5ee7ff}
.badge.n3{border-color:#37e08a;color:#37e08a}
.badge.n4{border-color:#ffb43a;color:#ffb43a}
.badge.n5{border-color:#ff5e7a;color:#ff5e7a}
.badge.n6{border-color:#9d7bff;color:#9d7bff}
.badge.n7{border-color:#4d9fff;color:#4d9fff}
.badge.n8{border-color:#ff6ec7;color:#ff6ec7}
.badge.n9{border-color:#c2f542;color:#c2f542}
table.sejour-infos{width:100%;border-collapse:collapse;margin:8px 0}
/* listes admin : largeurs de colonnes adaptees au contenu,
   sans depasser la largeur de la page */
.eleves-liste,.sejours-liste td{overflow-wrap:break-word}
/* liste des eleves : la ligne survolee s'illumine */
.eleves-liste tr{transition:background .15s}
.eleves-liste tbody tr:hover,.eleves-liste tr:hover{background:rgba(94,231,255,.07)}
.eleves-liste tr:hover th{color:#fff}
.sejour-infos th,.sejour-infos td{padding:6px 8px;text-align:left;border-bottom:1px solid rgba(94,231,255,.12);font-size:.92rem}
.sejour-infos th{color:var(--neon);white-space:nowrap}
/* libelles des documents : passage a la ligne autorise (mots longs,
    ecrans etroits) — le nowrap general des th ne doit pas s'y appliquer */
.docs-table th{white-space:normal;overflow-wrap:break-word}
fieldset{border:1px solid rgba(94,231,255,.3);border-radius:14px;padding:18px;margin:22px 0;background:var(--card)}
legend{color:var(--neon);font-weight:700;padding:0 8px;text-transform:uppercase;letter-spacing:1px}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
label{display:flex;flex-direction:column;font-size:.88rem;color:#a9c3dd}
label.full{margin-top:8px}
input,select,textarea{background:#08101f;border:1px solid rgba(94,231,255,.3);color:var(--txt);
 padding:9px;border-radius:8px;margin-top:4px;font-size:.95rem}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--neon);box-shadow:0 0 10px rgba(94,231,255,.4)}
.progress-label{margin-bottom:6px}.progress-label span{color:var(--neon);font-weight:700}
.progress-bar{height:10px;background:#0a1220;border:1px solid rgba(94,231,255,.25);border-radius:8px;overflow:hidden;margin-bottom:20px}
/* page inscription : date limite + places restantes + progression
   toujours visibles, memes quand on fait defiler le formulaire */
.info-bar{position:sticky;top:112px;z-index:40;display:flex;gap:18px;flex-wrap:wrap;align-items:center;
 background:rgba(3,18,30,.92);border:1px solid rgba(94,231,255,.25);border-radius:10px;
 padding:10px 14px;margin:0 0 12px;backdrop-filter:blur(4px)}
#pct-bar{height:100%;width:0;background:linear-gradient(90deg,var(--neon2),var(--neon));box-shadow:0 0 12px var(--neon);transition:width .4s}
/* liste des eleves : mini barre d'avancement du dossier */
.mini-bar{height:8px;width:110px;background:#0a1220;border:1px solid rgba(94,231,255,.25);border-radius:6px;overflow:hidden;display:inline-block;vertical-align:middle}
.mini-bar>div{height:100%;background:linear-gradient(90deg,var(--neon2),var(--neon));transition:width .4s}
.mini-bar.complet{border-color:#37e08a}
.mini-bar.complet>div{background:#37e08a}
.mini-score{font-size:.8rem;color:#8b93a7;margin-left:6px;white-space:nowrap}
/* formulaire repas : select obligatoire non renseigne = bordure rouge
   apres tentative d'envoi */
.repas-form.envoye select:required:invalid{border-color:#ff5e7a;background:rgba(255,94,122,.08)}
/* statistiques repas : 3 cartes cote a cote (plats plus large) ;
   la carte sandwichs, placee en dessous, a la largeur des entrees */
.stats-repas-grid{display:grid;grid-template-columns:1fr 1.6fr 1fr;gap:14px;align-items:start}
.stats-repas-grid .sejour-cadre{margin:0}
.stats-repas-grid .carte-sandwich-sandwich{grid-column:1}
/* chaque option sur une seule ligne quand c'est possible :
   libelle a droite de la barre, sans retour a la ligne */
.stats-repas-grid .sejour-infos tr{display:flex;align-items:center;gap:8px}
.stats-repas-grid .sejour-infos th{flex:1;white-space:nowrap;border-bottom:none;overflow:hidden;text-overflow:ellipsis}
.stats-repas-grid .sejour-infos td{border-bottom:none;width:auto;white-space:nowrap}
/* page sandwichs : cartes des types de sandwich cote a cote sur grand ecran */
.sandwichs-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px;align-items:start}
.sandwichs-grid .sejour-cadre{margin:0}
.flash{padding:12px 16px;border-radius:10px;margin:12px 0}
.flash-ok{border:1px solid #37e08a;color:#37e08a;background:rgba(55,224,138,.07)}
.flash-err{border:1px solid #ff5e7a;color:#ff5e7a;background:rgba(255,94,122,.07)}
.code-form{display:flex;gap:10px;flex-wrap:wrap;align-items:end}
.code-form label{gap:4px}
.code-form input{margin-top:0}
.code-form input[name=code],.code-form input[name=q]{text-transform:uppercase;letter-spacing:2px;width:180px}
.upload-form{display:inline-flex;gap:8px;align-items:center;margin:6px 0;flex-wrap:wrap}
.upload-form input[type=file]{min-width:0;flex:1 1 200px;padding:4px 6px;font-size:.88rem}
/* table des coordonnees bancaires : s'adapte a la largeur (IBAN, reference
   peuvent etre longs) — passage a la ligne plutot que defilement lateral */
.banque-table{white-space:normal}
.banque-table th{white-space:normal}
.banque-table td{overflow-wrap:break-word;min-width:0}
/* cellules bancaires copiables au clic */
.copiable{cursor:pointer;transition:.2s;border-radius:6px}
.copiable:hover{color:var(--neon);text-shadow:0 0 8px rgba(94,231,255,.5)}
.copiable.copie-ok{background:rgba(55,224,138,.12);color:#37e08a}
.motif{color:#ff5e7a;font-size:.85rem;margin-top:4px}
.admin-head{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap}
/* liste des eleves : titre + boutons + statistiques figes sous le menu */
.liste-sticky{position:sticky;top:var(--topbar-h,66px);z-index:45;background:rgba(7,11,22,.94);
 border:1px solid rgba(94,231,255,.25);border-radius:12px;padding:10px 16px;margin:0 0 16px;backdrop-filter:blur(6px)}
.liste-sticky .admin-head{padding:0}
.liste-sticky .dates{font-size:.85rem;margin:4px 0 0}
/* bandeau fixe commun (eleves / encadrants / repas...) : titre + stats a gauche,
   deux lignes de boutons alignees a droite */
.admin-head .head-gauche{min-width:0}
.admin-head .head-droite{display:flex;flex-direction:column;align-items:flex-end;gap:6px}
.admin-head .head-droite .ligne-btns{display:flex;gap:10px;flex-wrap:wrap;align-items:center;justify-content:flex-end}
.admin-head .head-droite .ligne-btns:empty{display:none}
/* page dossier eleve : titre + boutons fixes, cartes masquees par defaut */
.admin-head.sticky-head{position:sticky;top:var(--topbar-h,66px);z-index:45;background:rgba(7,11,22,.94);
 border:1px solid rgba(94,231,255,.25);border-radius:12px;padding:10px 16px;backdrop-filter:blur(6px)}
.admin-head.sticky-head h2{margin:0 0 8px}
.enfant-admin{display:none}
.enfant-admin.carte-visible{display:block}
.enfant-admin{margin:18px 0}
.decision-form{display:inline-flex;gap:6px;flex-wrap:wrap;align-items:center}
.aucun-sejour{display:flex;flex-direction:column;align-items:center;gap:14px;padding:46px 20px;
 background:var(--card);border:1px dashed rgba(94,231,255,.35);border-radius:16px;text-align:center;margin:18px 0;
 box-shadow:0 0 18px rgba(94,231,255,.08)}
.aucun-sejour img{width:170px;height:170px;object-fit:contain;filter:drop-shadow(0 0 14px rgba(94,231,255,.5))}
.aucun-sejour .msg-rien{font-size:1.15rem;color:var(--neon);letter-spacing:.5px;
 text-shadow:0 0 12px rgba(94,231,255,.6)}
.aucun-sejour .dates{color:#7d9cc0}
/* ---------- CARTES SEJOURS (liste de la page Gestion des séjours) ---------- */
.sejs-grille{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;margin-top:10px}
.sej-carte{position:relative;display:flex;flex-direction:column;gap:10px;
 background:rgba(7,11,22,.55);border:1px solid rgba(94,231,255,.3);border-radius:14px;
 padding:14px 16px;overflow:hidden;transition:border-color .2s,transform .2s,box-shadow .2s}
.sej-carte:hover{border-color:rgba(94,231,255,.65);transform:translateY(-2px);
 box-shadow:0 6px 22px rgba(94,231,255,.12)}
.sej-carte .sej-img{height:86px;border-radius:10px;overflow:hidden;flex-shrink:0}
.sej-carte .sej-img img{width:100%;height:100%;object-fit:cover;display:block}
.sej-carte h4{margin:0;font-size:1.05rem;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.sej-dates{margin:0;color:#7d9cc0;font-size:.9rem;display:flex;align-items:center;gap:6px}
.sej-badges{display:flex;gap:6px;flex-wrap:wrap}
.sej-badges .badge{font-size:.75rem}
/* anciens séjours (archives) : cartes plus petites, cadre gris */
.sejs-grille.anciens{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));margin-top:8px}
.sej-carte.ancien{padding:10px 12px;gap:6px;border-color:rgba(139,147,167,.35);
 background:rgba(16,20,32,.55)}
.sej-carte.ancien:hover{border-color:rgba(139,147,167,.65);box-shadow:0 4px 14px rgba(139,147,167,.12)}
.sej-carte.ancien h4{font-size:.95rem}
.sej-carte.ancien .sej-img{height:56px}
.sej-carte.ancien .sej-dates{font-size:.8rem}
/* titres de colonnes cliquables (tri de la liste des enfants) */
.th-tri{color:inherit;text-decoration:none;font-weight:600}
.th-tri.actif{color:#5ee7ff;text-decoration:underline}
.sej-remplissage{margin:0}
.sej-remplissage .sej-barre-txt{display:flex;justify-content:space-between;font-size:.8rem;color:#8b93a7;margin-bottom:4px}
.sej-remplissage .sej-barre{height:8px;border-radius:6px;background:rgba(94,231,255,.12);overflow:hidden}
.sej-remplissage .sej-barre > span{display:block;height:100%;border-radius:6px;
 background:linear-gradient(90deg,#37e08a,#5eead4)}
.sej-remplissage.complet .sej-barre > span{background:linear-gradient(90deg,#ffb43a,#ff8a5e)}
.sej-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:auto;padding-top:6px;
 border-top:1px solid rgba(94,231,255,.18)}
/* ---------- CARTE INSCRIPTIONS (accueil admin) ---------- */
.insc-grille{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;margin-top:12px}
.insc-bloc{background:rgba(7,11,22,.55);border:1px solid rgba(94,231,255,.3);border-radius:12px;padding:12px 14px;
 display:flex;flex-direction:column;gap:8px}
.insc-bloc h4{margin:0;font-size:.95rem;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.insc-bloc .insc-legende{margin:0;color:#8b93a7;font-size:.83rem}
.insc-bloc .insc-chiffres{display:flex;gap:14px;flex-wrap:wrap;font-size:.85rem;color:#7d9cc0}
.insc-bloc .insc-chiffres strong{color:var(--neon)}
.insc-bloc .decision-form{margin:0}
.insc-bloc.complet{border-color:rgba(255,180,58,.55)}
.insc-bloc.complet h4::after{content:'complet';font-size:.7rem;padding:2px 8px;border-radius:6px;
 background:rgba(255,180,58,.15);color:#ffb43a;text-transform:uppercase;letter-spacing:.5px}
/* ---------- PAGE SITE (statistiques) : mur de cadres type masonry ---------- */
.stats-cols{columns:2 400px;column-gap:14px;margin-top:14px}
.stats-cols .sejour-cadre{margin:0 0 14px !important;break-inside:avoid;page-break-inside:avoid;
 display:inline-block;width:100%;vertical-align:top}
.stats-cols .sejour-cadre:last-child{margin-bottom:0 !important}
/* ---------- CARTE PROFIL (page admin_profil) ---------- */
.profil-tete{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-bottom:14px;
 padding-bottom:12px;border-bottom:1px solid rgba(94,231,255,.2)}
.profil-avatar{width:54px;height:54px;border-radius:50%;flex-shrink:0;
 display:flex;align-items:center;justify-content:center;font-size:1.4rem;font-weight:700;color:#0a1220;
 background:linear-gradient(135deg,#5eead4,#37e08a);box-shadow:0 0 16px rgba(94,231,255,.35)}
.profil-tete .profil-id{min-width:0}
.profil-tete .profil-id p{margin:0}
.profil-bloc{background:rgba(94,231,255,.07);border:1px solid rgba(94,231,255,.35);border-radius:12px;
 padding:12px 14px;margin-bottom:10px}
.profil-bloc h4{margin:0 0 8px;font-size:.9rem;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.profil-bloc .profil-legende{margin:6px 0 0;color:#8b93a7;font-size:.83rem}
.profil-bloc .decision-form{margin:0}
.profil-bloc input[type=text],.profil-bloc input[type=password],.profil-bloc textarea{flex:1;min-width:150px}
.profil-bloc details{margin-top:10px}
/* page admin_profil : grille notifications + profil */
.profil-grille{display:grid;grid-template-columns:minmax(300px,2fr) minmax(340px,3fr);gap:14px;align-items:start;margin-top:14px}
@media (max-width: 900px){
 .profil-grille{grid-template-columns:1fr;gap:12px;margin-top:12px}
 /* en colonne unique, le profil passe au-dessus des notifications */
 .profil-grille > div:first-child{order:2}
 .profil-grille > .sejour-cadre{order:1}
 .profil-tete{gap:10px}
 .profil-avatar{width:44px;height:44px;font-size:1.15rem}
 .profil-tete .badge.attente{margin-left:0;flex-basis:100%}
 .profil-bloc .decision-form{flex-direction:column;align-items:stretch}
 .profil-bloc .decision-form input[type=text],
 .profil-bloc .decision-form input[type=password],
 .profil-bloc textarea{width:100%;max-width:none}
}
/* ---------- PAGE FACTURES (devis + versements) ---------- */
.devis-liste{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:10px;margin-top:10px}
.devis-carte{position:relative;background:rgba(94,231,255,.07);border:1px solid rgba(94,231,255,.35);border-radius:10px;
 padding:8px 12px;display:flex;flex-direction:column;gap:4px}
.devis-carte h4{margin:0;font-size:.9rem;min-width:0;overflow:hidden;text-overflow:ellipsis;
 white-space:nowrap;flex:1 1 auto;padding-right:8px}
/* badge « defini / a definir » : petite pastille, jamais etiree */
.devis-carte .devis-ligne > .badge{flex:0 0 auto;width:auto;max-width:fit-content;align-self:center;
 padding:1px 8px;margin:0;font-size:.68rem;white-space:nowrap;display:inline-block}
.devis-carte .devis-ligne{display:flex;justify-content:flex-start;align-items:center;gap:6px;
 flex-wrap:nowrap;margin:0;padding-right:96px}
/* boutons Modifier / Supprimer : coin haut droit de la carte */
.devis-carte .devis-actions{position:absolute;top:8px;right:12px;display:flex;gap:6px;align-items:center}
.devis-carte .devis-montant{margin:2px 0 0;font-size:1.35rem;line-height:1.2}
.devis-carte .devis-montant strong{color:var(--neon)}
.devis-carte .devis-montant .pers{font-size:.85rem;font-weight:400;color:#8b93a7}
.devis-carte .devis-eur{margin:0;font-size:.9rem;color:#8b93a7}
.devis-carte .devis-meta{margin:0;font-size:.75rem;color:#8b93a7}
.devis-carte .devis-meta .badge{font-size:.68rem}
.devis-carte .devis-vide{margin:0;font-size:.85rem;display:flex;flex-direction:column;gap:6px}
.devis-carte form.devis-edit-pop{position:absolute;right:12px;background:var(--card);border:1px solid rgba(94,231,255,.4);
 border-radius:10px;padding:12px 14px;margin-top:4px;z-index:50;display:flex;flex-direction:column;gap:8px;
 min-width:240px;box-shadow:0 0 18px rgba(94,231,255,.25)}
.devis-total{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;
 margin-top:12px;padding:10px 14px;border-radius:10px;
 background:rgba(55,224,138,.08);border:1px solid rgba(55,224,138,.4)}
.devis-total .devis-total-bloc p{margin:0}
.devis-total .devis-total-bloc .legende{color:#8b93a7;font-size:.8rem;text-transform:uppercase;letter-spacing:.05em}
.devis-total .devis-total-bloc .valeur{font-size:1.25rem}
.devis-total .devis-total-bloc .valeur strong{color:#37e08a}
@media (max-width: 820px){
 .devis-liste{grid-template-columns:1fr}
}
/* liste des versements : lignes cartes */
.vers-liste{display:flex;flex-direction:column;gap:8px}
.vers-ligne{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
 background:rgba(7,11,22,.55);border:1px solid rgba(94,231,255,.3);border-radius:10px;padding:8px 12px}
.vers-ligne .vers-date{font-size:.8rem;color:#8b93a7;white-space:nowrap;flex-shrink:0;
 padding:2px 8px;border:1px solid rgba(94,231,255,.3);border-radius:8px}
.vers-ligne .vers-cat{font-weight:600;flex:1;min-width:0;overflow-wrap:break-word}
.vers-ligne .vers-montant{font-size:1.05rem;white-space:nowrap}
.vers-ligne .vers-montant strong{color:var(--neon)}
.vers-ligne .vers-meta{font-size:.78rem;color:#8b93a7;white-space:nowrap}
.vers-total-ligne{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;
 margin-top:10px;padding:8px 12px;border-radius:10px;
 background:rgba(55,224,138,.08);border:1px solid rgba(55,224,138,.4)}
.vers-total-ligne p{margin:0}
.vers-vide{margin:0;color:#8b93a7;font-size:.9rem;padding:10px;text-align:center;
 border:1px dashed rgba(94,231,255,.3);border-radius:10px}
/* ---------- CARTE PAIEMENTS (dossier eleve admin) ---------- */
.paie-solde{display:flex;gap:14px;flex-wrap:wrap;align-items:center;
 margin-top:10px;padding:12px 14px;border-radius:10px;
 background:rgba(255,180,58,.08);border:1px solid rgba(255,180,58,.4)}
.paie-solde.solde-ok{background:rgba(55,224,138,.08);border-color:rgba(55,224,138,.4)}
.paie-solde .paie-solde-bloc{flex:1;min-width:110px}
.paie-solde .paie-legende{margin:0;font-size:.75rem;color:#8b93a7;text-transform:uppercase;letter-spacing:.05em}
.paie-solde .paie-valeur{margin:2px 0 0;font-size:1.25rem}
.paie-solde .paie-valeur-solde{color:#ffb43a}
.paie-solde.solde-ok .paie-valeur-solde{color:#37e08a}
.paie-deux-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:14px;align-items:start;margin-top:12px}
.paie-encadre{background:rgba(94,231,255,.07);border:1px solid rgba(94,231,255,.35);border-radius:10px;padding:12px 14px}
.paie-liste{display:flex;flex-direction:column;gap:8px}
.paie-ligne{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
 background:rgba(7,11,22,.55);border:1px solid rgba(94,231,255,.3);border-radius:10px;padding:8px 12px}
.paie-ligne .paie-date{font-size:.8rem;color:#8b93a7;white-space:nowrap;flex-shrink:0;
 padding:2px 8px;border:1px solid rgba(94,231,255,.3);border-radius:8px}
.paie-ligne .paie-montant{font-size:1.05rem;white-space:nowrap}
.paie-ligne .paie-montant strong{color:var(--neon)}
.paie-ligne .paie-meta{font-size:.78rem;color:#8b93a7}
.paie-vide{margin:0;color:#8b93a7;font-size:.9rem;padding:10px;text-align:center;
 border:1px dashed rgba(94,231,255,.3);border-radius:10px}
/* ---------- MENU BURGER (mobile) ---------- */
#burger{display:none;background:transparent;border:1px solid rgba(94,231,255,.4);color:var(--neon);
 border-radius:8px;font-size:1.3rem;line-height:1;padding:8px 12px;cursor:pointer}
/* ---------- RESPONSIVE SMARTPHONE ---------- */
.notif-wrap{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:14px;margin-top:14px}
.notif-bloc{margin:0}
.notif-bloc .flash{margin:0}
@media (max-width: 820px){
 /* notifications admin : mobile — details des documents masques (juste
    nom, nb de docs et sejour) et bouton de copie des inscriptions masque */
 .notif-details{display:none}
 .notif-copie{display:none}
 /* statistiques repas : cartes empilees en colonne unique */
 .stats-repas-grid{grid-template-columns:1fr !important}
 .stats-repas-grid .sejour-cadre{grid-column:auto !important;grid-row:auto !important}
 body{padding-top:0}                       /* la barre sticky gere son espace elle-meme */
 .topbar{padding:10px 12px;flex-direction:row;align-items:center;gap:10px;position:sticky}
 /* cadre fixe (titre + boutons) : colle SOUS le menu, lui-meme sticky en
    haut d ecran — meme ancrage que sur ordinateur : hauteur reelle du
    menu mesuree en JS (variable --topbar-h) */
 .liste-sticky{top:var(--topbar-h,56px)}
 .admin-head.sticky-head{top:var(--topbar-h,56px)}
 /* les cibles d ancres (titres, cadres) ne passent pas sous le cadre fixe */
 .sejour-cadre{scroll-margin-top:calc(var(--topbar-h,66px) + 110px)}
 h1.neon{font-size:1.02rem;letter-spacing:1px;flex:1;min-width:0;line-height:1.25;
  white-space:normal;overflow:visible;text-overflow:clip}
 h1.neon br{display:inline}
 #burger{display:block}
 .menu{display:none;position:absolute;top:100%;left:0;right:0;flex-direction:column;flex-wrap:nowrap;
  background:rgba(7,11,22,.97);border-bottom:1px solid rgba(94,231,255,.35);
  box-shadow:0 10px 24px rgba(0,0,0,.6);padding:10px 12px;gap:2px}
 .menu.open{display:flex}
 .menu .login-admin{display:none}         /* (deja masque globalement) */
 .menu a{padding:12px 14px;font-size:.95rem;white-space:normal;border-radius:8px}
 main{padding:18px 12px}
 h2{font-size:1.25rem}
 .hero{gap:16px;margin-bottom:22px}
 .video-accueil{min-width:0}
 .video-accueil,.hero-text{flex:1 1 100%}
 .widget-grid,.sejour-grid{grid-template-columns:1fr;gap:14px}
 .grid{grid-template-columns:1fr}
 fieldset{padding:14px}
 legend{font-size:.85rem}
 input,select,textarea{font-size:16px}        /* évite le zoom auto iOS */
 .code-form input[name=code],.code-form input[name=q]{width:100%}
 .code-form,.decision-form,.upload-form{width:100%;flex-direction:column;align-items:stretch}
 .code-form input,.code-form button,.decision-form input,.decision-form button,
 .upload-form input[type=file],.upload-form button{width:100%}
 .upload-form input[type=file]{margin:0}
 table.sejour-infos{display:block;overflow-x:auto;white-space:nowrap}
 /* table des documents : pas de defilement horizontal — chaque ligne
    passe en bloc, le libelle puis le formulaire l'un sous l'autre */
 table.docs-table{white-space:normal;overflow-x:visible}
 table.docs-table tr{display:block;margin-bottom:12px}
 table.docs-table th{display:block;text-align:left;border:none;white-space:normal;overflow-wrap:break-word}
 table.docs-table td{display:block;width:100%;overflow-wrap:break-word}
 table.docs-table .upload-form{display:flex;flex-direction:column;align-items:stretch}
 table.docs-table .upload-form input[type=file],
 table.docs-table .upload-form button{width:100%;margin:0}
 /* coordonnees bancaires : libelle au-dessus de la valeur, pas de defilement */
 table.banque-table{white-space:normal;overflow-x:visible}
 table.banque-table tr{display:block;margin-bottom:8px}
 table.banque-table th{display:block;border:none;white-space:normal}
 table.banque-table td{display:block;width:100%;overflow-wrap:break-word}
 .aucun-sejour{padding:26px 14px}
 .aucun-sejour img{width:120px;height:120px}
 /* bandeau admin sticky : boutons pleine largeur alignes a gauche */
 .admin-head .head-droite{align-items:stretch;width:100%}
 .admin-head .head-droite .ligne-btns{justify-content:flex-start}
}
@media (max-width: 400px){
 h1.neon{font-size:.88rem}
 .menu a{font-size:.9rem}
}
#app.spa-loading{opacity:.45;transition:opacity .15s}
footer{text-align:center;color:#5f7d9b;font-size:.85rem;padding:30px 0}
/* bouton « Me rendre au point de rendez-vous » (encadré Le départ) :
   affiché uniquement sur smartphone / tablette tactile, masqué sur
   ordinateur (souris + pointeur fin = bureau) */
.btn-nav-rdv{display:inline-block}
@media (hover:hover) and (pointer:fine){.btn-nav-rdv{display:none}}