/* admin.css — feuille de style du tableau de bord (extraite telle quelle de admin.html, lot E2) */
  :root { --side:#2a3042; --side2:#323a4f; --sidetxt:#a6b0cf; --bg:#f4f5f9; --card:#fff; --line:#e6e9f2; --txt:#2b3040; --mut:#74788d;
          --acc:#556ee6; --ok:#34c38f; --warn:#f1b44c; --bad:#f46a6a; --info:#50a5f1; --r:10px;
          /* dérivés de l'apparence (Paramétrage → Apparence), recalculés par applyApparence() */
          --acc2:#1bb7a6; --accfg:#fff; --accd:#4a5fd0; --acct:#e8ebfb; --acc-rgb:85,110,230; --sideon:#fff; --sideh6:#6a7187; --lgbg:url(login-bg.svg); }
  * { box-sizing:border-box; }
  html,body { height:100%; }
  body { margin:0; background:var(--bg); color:var(--txt); font:14px/1.5 "Segoe UI",system-ui,-apple-system,Roboto,sans-serif; }
  .app { display:grid; grid-template-columns:250px 1fr; min-height:100vh; }
  aside { background:var(--side); color:var(--sidetxt); padding:0 0 20px; position:sticky; top:0; height:100vh; overflow:auto; }
  .brand { color:var(--sideon); font-size:18px; font-weight:600; padding:20px 22px; border-bottom:1px solid var(--side2); display:flex; gap:10px; align-items:center; }
  .brand i { font-style:normal; width:30px; height:30px; border-radius:9px; flex:none; display:grid; place-items:center; color:var(--accfg); background:linear-gradient(135deg,var(--acc),var(--acc2)); }
  .brand i svg, .lg-brand i svg, .ap-prev .c i svg { width:72%; height:72%; display:block; }
  aside h6 { margin:18px 22px 6px; font-size:11px; letter-spacing:.08em; text-transform:uppercase; color:var(--sideh6); font-weight:600; }
  aside a, aside button.nav { display:flex; width:100%; gap:10px; align-items:center; padding:10px 22px; color:var(--sidetxt); text-decoration:none; background:none; border:0; font:inherit; cursor:pointer; text-align:left; }
  aside a:hover, aside button.nav:hover { color:var(--sideon); } aside .on { color:var(--sideon); background:var(--side2); box-shadow:inset 3px 0 var(--acc); }
  aside .sess { padding-left:40px; font-size:13px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; display:block; }
  .main { display:flex; flex-direction:column; min-width:0; }
  header.top { background:var(--card); border-bottom:1px solid var(--line); padding:12px 24px; display:flex; align-items:center; gap:14px; position:sticky; top:0; z-index:5; }
  header.top h1 { font-size:17px; margin:0; font-weight:600; flex:1; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .menu { display:none; }
  .content { padding:24px; flex:1; }
  .btn { font:inherit; padding:8px 14px; border-radius:6px; border:1px solid var(--line); background:var(--card); color:var(--txt); cursor:pointer; }
  a.btn { text-decoration:none; display:inline-block; line-height:normal; }
  .btn:hover { border-color:var(--acc); }
  .btn.warn { background:var(--warn); border-color:var(--warn); color:#3b2a00; font-weight:600; } .btn.warn:hover { filter:brightness(.94); border-color:var(--warn); } .btn.pri { background:var(--acc); border-color:var(--acc); color:var(--accfg); } .btn.bad { color:var(--bad); border-color:#f9c8c8; }
  .btn.sm { padding:4px 10px; font-size:13px; }
  .grid { display:grid; gap:20px; } .kpis { grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); margin-bottom:20px; }
  .card { background:var(--card); border-radius:var(--r); box-shadow:0 1px 3px rgba(18,38,63,.06); padding:20px; margin-bottom:20px; }
  .kpi { display:flex; gap:14px; align-items:center; margin:0; } .kpi .ic { width:46px; height:46px; border-radius:50%; display:grid; place-items:center; font-size:20px; background:var(--acct); }
  .kpi b { font-size:24px; display:block; line-height:1.1; } .kpi span { color:var(--mut); }
  h2 { font-size:15px; margin:0 0 14px; font-weight:600; } h3 { font-size:14px; margin:0 0 6px; }
  .mut { color:var(--mut); } table { border-collapse:collapse; width:100%; } th { text-align:left; font-weight:600; color:var(--mut); font-size:12px; text-transform:uppercase; letter-spacing:.04em; }
  th,td { padding:10px 8px; border-bottom:1px solid var(--line); } tr:last-child td { border-bottom:0; } td.act { text-align:right; white-space:nowrap; }
  .badge { display:inline-block; padding:2px 10px; border-radius:999px; font-size:12px; font-weight:600; }
  .b-ok { background:#dff6ec; color:#1d9a6c; } .b-warn { background:#fdf0d8; color:#b27a0c; } .b-mut { background:#eceef4; color:#5d6279; } .b-bad { background:#fde3e3; color:#c0392b; } .b-info { background:#e2f0fc; color:#2b78b9; }
  .b-tag { background:#f1ebfd; color:#6a3fb5; font-weight:600; } .tags { display:flex; flex-wrap:wrap; gap:4px; margin:4px 0 6px; min-height:18px; }
  .tagbar { display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin:8px 0 12px; } .tagbar .chips { margin:0; } .tagbar .chips label small { color:var(--mut); font-weight:400; }
  .tabs { display:flex; gap:4px; border-bottom:1px solid var(--line); margin-bottom:20px; overflow:auto; }
  .tabs button { font:inherit; background:none; border:0; padding:10px 16px; cursor:pointer; color:var(--mut); border-bottom:2px solid transparent; white-space:nowrap; }
  .tabs .on { color:var(--acc); border-color:var(--acc); font-weight:600; }
  label.f { display:block; margin:12px 0 4px; font-size:13px; color:var(--mut); }
  textarea, select { width:100%; padding:8px 10px; border-radius:6px; border:1px solid var(--line); font:inherit; background:var(--card); color:var(--txt); }
  input[type=text], input[type=number], input[type=datetime-local] { width:100%; padding:8px 10px; border-radius:6px; border:1px solid var(--line); font:inherit; background:var(--card); color:var(--txt); }
  .chips { display:flex; flex-wrap:wrap; gap:6px; margin:6px 0; } .chips label { display:inline-flex; gap:5px; align-items:center; padding:4px 10px; border:1px solid var(--line); border-radius:999px; cursor:pointer; background:var(--card); }
  .qrs { display:flex; flex-wrap:wrap; gap:10px; }
  .qr { border:1px solid var(--line); border-radius:var(--r); padding:6px; text-align:center; font-size:12px; line-height:1.35; width:145px; flex:none; } .qr img { width:100%; display:block; } .qr a { color:var(--acc); }
  .card.compact { display:flex; gap:16px; align-items:center; padding:12px 16px; } .card.compact h2 { margin:0 0 6px; } .card.compact p { margin:0 0 8px; }
  .qr-s { width:75px; flex:none; } .qr-s .qr { padding:3px; font-size:10px; width:75px; } .qr-s .qr a { display:none; }
  .two { display:grid; grid-template-columns:repeat(auto-fit,minmax(340px,1fr)); gap:20px; }
  .err { background:#fde3e3; color:#c0392b; padding:8px 12px; border-radius:6px; margin-bottom:14px; }
  .empty { text-align:center; padding:40px 10px; color:var(--mut); }
  .app.guest { grid-template-columns:1fr; } .app.guest aside, .app.guest header.top { display:none; }
  /* ---- page de connexion : image de fond + carte ---- */
  .app.guest { background:#0d2238 var(--lgbg) center/cover no-repeat fixed; }
  .app.guest .content { display:flex; align-items:center; justify-content:center; padding:24px 16px; }
  .login { width:100%; max-width:440px; margin:0 auto; animation:lg-in .45s ease-out both; }
  @keyframes lg-in { from { opacity:0; transform:translateY(10px); } to { opacity:1; transform:none; } }
  .login .card { background:rgba(255,255,255,.975); backdrop-filter:blur(18px); -webkit-backdrop-filter:blur(18px); border-radius:18px; padding:30px 30px 24px; margin:0 0 18px;
                 box-shadow:0 24px 60px rgba(0,0,0,.45), 0 0 0 1px rgba(255,255,255,.35) inset; }
  .lg-brand { display:flex; gap:14px; align-items:center; margin-bottom:22px; }
  .lg-brand i { font-style:normal; width:46px; height:46px; border-radius:12px; flex:none; display:grid; place-items:center; color:var(--accfg); font-size:22px;
                background:linear-gradient(135deg,var(--acc),var(--acc2)); box-shadow:0 8px 18px rgba(var(--acc-rgb),.35); }
  .login .card, .login .card input, .ap-prev .c { color:#2b3040; }   /* carte claire : indépendante de la couleur de texte des pages */
  .lg-brand b { display:block; font-size:19px; line-height:1.15; color:#2b3040; } .lg-brand small { display:block; color:#74788d; font-size:12.5px; margin-top:2px; }
  .login h2 { font-size:17px; margin:0 0 4px; } .login .err { margin-top:10px; }
  .login label.f { margin:16px 0 6px; font-weight:600; color:#4c5166; }
  .login input[type=text], .login input[type=password] { padding:11px 13px; border-radius:10px; border:1px solid #d9dde8; background:#f8f9fc; font-size:15px; transition:border-color .15s, box-shadow .15s, background .15s; }
  .login input:focus { outline:0; border-color:var(--acc); background:#fff; box-shadow:0 0 0 3px rgba(var(--acc-rgb),.18); }
  .login p { margin:0; } .login form p { margin-top:22px; }
  .login .btn.pri { border-radius:8px; font-weight:600; letter-spacing:.01em; background:linear-gradient(135deg,var(--acc),var(--accd)); box-shadow:0 10px 22px rgba(var(--acc-rgb),.35); transition:transform .12s, box-shadow .12s, filter .12s; }
  .login .btn.pri:hover { filter:brightness(1.06); transform:translateY(-1px); box-shadow:0 14px 26px rgba(var(--acc-rgb),.42); } .login .btn.pri:active { transform:none; }
  .lg-copy { position:fixed; left:0; right:0; bottom:12px; margin:0; text-align:center; color:rgba(255,255,255,.62); font-size:12px; text-shadow:0 1px 6px rgba(0,0,0,.5); pointer-events:none; z-index:1; }
  .login .lg-note { margin:20px 0 0; padding-top:14px; border-top:1px solid #e6e9f2; text-align:center; color:#74788d; font-size:13px; line-height:1.45; }
  @media (max-width:480px) { .login .card { padding:24px 20px 20px; border-radius:14px; } }
  /* appareils filaires (décor) de part et d'autre de la carte, flottement lent ; masqués sur écran étroit */
  .app.guest .content { position:relative; overflow:hidden; }
  /* posés au-dessus du tracé ECG vert du fond (situé à ~48 % de la hauteur) : le bas du dessin affleure cette ligne */
  .app.guest .content::before, .app.guest .content::after { content:""; position:absolute; --lgd:min(440px,46vh); width:var(--lgd); height:var(--lgd); top:calc(47% - var(--lgd)); background:center/contain no-repeat; pointer-events:none; opacity:.9; animation:lg-float 9s ease-in-out infinite; }
  .app.guest .content::before { left:calc(50% - 720px); background-image:url(login-deco-left.svg); }
  .app.guest .content::after { right:calc(50% - 720px); background-image:url(login-deco-right.svg); animation-delay:-4.5s; }
  @keyframes lg-float { 0%,100% { transform:translateY(0); } 50% { transform:translateY(-14px); } }
  @media (max-width:1400px) { .app.guest .content::before, .app.guest .content::after { --lgd:min(340px,40vh); } .app.guest .content::before { left:calc(50% - 590px); } .app.guest .content::after { right:calc(50% - 590px); } }
  @media (max-width:1120px) { .app.guest .content::before, .app.guest .content::after { display:none; } }
  @media (prefers-reduced-motion:reduce) { .app.guest .content::before, .app.guest .content::after, .login { animation:none; } }
  .login { position:relative; z-index:1; }
  .app.guest.nodeco .content::before, .app.guest.nodeco .content::after { display:none; }
  /* Paramétrage → Apparence */
  .ap-colors { display:grid; grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); gap:14px; } .ap-col { display:flex; gap:8px; align-items:center; }
  .ap-col input[type=color] { width:46px; height:36px; padding:2px; border:1px solid var(--line); border-radius:6px; background:var(--card); cursor:pointer; flex:none; } .ap-col input[type=text] { width:100px; font-family:ui-monospace,Menlo,Consolas,monospace; text-transform:lowercase; }
  .ap-prev { position:relative; height:210px; border-radius:var(--r); background:#0d2238 center/cover no-repeat; display:grid; place-items:center; border:1px solid var(--line); margin-bottom:12px; }
  .ap-prev .c { background:rgba(255,255,255,.975); border-radius:12px; padding:12px 16px; display:flex; gap:10px; align-items:center; box-shadow:0 12px 30px rgba(0,0,0,.4); max-width:90%; }
  .ap-prev .c i { font-style:normal; width:36px; height:36px; border-radius:10px; flex:none; display:grid; place-items:center; color:var(--accfg); font-size:18px; background:linear-gradient(135deg,var(--acc),var(--acc2)); }
  .ap-prev .c b { display:block; font-size:15px; line-height:1.15; } .ap-prev .c small { display:block; color:#74788d; font-size:12px; }
  .q-pill { padding:6px 12px; border-radius:999px; border:1px solid var(--line); font:inherit; min-width:220px; background:var(--card); color:var(--txt); }
  /* pastilles dynamiques (compteurs agrégés, sans nom) */
  .lg-pills { display:flex; flex-direction:column; align-items:center; gap:8px; margin:0 -140px 16px; min-height:30px; }
  .lg-row { display:flex; flex-wrap:wrap; justify-content:center; gap:8px; }
  @media (max-width:760px) { .lg-pills { margin:0 0 16px; } }
  .lg-pill { display:inline-flex; align-items:center; gap:7px; padding:5px 12px 5px 9px; border-radius:999px; font-size:12.5px; color:rgba(255,255,255,.85); background:rgba(10,24,40,.55); border:1px solid rgba(191,230,255,.22); backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px); box-shadow:0 4px 14px rgba(0,0,0,.25); animation:lg-in .5s ease-out both; }
  .lg-pill.p2 { animation-delay:.08s; } .lg-pill.p3 { animation-delay:.16s; } .lg-pill.p4 { animation-delay:.24s; } .lg-pill.p5 { animation-delay:.32s; }
  .lg-pill b { color:#fff; font-size:14px; } .lg-pill i { font-style:normal; width:8px; height:8px; border-radius:50%; background:#8fa3bd; flex:none; }
  .lg-pill.live i { background:#3ddc84; box-shadow:0 0 0 0 rgba(61,220,132,.6); animation:lg-pulse 1.6s ease-out infinite; }
  .lg-pill.p2 i { background:#56c8ff; } .lg-pill.p3 i { background:#f1b44c; } .lg-pill.p4 i { background:#c8b4ff; } .lg-pill.p5 i { background:#ff9ab5; }
  @keyframes lg-pulse { 0% { box-shadow:0 0 0 0 rgba(61,220,132,.6); } 100% { box-shadow:0 0 0 9px rgba(61,220,132,0); } }
  input[type=password] { width:100%; padding:8px 10px; border-radius:6px; border:1px solid var(--line); font:inherit; background:var(--card); color:var(--txt); }
  #who { display:flex; gap:8px; align-items:center; }
  @media (max-width:860px) { .app { grid-template-columns:1fr; } aside { position:fixed; left:-260px; width:250px; z-index:20; transition:left .2s; } aside.open { left:0; } .menu { display:inline-block; } }
  .obs-wrap { display:grid; grid-template-columns:minmax(0,1fr) 340px; gap:20px; align-items:start; } .obs-sim { position:sticky; top:16px; }
  @media (max-width:1100px) { .obs-wrap { grid-template-columns:1fr; } .obs-sim { position:static; } }
  .phone { background:#10141c; color:#fff; border-radius:26px; padding:14px 12px 16px; border:6px solid #2a3140; box-shadow:0 8px 28px rgba(0,0,0,.25); font-family:system-ui,sans-serif; }
  .phone h4 { margin:0 0 8px; font-size:14px; text-align:center; color:#9fb0c8; font-weight:600; letter-spacing:.04em; }
  .phone .nums { display:grid; grid-template-columns:repeat(8,1fr); gap:4px; margin-bottom:10px; } .phone .nums button { padding:9px 0; border-radius:8px; border:1px solid #3a4458; background:#1b2230; color:#fff; font-size:15px; font-weight:700; cursor:pointer; }
  .phone .nums button.on { background:#2f7df6; border-color:#2f7df6; }
  .phone .cats button { display:block; width:100%; text-align:left; margin:5px 0 0; padding:12px 14px; border-radius:12px; border:1px solid #3a4458; background:#1b2230; color:#fff; font-size:16px; cursor:pointer; } .phone .cats button.act { background:#243a63; border-color:#2f7df6; }
  .phone .acts { display:grid; grid-template-columns:1fr 1fr; gap:6px; margin:6px 0 4px; } .phone .acts button { margin:0; text-align:center; padding:14px 6px; background:#12301f; border-color:#2e7a4c; font-size:15px; }
  .phone .hint { color:#8793a8; text-align:center; font-size:14px; padding:14px 6px; } .phone .toast { margin-top:10px; padding:10px; border-radius:10px; background:#12301f; border:1px solid #2e7a4c; font-size:14px; }
  .phone .lg { margin-top:10px; font-size:12px; color:#9fb0c8; } .phone .lg div { padding:3px 0; border-top:1px solid #222a38; }
  .shead { display:flex; justify-content:space-between; gap:16px; align-items:flex-start; flex-wrap:wrap; margin-bottom:16px; } .shead h2 { font-size:20px; margin:0 0 2px; }
  .skpi { display:flex; gap:10px; flex-wrap:wrap; } .skpi span { background:var(--card); border-radius:999px; padding:5px 14px; box-shadow:0 1px 3px rgba(18,38,63,.06); font-size:13px; } .skpi b { font-size:15px; }
  .toolbar { display:flex; gap:10px; align-items:center; flex-wrap:wrap; margin-bottom:16px; } .toolbar input[type=search] { flex:1; min-width:200px; max-width:360px; padding:8px 12px; border-radius:999px; border:1px solid var(--line); font:inherit; background:var(--card); color:var(--txt); }
  .pills { display:flex; gap:6px; flex-wrap:wrap; } .pills button { font:inherit; border:1px solid var(--line); background:var(--card); border-radius:999px; padding:5px 14px; cursor:pointer; color:var(--mut); } .pills .on { background:var(--acc); border-color:var(--acc); color:var(--accfg); }
  .sgrid { display:grid; grid-template-columns:repeat(auto-fill,minmax(290px,1fr)); gap:16px; }
  .scard { background:var(--card); border-radius:var(--r); box-shadow:0 1px 3px rgba(18,38,63,.06); padding:16px 18px; cursor:pointer; border-left:4px solid var(--line); transition:box-shadow .15s, transform .15s; } .scard:hover { box-shadow:0 6px 18px rgba(18,38,63,.12); transform:translateY(-1px); }
  .scard.run { border-left-color:var(--ok); } .scard.soon { border-left-color:var(--info); } .scard h3 { font-size:16px; margin:8px 0 2px; }
  .scard .st { display:flex; gap:14px; margin:12px 0; font-size:13px; color:var(--mut); } .scard .st b { color:var(--txt); }
  .iv { background:var(--card); border-radius:var(--r); box-shadow:0 1px 3px rgba(18,38,63,.06); margin-bottom:14px; border-left:4px solid var(--line); } .iv.run { border-left-color:var(--ok); }
  .iv-h { display:flex; gap:12px; align-items:center; padding:14px 18px; cursor:pointer; flex-wrap:wrap; } .iv-h .rk { width:30px; height:30px; border-radius:50%; background:var(--acct); color:var(--acc); display:grid; place-items:center; font-weight:700; flex:none; }
  .iv-h .tt { flex:1; min-width:180px; } .iv-h .tt b { font-size:15px; } .iv-h .car { color:var(--mut); width:16px; }
  .iv-b { padding:0 18px 16px; border-top:1px solid var(--line); }
  .pass { border:1px solid var(--line); border-radius:var(--r); padding:14px; margin-top:14px; } .pass.on { border-color:#bfe9d6; background:#f6fdf9; }
  .acts { display:flex; gap:8px; flex-wrap:wrap; margin:12px 0 0; }
  .sub { margin-top:12px; padding:12px; border-radius:8px; background:var(--bg); }
  .link { background:none; border:0; color:var(--acc); cursor:pointer; padding:6px 0; font:inherit; } .link:hover { text-decoration:underline; }
  .pick-bar { display:flex; gap:8px; align-items:center; flex-wrap:wrap; } .chips.big label { min-width:46px; justify-content:center; padding:7px 12px; font-weight:600; user-select:none; } .chips label:has(input:checked) { background:var(--acct); border-color:var(--acc); color:var(--acc); }
  .casrow { display:flex; gap:14px; align-items:center; padding:10px 4px; border-bottom:1px solid var(--line); } .casrow:last-child { border-bottom:0; } .casrow .tt { flex:1; min-width:0; }
  .toast { position:fixed; right:20px; bottom:20px; background:#243049; color:#fff; padding:10px 16px; border-radius:8px; box-shadow:0 6px 20px rgba(0,0,0,.25); z-index:99; }
  .tabl { display:flex; flex-wrap:wrap; gap:6px; align-items:center; margin:0 0 10px; } .tb { display:inline-flex; gap:5px; align-items:center; border:1px solid var(--line); border-radius:8px; padding:2px 8px; white-space:nowrap; background:var(--card); font-size:13px; }
  .tb code { font-weight:700; letter-spacing:.06em; } .tb .dot { width:9px; height:9px; border-radius:50%; background:#b9bfd0; } .tb.on .dot { background:var(--ok); box-shadow:0 0 0 3px #dff6ec; } .tb.on { border-color:#bfe9d6; }
  .tb.np { border-style:dashed; opacity:.6; cursor:not-allowed; background:#f7f7fa; } .tb.np .npi { font-size:12px; line-height:1; }
  /* Appareils de la session : une fiche par exemplaire (au lieu d'un tableau) */
  .apgrid { display:grid; grid-template-columns:repeat(auto-fill,minmax(360px,1fr)); gap:14px; }
  .apc { border:1px solid var(--line); border-left:4px solid #b9bfd0; border-radius:var(--r); background:var(--card); display:flex; flex-direction:column; min-width:0; }
  .apc.ok { border-left-color:var(--ok); }
  .apc-h { display:flex; gap:10px; align-items:center; padding:10px 14px; border-bottom:1px solid var(--line); background:var(--bg); border-radius:0 var(--r) 0 0; flex-wrap:wrap; }
  .apc-h code { font-size:18px; font-weight:700; letter-spacing:.1em; }
  .apc-h .sp { margin-left:auto; }
  .apc-b { display:flex; gap:14px; padding:12px 14px; align-items:flex-start; }
  .apc-qr { flex:none; width:110px; text-align:center; font-size:12px; line-height:1.4; } .apc-qr img { width:110px; height:110px; display:block; } .apc-qr a { color:var(--acc); }
  .apc-f { display:grid; grid-template-columns:auto minmax(0,1fr); gap:7px 10px; margin:0; flex:1; min-width:0; align-items:center; font-size:13px; }
  .apc-f dt { color:var(--mut); font-size:11px; text-transform:uppercase; letter-spacing:.04em; white-space:nowrap; } .apc-f dd { margin:0; min-width:0; overflow-wrap:anywhere; }
  .apc-f dd input, .apc-f dd select { width:100%; padding:5px 8px; font-size:13px; }
  @media (max-width:480px) { .apgrid { grid-template-columns:1fr; } .apc-b { flex-direction:column; } }
  /* Journal (lot F2) */
  .jtable td { vertical-align:top; } .jtable .jt { white-space:nowrap; } .jtable .jc { font-size:13px; } .jf { display:inline-block; margin:0 8px 2px 0; } .jf i { font-style:normal; color:var(--mut); }
  .jl-error td:first-child { border-left:3px solid #c0392b; } .jl-warn td:first-child { border-left:3px solid #b27a0c; }
  .toolbar select { max-width:360px; padding:8px 12px; border-radius:999px; border:1px solid var(--line); font:inherit; background:var(--card); color:var(--txt); }
