/* Guyane Connectée Trace · styles v1.2 · ivoire + vert forêt, accents fonctionnels (ardoise, ocre, prune, brique).
   Thème clair par défaut, thème sombre au choix. Aucune ressource externe : serif auto-hébergée, reste système.
   Contrastes vérifiés (WCAG AA) : texte courant ≥ 4,5:1, grands textes et éléments graphiques ≥ 3:1. */
@font-face{font-family:"Newsreader";src:url("fonts/newsreader-latin.woff2?v=4.284.8.9") format("woff2");font-weight:400 700;font-style:normal;font-display:swap}

/* ---------- jetons : thème clair (par défaut) ---------- */
:root{
  --bg:#F5F0E6; --bg-rgb:245,240,230; --surface:#FFFDF8; --surface-2:#EFE9DC; --surface-3:#E4DDCD;
  --ink:#1B2521; --ink-2:#3F4B45; --ink-3:#5E6C65;
  --line:#D7D2C7; --line-strong:#B9B2A3;
  --accent:#1F6B5A; --accent-ink:#F5F0E6; --accent-soft:#DDEBE3;
  --sage:#4F7D63; --sage-soft:#E2ECE4;
  --slate:#3E5F8A; --slate-soft:#E1E8F1;
  --ochre:#8A5A1E; --ochre-soft:#F1E6D3;
  --plum:#6B3F7A; --plum-soft:#ECE1F0;
  --brick:#8A3B2B; --brick-soft:#F3DDD6; --brick-line:#D9B0A5;
  --terre:var(--brick); --terre-text:var(--brick); --terre-soft:var(--brick-soft); --terre-line:var(--brick-line);
  --violet:var(--plum); --violet-soft:var(--plum-soft); --warn:var(--brick); --warn-soft:var(--brick-soft);
  --rail-bg:#0E2A23; --rail-ink:#F5F0E6; --rail-muted:#A9BDB3; --rail-line:#24443A; --rail-active:#1B4A3D; --rail-accent:#7CC8AD; --rail-surface:#153630;
  --shadow:0 1px 2px rgba(27,37,33,.08),0 10px 30px rgba(27,37,33,.10);
  --nav-h:60px;
  --serif:"Newsreader","Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  color-scheme:light;
}
/* ---------- jetons : thème sombre ---------- */
:root[data-theme="dark"]{
  --bg:#0F1F19; --bg-rgb:15,31,25; --surface:#16281F; --surface-2:#1E3429; --surface-3:#254033;
  --ink:#F2EDE0; --ink-2:#C9CFC3; --ink-3:#93A197;
  --line:#2B4236; --line-strong:#3D5846;
  --accent:#5FB79A; --accent-ink:#0B1A14; --accent-soft:#1E4A3B;
  --sage:#8FBF9F; --sage-soft:#22382B;
  --slate:#8FB0DA; --slate-soft:#22334A;
  --ochre:#E1A86A; --ochre-soft:#3E2E1C;
  --plum:#C9A2D8; --plum-soft:#3A2A42;
  --brick:#EE9A82; --brick-soft:#3E2A1C; --brick-line:#6B3F2A;
  --rail-bg:#0B1A14; --rail-ink:#F2EDE0; --rail-muted:#93A197; --rail-line:#24443A; --rail-active:#1E4A3B; --rail-accent:#5FB79A; --rail-surface:#132A22;
  --shadow:0 1px 2px rgba(0,0,0,.25),0 10px 30px rgba(0,0,0,.25);
  color-scheme:dark;
}
@media (prefers-color-scheme:dark){:root[data-theme="system"]{
  --bg:#0F1F19; --bg-rgb:15,31,25; --surface:#16281F; --surface-2:#1E3429; --surface-3:#254033;
  --ink:#F2EDE0; --ink-2:#C9CFC3; --ink-3:#93A197;
  --line:#2B4236; --line-strong:#3D5846;
  --accent:#5FB79A; --accent-ink:#0B1A14; --accent-soft:#1E4A3B;
  --sage:#8FBF9F; --sage-soft:#22382B;
  --slate:#8FB0DA; --slate-soft:#22334A;
  --ochre:#E1A86A; --ochre-soft:#3E2E1C;
  --plum:#C9A2D8; --plum-soft:#3A2A42;
  --brick:#EE9A82; --brick-soft:#3E2A1C; --brick-line:#6B3F2A;
  --rail-bg:#0B1A14; --rail-ink:#F2EDE0; --rail-muted:#93A197; --rail-line:#24443A; --rail-active:#1E4A3B; --rail-accent:#5FB79A; --rail-surface:#132A22;
  --shadow:0 1px 2px rgba(0,0,0,.25),0 10px 30px rgba(0,0,0,.25);
  color-scheme:dark;
}}

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
img,svg,video{max-width:100%}
.login-map img,.map-big img{max-width:none}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased}
h1,h2{font-family:var(--serif);font-weight:500;margin:0;line-height:1.12;text-wrap:balance}
h1{font-size:26px} h2{font-size:20px}
h3{font-size:16px;font-weight:600;margin:0}
p{margin:0}
a{color:var(--accent)}
button{font:inherit;color:inherit;cursor:pointer}
input,select,textarea{font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line-strong);border-radius:8px;padding:10px 12px;width:100%;max-width:100%}
input[type=checkbox],input[type=radio]{width:18px;height:18px;accent-color:var(--accent)}
:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
input:focus,select:focus,textarea:focus{outline:2px solid var(--accent);outline-offset:1px}
textarea{min-height:90px;resize:vertical}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
.eyebrow{font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3)}
.muted{color:var(--ink-3)} .small{font-size:13px} .right{text-align:right}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ---------- coquille ---------- */
.app{display:grid;grid-template-columns:236px minmax(0,1fr);min-height:100vh;overflow-x:clip;background:linear-gradient(90deg,var(--rail-bg) 0,var(--rail-bg) 236px,var(--bg) 236px)}
.rail{background:var(--rail-bg);color:var(--rail-ink);padding:18px 14px 14px;position:sticky;top:0;height:100vh;height:100dvh;display:flex;flex-direction:column;gap:2px;overflow:hidden}
.nav{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;margin-right:-6px;padding-right:6px}
.home{display:flex;align-items:center;gap:12px;color:var(--rail-ink);text-decoration:none;border-radius:10px;padding:6px 8px;margin:0 -8px}
.home:hover,.home:focus-visible{background:var(--rail-surface);outline:none}
.home .h-ico{width:34px;height:34px;flex:none;display:grid;place-items:center;background:var(--rail-surface);border-radius:9px;color:var(--rail-accent)}
.home .h-ico svg{width:20px;height:20px}
.brand .eyebrow{color:var(--rail-muted);letter-spacing:.16em;font-size:10px}
.brand .name{font-family:var(--serif);font-weight:600;font-size:26px;letter-spacing:.06em;line-height:1;color:var(--rail-ink);margin-top:2px}
.brand-tag{font-size:12px;color:var(--rail-muted);margin:6px 0 10px 4px}
.search-btn{display:flex;align-items:center;gap:9px;width:100%;margin:2px 0 8px;padding:8px 10px;border:1px solid var(--rail-line);border-radius:8px;background:var(--rail-surface);color:var(--rail-muted);font:inherit;font-size:13.5px;cursor:pointer;text-align:left}
.search-btn:hover,.search-btn:focus-visible{color:var(--rail-ink);border-color:var(--rail-accent);outline:none}
.search-btn svg{width:16px;height:16px;flex:none}.search-btn span{flex:1}
.search-btn kbd{font-family:var(--mono);font-size:11px;border:1px solid var(--rail-line);border-radius:4px;padding:0 5px;color:var(--rail-muted)}
.nav .grp{font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--rail-muted);margin:12px 0 4px 10px}
.nav .grp:first-child{margin-top:4px}
.nav a{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:8px;color:var(--rail-ink);text-decoration:none;font-weight:500;font-size:14px;opacity:1}
.nav a svg{width:18px;height:18px;flex:none}
.nav a.active{background:var(--rail-active);color:var(--rail-accent)}
.nav a:hover{background:var(--rail-surface)}
.rail-foot{flex:none;margin-top:8px;padding:10px 0 0;border-top:1px solid var(--rail-line);display:flex;flex-direction:column;gap:2px;font-size:13px;color:var(--rail-ink)}
.rail-foot .sync{align-self:flex-start;margin:0 0 6px 2px;background:var(--rail-surface);color:var(--rail-ink)}
.rail-foot .sync.ok{color:var(--rail-accent)} .rail-foot .sync.ok::before{background:var(--rail-accent)}
.rail-foot .sync.pending{color:var(--ochre)} .rail-foot .sync.pending::before{background:var(--ochre)}
.rail-foot #user-rail{padding:2px 10px 8px;line-height:1.3}
.rail-foot .who{font-weight:600;color:var(--rail-ink);font-size:14px} .rail-foot .role{color:var(--rail-muted);font-size:12px}
.foot-link{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:8px;color:var(--rail-ink);text-decoration:none;font-weight:500;font-size:14px;cursor:pointer}
.foot-link svg{width:18px;height:18px;flex:none;color:var(--rail-muted)}
.foot-link:hover,.foot-link:focus-visible{background:var(--rail-surface);outline:none}
.foot-link.active{background:var(--rail-active);color:var(--rail-accent)} .foot-link.active svg{color:var(--rail-accent)}
#logout-rail{color:var(--rail-ink)} #logout-rail svg{color:var(--rail-accent)}
.theme-sel select{width:auto;margin-left:auto;padding:3px 24px 3px 8px;font-size:12.5px;background:var(--rail-surface);color:var(--rail-ink);border:1px solid var(--rail-line);border-radius:6px}
.content{min-width:0}
main{padding:26px 32px 90px;max-width:1040px;width:100%}
main.wide{max-width:1300px}
.topbar{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:18px;flex-wrap:wrap}
.topbar h1{font-size:30px}
.topbar-mobile{display:none}
.bottom-nav{display:none}
@media (max-width:820px){
  .app{grid-template-columns:1fr}
  .rail{display:none}
  body{padding-top:calc(60px + env(safe-area-inset-top))}
  main{padding:12px 12px calc(var(--nav-h) + env(safe-area-inset-bottom) + 24px);overflow-x:clip}
  body.login{padding-top:0}
  .app{background:var(--bg)}
  .topbar h1{font-size:23px}
  input,select,textarea,.chip,.btn{font-size:16px}
  .btn.sm,.chip{font-size:14px}
  #gq{font-size:16px}
  .topbar-mobile{display:flex;align-items:center;gap:4px;padding:6px 6px;padding-top:calc(6px + env(safe-area-inset-top));height:calc(60px + env(safe-area-inset-top));background:var(--rail-bg);color:var(--rail-ink);position:fixed;top:0;left:0;right:0;z-index:25;box-shadow:0 1px 0 rgba(0,0,0,.25)}
  .topbar-mobile .btn.ghost{color:var(--rail-ink);width:48px;height:48px;min-height:48px;padding:0;justify-content:center;flex:none;border-radius:10px}
  .topbar-mobile .btn.ghost:hover,.topbar-mobile .btn.ghost:focus-visible{background:var(--rail-surface)}
  .topbar-mobile .btn.ghost svg{width:28px;height:28px}
  .topbar-mobile #menu-btn svg{width:28px;height:22px}
  .home-mini{display:grid;place-items:center;width:48px;height:48px;border-radius:10px;background:var(--rail-surface);color:var(--rail-accent);text-decoration:none;flex:none}
  .home-mini svg{width:28px;height:28px}
  .brand-mini{display:flex;flex-direction:column;flex:1 1 auto;min-width:0;line-height:1.05;text-decoration:none;color:var(--rail-ink);overflow:hidden}
  .brand-mini{gap:1px;padding-left:2px}
  .brand-mini .eyebrow{color:var(--rail-muted);font-size:11px;letter-spacing:.16em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .brand-mini .name{font-family:var(--serif);font-weight:600;font-size:26px;letter-spacing:.07em;line-height:1}
  .topbar-mobile .sync{flex:none;font-size:0;padding:0;width:14px;height:14px;background:transparent;gap:0;margin:0 2px}
  .topbar-mobile .sync::before{width:12px;height:12px;border:2px solid var(--rail-bg)}
  .topbar-mobile .sync.ok::before{background:var(--rail-accent)} .topbar-mobile .sync.pending::before{background:var(--ochre)} .topbar-mobile .sync.conflict::before{background:var(--brick)} .topbar-mobile .sync.offline::before{background:var(--rail-muted)}
  .bottom-nav{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:4px;position:fixed;left:0;right:0;bottom:0;height:calc(var(--nav-h) + env(safe-area-inset-bottom));padding:6px 6px calc(6px + env(safe-area-inset-bottom));background:var(--surface);border-top:1px solid var(--line);z-index:25;box-shadow:0 -1px 0 rgba(0,0,0,.04)}
  .bottom-nav a{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-width:0;font-size:10px;color:var(--ink-2);text-decoration:none;letter-spacing:.01em;border:1px solid transparent;border-radius:10px;padding:2px 2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .bottom-nav a svg{width:21px;height:21px;flex:none}
  .bottom-nav a span{max-width:100%;overflow:hidden;text-overflow:ellipsis}
  .bottom-nav a.active{color:var(--accent);font-weight:700;background:var(--accent-soft);border-color:var(--accent)}
  .bottom-nav a:focus-visible{outline-offset:-3px}
  .topbar .row .btn{flex:1 1 auto;justify-content:center}
  .cockpit{grid-template-columns:1fr 1fr}
}
@media (max-width:360px){.brand-mini .eyebrow{display:none}.brand-mini .name{font-size:23px}.topbar-mobile .btn.ghost,.home-mini{width:44px}.bottom-nav a{font-size:9.5px}.cockpit{grid-template-columns:1fr}}
}

.sync{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;padding:3px 9px;border-radius:999px;background:var(--surface-2);color:var(--ink-2);white-space:nowrap}
.sync::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--ink-3);flex:none}
.sync.ok{color:var(--accent)} .sync.ok::before{background:var(--accent)}
.sync.pending{color:var(--ochre)} .sync.pending::before{background:var(--ochre)}
.sync.conflict{background:var(--brick-soft);color:var(--brick)} .sync.conflict::before{background:var(--brick)}
.sync.offline{color:var(--ink-3)}
.sync.busy::before{border:2px solid currentColor;border-right-color:transparent;background:transparent;width:8px;height:8px;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.sync.busy::before{animation:none}}

/* ---------- composants ---------- */
.btn{border:1px solid var(--line-strong);background:var(--surface);border-radius:8px;padding:9px 14px;font-size:14px;font-weight:600;display:inline-flex;align-items:center;gap:8px;white-space:nowrap;text-decoration:none;color:var(--ink);min-height:38px}
.btn:hover{border-color:var(--ink-3)}
.btn.primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}
.btn.danger{color:var(--brick);border-color:var(--brick-line)}
.btn.ghost{border-color:transparent;background:transparent;color:var(--accent)}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn.sm{padding:5px 10px;font-size:12.5px;min-height:30px}
.btn.big{padding:13px 18px;font-size:16px}
.btn svg{width:16px;height:16px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:14px 16px}
.stack{display:flex;flex-direction:column;gap:10px}
.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.grow{flex:1 1 auto}
.sect{margin-top:24px}
.sect-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:10px;flex-wrap:wrap}
/* sections différenciées : une couleur, une icône, un filet, un titre, jamais la couleur seule */
.sect{--sc:var(--accent);--sc-soft:var(--accent-soft)}
.s-project{--sc:var(--accent);--sc-soft:var(--accent-soft)} .s-tasks{--sc:var(--ochre);--sc-soft:var(--ochre-soft)} .s-terrain{--sc:var(--sage);--sc-soft:var(--sage-soft)}
.s-journal{--sc:var(--slate);--sc-soft:var(--slate-soft)} .s-agenda{--sc:var(--ochre);--sc-soft:var(--ochre-soft)} .s-pilotage{--sc:var(--plum);--sc-soft:var(--plum-soft)} .s-alert{--sc:var(--brick);--sc-soft:var(--brick-soft)}
.sect-h{display:flex;align-items:center;gap:8px;margin-bottom:8px;color:var(--sc)}
.sect-h svg{width:16px;height:16px;flex:none}
.sect-h .eyebrow{color:var(--sc);font-weight:600}
.sect-h .more{margin-left:auto;font-size:12.5px;color:var(--sc);text-decoration:none;font-weight:600}
.sect-h .more:hover{text-decoration:underline}
.sect .card.tinted{border-top:3px solid var(--sc)}
.pill{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;padding:2px 9px;border-radius:999px;background:var(--surface-2);color:var(--ink-2);font-weight:500;white-space:nowrap}
.pill.slate{background:var(--slate-soft);color:var(--slate)} .pill.accent{background:var(--accent-soft);color:var(--accent)}
.pill.ochre{background:var(--ochre-soft);color:var(--ochre)} .pill.violet{background:var(--plum-soft);color:var(--plum)} .pill.warn{background:var(--brick-soft);color:var(--brick)}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{border:1px solid var(--line-strong);background:var(--surface);color:var(--ink-2);border-radius:999px;padding:5px 12px;font-size:13px}
.chip:hover{border-color:var(--accent);color:var(--accent)}
.chip.terre{border-color:var(--brick-line);color:var(--brick)}
.chip[aria-pressed="true"]{background:var(--ink);color:var(--bg);border-color:var(--ink)}
.banner{background:var(--brick-soft);color:var(--ink);border:1px solid var(--brick-line);border-left:4px solid var(--brick);border-radius:8px;padding:10px 14px;font-size:13.5px;margin-bottom:10px;display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.banner.ok{background:var(--accent-soft);border-color:var(--accent-soft);border-left-color:var(--accent)}
.banner.agenda{background:var(--ochre-soft);border-color:var(--ochre-soft);border-left-color:var(--ochre)}
.banner .dotw{width:8px;height:8px;border-radius:50%;background:var(--brick);flex:none}
.banner a{color:var(--accent);font-weight:600;margin-left:auto;text-decoration:none}
.empty{color:var(--ink-3);padding:16px 0;font-size:14px}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:1px;background:var(--line);border:1px solid var(--line);border-radius:10px;overflow:hidden}
.kpi{background:var(--surface);padding:12px 14px}
.kpi b{display:block;font-family:var(--serif);font-weight:500;font-size:26px;line-height:1.05;font-variant-numeric:tabular-nums}
.kpi span{font-size:12px;color:var(--ink-3)}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:16px;overflow-x:auto}
.tabs a{padding:8px 12px;text-decoration:none;color:var(--ink-2);border-bottom:2px solid transparent;white-space:nowrap;font-weight:500}
.tabs a.active{color:var(--accent);border-color:var(--accent);font-weight:600}
.grid2{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}
.two{display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media (max-width:520px){.two{grid-template-columns:1fr}}

/* ---------- cockpit ---------- */
.cockpit{display:grid;grid-template-columns:1.4fr repeat(3,1fr);gap:12px}
@media (max-width:900px){.cockpit{grid-template-columns:1fr 1fr}}
@media (max-width:820px){.cols3{grid-template-columns:1fr !important}}
.gauge{--gc:var(--accent);--gc-soft:var(--accent-soft);background:var(--surface);border:1px solid var(--line);border-top:3px solid var(--gc);border-radius:10px;padding:12px 16px 14px;display:flex;flex-direction:column;gap:6px;min-width:0}
.gauge.g-slate{--gc:var(--slate);--gc-soft:var(--slate-soft)} .gauge.g-plum{--gc:var(--plum);--gc-soft:var(--plum-soft)} .gauge.g-ochre{--gc:var(--ochre);--gc-soft:var(--ochre-soft)}
.gauge .ico{display:flex;align-items:center;gap:6px;color:var(--gc);font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase}
.gauge .ico svg{width:14px;height:14px}
.gauge .n{font-family:var(--serif);font-weight:500;font-size:30px;line-height:1;font-variant-numeric:tabular-nums;color:var(--ink)}
.gauge.lead .n{font-size:38px}
.gauge .n small{font-size:.55em;color:var(--ink-3)}
.gauge .l{font-size:12.5px;color:var(--ink-2)}
.gauge .head{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.trend{font-size:12px;font-weight:600;white-space:nowrap}
.trend.up{color:var(--accent)} .trend.down,.trend.warn{color:var(--brick)} .trend.flat{color:var(--ink-3)}
.bar{flex:1 1 60px;height:6px;background:var(--surface-3);border-radius:3px;overflow:hidden;min-width:40px}
.gauge .bar{flex:none;width:100%;margin-top:4px}
.bar i{display:block;height:100%;background:var(--gc,var(--accent))}
.cols3{display:grid;grid-template-columns:1.25fr .85fr 1.1fr;gap:16px;margin-top:22px}
@media (max-width:1000px){.cols3{grid-template-columns:1fr}}
.cols3 .card{padding:6px 16px}
.dot{width:9px;height:9px;border-radius:50%;display:inline-block;flex:none}
.dot.on{background:var(--accent)} .dot.warn{background:var(--ochre);border-radius:1px;transform:rotate(45deg);width:8px;height:8px} .dot.off{border:1.5px solid var(--ink-3)}
.siterow{display:flex;gap:10px;align-items:center;padding:9px 0;border-top:1px solid var(--line);font-size:14px;cursor:pointer}
.siterow:first-child{border-top:none}
.siterow .s{margin-left:auto;font-size:12px;color:var(--ink-3);white-space:nowrap}
.siterow .s.warn{color:var(--ochre);font-weight:600}

.tl{position:relative;padding-left:22px;margin:6px 0}
.tl::before{content:"";position:absolute;left:5px;top:8px;bottom:8px;width:2px;background:linear-gradient(var(--slate),var(--line-strong))}
.tl .ev{position:relative;padding:4px 0 14px;cursor:pointer}
.tl .ev::before{content:"";position:absolute;left:-21px;top:9px;width:12px;height:12px;border-radius:50%;background:var(--surface);border:2px solid var(--slate)}
.tl .ev:first-child::before{background:var(--slate)}
.tl .ev .d{font-family:var(--mono);font-size:11.5px;color:var(--ink-3)}
.tl .ev .t{font-weight:600}
.tl .ev:hover .t{color:var(--slate)}
.tl .ev .arrow{color:var(--ink-2);font-size:13px}
.tl .ev .arrow b{color:var(--accent);font-weight:600}
.chain{font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}

/* ---------- agenda ---------- */
.cd{display:inline-flex;align-items:center;font-family:var(--mono);font-size:11.5px;font-weight:600;padding:2px 8px;border-radius:999px;background:var(--surface-2);color:var(--ink-2);white-space:nowrap}
.cd.now{background:var(--accent-soft);color:var(--accent)} .cd.soon{background:var(--ochre-soft);color:var(--ochre)} .cd.late{background:var(--brick-soft);color:var(--brick)} .cd.done{background:var(--surface-2);color:var(--ink-3)}
.evrow{display:flex;gap:12px;align-items:flex-start;padding:10px 0;border-top:1px solid var(--line);cursor:pointer}
.evrow:first-child{border-top:none}
.evrow .when{flex:none;width:64px;font-family:var(--mono);font-size:12px;color:var(--ink-3);line-height:1.35;padding-top:2px}
.evrow .t{font-weight:600}
.evrow:hover .t{color:var(--accent)}
.evrow .m{font-size:12.5px;color:var(--ink-2);margin-top:2px;display:flex;flex-wrap:wrap;gap:5px;align-items:center}
.evrow .ty{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:600;padding:1px 8px;border-radius:999px;border-left:3px solid var(--ec);background:var(--ec-soft);color:var(--ec)}
.ev-mission_terrain{--ec:var(--accent);--ec-soft:var(--accent-soft)} .ev-reunion{--ec:var(--slate);--ec-soft:var(--slate-soft)} .ev-formation{--ec:var(--plum);--ec-soft:var(--plum-soft)}
.ev-copil{--ec:var(--plum);--ec-soft:var(--plum-soft)} .ev-seminaire{--ec:var(--plum);--ec-soft:var(--plum-soft)} .ev-echeance{--ec:var(--brick);--ec-soft:var(--brick-soft)} .ev-recherche{--ec:var(--slate);--ec-soft:var(--slate-soft)} .ev-autre{--ec:var(--ink-3);--ec-soft:var(--surface-2)}
.cal-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 0 10px}
.cal-head h2{font-size:22px}
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:10px;overflow:hidden}
.cal .dh{background:var(--surface-2);font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);padding:6px 8px;text-align:center}
.cal .day{background:var(--surface);min-height:92px;padding:6px 6px 8px;cursor:pointer;display:flex;flex-direction:column;gap:3px;min-width:0;border:none;text-align:left;font:inherit;color:inherit}
.cal .day:hover{background:var(--surface-2)}
.cal .day.out{background:var(--bg);color:var(--ink-3)}
.cal .day .n{font-family:var(--mono);font-size:12px;width:22px;height:22px;display:grid;place-items:center;border-radius:50%;color:var(--ink-2)}
.cal .day.today .n{background:var(--accent);color:var(--accent-ink);font-weight:700}
.cal .day .e{font-size:11.5px;padding:1px 6px;border-radius:4px;border-left:3px solid var(--ec);background:var(--ec-soft);color:var(--ec);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:600}
.cal .day .e.done{opacity:.6;text-decoration:line-through}
.cal .day .more{font-size:11px;color:var(--ink-3)}
@media (max-width:640px){.cal .day{min-height:64px;padding:4px}.cal .day .e{font-size:0;padding:0;height:6px;border-left:none;border-radius:3px;background:var(--ec)}.cal .dh{padding:4px 2px;font-size:9.5px}}
.week{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}
@media (max-width:900px){.week{grid-template-columns:1fr}}
.week .wd{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:8px 10px;min-height:120px}
.week .wd.today{border-color:var(--accent);border-width:2px}
.week .wd .h{font-family:var(--mono);font-size:11px;color:var(--ink-3);text-transform:uppercase;letter-spacing:.06em;margin-bottom:6px;display:flex;justify-content:space-between}
.week .wd .e{font-size:12.5px;padding:4px 8px;border-radius:6px;border-left:3px solid var(--ec);background:var(--ec-soft);color:var(--ink);margin-bottom:5px;cursor:pointer}
.week .wd .e small{display:block;color:var(--ec);font-weight:600;font-size:11px}

/* ---------- listes ---------- */
.item{display:flex;gap:12px;padding:12px 0;border-top:1px solid var(--line);cursor:pointer}
.item:first-child{border-top:none}
.item:hover .t{color:var(--accent)}
.item .when{flex:none;width:58px;font-family:var(--mono);font-size:12px;color:var(--ink-3);padding-top:2px;line-height:1.35}
.item .t{font-weight:600}
.item .b{color:var(--ink-2);font-size:13.5px;margin-top:2px;white-space:pre-wrap;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.item .meta{margin-top:6px;display:flex;flex-wrap:wrap;gap:5px}
.pending-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--ochre);margin-left:6px;vertical-align:middle}
.task{display:flex;gap:10px;align-items:flex-start;padding:9px 0;border-top:1px solid var(--line)}
.task:first-child{border-top:none}
.task input[type=checkbox]{margin:2px 0 0;flex:none;cursor:pointer}
.task .t{cursor:pointer;flex:1 1 auto}
.task.done .t{color:var(--ink-3);text-decoration:line-through}
.task .due{font-family:var(--mono);font-size:11.5px;color:var(--ink-3);white-space:nowrap;text-align:right}
.task .due.late{color:var(--brick);font-weight:600} .task .due.soon{color:var(--ochre);font-weight:600}
.prio{width:6px;height:6px;border-radius:50%;background:var(--line-strong);display:inline-block;margin-right:6px;vertical-align:middle}
.prio.p1{background:var(--brick)} .prio.p2{background:var(--ochre)}
.chantier-head{display:flex;align-items:center;gap:10px;margin-bottom:6px;flex-wrap:wrap}
.site-card{cursor:default}
.site-card h3{cursor:pointer}
.salle{display:flex;gap:8px;align-items:center;padding:6px 0;border-top:1px dashed var(--line);font-size:13.5px;flex-wrap:wrap}
.salle:first-of-type{border-top:none}
.salle .lbl{flex:1 1 160px;cursor:pointer;font-weight:600}
.classe{font-size:12.5px;color:var(--ink-2);padding:2px 0 2px 16px;cursor:pointer}
.fonds-item{padding:11px 0;border-top:1px solid var(--line)}
.fonds-item:first-child{border-top:none}
.path{font-family:var(--mono);font-size:11px;color:var(--ink-3);word-break:break-all;margin-top:3px}
dl.def{display:grid;grid-template-columns:auto 1fr;gap:3px 12px;font-size:13.5px;margin:6px 0 0}
dl.def dt{color:var(--ink-3)} dl.def dd{margin:0}
table.tbl{border-collapse:collapse;width:100%;font-size:13.5px}
table.tbl th,table.tbl td{text-align:left;vertical-align:top;padding:7px 8px;border-bottom:1px solid var(--line)}
table.tbl th{font-size:12px;color:var(--ink-2);background:var(--surface-2)}
.tw{overflow-x:auto}

.dash-card{display:flex;flex-direction:column;gap:8px;border-top:3px solid var(--plum)}
.dash-card .big{font-family:var(--serif);font-weight:500;font-size:28px;font-variant-numeric:tabular-nums;line-height:1.05}
.dash-card .delta{font-size:12.5px;font-weight:600}
.dash-card .delta.up{color:var(--accent)} .dash-card .delta.down{color:var(--brick)}
.spark{width:100%;height:56px;display:block}
.dash-card .foot{font-size:12.5px;color:var(--ink-2);display:flex;flex-direction:column;gap:3px}
.point-detail{font-size:12.5px;background:var(--surface-2);border-radius:8px;padding:8px 10px}

.add-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px}
.add-grid button{padding:14px 12px;border-radius:10px;border:1px solid var(--line-strong);background:var(--surface);font-weight:600;text-align:left;display:flex;flex-direction:column;gap:2px}
.add-grid button small{color:var(--ink-3);font-weight:400;font-size:11.5px}
.add-grid button:hover{border-color:var(--accent)}
.add-grid button.terre{border-color:var(--brick-line)} .add-grid button.terre:hover{border-color:var(--brick)}
.add-grid button.agenda{border-color:var(--ochre)}
.fab{display:none}
@media (max-width:820px){
  dialog,dialog.wide{position:fixed;inset:0;width:100vw;max-width:100vw;height:100%;max-height:100%;margin:0;border-radius:0}
  .sheet{max-height:100dvh;padding:10px 12px calc(16px + env(safe-area-inset-bottom))}
  .sheet header{position:sticky;top:-10px;background:var(--surface);z-index:3;padding:10px 0 8px;margin-top:-10px;border-bottom:1px solid var(--line)}
  .sheet .actions{position:sticky;bottom:calc(-16px - env(safe-area-inset-bottom));background:var(--surface);padding:10px 0 calc(10px + env(safe-area-inset-bottom));border-top:1px solid var(--line);z-index:3}
  .sheet .two{grid-template-columns:1fr}
  .doc-frame{height:calc(100dvh - 120px)}
  .fab{display:flex;position:fixed;right:16px;bottom:calc(var(--nav-h) + 16px);height:52px;padding:0 20px 0 16px;border-radius:26px;background:var(--accent);color:var(--accent-ink);border:none;font-size:15px;font-weight:600;align-items:center;gap:8px;box-shadow:0 8px 24px rgba(0,0,0,.25);z-index:18}
}

dialog{border:none;border-radius:14px 14px 0 0;padding:0;width:min(680px,100%);max-height:92vh;background:var(--surface);color:var(--ink);box-shadow:0 -10px 40px rgba(0,0,0,.3);margin:auto auto 0}
dialog.wide{width:min(980px,100%)}
.sheet{overflow-x:hidden}
.sheet *{min-width:0;max-width:100%}
.sheet select,.sheet input,.sheet textarea{width:100%}
.doc-frame{width:100%;height:min(74vh,900px);border:1px solid var(--line);border-radius:8px;background:#fff}
.doc-text{white-space:pre-wrap;font-family:var(--sans);font-size:14px;line-height:1.5;background:var(--surface-2);padding:12px;border-radius:8px;max-height:74vh;overflow:auto}
.doc-img{max-width:100%;height:auto;border-radius:8px}
.doc-wait{display:flex;align-items:center;gap:10px;padding:20px 0;color:var(--ink-2)}
.doc-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.doc-bar .t{flex:1 1 200px;min-width:0;font-weight:600;font-size:15px;line-height:1.25}
.off{font-family:var(--mono);font-size:11px;color:var(--ink-3);white-space:nowrap}
.off.on{color:var(--accent)}
.doc-acts{display:inline-flex;gap:6px;flex-wrap:wrap}
@media (min-width:821px){dialog{border-radius:14px;margin:auto}}
dialog::backdrop{background:rgba(14,42,35,.55)}
.sheet{padding:18px 18px 22px;display:flex;flex-direction:column;gap:12px;max-height:92vh;overflow:auto}
.sheet header{display:flex;align-items:center;justify-content:space-between;gap:10px}
.sheet header h2{font-size:22px}
.sheet label{display:flex;flex-direction:column;gap:5px;font-size:13px;color:var(--ink-2);font-weight:500}
.sheet label.inline{flex-direction:row;align-items:center;gap:8px}
.sheet .actions{display:flex;gap:8px;justify-content:flex-end;margin-top:6px;flex-wrap:wrap}
.sheet .prose{font-size:14.5px;line-height:1.6;color:var(--ink-2)} .sheet .prose p{margin:0 0 10px} .sheet .prose b{color:var(--ink)}
.picker{border:1px solid var(--line);border-radius:8px;padding:8px;max-height:150px;overflow:auto;display:flex;flex-direction:column;gap:4px}
.picker label{flex-direction:row;align-items:center;gap:8px;font-weight:400;font-size:13px}
.picker input[type=checkbox]{width:auto;accent-color:var(--accent)}
.ext{border-left:3px solid var(--accent);padding-left:12px;display:flex;flex-direction:column;gap:10px}
.radios{display:flex;flex-wrap:wrap;gap:6px}
.radios label{flex-direction:row;align-items:center;gap:6px;border:1px solid var(--line-strong);border-radius:999px;padding:5px 12px;font-weight:500;cursor:pointer}
.radios input[type=radio]{width:14px;height:14px}
.conflict{border:1px solid var(--brick-line);border-radius:10px;padding:10px 12px;background:var(--brick-soft);color:var(--ink)}
.conflict .choice{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:6px}
.conflict .choice button{text-align:left;white-space:normal}
.toast{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(var(--nav-h) + 14px);background:var(--ink);color:var(--bg);padding:9px 14px;border-radius:8px;font-size:13.5px;z-index:30;opacity:0;transition:opacity .2s;pointer-events:none;max-width:90vw}
.toast.show{opacity:1}
@media (min-width:821px){.toast{bottom:24px}}
@media (prefers-reduced-motion:reduce){.toast{transition:none}}

/* ---------- connexion ---------- */
.login-wrap{display:grid;grid-template-columns:1.3fr 1fr;min-height:100vh}
.login-map{position:relative;overflow:hidden;background:var(--bg);min-height:420px}
.login-map .map{position:absolute;left:50%;top:0;transform:translateX(-50%);height:100%;width:auto;max-width:none}
.map.dark{display:none}
:root[data-theme="dark"] .map.light{display:none} :root[data-theme="dark"] .map.dark{display:block}
@media (prefers-color-scheme:dark){:root[data-theme="system"] .map.light{display:none} :root[data-theme="system"] .map.dark{display:block}}
.login-map .shade{position:absolute;inset:0;background:linear-gradient(180deg,rgba(var(--bg-rgb),.92) 0%,rgba(var(--bg-rgb),.75) 26%,rgba(var(--bg-rgb),0) 48%),linear-gradient(90deg,rgba(var(--bg-rgb),.55) 0%,rgba(var(--bg-rgb),0) 40%)}
.login-map .marks{position:absolute;left:50%;top:0;transform:translateX(-50%);height:100%;width:auto;aspect-ratio:1250/1452}
.marks .open{fill:var(--accent);stroke:var(--surface);stroke-width:3}
.marks .college{fill:none;stroke:var(--accent);stroke-width:5}
.marks .prep{fill:var(--ochre-soft);stroke:var(--ochre);stroke-width:4;stroke-linejoin:round}
.marks .halo{fill:none;stroke:var(--accent);stroke-width:2;stroke-dasharray:6 6;opacity:.7}
.marks text{font-family:var(--sans);font-size:26px;font-weight:600;fill:var(--ink);paint-order:stroke;stroke:var(--bg);stroke-width:6px;stroke-linejoin:round}
.login-brand{position:absolute;left:48px;top:44px;right:40%}
.login-brand .gc{font-family:var(--mono);font-size:14px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-2);display:flex;align-items:center;gap:12px}
.login-brand .gc svg{width:34px;height:34px}
.login-brand .big{font-family:var(--serif);font-weight:600;font-size:clamp(48px,5.6vw,66px);line-height:1;letter-spacing:.06em;color:var(--ink);margin-top:10px}
.login-brand .tag{font-family:var(--serif);font-size:19px;color:var(--ink-2);margin-top:8px}
.login-brand .motto{font-size:14px;color:var(--ink-3);margin-top:18px;line-height:1.55}
.login-brand .chain{margin-top:26px}
.legend{position:absolute;right:18px;bottom:18px;background:rgba(var(--bg-rgb),.92);border:1px solid var(--line-strong);border-radius:10px;padding:10px 12px;font-size:12.5px;color:var(--ink-2);backdrop-filter:blur(4px);max-width:270px}
.legend .eyebrow{margin-bottom:6px;color:var(--ink-2)}
.legend .lgr{display:flex;align-items:center;gap:8px;padding:2px 0}
.legend b{color:var(--ink)}
.legend .lg{width:12px;height:12px;flex:none;border-radius:50%;background:var(--accent)}
.legend .lg.college{background:none;border:3px solid var(--accent);width:13px;height:13px}
.legend .lg.next{background:var(--ochre-soft);border:2px solid var(--ochre);border-radius:2px;transform:rotate(45deg);width:10px;height:10px}
.legend .cnt{margin-top:6px;padding-top:6px;border-top:1px solid var(--line);font-weight:600;color:var(--ink)}
.legend .btn{margin-top:8px}
.legend-toggle{display:none}
.map-credit{position:absolute;left:18px;bottom:14px;font-size:11px;color:var(--ink-3);max-width:50%}
.login-side{display:flex;flex-direction:column;justify-content:center;align-items:center;padding:40px 28px;gap:22px;background:var(--surface-2);border-left:1px solid var(--line)}
.login-form{width:min(400px,100%);background:var(--surface);border:1px solid var(--line);border-top:4px solid var(--accent);border-radius:14px;padding:26px 26px 22px;display:flex;flex-direction:column;gap:12px;box-shadow:var(--shadow)}
.login-form h2{font-size:24px;margin:2px 0 6px}
.login-form label{display:flex;flex-direction:column;gap:5px;font-size:13px;color:var(--ink-2);font-weight:500}
.login-foot{display:flex;gap:18px;font-size:13px}
.login-foot a{color:var(--ink-3);text-decoration:none;cursor:pointer} .login-foot a:hover,.login-foot a:focus-visible{color:var(--accent)}
.map-big{position:relative;width:100%;aspect-ratio:1250/1452;max-height:74vh;background:var(--bg);border:1px solid var(--line);border-radius:10px;overflow:hidden}
.map-big img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}
.map-big .marks{position:absolute;inset:0;width:100%;height:100%}
@media (max-width:900px){
  .login-wrap{grid-template-columns:1fr;min-height:auto}
  .login-map{min-height:46vh;height:46vh}
  .login-map .map,.login-map .marks{height:auto;width:118%;left:-10%;top:auto;bottom:-6%;transform:none}
  .login-map .shade{background:linear-gradient(180deg,rgba(var(--bg-rgb),.15) 0%,rgba(var(--bg-rgb),.75) 55%,rgb(var(--bg-rgb)) 100%)}
  .login-brand{left:18px;right:18px;top:16px}
  .login-brand .big{font-size:48px}
  .login-brand .motto{display:none}
  .legend{bottom:12px;right:12px;padding:6px 10px}
  .legend .legend-body{display:none} .legend.open .legend-body{display:block;margin-top:6px}
  .legend-toggle{display:inline;background:none;border:none;color:var(--ink);font-size:12.5px;padding:0;font-weight:600}
  .map-credit{display:none}
  .login-side{padding:22px 16px 48px;border-left:none;border-top:1px solid var(--line);justify-content:flex-start}
  .login-foot{flex-wrap:wrap;justify-content:center;gap:12px 18px}
}

/* ---------- vue connexion : coquille masquée ---------- */
body.login .rail,body.login .topbar-mobile,body.login .bottom-nav,body.login .fab{display:none}
body.login .app{grid-template-columns:1fr}
body.login main{max-width:none;padding:0}

/* ---------- recherche globale ---------- */
#gq{width:100%;font-size:16px;padding:10px 12px}
.gres{margin-top:12px;display:flex;flex-direction:column;gap:14px;max-height:60vh;overflow:auto}
.gres .grp{font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);margin:0 0 4px;display:flex;justify-content:space-between}
.gres .r{display:flex;gap:10px;align-items:baseline;padding:7px 8px;border-radius:6px;cursor:pointer;border-bottom:1px solid var(--line)}
.gres .r:hover,.gres .r:focus-visible{background:var(--surface-2);outline:none}
.gres .r .k{font-family:var(--mono);font-size:11.5px;color:var(--accent);flex:none;min-width:34px}
.gres .r .t{flex:1;min-width:0}.gres .r .t small{display:block;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gres .r .acts{display:flex;gap:6px;flex:none}
.gres .hint{color:var(--ink-3);font-size:13.5px;padding:6px 8px}

/* ---------- connexion : erreur en clair ---------- */
.l-err{background:var(--brick-soft);color:var(--ink);border:1px solid var(--brick-line);border-left:4px solid var(--brick);border-radius:8px;padding:8px 12px;font-size:14px}
/* ---------- mot de passe visible ---------- */
.pwd{position:relative;display:block}
.pwd input{padding-right:44px}
.pwd .eye{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:36px;height:36px;border:none;background:transparent;color:var(--ink-3);border-radius:8px;display:grid;place-items:center}
.pwd .eye:hover,.pwd .eye[aria-pressed="true"]{color:var(--accent)}
.pwd .eye svg{width:20px;height:20px}

/* ---------- missions terrain, capitalisation ---------- */
.field-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin:6px 0 14px}
.fbtn{min-height:76px;padding:12px 12px;border-radius:12px;border:1px solid var(--line-strong);border-left:5px solid var(--fc,var(--accent));background:var(--surface);font-weight:700;font-size:15px;text-align:left;display:flex;flex-direction:column;gap:3px;color:var(--ink)}
.fbtn small{font-weight:400;font-size:11.5px;color:var(--ink-3)}
.fbtn:hover,.fbtn:focus-visible{border-color:var(--fc,var(--accent))}
.f-observation{--fc:var(--slate)} .f-echange{--fc:var(--slate)} .f-probleme{--fc:var(--brick)} .f-formation{--fc:var(--plum)} .f-incident{--fc:var(--brick)} .f-idee{--fc:var(--ochre)} .f-decision{--fc:var(--plum)} .f-document{--fc:var(--sage)}
.ck{display:flex;gap:10px;align-items:flex-start;padding:8px 0;border-top:1px solid var(--line)}
.ck:first-child{border-top:none}
.ck-st{flex:none;min-width:104px;font-family:var(--mono);font-size:11px;letter-spacing:.04em;padding:4px 8px;border-radius:999px;border:1px solid var(--line-strong);background:var(--surface);color:var(--ink-2);text-align:center}
.ck-st.st-observe{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)} .ck-st.st-non_observe{background:var(--surface-2);color:var(--ink-3);text-decoration:line-through} .ck-st.st-a_approfondir{background:var(--ochre-soft);border-color:var(--ochre);color:var(--ochre)}
.ck-l{font-size:14px} .ck.observe .ck-l{color:var(--ink-2)}
.ck-c{margin-top:4px;padding:6px 8px;font-size:13px}
.geste{border-top:1px dashed var(--line);padding:6px 0}
.geste:first-child{border-top:none}
.geste .g-body{margin-top:6px}
.geste .g-body input{padding:6px 8px;font-size:13px}
.gestes{border:1px solid var(--plum-soft);border-left:3px solid var(--plum);border-radius:8px;padding:8px 12px}
.skel{max-width:560px;padding:30px 0}
.skel h1{margin:6px 0 10px}
.skel-bars{display:flex;flex-direction:column;gap:10px;margin-top:20px}
.skel-bars i{display:block;height:14px;border-radius:7px;background:linear-gradient(90deg,var(--surface-2),var(--surface-3),var(--surface-2));background-size:200% 100%;animation:skel 1.4s linear infinite}
.skel-bars i:nth-child(2){width:80%} .skel-bars i:nth-child(3){width:60%} .skel-bars i:nth-child(4){width:70%}
@keyframes skel{to{background-position:-200% 0}}
@media (prefers-reduced-motion:reduce){.skel-bars i{animation:none}}
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.login-foot a svg{vertical-align:-4px;margin-right:4px}

/* écrans de téléphone peu hauts : carte plus basse pour que le formulaire et son pied de page tiennent */
@media (max-width:900px) and (max-height:860px){.login-map{height:32vh;min-height:32vh}.login-side{padding:16px 16px 40px;gap:14px}.login-form{padding:18px 18px 16px;gap:10px}.login-form h2{font-size:20px}}

/* v1.7 : emplois du temps, maintenant / ensuite */
.slot{display:flex;gap:10px;align-items:center;padding:8px 0;border-top:1px solid var(--line)}
.slot:first-child{border-top:none}
.slot .slot-t{flex:none;width:92px;font-family:var(--mono);font-size:12px;color:var(--ink-3)}
.slot .slot-l{font-weight:600;font-size:14px}
.edt-day{margin:4px 0 8px}
.edt-dh{font-size:12.5px;font-weight:700;color:var(--ink-2);text-transform:capitalize;margin:6px 0 2px}
@media (max-width:640px){.slot{flex-wrap:wrap}.slot .slot-t{width:auto}.slot .btn{margin-left:auto}}

/* v1.7.1 : feuille du jour, fenêtres sans dérive horizontale */
.day-list{display:flex;flex-direction:column}
.day-ev{display:flex;flex-direction:column;gap:5px;padding:12px 0;border-top:1px solid var(--line);min-width:0}
.day-ev:first-child{border-top:none}
.day-ev-h{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.day-ev .when{font-family:var(--mono);font-size:12px;color:var(--ink-3)}
.day-ev .t{font-weight:600;font-size:15.5px;line-height:1.3;overflow-wrap:anywhere}
.day-ev .m{display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:12.5px;color:var(--ink-2)}
.day-ev .row{gap:8px;flex-wrap:wrap}
.sheet{overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain}
.sheet .row,.sheet .item,.sheet .evrow,.sheet .slot{flex-wrap:wrap}
@media (max-width:820px){
  dialog,dialog.wide{position:fixed;inset:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;max-height:100%;margin:0;border-radius:0;box-shadow:none}
  .sheet{max-height:100dvh;padding:10px 12px calc(16px + env(safe-area-inset-bottom));touch-action:pan-y}
  .sheet .actions .btn{flex:1 1 auto}
}

/* v1.8 : fenêtre superposée (aperçu d'une date) et cartes d'événement */
dialog.pop{position:fixed;inset:0;box-sizing:border-box;width:min(460px,calc(100% - 32px));max-width:calc(100% - 32px);height:max-content;max-height:min(80vh,680px);margin:auto;border-radius:18px;border:1px solid var(--line-strong);box-shadow:0 18px 50px rgba(0,0,0,.35)}
dialog.pop .sheet{max-height:min(80vh,680px);padding:16px 16px calc(14px + env(safe-area-inset-bottom));gap:10px}
dialog.pop .sheet header{position:sticky;top:-16px;margin-top:-16px;padding:14px 0 8px;background:var(--surface);border-bottom:1px solid var(--line);z-index:3}
dialog.pop .sheet header h2{font-size:19px;line-height:1.2}
dialog.pop .sheet .actions{position:sticky;bottom:calc(-14px - env(safe-area-inset-bottom));background:var(--surface);padding:10px 0 calc(6px + env(safe-area-inset-bottom));border-top:1px solid var(--line);z-index:3;margin-top:0}
.day-list{display:flex;flex-direction:column;gap:10px}
.ev-card{border:1px solid var(--line-strong);border-left:4px solid var(--ec,var(--accent));border-radius:12px;background:var(--surface-2);padding:11px 13px;display:flex;flex-direction:column;gap:4px;cursor:pointer;min-width:0;text-align:left}
.ev-card:hover,.ev-card:focus-visible{border-color:var(--ec,var(--accent));background:var(--surface);outline:none;box-shadow:0 2px 10px rgba(0,0,0,.08)}
.ev-card .ev-card-h{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.ev-card .when{font-family:var(--mono);font-size:12px;color:var(--ink-3)}
.ev-card .ty{font-size:11.5px;font-weight:600;color:var(--ec,var(--accent));background:var(--ec-soft,var(--accent-soft));border-radius:999px;padding:1px 9px}
.ev-card .t{font-weight:600;font-size:15.5px;line-height:1.3;overflow-wrap:anywhere;color:var(--ink)}
.ev-card .m{font-size:12.5px;color:var(--ink-2)}
.ev-card .acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}
.radios.col{flex-direction:column;align-items:stretch;gap:8px}
.radios.col label{border-radius:10px;padding:9px 12px;font-weight:400;line-height:1.35;align-items:flex-start}
.radios.col label input{margin-top:3px;flex:none}
.btn.danger.ghost{background:transparent;color:var(--brick);border:1px solid var(--brick-line,var(--line-strong))}
@media (max-width:820px){
  dialog.pop{width:calc(100% - 24px);max-width:calc(100% - 24px);max-height:82vh}
  dialog.pop .sheet{max-height:82vh;touch-action:pan-y}
}

/* v1.9 : emplois du temps, sélecteur de semaine, grille annuelle */
.wk{border:1px solid var(--line);border-radius:10px;padding:8px 10px;margin-bottom:8px;background:var(--surface-2)}
.wk.off{opacity:.62}
.wk-h{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:6px}
.wk-d{display:flex;gap:6px;flex-wrap:wrap}
.wd-btn{flex:1 1 44px;min-height:44px;border-radius:9px;border:1px solid var(--line-strong);background:var(--surface);font-size:15px;font-weight:600;color:var(--ink)}
.wd-btn:hover,.wd-btn:focus-visible{border-color:var(--accent);color:var(--accent);outline:none}
.wd-btn.out{opacity:.45}
.wd-btn.today{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}
table.edt-grid td{vertical-align:top;min-width:132px}
table.edt-grid td.hh{min-width:60px;font-family:var(--mono);font-size:12px;color:var(--ink-3);white-space:nowrap}
.gcell{border-left:3px solid var(--accent);background:var(--surface-2);border-radius:8px;padding:6px 8px;margin-bottom:5px;cursor:pointer;display:flex;flex-direction:column;gap:2px}
.gcell:hover,.gcell:focus-visible{background:var(--surface);outline:none;box-shadow:0 1px 6px rgba(0,0,0,.1)}
.gcell small{color:var(--ink-3);font-size:11.5px;line-height:1.3}
.slot[role=button]:hover,.slot[role=button]:focus-visible{background:var(--surface);outline:none}

/* grille de la semaine (emploi du temps) */
table.edt-week th{white-space:nowrap}
table.edt-week th.today{color:var(--accent);box-shadow:inset 0 -2px 0 var(--accent)}
table.edt-grid .gsub{font-weight:400;font-size:11px;color:var(--ink-3);text-transform:none;letter-spacing:0}
table.edt-grid td.goff{text-align:center;vertical-align:middle;color:var(--ink-3);background:var(--surface-2);font-size:13px}
.gcell.mod-classe_mere{border-left-color:var(--ochre)}
.gcell.mod-a_confirmer{border-left-color:var(--line-strong);border-left-style:dashed}
.gcell.mod-activite_ap{border-left-color:var(--plum)}
.gcell .ecart{color:var(--ink-2)}

/* plan de mission : ce qui est prévu s'ouvre d'un geste */
.planrow{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:9px 12px;margin:5px 0;font:inherit;color:inherit;cursor:pointer}
.planrow:hover{border-color:var(--accent)}
.planrow.fait{opacity:.62}
.planrow .h{font-family:ui-monospace,Menlo,monospace;font-size:12.5px;color:var(--ink-2);min-width:38px}
.planrow .l{display:block;font-weight:600;font-size:14.5px;line-height:1.3}
.planrow .m{display:block;font-size:12.5px;color:var(--ink-2)}
.planrow .st{font-size:12.5px;color:var(--accent);white-space:nowrap}
.planrow.fait .st{color:var(--ink-2)}
.ctx{font-size:12.5px;color:var(--ink-2);background:var(--surface-2);border-radius:8px;padding:6px 10px;margin:2px 0 12px}
.sheet label.qz{display:grid;grid-template-columns:26px 1fr;gap:4px 8px;margin:0 0 14px}
.sheet label.qz .qn{grid-row:1;width:24px;height:24px;border-radius:50%;background:var(--accent);color:var(--accent-ink);display:flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:700;flex:none}
.sheet label.qz .qt{grid-row:1;grid-column:2;font-size:14.5px;font-weight:600;align-self:center;color:var(--ink)}
.sheet label.qz textarea{grid-column:1 / -1}
.pz{border:1px solid var(--line);border-radius:10px;padding:8px 10px;margin:0 0 8px;background:var(--surface)}
.pz input{width:100%;margin-top:5px}
.pcard{border:1px solid var(--line);border-radius:12px;padding:10px 12px;margin:0 0 10px;background:var(--surface)}
.pcard-h{display:flex;flex-direction:column;gap:1px;margin-bottom:6px;padding-bottom:6px;border-bottom:1px solid var(--line)}
.pmotif{padding:5px 0;border-top:1px solid var(--line);margin-top:5px}
.pcard .pmotif:first-of-type{border-top:none;margin-top:0}
.sheet .pmotif label.inline{align-items:flex-start;text-align:left;flex-wrap:wrap;gap:8px;font-size:14px;color:var(--ink)}
.pmotif .row{flex-wrap:wrap}
.pmotif select{flex:1 1 132px;min-width:0}
.pmotif .pl{flex:1 1 auto;min-width:0}
.sheet .pmotif label.inline input[type=checkbox]{width:18px;height:18px;flex:none;margin-top:3px}
@media(max-width:560px){.pmotif .row{margin-left:0 !important}}
.pmotif.pris{opacity:.55}
.duree-perso{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-2)}
.duree-perso[hidden]{display:none}
.pautres{margin:4px 0 0 2px}
.pautres summary{cursor:pointer;font-size:13px;color:var(--ink-2);padding:3px 0}
