:root{--zoe-navy-700:#082d69;--zoe-navy-600:#123f89;--zoe-blue-500:#2f73f2;--zoe-blue-400:#2782ff;--zoe-blue-100:#c9e4fc;--zoe-orange-500:#ff5a38;--zoe-success-600:#168a55;--zoe-warning-600:#b56a00;--zoe-error-600:#c73a46;--zoe-ink:#10233f;--zoe-border:#d9e1ec;--zoe-surface:#fff;--zoe-background:#f4f5f7;--zoe-radius-control:10px;--zoe-radius-card:12px;--zoe-radius-panel:16px;--zoe-shadow-card:0 8px 24px #082d691a;--zoe-focus-ring:0 0 0 3px #2782ff61;--zoe-ease:cubic-bezier(.2, 0, 0, 1);--zoe-duration-micro:.15s;--zoe-duration-panel:.24s;--zoe-glow-blue:0 0 0 1px #2782ff66, 0 6px 20px #2782ff47;--zoe-font-heading:"Sora", system-ui, "Segoe UI", "Helvetica Neue", Arial, sans-serif;--zoe-font-body:"Inter", system-ui, "Segoe UI", "Helvetica Neue", Arial, sans-serif}*,:before,:after{box-sizing:border-box}html{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}body{min-height:100svh;font:16px/1.5 var(--zoe-font-body);color:var(--zoe-ink);background:var(--zoe-background);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0}#root{min-height:100svh}h1,h2,h3{font-family:var(--zoe-font-heading);color:var(--zoe-navy-700);margin:0;font-weight:700}button,input{font-family:inherit}a{color:var(--zoe-blue-500)}:focus-visible{outline:3px solid var(--zoe-blue-400);outline-offset:2px}@keyframes zoe-entree{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.app-shell{flex-direction:column;min-height:100svh;display:flex}.app-shell-header{background:var(--zoe-surface);border-bottom:1px solid var(--zoe-border);align-items:center;gap:16px;padding:12px 16px;display:flex}@media (width>=768px){.app-shell-header{padding:12px 24px}}.app-shell-brand{font-family:var(--zoe-font-heading);color:var(--zoe-navy-700);align-items:center;gap:8px;font-weight:700;display:flex}.app-shell-brand img{width:28px;height:28px}.app-shell-menu-toggle{border:1px solid var(--zoe-border);border-radius:var(--zoe-radius-control);background:var(--zoe-surface);width:40px;height:40px;color:var(--zoe-navy-700);cursor:pointer;transition:background var(--zoe-duration-micro) var(--zoe-ease);justify-content:center;align-items:center;margin-left:auto;display:inline-flex}.app-shell-menu-toggle:hover{background:var(--zoe-background)}@media (width>=1024px){.app-shell-menu-toggle{display:none}}.app-shell-nav-overlay{z-index:900;animation:zoe-fade var(--zoe-duration-micro) var(--zoe-ease);background:#10233f73;position:fixed;inset:0}@media (width>=1024px){.app-shell-nav-overlay{display:none}}.app-shell-nav{flex-direction:column;gap:4px;display:flex}@media (width<=1023px){.app-shell-nav{z-index:901;background:var(--zoe-surface);width:85%;max-width:320px;padding:16px;padding-top:max(16px, env(safe-area-inset-top));box-shadow:var(--zoe-shadow-card);transition:transform var(--zoe-duration-panel) var(--zoe-ease);position:fixed;inset:0 auto 0 0;overflow-y:auto;transform:translate(-100%)}.app-shell-nav.ouvert{transform:translate(0)}.app-shell-nav-fermer{width:36px;height:36px;color:var(--zoe-navy-700);cursor:pointer;border-radius:var(--zoe-radius-control);background:0 0;border:none;justify-content:center;align-self:flex-end;align-items:center;margin-bottom:8px;display:inline-flex}.app-shell-nav-fermer:hover{background:var(--zoe-background)}.app-shell-nav-user{border-top:1px solid var(--zoe-border);margin-top:auto;padding-top:16px}}@media (width>=1024px){.app-shell-nav{flex-flow:wrap;flex:1;align-items:center}.app-shell-nav-fermer{display:none}.app-shell-nav-user{margin-left:auto}}.app-shell-nav a{border-radius:var(--zoe-radius-control);color:var(--zoe-navy-700);transition:background var(--zoe-duration-micro) var(--zoe-ease);padding:10px 12px;font-size:14px;font-weight:500;text-decoration:none}.app-shell-nav a:hover{background:var(--zoe-background)}.app-shell-nav a.active{background:var(--zoe-blue-100);color:var(--zoe-navy-700)}.app-shell-nav-plateforme{flex-wrap:wrap;gap:4px;display:flex}.app-shell-nav-plateforme a{border-radius:var(--zoe-radius-control);color:var(--zoe-navy-700);transition:background var(--zoe-duration-micro) var(--zoe-ease);padding:10px 12px;font-size:14px;font-weight:500;text-decoration:none}.app-shell-nav-plateforme a:hover{background:var(--zoe-background)}.app-shell-nav-plateforme a.active{background:var(--zoe-blue-100)}.app-shell-user{color:var(--zoe-ink);align-items:center;gap:12px;font-size:14px;display:flex}@media (width<=1023px){.app-shell-user{flex-direction:column;align-items:flex-start;gap:10px}.app-shell-signout{width:100%}}.app-shell-user em{opacity:.7;font-style:normal}.app-shell-signout{border:1px solid var(--zoe-border);border-radius:var(--zoe-radius-control);background:var(--zoe-surface);height:36px;color:var(--zoe-navy-700);cursor:pointer;transition:background var(--zoe-duration-micro) var(--zoe-ease);padding:0 14px;font-weight:600}.app-shell-signout:hover{background:var(--zoe-background)}.app-shell-content{box-sizing:border-box;width:100%;max-width:1440px;animation:zoe-entree var(--zoe-duration-panel) var(--zoe-ease);flex:1;margin:0 auto;padding:16px}@media (width>=768px){.app-shell-content{padding:24px}}@media (width>=1024px){.app-shell-content{padding:32px}}@keyframes zoe-fade{0%{opacity:0}to{opacity:1}}.page-header{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:16px;margin-bottom:20px;display:flex}.page-header p{color:var(--zoe-ink);opacity:.75;margin:4px 0 0}.card{background:var(--zoe-surface);border:1px solid var(--zoe-border);border-radius:var(--zoe-radius-card);box-shadow:var(--zoe-shadow-card);margin-bottom:20px;padding:16px}@media (width>=640px){.card{margin-bottom:24px;padding:24px}}.card h2{margin-bottom:16px;font-size:18px}.table-scroll{overflow-x:auto}.data-table{border-collapse:collapse;width:100%;font-size:14px}.data-table th{text-align:left;border-bottom:1px solid var(--zoe-border);color:var(--zoe-navy-700);padding:8px 12px;font-weight:600}.data-table td{border-bottom:1px solid var(--zoe-border);padding:8px 12px}.data-table tr:last-child td{border-bottom:none}.inline-form{flex-direction:column;align-items:stretch;gap:12px;display:flex}.inline-form .auth-field{min-width:160px}.inline-form .auth-button{width:100%}@media (width>=640px){.inline-form{flex-flow:wrap;align-items:flex-end}.inline-form .auth-button{width:auto}}.etablissement-panel{flex-direction:column;align-items:center;gap:24px;display:flex}@media (width>=640px){.etablissement-panel{flex-direction:row;align-items:flex-start}}.etablissement-logo-bloc{flex-direction:column;flex-shrink:0;align-items:center;gap:10px;display:flex}.etablissement-logo-apercu{border-radius:var(--zoe-radius-card);border:1px dashed var(--zoe-border);background:var(--zoe-background);width:96px;height:96px;color:var(--zoe-ink);opacity:.5;justify-content:center;align-items:center;display:flex;overflow:hidden}.etablissement-logo-apercu img{object-fit:contain;opacity:1;width:100%;height:100%}.etablissement-logo-label{color:var(--zoe-navy-700);font-size:13px;font-weight:600}.etablissement-fields{flex-direction:column;flex:1;gap:12px;width:100%;min-width:0;display:flex}.etablissement-fields-actions{justify-content:flex-end;display:flex}.icon-button{border-radius:var(--zoe-radius-control);border:1px solid var(--zoe-border);background:var(--zoe-surface);height:32px;color:var(--zoe-error-600);cursor:pointer;padding:0 12px;font-size:13px}.icon-button:hover{background:#c73a4614}.empty-state{color:var(--zoe-ink);opacity:.6;padding:12px 0;font-size:14px}.chip-list{flex-wrap:wrap;gap:8px;display:flex}.chip{background:var(--zoe-blue-100);color:var(--zoe-navy-700);border-radius:999px;align-items:center;gap:6px;padding:4px 10px;font-size:13px;display:inline-flex}.chip button{cursor:pointer;color:var(--zoe-navy-700);background:0 0;border:none;padding:0;font-weight:700;line-height:1}.row-actions{justify-content:flex-end;gap:4px;display:flex}.icon-btn{border-radius:var(--zoe-radius-control);width:32px;height:32px;color:var(--zoe-navy-700);cursor:pointer;transition:background var(--zoe-duration-micro) var(--zoe-ease), color var(--zoe-duration-micro) var(--zoe-ease), transform var(--zoe-duration-micro) var(--zoe-ease);background:0 0;border:1px solid #0000;justify-content:center;align-items:center;display:inline-flex}.icon-btn:hover{background:var(--zoe-blue-100);transform:translateY(-1px)}.icon-btn:active{transform:scale(.92)}.icon-btn:focus-visible{box-shadow:var(--zoe-focus-ring);outline:none}.icon-btn-danger:hover{color:var(--zoe-error-600);background:#c73a461a}.etablissement-hero{border-radius:var(--zoe-radius-panel);color:#fff;box-shadow:var(--zoe-shadow-card);background:linear-gradient(135deg,#123f89 0%,#082d69 43%,#123a7b 100%);margin-bottom:24px;padding:24px}@media (width>=768px){.etablissement-hero{padding:32px}}.etablissement-hero .eyebrow{letter-spacing:.04em;text-transform:uppercase;opacity:.75;margin-bottom:4px;font-size:13px;font-weight:600}.etablissement-hero h1{color:#fff;font-size:32px}.diagnostic{border-bottom:1px solid var(--zoe-border);flex-wrap:wrap;align-items:baseline;gap:12px;padding:12px 0;display:flex}.diagnostic:last-child{border-bottom:none}.diagnostic p{flex:1;min-width:240px;margin:0}.diagnostic-badge{text-transform:uppercase;letter-spacing:.03em;background:var(--zoe-blue-100);color:var(--zoe-navy-700);border-radius:999px;flex-shrink:0;padding:2px 10px;font-size:12px;font-weight:700;display:inline-block}.statut-badge-icone{background:var(--zoe-blue-100);width:26px;height:26px;color:var(--zoe-navy-700);animation:zoe-badge-apparition var(--zoe-duration-panel) var(--zoe-ease);transition:transform var(--zoe-duration-micro) var(--zoe-ease), box-shadow var(--zoe-duration-micro) var(--zoe-ease);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.statut-badge-icone.diagnostic-bloquant{color:var(--zoe-error-600);background:#c73a461f}.statut-badge-icone:hover{box-shadow:var(--zoe-shadow-card);transform:scale(1.1)}@keyframes zoe-badge-apparition{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}.diagnostic-bloquant .diagnostic-badge,.diagnostic-badge.diagnostic-bloquant{color:var(--zoe-error-600);background:#c73a461f}.diagnostic-avertissement .diagnostic-badge,.diagnostic-badge.diagnostic-avertissement{color:#8a6100;background:#b8860b24}.tooltip{position:relative}.tooltip:after{content:attr(data-tooltip);background:var(--zoe-navy-700);color:#fff;white-space:nowrap;opacity:0;pointer-events:none;z-index:20;border-radius:6px;padding:5px 9px;font-size:12px;font-weight:500;line-height:1.3;transition:opacity .1s 50ms,transform .1s 50ms;position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%)translateY(4px)}.tooltip:hover:after,.tooltip:focus-visible:after{opacity:1;transform:translate(-50%)translateY(0)}.dialog-overlay{z-index:1000;animation:zoe-fade var(--zoe-duration-micro) var(--zoe-ease);background:#10233f73;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.dialog-card{background:var(--zoe-surface);border-radius:var(--zoe-radius-panel);box-shadow:var(--zoe-shadow-card);width:100%;max-width:420px;animation:zoe-dialog-entree var(--zoe-duration-panel) var(--zoe-ease);padding:24px}@keyframes zoe-dialog-entree{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}.dialog-card h2{margin-bottom:8px;font-size:18px}.dialog-card p{color:var(--zoe-ink);margin:0 0 24px;font-size:14px}.dialog-actions{justify-content:flex-end;gap:12px;display:flex}.dialog-actions .auth-button{width:auto;height:40px}.auth-shell{justify-content:center;align-items:center;min-height:100svh;padding:16px;display:flex}.auth-card{background:var(--zoe-surface);border:1px solid var(--zoe-border);border-radius:var(--zoe-radius-card);width:100%;max-width:420px;box-shadow:var(--zoe-shadow-card);animation:zoe-entree var(--zoe-duration-panel) var(--zoe-ease);padding:24px}@media (width>=480px){.auth-card{padding:32px}}.auth-brand{align-items:center;gap:12px;margin-bottom:24px;display:flex}.auth-brand img{width:40px;height:40px}.auth-brand span{font-family:var(--zoe-font-heading);color:var(--zoe-navy-700);font-size:20px;font-weight:700}.auth-card h1{margin-bottom:8px;font-size:24px;line-height:32px}.auth-card p.auth-subtitle{color:var(--zoe-ink);margin:0 0 24px;font-size:14px}.auth-form{flex-direction:column;gap:16px;display:flex}.auth-field{flex-direction:column;gap:6px;display:flex}.auth-field label{color:var(--zoe-navy-700);font-size:14px;font-weight:500}.auth-field input,.auth-field select{border:1px solid var(--zoe-border);border-radius:var(--zoe-radius-control);height:44px;color:var(--zoe-ink);background:var(--zoe-surface);padding:0 12px;font-size:16px}.auth-field textarea{border:1px solid var(--zoe-border);border-radius:var(--zoe-radius-control);min-height:88px;font:inherit;color:var(--zoe-ink);background:var(--zoe-surface);resize:vertical;padding:10px 12px;font-size:16px}.auth-field input:focus-visible,.auth-field select:focus-visible,.auth-field textarea:focus-visible{border-color:var(--zoe-blue-500);box-shadow:var(--zoe-focus-ring);outline:none}.auth-field-centre{text-align:center;align-items:center}.entree-masquee{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.auth-field .auth-help{color:var(--zoe-ink);opacity:.75;font-size:12px}.auth-error{border-radius:var(--zoe-radius-control);border:1px solid var(--zoe-error-600);color:var(--zoe-error-600);background:#c73a4614;align-items:flex-start;gap:8px;padding:12px;font-size:14px;display:flex}.auth-success{border-radius:var(--zoe-radius-control);border:1px solid var(--zoe-success-600);color:var(--zoe-success-600);background:#168a5514;align-items:flex-start;gap:8px;margin-bottom:16px;padding:12px;font-size:14px;display:flex}.auth-button{border-radius:var(--zoe-radius-control);text-align:center;cursor:pointer;height:46px;transition:opacity var(--zoe-duration-micro) var(--zoe-ease), transform var(--zoe-duration-micro) var(--zoe-ease), box-shadow var(--zoe-duration-micro) var(--zoe-ease);border:none;justify-content:center;align-items:center;gap:8px;padding:0 20px;font-size:16px;font-weight:600;display:inline-flex}.auth-button:disabled{opacity:.6;cursor:not-allowed}.auth-button:not(:disabled):hover{transform:translateY(-1px)}.auth-button:not(:disabled):active{transform:scale(.98)}.auth-form .auth-button{width:100%}.auth-button-auto{width:auto}.auth-button-primary{background:var(--zoe-blue-500);color:#fff}.auth-button-primary:hover:not(:disabled){opacity:.92;box-shadow:var(--zoe-glow-blue)}.auth-button-primary:focus-visible{box-shadow:var(--zoe-glow-blue)}.auth-button-destructive{background:var(--zoe-error-600);color:#fff}.auth-button-destructive:hover:not(:disabled){opacity:.92}.auth-button-ghost{color:var(--zoe-navy-700);border:1px solid var(--zoe-border);background:0 0}.auth-button-ghost:hover:not(:disabled){background:var(--zoe-background)}.auth-links{justify-content:space-between;margin-top:20px;font-size:14px;display:flex}.auth-links a{color:var(--zoe-navy-600);text-decoration:none}.auth-links a:hover{text-decoration:underline}.emploi-du-temps-card{overflow-x:auto}.emploi-du-temps{table-layout:fixed}.emploi-du-temps th,.emploi-du-temps td{vertical-align:top;min-width:140px}.emploi-du-temps-cellule{border-radius:var(--zoe-radius-control);background:var(--zoe-blue-100);cursor:grab;transition:box-shadow var(--zoe-duration-micro) var(--zoe-ease), background var(--zoe-duration-micro) var(--zoe-ease);justify-content:space-between;align-items:flex-start;gap:6px;padding:6px 8px;display:flex}.emploi-du-temps-cellule:active{cursor:grabbing}.emploi-du-temps-deplacee{animation:zoe-cellule-confirmee .6s var(--zoe-ease)}@keyframes zoe-cellule-confirmee{0%{box-shadow:var(--zoe-glow-blue)}to{box-shadow:none}}.emploi-du-temps-survolee{background:var(--zoe-blue-100);outline:2px dashed var(--zoe-blue-500);outline-offset:-2px;transition:outline-color var(--zoe-duration-micro) var(--zoe-ease)}.emploi-du-temps-cellule strong{font-size:13px}.emploi-du-temps-sous-titre{opacity:.75;font-size:12px}.emploi-du-temps-verrouillee{background:#b8860b24;box-shadow:inset 0 0 0 1px #b8860b66}.emploi-du-temps-ligne-pause td{background:var(--zoe-background)}.emploi-du-temps-pause{text-align:center;letter-spacing:.04em;text-transform:uppercase;color:var(--zoe-ink);opacity:.6;font-size:12px;font-style:italic}.print-only{display:none}.entete-impression{align-items:center;gap:16px;margin-bottom:16px;display:none}.entete-impression-logo{object-fit:contain;max-width:160px;max-height:64px}.entete-impression-etablissement{color:var(--zoe-ink);opacity:.75;margin-bottom:2px;font-size:13px}.entete-impression-adresse{color:var(--zoe-ink);opacity:.6;white-space:pre-line;margin-bottom:4px;font-size:12px}@media print{.app-shell-header,.no-print{display:none!important}.app-shell-content{max-width:none;padding:0}.print-only{display:block}.entete-impression{display:flex}.emploi-du-temps-card{box-shadow:none;border:none;padding:0}.emploi-du-temps-cellule{box-shadow:none;background:0 0;border:1px solid #999}.emploi-du-temps-ligne-pause td{background:0 0;border-top:1px dashed #999;border-bottom:1px dashed #999}.emploi-du-temps-page-impression{page-break-after:always;page-break-inside:avoid;break-inside:avoid}.emploi-du-temps-page-impression:last-child{page-break-after:auto}.emploi-du-temps-page-impression .emploi-du-temps tr{page-break-inside:avoid;break-inside:avoid}}.emploi-du-temps-page-impression+.emploi-du-temps-page-impression{border-top:1px dashed var(--zoe-border);margin-top:32px;padding-top:24px}
