:root{color-scheme:light;--ink:#192a29;--muted:#64716e;--green:#185c49;--line:#dce4df;--paper:#f5f7f3}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;font-size:14px}a{color:inherit;text-decoration:none}button,input{font:inherit}button,a,input{touch-action:manipulation}button{cursor:pointer}a:focus-visible,button:focus-visible,input:focus-visible,article:focus-visible{outline:3px solid #c29439;outline-offset:3px}.brand{display:flex;gap:14px;align-items:center;font-size:31px;font-weight:900;letter-spacing:-2px}.brand span{font-size:14px;font-weight:600;letter-spacing:0}.eyebrow{font-size:11px;letter-spacing:2px;font-weight:700;color:var(--green)}h1,h2,h3,p{margin-top:0}h1{font-size:36px;letter-spacing:-1.6px;font-weight:650;line-height:1.15}h2{font-size:25px;letter-spacing:-.8px}.muted{color:var(--muted);line-height:1.7}.login-shell{min-height:100vh;display:grid;grid-template-columns:1.05fr 1fr}.login-intro{padding:52px 9%;background:#194c3d;color:#f5f7eb;display:flex;flex-direction:column;justify-content:center;position:relative;overflow:hidden}.login-intro:after{content:"";position:absolute;width:460px;height:460px;border:1px solid #ffffff18;border-radius:50%;bottom:-280px;right:-180px;box-shadow:0 0 0 60px #ffffff05,0 0 0 120px #ffffff03}.login-intro .brand{position:absolute;top:45px}.login-intro .eyebrow{color:#c6d998;margin-top:85px}.login-intro h1{font-family:Georgia,serif;font-weight:400;font-size:clamp(42px,5.5vw,80px);letter-spacing:-3px;line-height:1.06;margin:18px 0 28px}.login-intro p:not(.eyebrow){line-height:1.9;color:#c3d4ca}.intro-footer{display:flex;justify-content:space-between;font-size:10px;letter-spacing:2px;margin-top:100px;color:#a9c1b2;gap:20px}.login-panel{width:min(390px,85%);margin:auto;padding:45px 0}.lock-icon{width:45px;height:45px;background:#e4eadd;display:grid;place-items:center;border-radius:12px;font-size:27px;margin-bottom:24px}.login-form{margin-top:28px}.login-form label{display:block;font-size:12px;margin-bottom:8px;font-weight:600}.login-form input[type=password]{width:100%;height:53px;background:white;border:1px solid #b9c6bb;border-radius:8px;padding:12px;font-size:22px;letter-spacing:4px}.keypad{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin:15px 0 22px}.keypad button{border:1px solid var(--line);background:#fff;height:48px;border-radius:7px;font-size:18px}.keypad button:hover{background:#e7eddf}.primary{background:var(--green);color:white;border:0;border-radius:8px;width:100%;padding:17px;text-align:left;font-weight:600}.primary span{float:right}.login-note{font-size:11px;color:var(--muted);line-height:1.7;text-align:center;margin:20px 0 0}.error{padding:12px;border-radius:5px;background:#ffe7dd;color:#8b3020;font-size:13px}.topbar{height:82px;border-bottom:1px solid var(--line);background:#fff;display:flex;align-items:center;justify-content:space-between;padding:0 4%;gap:25px}.topbar nav{display:flex;gap:30px;height:100%;align-items:center}.topbar nav a{height:100%;display:flex;align-items:center;border-bottom:3px solid transparent;color:var(--muted)}.topbar nav a.active{color:var(--green);border-color:var(--green)}.logout{border:0;background:none;color:var(--muted);font-size:12px}.workspace{max-width:1600px;margin:0 auto;padding:42px 4%}.page-heading{display:flex;justify-content:space-between;align-items:center;gap:20px}.period{display:block;font-size:15px;letter-spacing:0;color:var(--muted);margin-top:12px;font-weight:400}.week-nav{display:flex;align-items:center;gap:6px}.week-nav a{padding:10px 14px;background:#fff;border:1px solid var(--line);border-radius:6px;font-size:12px;white-space:nowrap}.status-row{display:flex;gap:18px;align-items:center;margin:12px 0 23px;color:var(--muted);font-size:12px;flex-wrap:wrap}.status-row a{margin-left:auto}.pill{background:#e5eddd;color:#3d6045;border-radius:50px;padding:6px 11px;font-size:11px;font-weight:600;white-space:nowrap}.calendar-scroll{overflow-x:auto;border:1px solid var(--line);border-radius:12px;background:white}.calendar{min-width:1050px}.calendar-head,.calendar-body{display:grid;grid-template-columns:65px repeat(7,minmax(0,1fr))}.calendar-head{border-bottom:1px solid var(--line);min-height:86px}.day-heading{padding:14px 9px;text-align:center;border-left:1px solid var(--line)}.day-heading>span{font-size:9px;letter-spacing:2px;display:block;color:var(--muted)}.day-heading>strong{display:inline-grid;place-items:center;font-size:22px;font-weight:500;margin-top:4px;width:34px;height:34px}.day-heading.today>strong{background:var(--green);border-radius:50%;color:#fff}.timezone{font-size:8px;letter-spacing:1px;padding-top:37px;text-align:center;color:var(--muted)}.calendar-body{height:720px}.hours{display:flex;flex-direction:column}.hours span{height:60px;flex-shrink:0;font-size:10px;color:#82908a;padding:8px;text-align:center}.day-column{position:relative;border-left:1px solid var(--line);background:repeating-linear-gradient(to bottom,transparent,transparent 59px,#e9eeea 59px,#e9eeea 60px)}.today-column{background-color:#fafcf6}.course{position:absolute;border:3px solid transparent;background-clip:padding-box;border-radius:9px;padding:10px 9px;overflow:auto;min-height:25px;font-size:11px;line-height:1.5}.course time{display:block;font-size:10px;opacity:.85;margin-bottom:5px}.course strong{display:block;font-size:12px;line-height:1.4;margin-bottom:7px;overflow-wrap:anywhere}.course span,.course small{display:block}.course small{margin-top:6px;opacity:.8}.course.color-0{background-color:#e4edda;color:#355329}.course.color-1{background-color:#e1e8f5;color:#334b76}.course.color-2{background-color:#f3e5d7;color:#785233}.course.color-3{background-color:#ebe3ef;color:#624d70}.course.cancelled{text-decoration:line-through;opacity:.65}.all-day{font-size:10px;background:#e4edda;padding:6px;margin-top:5px;overflow-wrap:anywhere}.notice{padding:15px 18px;background:#fff1d9;border:1px solid #e7d0a7;border-radius:7px;color:#705729;line-height:1.6}.empty{text-align:center;padding:65px 25px}.footnote{color:var(--muted);font-size:11px;margin:18px 0}.history-workspace{max-width:1100px}.history-batch{margin:35px 0}.history-batch>h2{font-size:13px;font-weight:600;color:var(--muted);letter-spacing:0}.change-card{border:1px solid var(--line);border-radius:10px;background:#fff;margin-bottom:12px;padding:22px}.change-title{display:flex;align-items:center;gap:12px}.change-title h3{font-size:17px;margin:0}.comparison{display:grid;grid-template-columns:1fr 1fr;gap:25px;margin-top:18px;overflow-wrap:anywhere}.comparison>div{padding:0 15px;border-left:2px solid #e2e8de}.comparison h4{font-size:10px;text-transform:uppercase;letter-spacing:1px;color:var(--muted);margin:0 0 10px}.comparison p{font-size:12px;line-height:1.6;margin-bottom:6px}@media(max-width:800px){.login-shell{grid-template-columns:1fr}.login-intro{min-height:190px;padding:25px 8%}.login-intro .brand{position:static}.login-intro .eyebrow,.intro-footer,.login-intro p:not(.eyebrow){display:none}.login-intro h1{font-size:37px;letter-spacing:-1px;margin:20px 0 0}.login-intro h1 br{display:none}.login-panel{padding:32px 0}.topbar{height:auto;padding:18px 5%;flex-wrap:wrap;gap:14px}.topbar .brand span{font-size:11px}.topbar nav{order:3;width:100%;gap:24px}.topbar nav a{padding:10px 0}.workspace{padding:25px 5%}.page-heading{align-items:flex-start;flex-direction:column}h1{font-size:29px}.status-row{margin-top:22px}.comparison{grid-template-columns:1fr;gap:17px}.change-title{align-items:flex-start;flex-direction:column}}
/* Écran de déverrouillage à quatre chiffres. */
.visually-hidden{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.passcode-page,.passcode-page body{height:100%;overflow:hidden;overscroll-behavior:none;background:#17212a}
.passcode-screen{
  --passcode-height:100vh;
  --key-size:min(80px,21vw);
  position:fixed;inset:0;height:var(--passcode-height);display:grid;place-items:center;
  overflow:hidden;color:#fff;color-scheme:dark;
  background:radial-gradient(ellipse at 35% 27%,#496d7e55,transparent 45%),radial-gradient(ellipse at 65% 90%,#52705c55,transparent 40%),linear-gradient(145deg,#26343a,#222b34 39%,#121b24);
  padding:max(16px,env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) max(16px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left));
}
@supports(height:100dvh){.passcode-screen{--passcode-height:100dvh}}
.passcode-glow{position:absolute;inset:0;background:radial-gradient(circle at 50% 65%,#ffffff0d,transparent 46%);pointer-events:none}
.passcode-card{position:relative;text-align:center;width:min(100%,360px);padding:6px 0}
.passcode-mark{width:44px;height:44px;border-radius:14px;border:1px solid #ffffff55;background:#ffffff1c;display:grid;place-items:center;margin:0 auto 16px;font-size:25px;font-weight:750}
.passcode-card.has-error .passcode-mark{display:none}
.passcode-overline{font-size:10px;line-height:14px;letter-spacing:2.7px;font-weight:700;color:#d6e4dc;margin:0 0 10px}
.passcode-card h1{font-size:clamp(26px,5vw,34px);letter-spacing:-.7px;font-weight:500;line-height:1.15;margin:0 0 6px}
.passcode-subtitle{font-size:13px;line-height:20px;color:#d3dfe1;margin:0}
.passcode-form{margin-top:20px}
.passcode-form input#password{position:absolute;opacity:0;width:1px;height:1px;padding:0;border:0;font-size:16px;pointer-events:none}
.passcode-dots{display:flex;justify-content:center;gap:18px;margin:0 auto 22px;cursor:text}
.passcode-dots span{position:relative;width:14px;height:14px;border:1.5px solid #fff;border-radius:50%;transition:transform 160ms cubic-bezier(.16,1,.3,1)}
.passcode-dots span:before{content:"";position:absolute;inset:-1px;border-radius:inherit;background:#fff;opacity:0;transform:scale(.4);transition:opacity 80ms linear,transform 170ms cubic-bezier(.16,1,.3,1)}
.passcode-dots span.filled{transform:scale(1.08)}
.passcode-dots span.filled:before{opacity:1;transform:scale(1)}
.passcode-error{margin:0 auto 12px;padding:8px 12px;max-width:280px;border-radius:10px;color:#fff;background:#bd3d4b99;font-size:12px;line-height:17px}
.passcode-keypad{display:grid;grid-template-columns:repeat(3,var(--key-size));gap:10px min(24px,6vw);justify-content:center;margin:0 auto}
.passcode-keypad button{
  position:relative;isolation:isolate;width:var(--key-size);height:var(--key-size);padding:0;border-radius:50%;
  border:1px solid #ffffff24;background:#ffffff2b;color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;
  box-shadow:inset 0 1px #ffffff2e,0 8px 20px #00000016;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;
  touch-action:manipulation;transition:transform 90ms cubic-bezier(.2,.8,.2,1);will-change:transform;
}
.passcode-keypad button:before{content:"";position:absolute;inset:0;border-radius:inherit;background:#fff;opacity:0;z-index:-1;transition:opacity 90ms linear;pointer-events:none}
@media(hover:hover){.passcode-keypad button:hover:before{opacity:.12}}
.passcode-keypad button.is-pressed,.passcode-keypad button:active{transform:scale(.93)}
.passcode-keypad button.is-pressed:before,.passcode-keypad button:active:before{opacity:.3}
.passcode-keypad button:disabled{cursor:default}
.passcode-keypad .passcode-digit{font-size:clamp(18px,calc(var(--key-size) * .42),33px);font-weight:300;line-height:1}
.passcode-keypad .passcode-letters{font-size:clamp(6px,calc(var(--key-size) * .115),9px);font-weight:700;letter-spacing:2px;line-height:1.6;min-height:10px}
.passcode-keypad .passcode-delete{background:transparent;border-color:transparent;box-shadow:none;font-size:clamp(18px,calc(var(--key-size) * .36),28px)}
.passcode-help{color:#c8d4d6;font-size:11px;line-height:1.6;margin:16px 0 0}
.passcode-help span{display:block}
.passcode-help button{border:0;padding:4px;background:transparent;color:#fff;text-decoration:underline;text-underline-offset:3px}
/* Ces classes suivent la hauteur visible, y compris avec le clavier du téléphone. */
.passcode-screen.is-compact{--key-size:min(68px,21vw,max(28px,calc((var(--passcode-height) - 410px) / 4)));padding-top:max(12px,env(safe-area-inset-top));padding-bottom:max(12px,env(safe-area-inset-bottom))}
.is-compact .passcode-card{padding:0}
.is-compact .passcode-mark{display:none}
.is-compact .passcode-overline{margin-bottom:8px}
.is-compact .passcode-card h1{font-size:30px}
.is-compact .passcode-form{margin-top:16px}
.is-compact .passcode-dots{margin-bottom:18px}
.is-compact .passcode-keypad{row-gap:8px}
.is-compact .passcode-help{margin-top:12px}
.passcode-screen.is-short{--key-size:min(64px,21vw,max(28px,calc((var(--passcode-height) - 220px) / 4)));padding-top:max(8px,env(safe-area-inset-top));padding-bottom:max(8px,env(safe-area-inset-bottom))}
.is-short .passcode-overline,.is-short .passcode-subtitle,.is-short .passcode-help span{display:none}
.is-short .passcode-card h1{font-size:26px;margin-bottom:0}
.is-short .passcode-form{margin-top:12px}
.is-short .passcode-dots{margin-bottom:14px}
.is-short .passcode-help{margin-top:8px}
.passcode-screen.is-tiny{--key-size:min(56px,21vw,max(20px,calc((var(--passcode-height) - 130px) / 4)));padding-top:6px;padding-bottom:6px}
.is-tiny .passcode-card h1,.is-tiny .passcode-help{display:none}
.is-tiny .passcode-form{margin-top:0}
.is-tiny .passcode-dots{margin-bottom:12px}
.is-tiny .passcode-keypad{row-gap:6px}
.is-tiny .passcode-letters{display:none}
@media(prefers-reduced-motion:reduce){.passcode-keypad button,.passcode-keypad button:before,.passcode-dots span,.passcode-dots span:before{transition:none}.passcode-keypad button.is-pressed,.passcode-keypad button:active,.passcode-dots span.filled{transform:none}}
