/* ==========================================================
   Rubrique Contact : carte Google et carte a tuiles
   Fichier 3 sur 8 - charge dans cet ordre par les pages.
   Ne pas reordonner : la cascade en depend.
   ========================================================== */
/* ---------- Carte Google Maps ----------
   Couche principale. Le cadre reprend exactement le traitement de la
   carte à tuiles — même bordure, même ombre portée, même hauteur — pour
   que la bascule de l'une à l'autre ne se voie pas dans la mise en page. */
.map-google{
position:relative;border:1px solid var(--line);
    background:#E8E3D7;overflow:hidden;
    box-shadow:0 16px 38px -28px rgba(21,34,56,.5);
}
.map-google iframe{
display:block;width:100%;height:340px;border:0;
}
/* ---------- Carte interactive de l'établissement ----------
   Carte à tuiles autonome : aucune iframe, aucune bibliothèque externe.
   Seules des images de tuiles OpenStreetMap sont chargées. Elle sert de
   repli quand le cadre Google ne peut pas s'afficher. */
.map-frame{
position:relative;border:1px solid var(--line);
    background:#E8E3D7;overflow:hidden;
    box-shadow:0 16px 38px -28px rgba(21,34,56,.5);
}
#mapCanvas{
position:relative;width:100%;height:340px;overflow:hidden;
    cursor:grab;touch-action:none;user-select:none;
}
#mapCanvas.dragging{cursor:grabbing;}
#mapLayer{position:absolute;top:0;left:0;will-change:transform;}
#mapLayer img{
position:absolute;width:256px;height:256px;display:block;
    pointer-events:none;-webkit-user-drag:none;
}
/* repère de l'établissement */
.isca-marker{
position:absolute;z-index:20;transform:translate(-50%,-100%);
    display:flex;flex-direction:column;align-items:center;pointer-events:none;
}
.isca-marker .bulle{
background:#fff;border:1px solid var(--line);border-bottom:2px solid var(--gold);
    padding:7px 12px;margin-bottom:6px;white-space:nowrap;
    box-shadow:0 8px 20px -10px rgba(21,34,56,.6);
}
.isca-marker .bulle b{
display:block;font-family:'Fraunces',serif;font-size:12.5px;color:var(--navy);
}
.isca-marker .bulle span{font-size:10.5px;color:var(--ink-soft);}
.isca-marker .pointe{
width:26px;height:26px;border-radius:50% 50% 50% 0;background:var(--wine);
    border:2px solid var(--gold);transform:rotate(-45deg);
    box-shadow:0 6px 14px -5px rgba(0,0,0,.55);
}
/* commandes de zoom */
.map-zoom{position:absolute;top:14px;right:14px;z-index:30;display:flex;flex-direction:column;gap:1px;}
.map-zoom button{
width:32px;height:32px;border:1px solid var(--line);background:#fff;color:var(--navy);
    font-size:17px;line-height:1;cursor:pointer;font-family:'Work Sans',sans-serif;
    transition:background .18s ease;
}
.map-zoom button:hover{background:var(--cream-deep);}
.map-zoom button:disabled{opacity:.4;cursor:default;}
.map-credit{
position:absolute;bottom:0;right:0;z-index:30;
    background:rgba(255,255,255,.84);font-size:9.5px;color:var(--ink-soft);padding:2px 7px;
}
.map-credit a{color:var(--navy);text-decoration:underline;}
/* voile de chargement / message de repli */
.map-loading{
position:absolute;inset:0;z-index:40;display:flex;flex-direction:column;
    align-items:center;justify-content:center;gap:12px;text-align:center;padding:24px;
    background:linear-gradient(135deg,var(--navy) 0%, var(--navy-light) 55%, var(--wine) 140%);
    color:var(--cream);font-size:12.5px;letter-spacing:.03em;line-height:1.6;
    transition:opacity .55s ease, visibility 0s linear .55s;
}
.map-frame.loaded .map-loading{opacity:0;visibility:hidden;}
.map-loading .pin{
width:40px;height:40px;border-radius:50% 50% 50% 0;background:var(--gold);
    transform:rotate(-45deg);display:flex;align-items:center;justify-content:center;
    animation:pinDrop 1.8s ease-in-out infinite;
}
.map-loading .pin svg{transform:rotate(45deg);}
.map-loading .fallback{display:none;}
.map-frame.failed .map-loading{opacity:1;visibility:visible;}
.map-frame.failed .map-loading .loading-txt{display:none;}
.map-frame.failed .map-loading .fallback{display:block;}
.map-frame.failed .map-loading .pin{animation:none;}
@keyframes pinDrop{
0%,100%{transform:rotate(-45deg) translateY(0);}
    50%{transform:rotate(-45deg) translateY(-6px);}
}
.map-actions{display:flex;gap:10px;flex-wrap:wrap;}
.map-btn{
display:inline-flex;align-items:center;gap:8px;
    font-size:12.5px;font-weight:600;padding:10px 18px;
    border:1px solid var(--navy);color:var(--navy);background:transparent;
    transition:background .2s ease, color .2s ease, transform .18s ease;
}
.map-btn:hover{background:var(--navy);color:var(--cream);transform:translateY(-2px);}
.map-btn.primary{background:var(--navy);color:var(--cream);}
.map-btn.primary:hover{background:var(--navy-light);}
@media(max-width:820px){
#mapCanvas{height:280px;}
.map-google iframe{height:280px;}
}
@media(prefers-reduced-motion:reduce){
.map-loading .pin{animation:none;}
}
.hours-card{
border:1px solid var(--line);background:var(--cream-deep);padding:26px 28px;
}
.hours-card h4{
font-size:14.5px;color:var(--navy);margin-bottom:16px;
}
.hours-row{
display:flex;justify-content:space-between;font-size:13px;padding:9px 0;border-bottom:1px solid var(--line);
}
.hours-row:last-child{
border-bottom:none;
}
.hours-row .day{
color:var(--navy);font-weight:500;
}
.hours-row .time{
color:var(--ink-soft);
}
.login-shell{
padding:70px 40px 100px;
    display:flex;justify-content:center;
    background:
      radial-gradient(circle at 85% 15%, rgba(201,162,75,.10), transparent 45%),
      radial-gradient(circle at 10% 85%, rgba(122,34,49,.10), transparent 50%);
}
.login-card{
width:100%;max-width:420px;background:#fff;
    border:1px solid var(--line);border-top:4px solid var(--gold);
    box-shadow:0 24px 60px -28px rgba(21,34,56,.35);
    padding:44px 40px 38px;position:relative;
}
.login-card .seal{
color:var(--wine);width:44px;height:44px;margin-bottom:22px;
}
.login-card .seal::before{
width:26px;height:26px;
}
.login-card .eyebrow{
font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--wine);font-weight:600;margin-bottom:8px;
}
.login-card h2{
font-size:25px;color:var(--navy);margin-bottom:8px;
}
.login-card .lead2{
font-size:13.5px;color:var(--ink-soft);line-height:1.55;margin-bottom:30px;
}
.login-field{
margin-bottom:17px;
}
.login-field label{
display:block;font-size:11.5px;color:var(--ink-soft);text-transform:uppercase;letter-spacing:.04em;margin-bottom:7px;
}
.login-field input{
width:100%;border:1px solid var(--line);background:var(--cream);padding:12px 14px;
    font-size:14px;color:var(--ink);font-family:'Work Sans',sans-serif;
}
.login-field input:focus{
outline:none;border-color:var(--navy);background:#fff;
}
.login-error{
display:none;font-size:12.5px;color:var(--wine);background:#FBE4E1;
    border-left:3px solid var(--wine);padding:10px 12px;margin-bottom:18px;
}
.login-error.show{
display:block;
}
.submit-login{
width:100%;background:var(--navy);color:var(--cream);font-weight:600;font-size:14px;padding:14px;margin-top:4px;
}
.submit-login:hover{
background:var(--navy-light);
}
.login-foot{
margin-top:22px;font-size:12px;color:var(--ink-soft);text-align:center;line-height:1.6;
}
.login-foot a{
color:var(--navy);font-weight:600;border-bottom:1px solid var(--gold);
}
.demo-hint{
margin-top:24px;padding:12px 14px;background:var(--cream-deep);border:1px dashed var(--line);
    font-size:11.5px;color:var(--ink-soft);line-height:1.6;
}
.demo-hint b{
color:var(--navy);
}
.auth-strip .as-left{
display:flex;align-items:center;gap:8px;
}
.auth-strip .as-logout{
color:var(--gold-soft);font-weight:600;border-bottom:1px solid rgba(228,205,142,.5);cursor:pointer;background:none;border-top:none;border-left:none;border-right:none;font-family:'Work Sans',sans-serif;font-size:12.5px;padding:0;
}
.security-note{
display:flex;gap:12px;align-items:flex-start;
    background:#EEF3EC;border-left:3px solid #3F7D5C;
    padding:16px 40px;font-size:13px;color:#2C5A40;line-height:1.6;
}
.security-note svg{
flex-shrink:0;margin-top:2px;
}
.teacher-section{
padding:60px 40px 0;
}
.teacher-head{
display:flex;justify-content:space-between;align-items:flex-end;flex-wrap:wrap;gap:20px;margin-bottom:8px;
}
.teacher-head .th-id{
display:flex;align-items:center;gap:16px;
}
.teacher-head .th-avatar{
width:52px;height:52px;border-radius:50%;background:var(--navy);color:var(--gold-soft);
    display:flex;align-items:center;justify-content:center;font-family:'Fraunces',serif;font-size:18px;flex-shrink:0;
}
.teacher-head h2{
font-size:24px;color:var(--navy);
}
.teacher-head .th-meta{
font-size:13px;color:var(--ink-soft);margin-top:4px;
}
.teacher-actions{
display:flex;gap:12px;flex-shrink:0;
}
.btn-pdf{
display:flex;align-items:center;gap:8px;
    background:var(--gold);color:var(--navy);font-weight:700;font-size:13px;padding:12px 20px;
}
.btn-pdf:hover{
background:var(--gold-soft);
}
.register{
margin:40px 0 70px;background:#fff;border:1px solid var(--line);
    box-shadow:0 18px 40px -28px rgba(21,34,56,.3);
}
.register-tabs{
display:flex;background:var(--cream-deep);border-bottom:1px solid var(--line);overflow-x:auto;
}
.register-tabs button{
padding:14px 22px;background:transparent;border:none;cursor:pointer;
    font-family:'Work Sans',sans-serif;font-size:13px;font-weight:600;color:var(--ink-soft);
    border-right:1px solid var(--line);white-space:nowrap;
}
.register-tabs button.active{
background:#fff;color:var(--navy);box-shadow:inset 0 3px 0 var(--gold);
}
.register-body{
padding:26px 30px 32px;
}
.slot{
display:grid;grid-template-columns:110px 1fr auto;gap:16px;align-items:center;padding:14px 4px;border-bottom:1px dashed var(--line);
}
.slot:last-child{
border-bottom:none;
}
.slot-time{
font-size:12.5px;font-weight:700;color:var(--navy);font-variant-numeric:tabular-nums;
}
.slot-info .subject{
font-size:14.5px;font-weight:600;color:var(--ink);
}
.slot-info .meta{
font-size:12px;color:var(--ink-soft);margin-top:2px;
}
.slot-tag{
font-size:11px;font-weight:700;padding:5px 11px;background:var(--navy);color:var(--gold-soft);white-space:nowrap;
}
.empty-day{
padding:44px 0;text-align:center;color:var(--ink-soft);font-size:13.5px;
}
#all-days-print{
display:none;
}
.print-hint{
padding:0 40px 60px;font-size:11.5px;color:var(--ink-soft);text-align:right;margin-top:-30px;
}
@media print{
.topbar, nav, #login-shell, .teacher-actions, .security-note, .register-tabs, .print-hint, footer{display:none !important;}
    body{background:#fff;}
    .register-body{display:none;}
    #all-days-print{display:block;padding:0 40px;}
}
