  :root {
    --navy:#1a2744;--navy-light:#243460;--gold:#c8a951;--gold-light:#e8c97a;
    --cream:#f8f5ee;--cream-dark:#eee8d8;--red:#c0392b;--green:#1a7a4a;
    --green-light:#e8f5ee;--white:#ffffff;--text:#2c3e50;--text-light:#6b7a99;
    --border:#ddd6c4;--shadow:0 4px 24px rgba(26,39,68,.10);--shadow-sm:0 2px 8px rgba(26,39,68,.07);
    --topbar-h:76px;
  }
  *{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
  html{-webkit-text-size-adjust:100%}
  body{font-family:'DM Sans',sans-serif;background:var(--cream);color:var(--text);min-height:100vh;min-height:100dvh;overscroll-behavior-y:contain}

  /* ACCESS CODE SCREEN */
  #access-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--navy) 0%,var(--navy-light) 60%,#1e3a6e 100%)}
  .access-box{background:var(--white);border-radius:16px;padding:48px 40px;width:420px;text-align:center;box-shadow:0 24px 80px rgba(0,0,0,.3)}
  .access-icon{font-size:48px;margin-bottom:16px}
  .access-title{font-family:'Playfair Display',serif;font-size:22px;color:var(--navy);margin-bottom:8px}
  .access-subtitle{color:var(--text-light);font-size:13px;margin-bottom:28px}
  .access-input{width:100%;padding:14px 16px;border:2px solid var(--border);border-radius:10px;font-family:'DM Sans',sans-serif;font-size:15px;color:var(--text);background:var(--cream);text-align:center;letter-spacing:2px;transition:border-color .2s}
  .access-input:focus{outline:none;border-color:var(--navy)}
  .access-btn{width:100%;margin-top:16px;padding:14px;background:var(--navy);color:white;border:none;border-radius:10px;font-family:'DM Sans',sans-serif;font-size:15px;font-weight:600;cursor:pointer;transition:background .2s}
  .access-btn:hover{background:var(--navy-light)}
  .access-error{color:var(--red);font-size:13px;margin-top:12px;display:none}
  .input-password-wrap{position:relative;width:100%}
  .input-password-wrap input{width:100%;padding-right:48px}
  .toggle-password{position:absolute;right:12px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;font-size:18px;color:var(--text-light);padding:4px;line-height:1;user-select:none}

  /* LOGIN */
  #login-screen{min-height:100vh;display:none;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--navy) 0%,var(--navy-light) 60%,#1e3a6e 100%)}
  .login-box{background:var(--white);border-radius:16px;padding:48px 40px;width:420px;text-align:center;box-shadow:0 24px 80px rgba(0,0,0,.3)}
  .login-logo{font-family:'Playfair Display',serif;font-size:28px;color:var(--navy);margin-bottom:6px}
  .login-subtitle{color:var(--text-light);font-size:13px;margin-bottom:36px;letter-spacing:.5px}
  .login-label{display:block;text-align:left;font-size:12px;font-weight:600;color:var(--text-light);text-transform:uppercase;letter-spacing:1px;margin-bottom:8px}
  .login-divider{width:40px;height:3px;background:var(--gold);margin:0 auto 24px;border-radius:2px}
  .login-select{width:100%;padding:14px 16px;border:2px solid var(--border);border-radius:10px;font-family:'DM Sans',sans-serif;font-size:15px;color:var(--text);background:var(--cream);appearance:none;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%236b7a99' stroke-width='2' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 16px center;transition:border-color .2s}
  .login-select:focus{outline:none;border-color:var(--navy)}
  .login-btn{width:100%;margin-top:20px;padding:14px;background:var(--navy);color:white;border:none;border-radius:10px;font-family:'DM Sans',sans-serif;font-size:15px;font-weight:600;cursor:pointer;transition:background .2s}
  .login-btn:hover{background:var(--navy-light)}

  /* Bouton "Installer l'application" sur les ecrans acces/login */
  .auth-install{margin-top:18px;padding-top:16px;border-top:1px solid var(--cream-dark)}
  .auth-install-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:11px;background:var(--cream);color:var(--navy);border:1.5px solid var(--border);border-radius:10px;font-family:'DM Sans',sans-serif;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s}
  .auth-install-btn:hover{background:var(--cream-dark);border-color:var(--gold)}
  .auth-install-btn svg{flex-shrink:0;color:var(--gold)}

  /* HEADER */
  #app{display:none;min-height:100vh;flex-direction:column}
  header{background:var(--navy);color:white;padding:0 20px;display:flex;align-items:center;justify-content:space-between;height:44px}
  .topbar{position:sticky;top:0;z-index:100;background:var(--navy);box-shadow:0 2px 12px rgba(0,0,0,.15)}
  .header-title{font-family:'Playfair Display',serif;font-size:16px;letter-spacing:.3px}
  .header-title span{color:var(--gold-light)}
  .header-right{display:flex;align-items:center;gap:8px}
  .header-user{font-size:11px;color:rgba(255,255,255,.7)}
  .header-user strong{color:white;font-weight:600}
  .btn-header{padding:5px 10px;border-radius:6px;border:none;cursor:pointer;font-family:'DM Sans',sans-serif;font-size:11px;font-weight:500;transition:all .2s}
  .btn-new{background:var(--gold);color:var(--navy)}.btn-new:hover{background:var(--gold-light)}
  .btn-admin,.btn-aide{background:rgba(255,255,255,.12);color:white}.btn-admin:hover,.btn-aide:hover{background:rgba(255,255,255,.2)}
  .btn-logout{background:transparent;color:rgba(255,255,255,.6);font-size:11px;padding:4px 8px}.btn-logout:hover{color:white}
  .btn-notif{background:rgba(74,222,128,.15);color:#4ade80;font-size:11px;padding:4px 10px;border-radius:14px;border:1px solid rgba(74,222,128,.3)}.btn-notif:hover{background:rgba(74,222,128,.25)}
  .btn-notif.off{background:rgba(255,255,255,.08);color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.15)}

  /* Bandeau "REUNION EQUIPE" dans la barre principale (visible tant qu'une
     reunion n'est pas cloturee). Bordure rouge + fond dore = volontairement
     saillant. Cliquable -> ouvre l'outil reunion sur la bonne etape. */
  #reunion-banner{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;background:var(--gold);color:var(--navy);border:2px solid var(--red);border-radius:14px;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;text-decoration:none;cursor:pointer;transition:transform .15s,box-shadow .15s,background .15s;box-shadow:0 1px 4px rgba(0,0,0,.18);margin:0 4px}
  #reunion-banner:hover{background:var(--gold-light);transform:translateY(-1px);box-shadow:0 3px 8px rgba(0,0,0,.25)}
  #reunion-banner.urgent{animation:reunionPulse 2s ease-in-out infinite}
  @keyframes reunionPulse{0%,100%{box-shadow:0 1px 4px rgba(0,0,0,.18)}50%{box-shadow:0 0 0 4px rgba(192,57,43,.35),0 2px 6px rgba(0,0,0,.25)}}
  .reunion-banner-icon{font-size:13px;line-height:1}
  .reunion-banner-text{white-space:nowrap}

  /* Bouton kebab : cache desktop, visible mobile uniquement */
  .btn-kebab{display:none;width:36px;height:36px;min-height:36px;padding:0;align-items:center;justify-content:center;background:transparent;color:white;border-radius:6px;cursor:pointer;border:none}
  .btn-kebab:hover{background:rgba(255,255,255,.12)}
  .btn-kebab:focus-visible{outline:2px solid var(--gold);outline-offset:2px}

  /* Header menu (dropdown au clic sur kebab) */
  .header-menu{display:none;position:fixed;top:calc(var(--topbar-h, 76px) + 4px);right:12px;background:white;border-radius:12px;box-shadow:0 12px 32px rgba(0,0,0,.25);min-width:240px;padding:8px;z-index:200;border:1px solid var(--cream-dark);animation:hmIn .15s ease-out}
  .header-menu.open{display:block}
  @keyframes hmIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}
  .header-menu-item{display:flex;align-items:center;gap:12px;width:100%;padding:11px 14px;background:none;border:none;cursor:pointer;font-family:inherit;font-size:14px;color:var(--text);text-align:left;border-radius:8px;transition:background .12s;min-height:44px}
  .header-menu-item:hover{background:var(--cream)}
  .header-menu-item svg{color:var(--text-light);flex-shrink:0}
  .header-menu-danger{color:var(--red);border-top:1px solid var(--cream-dark);margin-top:4px;padding-top:11px}
  .header-menu-danger svg{color:var(--red)}
  .header-menu-user{padding:10px 14px 12px;border-bottom:1px solid var(--cream-dark);margin-bottom:4px;font-size:12px;color:var(--text-light)}
  .header-menu-user strong{display:block;color:var(--navy);font-size:14px;font-weight:600;margin-top:2px}

  /* TABS */
  .tabs{background:white;border-bottom:1px solid var(--border);padding:0 20px;display:flex;align-items:stretch;gap:0;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .tabs::-webkit-scrollbar{display:none}
  .tab-group{display:flex;align-items:stretch;gap:0;position:relative;background:var(--cream);border-radius:6px 6px 0 0;margin-top:2px;border:1px solid var(--border);border-bottom:none}
  .tab-group-label{font-size:11px;font-weight:800;color:var(--navy);text-transform:uppercase;letter-spacing:.6px;padding:8px 12px;display:flex;align-items:center;white-space:nowrap;user-select:none;text-decoration:underline;text-decoration-color:var(--gold);text-underline-offset:3px;text-decoration-thickness:2px;border-right:1px solid var(--border)}
  .tab-group-sep{width:1px;background:var(--border);margin:6px 4px}
  .tab-section-gap{width:16px;flex-shrink:0}
  .tab-main{font-size:11px;font-weight:800;padding:8px 14px;cursor:pointer;color:var(--navy);border-bottom:3px solid transparent;transition:all .2s;white-space:nowrap;user-select:none;display:flex;align-items:center;gap:5px;text-transform:uppercase;letter-spacing:.6px;text-decoration:underline;text-decoration-color:var(--gold);text-underline-offset:3px;text-decoration-thickness:2px}
  .tab-main:hover{color:var(--navy);background:var(--cream)}
  .tab-main.active{color:var(--navy);border-bottom-color:var(--gold);background:var(--cream)}
  .tab{padding:9px 12px;font-size:12px;font-weight:500;color:var(--text-light);cursor:pointer;border-bottom:3px solid transparent;transition:all .2s;white-space:nowrap}
  .tab:hover{color:var(--navy);background:rgba(200,169,81,.08)}
  .tab.active{color:var(--navy);border-bottom-color:var(--gold);font-weight:600;background:rgba(200,169,81,.08)}
  .tab-badge{display:inline-flex;align-items:center;justify-content:center;background:var(--red);color:white;border-radius:10px;font-size:10px;font-weight:700;min-width:18px;height:18px;padding:0 5px;margin-left:6px}
  .tab-badge-gold{display:inline-flex;align-items:center;justify-content:center;background:var(--gold);color:var(--navy);border-radius:10px;font-size:10px;font-weight:700;min-width:18px;height:18px;padding:0 5px;margin-left:4px}
  .tab-nouveau{background:var(--gold);color:var(--navy) !important;font-weight:700 !important;border-radius:5px;margin:4px 4px;padding:5px 12px !important;border-bottom:none !important;transition:all .2s;cursor:pointer;font-size:12px}
  .tab-nouveau:hover{background:var(--gold-light) !important}

  /* MAIN */
  main{flex:1;padding:0 20px 16px;width:100%}

  /* Sous-onglets messages (groupe pill integre dans la barre .filters) */
  .msg-subtabs{display:inline-flex;align-items:center;gap:2px;background:white;border:1px solid var(--border);border-radius:10px;padding:3px;flex-shrink:0}
  .msg-subtabs .tab{padding:6px 12px;font-size:13px;font-weight:500;color:var(--text-light);cursor:pointer;border-radius:7px;border:none;background:transparent;transition:all .15s;white-space:nowrap;display:inline-flex;align-items:center;gap:5px;line-height:1.2}
  .msg-subtabs .tab:hover{color:var(--navy);background:var(--cream)}
  .msg-subtabs .tab.active{color:white;background:var(--navy);font-weight:600}
  .msg-subtabs .tab.active .tab-badge{background:var(--gold);color:var(--navy)}

  /* Desktop : popup filtres et bouton kebab transparents - les selects restent inline */
  .msg-filters-popup{display:contents}
  .btn-filters-mobile{display:none}
  .btn-new-short{display:none}
  .btn-new-full{display:inline}

  /* Menu kebab d'actions secondaires (Contacts: PDF/CSV/Import/Historique, Memo: PDF/Historique) */
  .actions-kebab-wrap{position:relative;display:inline-flex;flex-shrink:0}
  .btn-actions-kebab{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;background:white;color:var(--text-light);border:1.5px solid var(--border);border-radius:8px;cursor:pointer;transition:all .15s}
  .btn-actions-kebab:hover{background:var(--cream);color:var(--navy);border-color:var(--navy)}
  .actions-menu{display:none;position:absolute;top:calc(100% + 6px);right:0;background:white;border:1px solid var(--cream-dark);border-radius:10px;box-shadow:0 12px 32px rgba(0,0,0,.18);min-width:200px;padding:6px;z-index:120;animation:hmIn .15s ease-out}
  .actions-menu.open{display:block}
  .actions-menu-item{display:flex;align-items:center;gap:8px;width:100%;padding:10px 14px;background:none;border:none;cursor:pointer;font-family:inherit;font-size:14px;color:var(--text);text-align:left;border-radius:7px;transition:background .12s;min-height:42px;white-space:nowrap}
  .actions-menu-item:hover{background:var(--cream)}
  .actions-menu-sep{height:1px;background:var(--cream-dark);margin:4px 6px}
  .actions-menu-item.warn{color:#c0651a}
  .actions-menu-item.danger{color:#c0392b}

  .filters{display:flex;gap:10px;flex-wrap:wrap;align-items:center;position:sticky;top:var(--topbar-h);z-index:50;background:var(--cream);padding:10px 0;margin:0 0 12px;border-bottom:1px solid var(--cream-dark)}
  .filter-input{flex:1;min-width:200px;padding:10px 14px;border:1.5px solid var(--border);border-radius:8px;font-family:'DM Sans',sans-serif;font-size:13px;background:white;color:var(--text)}
  .filter-input:focus{outline:none;border-color:var(--navy)}
  .filter-select{padding:10px 32px 10px 14px;border:1.5px solid var(--border);border-radius:8px;font-family:'DM Sans',sans-serif;font-size:13px;background:white;color:var(--text);appearance:none;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%236b7a99' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center}

  /* TABLE */
  .messages-table{background:white;border-radius:12px;overflow:hidden;box-shadow:var(--shadow-sm)}
  .table-header{display:grid;grid-template-columns:130px 130px 1fr 140px 110px 110px 80px 90px;padding:12px 20px;background:var(--navy);color:white;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.8px;gap:12px;align-items:center}
  .msg-row{display:grid;grid-template-columns:130px 130px 1fr 140px 110px 110px 80px 90px;padding:14px 20px;border-bottom:1px solid var(--cream-dark);gap:12px;align-items:center;cursor:pointer;transition:background .15s;font-size:13px}
  .msg-actions{display:flex;gap:6px;justify-content:flex-end;align-items:center}
  .msg-action-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;background:transparent;border:1px solid transparent;border-radius:8px;padding:0;cursor:pointer;color:var(--text-light);transition:background .15s ease,border-color .15s ease,color .15s ease,transform .1s ease}
  .msg-action-btn svg{display:block}
  .msg-action-btn:hover{background:#eef2fb;border-color:#d6dde9;color:var(--navy)}
  .msg-action-btn:active{transform:scale(.94)}
  .msg-action-btn:focus-visible{outline:2px solid var(--gold);outline-offset:1px}
  .btn-row-delete{color:#c0392b}
  .btn-row-delete:hover{background:#c0392b;border-color:#a83228;color:#fff}
  .msg-row:last-child{border-bottom:none}
  .msg-row:hover{background:#f0eef8}
  .msg-row.unread{background:#fff8e8;border-left:3px solid var(--gold)}
  .msg-row.unread .msg-objet{font-weight:600}

  /* Messages prives */
  .msg-row.msg-prive{border-left:4px solid #7c3aed;background:rgba(124,58,237,0.04)}
  .msg-row.msg-prive:hover{background:rgba(124,58,237,0.08)}
  .msg-prive-badge{display:inline-flex;align-items:center;gap:3px;padding:2px 8px;background:#7c3aed;color:white;border-radius:10px;font-size:10px;font-weight:600;margin-left:6px;letter-spacing:.3px}
  .msg-prive-badge-admin{background:#9b59b6}
  .msg-detail-prive-banner{background:rgba(124,58,237,0.08);border:1px solid rgba(124,58,237,0.25);border-left:4px solid #7c3aed;border-radius:8px;padding:10px 14px;margin-bottom:14px;font-size:13px;color:var(--navy);display:flex;align-items:center;gap:8px}
  /* Corps d'un message / d'une réponse (v4.120) : texte brut à marqueurs = retours à
     la ligne préservés ; message RICHE (barre partagée) = HTML, listes indentées */
  .msg-corps{white-space:pre-wrap}
  .msg-corps-riche{white-space:normal}
  .msg-corps-riche ul,.msg-corps-riche ol{margin:4px 0 4px 20px}
  .msg-corps-riche p{margin:0 0 6px}

  /* PEC multi-operateurs */
  .pec-list{background:var(--cream);border-radius:8px;padding:10px 14px;margin-bottom:10px;border-left:3px solid var(--green)}
  .pec-list-title{font-size:12px;font-weight:600;color:var(--navy);margin-bottom:6px}
  .pec-list-items{display:flex;flex-direction:column;gap:4px}
  .pec-list-item{display:flex;align-items:center;justify-content:space-between;font-size:12px;color:var(--text);padding:3px 0}
  .pec-list-item-name{font-weight:600;color:var(--navy)}
  .pec-list-item-date{color:var(--text-light);font-size:11px}
  .pec-list-item-cancel{background:transparent;border:none;color:var(--red);cursor:pointer;font-size:11px;padding:2px 6px;border-radius:4px;margin-left:8px;transition:background .15s}
  .pec-list-item-cancel:hover{background:rgba(192,57,43,0.1)}
  .pec-already-badge{display:inline-flex;align-items:center;gap:4px;padding:5px 10px;background:var(--green-light);color:var(--green);border-radius:6px;font-size:12px;font-weight:600}
  .msg-de{font-weight:600;color:var(--navy)}
  .msg-a{color:var(--text-light);font-size:12px}
  .msg-objet{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .msg-date{color:var(--text-light);font-size:12px}
  .status-badge{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:20px;font-size:11px;font-weight:600;white-space:nowrap}
  .badge-pending{background:#fef3e2;color:#b7600a}
  .badge-acknowledged{background:#e8f0fe;color:#1558b0}
  .badge-done{background:var(--green-light);color:var(--green)}
  .reply-count{display:flex;align-items:center;gap:4px;color:var(--text-light);font-size:12px}
  .empty-state{text-align:center;padding:60px 20px;color:var(--text-light)}
  .empty-state .icon{font-size:48px;margin-bottom:12px}
  .empty-state p{font-size:14px}

  /* MODAL */
  .modal-overlay{display:none;position:fixed;inset:0;background:rgba(10,20,50,.55);z-index:200;align-items:center;justify-content:center;padding:20px;backdrop-filter:blur(3px)}
  .modal-overlay.open{display:flex}
  body.modal-open{overflow:hidden}
  .modal{background:white;border-radius:16px;width:100%;max-width:640px;box-shadow:0 24px 80px rgba(0,0,0,.25);overflow:hidden;max-height:90vh;display:flex;flex-direction:column}
  .modal-header{padding:24px 28px 20px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;background:var(--cream)}
  .modal-title{font-family:'Playfair Display',serif;font-size:20px;color:var(--navy)}
  .modal-close{width:32px;height:32px;border-radius:8px;border:none;background:var(--border);cursor:pointer;font-size:16px;display:flex;align-items:center;justify-content:center;color:var(--text-light);transition:background .2s}
  .modal-close:hover{background:var(--cream-dark)}
  .modal-body{padding:24px 28px;overflow-y:auto;flex:1}
  /* Fenêtre de message agrandie (v4.105). ⚠️ `max-width` en `!important` : la
     modale de détail porte un `style="max-width:720px"` en ligne, qui gagnerait
     sinon sur la feuille de style et le bouton ⛶ n'aurait AUCUN effet visible —
     exactement le bouton mort du tableau des pièges. */
  /* ⚠️ `max-height` SEUL, jamais `height` : la préférence s'applique à TOUS les
     messages, et un « ok, noté » ouvrait alors une fenêtre de 846 px vide aux
     neuf dixièmes. La modale est en flex-column, elle s'ajuste au contenu. */
  .modal.modal-wide{max-width:min(1500px, 96vw) !important;max-height:94vh}
  /* Le double-clic du bandeau surlignait un mot du titre à chaque bascule.
     Même traitement que .memo-window-header, qui a rencontré le cas avant. */
  .modal-header{user-select:none;-webkit-user-select:none}
  .modal-footer{padding:16px 28px;border-top:1px solid var(--border);display:flex;gap:10px;justify-content:flex-end;background:var(--cream)}

  /* FORM */
  .form-group{margin-bottom:18px}
  .form-label{display:block;font-size:12px;font-weight:600;color:var(--text-light);text-transform:uppercase;letter-spacing:.8px;margin-bottom:6px}
  .form-control{width:100%;padding:12px 14px;border:1.5px solid var(--border);border-radius:8px;font-family:'DM Sans',sans-serif;font-size:14px;color:var(--text);background:white;transition:border-color .2s;resize:vertical}
  .form-control:focus{outline:none;border-color:var(--navy)}
  textarea.form-control{min-height:100px}

  /* BUTTONS */
  .btn{padding:10px 20px;border-radius:8px;border:none;cursor:pointer;font-family:'DM Sans',sans-serif;font-size:14px;font-weight:500;transition:all .2s;display:inline-flex;align-items:center;gap:6px}
  .btn-primary{background:var(--navy);color:white}.btn-primary:hover{background:var(--navy-light)}
  .btn-secondary{background:var(--cream);color:var(--text);border:1.5px solid var(--border)}.btn-secondary:hover{background:var(--cream-dark)}
  .btn-success{background:var(--green);color:white;font-size:13px;padding:8px 16px}.btn-success:hover{background:#15683e}
  .btn-warning{background:#e67e22;color:white;font-size:13px;padding:8px 16px}.btn-warning:hover{background:#ca6f1e}
  .btn-danger{background:var(--red);color:white;font-size:13px;padding:8px 16px}.btn-danger:hover{background:#a93226}
  .btn-sm{padding:6px 12px;font-size:12px;border-radius:6px}

  /* ADMIN */
  .admin-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
  .operator-card{background:var(--cream);border-radius:10px;padding:16px;display:flex;align-items:center;justify-content:space-between;gap:12px}
  .operator-card.inactive{opacity:.6}
  .operator-info{display:flex;align-items:center;gap:12px}
  .operator-avatar{width:38px;height:38px;border-radius:50%;background:var(--navy);color:white;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;flex-shrink:0}
  .operator-name{font-weight:600;font-size:14px;color:var(--navy)}
  .operator-role{font-size:11px;color:var(--text-light)}
  .operator-nc{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:2px 0 1px;min-height:20px}
  .op-nc-name{font-size:12px;color:var(--text)}
  .op-nc-edit{background:none;border:none;cursor:pointer;font-size:12px;padding:0 2px;color:var(--text-light);line-height:1}
  .op-nc-edit.op-nc-add{color:var(--navy);font-weight:600;border:1px dashed var(--border);border-radius:6px;padding:1px 8px}
  .op-nc-input{font-size:12px;padding:3px 8px;border:1px solid var(--border);border-radius:6px;width:190px;max-width:60vw}
  .operator-actions{display:flex;gap:6px;flex-wrap:wrap}
  /* Barre d'onglets Admin : rendue dans #admin-tabsbar, HORS de la zone
     défilante (collée au bandeau, le contenu ne passe jamais derrière).
     La modale admin fait 1000px : les 8 onglets tiennent sur une ligne fine
     (flex-wrap en secours sur fenêtre étroite). */
  #admin-tabsbar .admin-tabs{display:flex;flex-wrap:wrap;gap:2px;background:white;padding:6px 24px 0;border-bottom:2px solid var(--border)}
  .admin-tab{display:flex;align-items:center;gap:6px;white-space:nowrap;padding:8px 12px;font-size:13px;font-weight:500;color:var(--text-light);cursor:pointer;border-bottom:3px solid transparent;transition:all .2s;margin-bottom:-2px}
  .admin-tab:hover{color:var(--navy)}
  .admin-tab.active{color:var(--navy);border-bottom-color:var(--gold);font-weight:600}
  .admin-section{display:none}
  .admin-section.active{display:block}

  /* Admin -> Onglet "A propos" */
  .about-header{text-align:center;padding:18px 0 14px;border-bottom:1px solid var(--cream-dark);margin-bottom:16px}
  .about-app-title{font-family:'Playfair Display',serif;font-size:22px;color:var(--navy);font-weight:700}
  .about-app-subtitle{font-size:13px;color:var(--gold);font-weight:600;letter-spacing:.6px;margin-top:2px}
  .about-version-current-badge{display:inline-block;margin-top:10px;padding:4px 14px;background:var(--navy);color:white;border-radius:14px;font-size:12px}
  .about-version-current-badge strong{color:var(--gold-light);font-weight:700;letter-spacing:.4px}
  .about-meta{background:var(--cream);border-radius:8px;padding:10px 14px;margin-bottom:18px;font-size:12px;color:var(--text)}
  .about-meta-line{padding:3px 0}
  .about-meta-label{font-weight:600;color:var(--navy);margin-right:4px}
  .about-changelog-title{font-family:'Playfair Display',serif;font-size:16px;color:var(--navy);font-weight:600;margin:8px 0 12px}
  .about-changelog{display:flex;flex-direction:column;gap:14px}
  .about-version{background:white;border:1px solid var(--cream-dark);border-radius:10px;padding:14px 16px;transition:border-color .2s}
  .about-version:hover{border-color:var(--gold)}
  .about-version-current{border-left:4px solid var(--gold);background:#fffaf0}
  .about-version-header{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:6px}
  .about-version-badge{display:inline-flex;align-items:center;justify-content:center;background:var(--navy);color:white;font-weight:700;font-size:13px;padding:3px 10px;border-radius:14px;letter-spacing:.4px}
  .about-version-date{font-size:11px;color:var(--text-light);font-family:'DM Sans',sans-serif}
  .about-version-current-tag{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--gold);background:rgba(200,169,81,.12);padding:2px 8px;border-radius:10px}
  .about-version-title{font-size:14px;font-weight:600;color:var(--navy);margin-bottom:10px;letter-spacing:.2px}
  .about-version-body{display:flex;flex-direction:column;gap:10px}
  .about-section-title{font-size:12px;font-weight:600;color:var(--navy);margin-bottom:4px;letter-spacing:.2px}
  .about-section-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:3px}
  .about-section-list li{font-size:12px;color:var(--text);padding-left:16px;position:relative;line-height:1.5}
  .about-section-list li::before{content:'›';position:absolute;left:4px;top:0;color:var(--gold);font-weight:700}
  .about-section-list li code,.about-version-title code{font-family:ui-monospace,Menlo,Consolas,monospace;background:rgba(0,0,0,.06);padding:1px 5px;border-radius:4px;font-size:11px}
  .device-card{background:var(--cream);border-radius:10px;padding:14px 16px;margin-bottom:10px;display:flex;align-items:center;justify-content:space-between;gap:12px}
  .device-info{flex:1;min-width:0}
  .device-ip{font-weight:600;font-size:13px;color:var(--navy)}
  .device-ua{font-size:11px;color:var(--text-light);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .device-date{font-size:11px;color:var(--text-light)}
  .config-row{background:var(--cream);border-radius:10px;padding:16px 20px;margin-bottom:14px}
  .config-label{font-size:12px;font-weight:600;color:var(--text-light);text-transform:uppercase;letter-spacing:.8px;margin-bottom:8px}
  .config-value{display:flex;gap:10px;align-items:center}
  .config-input{flex:1;padding:10px 14px;border:1.5px solid var(--border);border-radius:8px;font-family:'DM Sans',sans-serif;font-size:14px;color:var(--text);background:white}
  .config-input:focus{outline:none;border-color:var(--navy)}

  /* MEMO WINDOWS */
  .memo-bar{display:flex;align-items:center;padding:12px 0;gap:10px;flex-wrap:wrap}
  .memo-board{display:flex;flex-wrap:wrap;gap:16px;padding:8px 0;min-height:120px}
  .memo-board.drag-over .memo-window{opacity:.85}
  .memo-window{
    background:white;border-radius:12px;box-shadow:var(--shadow-sm);border:1.5px solid var(--border);
    display:flex;flex-direction:column;overflow:hidden;position:relative;
    width:280px;height:220px;max-width:100%;
    transition:box-shadow .2s, border-color .2s;
  }
  .memo-window .memo-window-body{cursor:text;user-select:text;overflow:hidden;flex:1;min-height:0}
  .memo-window.expanded .memo-window-body{overflow:auto;-webkit-overflow-scrolling:touch}
  .memo-window:hover{box-shadow:var(--shadow);border-color:var(--gold-light)}
  .memo-window.pinned{border-color:var(--gold);background:linear-gradient(to bottom,#fffdf5,white)}
  .memo-window.dragging{opacity:.5;box-shadow:0 8px 32px rgba(26,39,68,.2);z-index:100;transform:rotate(2deg)}
  .memo-window-header{
    background:var(--navy);color:white;padding:10px 14px;display:flex;align-items:center;justify-content:space-between;
    gap:8px;flex-shrink:0;cursor:grab;user-select:none;
  }
  .memo-window-header:active{cursor:grabbing}

  /* RICH TEXT EDITOR */
  .rte-toolbar{display:flex;flex-wrap:wrap;gap:4px;padding:8px 10px;background:var(--cream);align-items:center}
  .rte-btn{width:30px;height:28px;border:1px solid var(--border);border-radius:4px;background:white;cursor:pointer;font-size:13px;font-weight:600;display:inline-flex;align-items:center;justify-content:center;color:var(--text);transition:all .15s;padding:0;font-family:'DM Sans',sans-serif}
  .rte-btn:hover{background:var(--cream-dark);border-color:var(--navy)}
  .rte-btn.active{background:var(--navy);color:white;border-color:var(--navy)}
  .rte-sep{width:1px;height:22px;background:var(--border);margin:0 4px;flex-shrink:0}
  .rte-select{padding:3px 6px;border:1px solid var(--border);border-radius:4px;font-family:'DM Sans',sans-serif;font-size:11px;background:white;cursor:pointer;height:28px;color:var(--text)}
  .rte-color{width:22px;height:22px;border-radius:4px;border:2px solid var(--border);cursor:pointer;padding:0;transition:transform .1s}
  .rte-color:hover{transform:scale(1.15);border-color:var(--navy)}
  .rte-color.active{border-color:var(--navy);box-shadow:0 0 0 2px rgba(26,39,68,.3)}
  .rte-label{font-size:10px;font-weight:600;color:var(--text-light);text-transform:uppercase;letter-spacing:.5px;margin-right:2px}
  .rte-editor{min-height:160px;padding:14px;border:1.5px solid var(--border);border-radius:0 0 8px 8px;font-family:'DM Sans',sans-serif;font-size:14px;line-height:1.6;color:var(--text);background:white;outline:none;overflow:auto;max-height:300px}
  .rte-editor:focus{border-color:var(--navy)}
  .rte-editor:empty:before{content:attr(data-placeholder);color:var(--text-light);font-style:italic}

  /* EMOJI PANEL */
  .emoji-wrap{position:relative;display:inline-flex}
  .emoji-panel{display:none;position:fixed;background:white;border:1px solid var(--border);border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,.15);padding:12px;z-index:9000;width:420px;max-height:400px;overflow-y:auto}
  .emoji-panel.open{display:block}
  .emoji-tabs{display:flex;gap:2px;margin-bottom:8px;border-bottom:1px solid var(--border);padding-bottom:6px;flex-wrap:wrap}
  .emoji-tab{padding:4px 8px;font-size:14px;cursor:pointer;border-radius:6px;transition:background .1s}
  .emoji-tab:hover,.emoji-tab.active{background:var(--cream)}
  .emoji-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:2px}
  .emoji-grid span{font-size:22px;cursor:pointer;text-align:center;padding:5px;border-radius:6px;transition:background .1s;line-height:1.2}
  .emoji-grid span:hover{background:var(--cream-dark)}

  /* RTE TABLE PICKER */
  .rte-table-wrap{position:relative;display:inline-flex}
  .rte-table-picker{display:none;position:absolute;top:100%;left:0;background:white;border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.15);padding:10px;z-index:300;min-width:auto}
  .rte-table-picker.open{display:block}
  .rte-table-grid{display:grid;grid-template-columns:repeat(10,22px);gap:2px}
  .rte-table-cell{width:22px;height:22px;border:1px solid var(--border);border-radius:2px;cursor:pointer;background:white;transition:background .08s}
  .rte-table-cell.highlight{background:var(--gold-light);border-color:var(--gold)}
  .rte-table-label{text-align:center;margin-top:6px;font-size:11px;font-weight:600;color:var(--navy);min-height:16px}
  /* v4.138.1 — menu « Tableau » (lignes, colonnes, fusion) : affiché à la place de la grille quand le curseur est dans un tableau */
  .rte-tbl-ops{display:none;width:272px;max-width:calc(100vw - 48px)}
  .rte-tbl-mode-ops .rte-tbl-ops{display:block}
  .rte-tbl-mode-ops .rte-table-grid,.rte-tbl-mode-ops .rte-table-label{display:none}
  .rte-tbl-ops-titre{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-light);margin:8px 2px 3px}
  .rte-tbl-ops-titre:first-child{margin-top:0}
  .rte-tbl-ops-grille{display:grid;grid-template-columns:1fr 1fr;gap:3px}
  .rte-tbl-op{border:1px solid var(--border);background:var(--white);border-radius:5px;padding:5px 7px;font-size:12px;line-height:1.3;text-align:left;cursor:pointer;color:var(--navy);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:inherit}
  .rte-tbl-op:hover{background:var(--cream)}
  .rte-tbl-op.danger{color:var(--red)}
  .rte-tbl-nouveau{display:block;width:100%;margin-top:8px;text-align:center;color:var(--text-light)}

  /* RTE TABLE CONTEXT MENU */
  .rte-ctx-menu{position:fixed;background:white;border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.18);z-index:999;padding:4px 0;min-width:200px}
  .rte-ctx-item{padding:8px 16px;font-size:13px;cursor:pointer;display:flex;align-items:center;gap:8px;color:var(--text);transition:background .1s}
  .rte-ctx-item:hover{background:var(--cream)}
  .rte-ctx-item.danger{color:var(--red)}
  .rte-ctx-sep{height:1px;background:var(--border);margin:4px 0}

  /* TABLES INSIDE EDITOR */
  .rte-editor table{width:100%;border-collapse:collapse;margin:8px 0;table-layout:fixed}
  .rte-editor td,.rte-editor th{border:1px solid #999;padding:6px 8px;min-height:28px;min-width:20px;vertical-align:top;font-size:13px;position:relative}
  .rte-editor td.col-resizing{border-right:2px solid var(--gold)}
  /* Resize global du tableau (coin bas-droit) : feedback visuel + petit
     repere visible en bas a droite pour signaler la poignee.
     pointer-events:none : le ::after n'intercepte pas le clic, c'est purement
     decoratif. La detection se fait via les coordonnees de la table dans
     le handler mousedown. */
  .rte-editor table{position:relative}
  .rte-editor table.table-resizing{outline:2px dashed var(--gold);outline-offset:1px}
  .rte-editor table::after{content:'';position:absolute;right:0;bottom:0;width:14px;height:14px;background:linear-gradient(135deg,transparent 50%,var(--gold) 50%);pointer-events:none;opacity:.75}
  .memo-window-title{font-family:'Playfair Display',serif;font-size:14px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1}
  .memo-window.pinned .memo-window-header{background:linear-gradient(135deg,var(--navy) 0%,#2a3f6e 100%)}
  .memo-window-pin{font-size:12px;opacity:.7;flex-shrink:0}
  .memo-window-body{padding:12px 14px;flex:1;overflow-y:auto;font-size:13px;line-height:1.5}
  .memo-window-field{margin-bottom:8px;display:flex;align-items:baseline;gap:6px}
  .memo-window-field-label{font-size:11px;font-weight:700;color:var(--navy);text-transform:uppercase;letter-spacing:.5px;white-space:nowrap;flex-shrink:0}
  .memo-window-field-value{font-size:13px;color:var(--text);word-break:break-word}
  .memo-window-contenu{margin-top:8px;padding-top:8px;border-top:1px solid var(--cream-dark);font-size:12px;color:var(--text);line-height:1.5;word-break:break-word;overflow-x:auto;-webkit-overflow-scrolling:touch}
  .memo-window-contenu table,.memo-window-body table{width:100%;border-collapse:collapse;margin:8px 0}
  .memo-window-contenu td,.memo-window-contenu th,.memo-window-body td,.memo-window-body th{border:1px solid #999;padding:4px 6px;font-size:12px;vertical-align:top}
  .memo-window-footer{
    padding:8px 14px;border-top:1px solid var(--cream-dark);display:flex;align-items:center;justify-content:space-between;
    background:var(--cream);font-size:11px;color:var(--text-light);flex-shrink:0;
  }
  .memo-actions{display:flex;gap:4px}
  .btn-memo-action{background:none;border:none;cursor:pointer;font-size:14px;padding:4px 6px;border-radius:6px;transition:background .15s;line-height:1}
  .btn-memo-action:hover{background:var(--cream-dark)}
  .memo-empty{text-align:center;padding:60px 20px;color:var(--text-light);width:100%}
  .memo-empty .icon{font-size:48px;margin-bottom:12px}
  .memo-empty p{font-size:14px}
  .memo-drop-indicator{width:4px;background:var(--gold);border-radius:4px;align-self:stretch;min-height:60px;flex-shrink:0;transition:opacity .15s}
  .memo-window.expanded{width:600px;height:auto;max-height:80vh;min-height:300px;z-index:50;box-shadow:0 8px 40px rgba(26,39,68,.18);border-color:var(--gold)}
  .memo-window.expanded .memo-window-title{white-space:normal}
  .memo-window.expanded .memo-window-body{font-size:14px}
  .memo-window.expanded .memo-window-field-label{font-size:12px}
  .memo-window.expanded .memo-window-field-value{font-size:14px}
  .memo-window.expanded .memo-window-contenu{font-size:13px}
  .memo-pj-preview{display:none;margin-top:6px}
  .memo-window.expanded .memo-pj-preview{display:block}
  .memo-window-header{cursor:grab;user-select:none}

  /* CONTACTS */
  .contacts-toolbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;padding:14px 0}
  .contacts-toolbar .filter-input{flex:1;min-width:180px;max-width:320px}
  .contacts-toolbar .btn{white-space:nowrap}
  .contact-row{background:white;border-radius:0;margin-bottom:0;box-shadow:none;border:none;border-bottom:1px solid var(--border);overflow:hidden}
  .contact-row:hover{border-color:var(--gold-light)}
  .contact-row.expanded{border-color:var(--gold);box-shadow:var(--shadow)}
  .contact-row-header{display:flex;align-items:center;justify-content:space-between;padding:3px 10px;cursor:pointer;gap:4px;user-select:none;min-height:28px}
  .contact-row-name{font-weight:700;color:var(--navy);font-size:12px;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .contact-row-chevron{font-size:10px;color:var(--text-light);flex-shrink:0}
  .contact-row-details{padding:0 12px 8px;border-top:1px solid var(--cream-dark)}
  .contact-detail-field{margin-top:10px;font-size:13px;color:var(--text)}
  .contact-detail-label{display:inline-block;font-size:11px;font-weight:700;color:var(--navy);text-transform:uppercase;letter-spacing:.5px;min-width:70px;margin-right:8px}
  /* `overflow:hidden` + ellipsis : le type est en SAISIE LIBRE (jusqu'à 60
     caractères), et la pastille est posée à 70 px de large — un libellé long
     débordait sur le nom du contact. */
  .contact-type-badge{display:inline-flex;align-items:center;padding:1px 6px;border-radius:8px;font-size:9px;font-weight:700;white-space:nowrap;flex-shrink:0;overflow:hidden;text-overflow:ellipsis}
  .contact-sub{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:6px 10px;background:var(--cream);border-radius:6px;margin-bottom:4px;font-size:12px}
  .contact-sub-sep{color:var(--border);font-size:10px}
  .contact-sub-intitule{font-size:11px;font-weight:700;color:var(--text-light);text-transform:uppercase;letter-spacing:.5px}
  /* Sous-contact épinglé sur la ligne repliée (ex: le commercial) */
  .contact-line-sub{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:600;color:var(--navy);background:var(--cream-dark);border-radius:10px;padding:1px 8px;white-space:nowrap}
  .sub-contact-row{background:var(--cream);border-radius:8px;padding:10px 12px;margin-bottom:8px;border:1px solid var(--border)}
  .csv-preview-table{width:100%;border-collapse:collapse;font-size:12px}
  .csv-preview-table th{background:var(--navy);color:white;padding:8px 10px;text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.5px}
  .csv-preview-table td{padding:6px 10px;border-bottom:1px solid var(--cream-dark);vertical-align:top}
  .csv-preview-table tr:hover td{background:var(--cream)}

  /* NOTIF */
  .notif{position:fixed;bottom:24px;right:24px;background:var(--navy);color:white;padding:14px 20px;border-radius:10px;font-size:14px;font-weight:500;box-shadow:var(--shadow);z-index:9999;transform:translateY(100px);opacity:0;transition:all .3s;max-width:300px}
  .notif.show{transform:translateY(0);opacity:1}
  .notif.success{background:var(--green)}
  .notif.error{background:var(--red)}

  /* PWA Install banner */
  .install-banner{display:none;position:fixed;bottom:24px;left:24px;background:var(--navy);color:white;padding:16px 20px;border-radius:12px;box-shadow:var(--shadow);z-index:9998;max-width:320px;font-size:13px}
  .install-banner.show{display:flex;align-items:center;gap:12px}
  .install-banner button{padding:8px 16px;border-radius:8px;border:none;cursor:pointer;font-family:'DM Sans',sans-serif;font-size:12px;font-weight:600}
  .install-banner .btn-install{background:var(--gold);color:var(--navy)}
  .install-banner .btn-dismiss{background:transparent;color:rgba(255,255,255,.6)}

  .section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
  .section-title{font-family:'Playfair Display',serif;font-size:18px;color:var(--navy)}
  .count-label{font-size:13px;color:var(--text-light)}

  .photo-preview-wrap{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
  .photo-preview-item{position:relative;display:inline-block}
  .photo-preview-item img{width:80px;height:80px;object-fit:cover;border-radius:8px;border:1.5px solid var(--border);cursor:pointer}
  .photo-preview-item .remove-photo{position:absolute;top:-6px;right:-6px;background:var(--red);color:white;border:none;border-radius:50%;width:18px;height:18px;font-size:11px;cursor:pointer;display:flex;align-items:center;justify-content:center;line-height:1}
  /* Glisser-déposer : surbrillance de la zone survolée par un fichier. */
  .pj-drop-over{outline:2.5px dashed var(--gold)!important;outline-offset:2px;background:rgba(234,164,1,0.08)!important;border-radius:8px;transition:background .12s}
  /* Pièces jointes non-images d'un message : pastilles de téléchargement. */
  .msg-files{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
  .msg-file{display:inline-flex;align-items:center;gap:8px;max-width:100%;padding:8px 12px;background:var(--cream);border:1.5px solid var(--border);border-radius:10px;text-decoration:none;color:var(--navy);font-size:13px;transition:background .15s,border-color .15s}
  .msg-file:hover{background:var(--cream-dark);border-color:var(--gold)}
  .msg-file-ic{font-size:16px;flex:none}
  .msg-file-nom{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:min(48vw,320px)}
  .msg-file-size{color:var(--text-light);font-size:11px;flex:none}
  .msg-file-dl{color:var(--text-light);flex:none}
  /* Aperçu avant envoi d'un fichier non-image. */
  .photo-preview-item.file{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;background:var(--cream);border:1.5px solid var(--border);border-radius:8px;font-size:12px;max-width:280px}
  .photo-preview-item.file .pv-nom{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}
  .photo-preview-item.file .pv-size{color:var(--text-light);font-size:11px;flex:none}
  .msg-photos{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
  .msg-photos img{max-width:200px;max-height:160px;object-fit:cover;border-radius:8px;border:1.5px solid var(--border);cursor:pointer}
  .photo-fullscreen{position:fixed;inset:0;background:rgba(0,0,0,.85);z-index:9999;display:flex;align-items:center;justify-content:center;cursor:zoom-out}
  .photo-fullscreen img{max-width:90vw;max-height:90vh;border-radius:8px;object-fit:contain}

  /* ==================== TABLET (<=992px) ==================== */
  @media(max-width:992px){
    .table-header{display:none}
    .msg-row{display:flex;flex-direction:column;gap:6px;padding:14px 16px;position:relative}
    .msg-row .msg-de{font-size:14px}
    .msg-row .msg-a{font-size:12px}
    .msg-row .msg-objet{white-space:normal;font-size:14px;line-height:1.4}
    .msg-row .msg-date{font-size:11px;color:var(--text-light)}
    .msg-row .col-hidden{display:none}
    .msg-row.unread{border-left:4px solid var(--gold);padding-left:14px}
    .msg-row .msg-actions{position:absolute;top:8px;right:8px;background:rgba(255,255,255,0.92);border:1px solid var(--cream-dark);border-radius:8px;padding:2px;box-shadow:0 1px 2px rgba(0,0,0,0.04);gap:2px}
    .msg-row .msg-action-btn{width:28px;height:28px}
    .msg-row-top{display:flex;justify-content:space-between;align-items:center}
    .msg-row-status{display:flex;gap:6px;align-items:center;margin-top:4px}
    main{padding:20px 16px}
    header{padding:0 16px}
    .tabs{padding:0 16px}
    .admin-grid{grid-template-columns:1fr}
    .header-user{display:none}
    .access-box,.login-box{width:90%;max-width:420px;padding:32px 24px}
    .header-title{font-size:16px}
    .btn-header{padding:6px 10px;font-size:12px}
    .tab{padding:12px 12px;font-size:12px;flex-shrink:0}
    .tab-group-label{font-size:10px;padding:10px 10px}
    .tab-main{font-size:10px;padding:10px 12px;flex-shrink:0}
    .tab-section-gap{width:12px;flex-shrink:0}
    .detail-meta-grid{grid-template-columns:1fr 1fr !important}
    .detail-actions-wrap{flex-wrap:wrap}
    .detail-actions-wrap button{flex:1;min-width:100px;font-size:13px !important;padding:10px 12px !important}
    .memo-window{width:calc(50% - 12px)}
  }

  /* ==================== MOBILE (<=768px) ==================== */
  @media(max-width:768px){
    /* Header compact : titre + bouton kebab uniquement (les actions passent dans le menu) */
    header{height:52px;flex-direction:row;padding:0 12px;gap:8px;align-items:center;justify-content:space-between}
    .header-title{font-size:14px;text-align:left;flex:1;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
    .header-right{justify-content:flex-end;flex-wrap:nowrap;gap:4px}
    .header-user, #sync-indicator{display:none !important}
    .btn-header:not(.btn-kebab){display:none}
    /* Le bandeau reunion reste visible meme en mobile (action critique).
       On le compacte pour gagner de la place. */
    #reunion-banner{padding:4px 8px;font-size:10px;border-width:1.5px;letter-spacing:.3px}
    .reunion-banner-text{display:none}
    #reunion-banner .reunion-banner-icon{font-size:15px}
    .btn-kebab{display:inline-flex}

    /* Onglets principaux : sur UNE seule ligne en mobile, compactes */
    .tabs{padding:0 6px;flex-wrap:nowrap !important;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
    .tabs::-webkit-scrollbar{display:none}
    .tab-main{font-size:11px;padding:10px 8px;letter-spacing:.3px;flex-shrink:0}
    .tab-section-gap{width:4px;flex-shrink:0}
    /* Sub-tabs messages : 2eme ligne, prend toute la largeur, scroll horizontal */
    .msg-subtabs{order:50;display:flex;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;flex:0 0 100%;min-width:0;width:100%}
    .msg-subtabs::-webkit-scrollbar{display:none}
    .msg-subtabs .tab{padding:7px 11px;font-size:12px;flex-shrink:0}

    main{padding:14px 10px}
    .section-header{margin-bottom:8px}
    .section-title{font-size:16px}

    .memo-bar{gap:6px}
    .memo-bar .btn{font-size:12px;padding:8px 12px;min-height:36px}
    .memo-bar .filter-input{min-width:0;width:100%;max-width:100%;font-size:13px;order:10}
    .memo-bar .filter-select{width:auto;font-size:12px;order:11}
    .memo-window{width:100%;height:200px}
    .memo-board{gap:10px}

    /* Barre filtres compacte : recherche + bouton + kebab sur 1 ligne, sub-tabs 2e ligne, popup 3e */
    .filters{flex-direction:row;flex-wrap:wrap;align-items:center;gap:6px;padding:8px 0}
    .filters .filter-input{flex:1;min-width:0;width:auto;max-width:none !important;font-size:14px;padding:10px 12px;order:1}
    .filters .btn-msg-new,.filters .btn-new-compact{width:auto !important;flex-shrink:0;padding:10px 14px;font-size:13px;min-height:42px;min-width:42px;order:2}
    .actions-kebab-wrap{order:3}
    .btn-actions-kebab{width:42px;height:42px}
    .btn-filters-mobile{display:inline-flex;align-items:center;justify-content:center;width:42px;height:42px;padding:0;flex-shrink:0;background:white;color:var(--text-light);border:1.5px solid var(--border);border-radius:8px;cursor:pointer;order:3}
    .btn-filters-mobile:hover{background:var(--cream);color:var(--navy)}
    .btn-filters-mobile.has-active{border-color:var(--navy);color:var(--navy);background:var(--cream)}
    /* Popup filtres messages : ligne complete repliable */
    .msg-filters-popup{order:60;display:none;flex-basis:100%;flex-direction:column;gap:8px;background:white;padding:12px;border-radius:10px;border:1px solid var(--cream-dark)}
    .msg-filters-popup.open{display:flex}
    .msg-filters-popup .filter-select{width:100% !important;font-size:14px;padding:12px 14px}
    /* Contacts/Memo : le filtre type passe en 2eme ligne, pleine largeur */
    .filters .filter-select:not(#filter-status):not(#filter-user){order:40;flex-basis:100%;width:100% !important;max-width:none;font-size:14px;padding:12px 14px}
    /* Le menu kebab d'actions s'ouvre en panneau pleine largeur sur mobile */
    .actions-menu{right:0;left:auto;min-width:220px;max-width:calc(100vw - 32px)}
    /* v4.135 — le ⋮ d'un en-tête d'outil se range au bout de sa ligne : son menu (ancré à droite)
       ne déborde plus à gauche de l'écran quand le bouton tombe au milieu de la ligne. */
    .av-header .actions-kebab-wrap{margin-left:auto}

    .messages-table{border-radius:10px}
    .table-header{display:none}
    .msg-row{display:block;padding:12px 14px;border-bottom:1px solid var(--cream-dark);position:relative}
    .msg-row.unread{background:#fff8e8;border-left:4px solid var(--gold);padding-left:10px}
    .msg-row .col-hidden{display:none}
    .msg-row .msg-de{display:inline;font-size:13px;font-weight:700;color:var(--navy)}
    .msg-row .msg-a{display:inline;font-size:12px;color:var(--text-light)}
    .msg-row .msg-a::before{content:" → "}
    .msg-row .msg-objet{display:block;margin-top:4px;font-size:13px;white-space:normal;line-height:1.4;color:var(--text)}
    .msg-row .msg-date{display:block;margin-top:4px;font-size:11px;color:var(--text-light)}
    .msg-row .msg-date .status-badge{display:inline-flex !important;margin-left:8px}

    .modal-overlay{padding:0;align-items:stretch}
    .modal{border-radius:0;max-height:100vh;height:100vh;max-width:100%}
    .modal-header{padding:12px 16px;position:sticky;top:0;z-index:10}
    .modal-title{font-size:16px}
    .modal-body{padding:14px 16px}
    .modal-footer{padding:10px 16px;position:sticky;bottom:0;z-index:10}
    .modal-close{width:36px;height:36px;font-size:18px}
    /* La modale est déjà en plein écran sur téléphone : un bouton « agrandir »
       n'y ferait rien de visible, donc il passerait pour cassé. */
    #detail-max{display:none}

    .detail-meta-grid{grid-template-columns:1fr !important}
    .detail-actions-wrap{display:grid !important;grid-template-columns:1fr 1fr;gap:6px !important}
    .detail-actions-wrap button{font-size:12px !important;padding:8px 6px !important;justify-content:center;white-space:nowrap}
    .reply-card{padding:10px !important}

    header{padding-top:env(safe-area-inset-top, 0)}
    .modal-header{padding-top:calc(12px + env(safe-area-inset-top, 0))}

    .btn{padding:10px 16px;font-size:13px;min-height:40px}
    .btn-sm{padding:6px 12px;font-size:11px;min-height:36px}
    .form-control{font-size:16px;padding:12px}
    .form-label{font-size:11px}
    select.form-control{font-size:16px}
    .login-select{font-size:16px}

    #admin-tabsbar .admin-tabs{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding:6px 16px 0}
    .admin-tabs::-webkit-scrollbar{display:none}
    .admin-tab{font-size:12px;padding:8px 12px;flex-shrink:0;white-space:nowrap}
    .operator-card{flex-direction:column;align-items:flex-start;gap:8px}
    .operator-actions{width:100%;display:flex;gap:6px}
    .operator-actions .btn{flex:1;justify-content:center}
    .config-value{flex-direction:column;gap:8px}
    .config-input{width:100%}
    .device-card{flex-direction:column;align-items:flex-start;gap:8px}
    .device-card .btn{width:100%;justify-content:center}
    .msg-photos img{max-width:150px;max-height:120px}
    .photo-preview-item img{width:64px;height:64px}
    .contacts-toolbar{flex-direction:column;gap:8px}
    .contacts-toolbar .filter-input{max-width:100% !important;width:100%}
    .contacts-toolbar .btn{width:100%;justify-content:center}
    .contact-row-header{padding:5px 10px}
    .contact-row-name{font-size:12px}
    .contact-sub{flex-direction:column;align-items:flex-start;gap:4px}
    .contact-sub-sep{display:none}
    .notif{left:10px;right:10px;bottom:12px;max-width:none;text-align:center}
    .install-banner{left:10px;right:10px;bottom:12px;max-width:none;flex-direction:column;text-align:center;gap:8px}
    .access-box,.login-box{width:92%;padding:24px 18px}
    .access-icon{font-size:36px}
    .access-title{font-size:18px}
    .login-logo{font-size:22px}
    .login-logo small{font-size:13px !important}
    .access-input{font-size:16px;padding:14px}
    .access-btn,.login-btn{padding:14px;font-size:15px}
    .rte-toolbar{gap:3px;padding:6px 8px !important}
    /* v4.137.2 : la barre des memos prend toute la largeur de l'en-tete (marge
       negative = padding de l'en-tete, 16px ici et non 28px) : elle debordait de
       12px a gauche et rognait le premier bouton de chaque ligne. */
    #rte-toolbar{margin:0 -16px !important;padding:6px 16px !important}
    .rte-btn{width:26px;height:24px;font-size:11px}
    .rte-select{font-size:10px;height:24px;padding:2px 4px}
    .rte-color{width:18px;height:18px}
    .rte-sep{height:18px;margin:0 2px}
    .rte-label{font-size:9px}
  }

  /* ==================== SMALL PHONE (<=480px) ==================== */
  @media(max-width:480px){
    .header-title{font-size:13px}
    .header-right{gap:2px}
    .btn-kebab{width:40px;height:40px;min-height:40px}
    /* Touch targets : minimum 44px sur les tabs */
    .tab{padding:13px 12px;font-size:12px;min-height:44px;display:inline-flex;align-items:center}
    .tab-nouveau{padding:8px 14px !important;font-size:12px !important;min-height:36px}
    .tab-main{font-size:10px;padding:11px 6px;letter-spacing:.2px;min-height:44px;display:inline-flex;align-items:center}
    .tab-section-gap{width:2px}
    /* Boutons "+ Nouveau ..." : compacts "+" sur tres petit ecran (messages, contacts, memo) */
    .filters .btn-msg-new,.filters .btn-new-compact{width:42px !important;padding:0;min-width:42px;justify-content:center;gap:0}
    .btn-new-full{display:none}
    .btn-new-short{display:inline;font-size:22px;font-weight:700;line-height:1}
    .memo-bar .btn{font-size:12px;padding:10px 14px;min-height:40px}
    .memo-window{height:180px}
    main{padding:10px 8px}
  }

  /* ==================== VERY SMALL (<=380px) ==================== */
  @media(max-width:380px){
    .header-title{font-size:12px}
    .tab{padding:12px 10px;font-size:11px;min-height:44px}
    .tab-main{font-size:10px;padding:12px 10px;min-height:44px}
    .tab-group-label{font-size:9px;padding:12px 8px}
    .detail-actions-wrap{grid-template-columns:1fr !important}
    .msg-row .msg-objet{font-size:13px}
  }

  /* ── Onglet OUTILS ───────────────────────────────────── */
  .outils-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:14px}
  .outils-hint{grid-column:1/-1;font-size:12px;color:var(--text-light);background:var(--cream);border-radius:8px;padding:8px 12px;margin-bottom:4px}
  .outil-card.dragging{opacity:.45;border-color:var(--gold);box-shadow:0 8px 24px rgba(26,39,68,.2);transform:rotate(1deg)}
  .outil-card.drop-target{border-color:var(--gold);background:var(--cream);box-shadow:0 0 0 2px var(--gold) inset}
  .outil-card{display:flex;gap:14px;align-items:center;background:white;border:1px solid var(--border);border-radius:12px;padding:18px;cursor:pointer;transition:box-shadow .15s,transform .15s}
  .outil-card:hover{box-shadow:0 4px 14px rgba(26,39,68,.12);transform:translateY(-1px)}
  .outil-card-icon{font-size:30px;flex-shrink:0}
  .outil-card-title{font-weight:600;color:var(--navy);font-size:15px}
  .outil-card-desc{font-size:12px;color:var(--text-light);margin-top:2px;line-height:1.4}
  .outil-card-soon{opacity:.55;cursor:default}
  .outil-card-soon:hover{box-shadow:none;transform:none}

  /* ── Outil : clôture de caisse ── */
  .caisse-wrap{max-width:1020px}
  .caisse-header{display:flex;align-items:center;gap:14px;margin-bottom:16px;flex-wrap:wrap}
  .caisse-title{font-family:'Playfair Display',serif;font-size:20px;color:var(--navy);flex:1}
  .caisse-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
  /* >= 1024px : on ajoute une 3e colonne pour la calculatrice (panneau a
     droite de l'etape 2 / notes / etape 3 / cloturer). Largeur fixe 280px
     pour rester lisible. Les 2 premieres colonnes utilisent minmax(0,1fr)
     pour eviter l'overflow horizontal. */
  @media(min-width:1024px){
    .caisse-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr) 280px}
  }
  /* Panneau calculatrice : visible sur PC seulement. Sticky en haut pour
     rester accessible pendant le scroll. */
  .caisse-calc{display:none;background:white;border:1px solid var(--border);border-radius:12px;padding:14px;align-self:start;position:sticky;top:calc(var(--topbar-h, 76px) + 12px)}
  @media(min-width:1024px){.caisse-calc{display:block}}
  .calc-screen{background:#f6f1e0;border-radius:8px;padding:10px 12px;margin-bottom:12px;text-align:right;font-family:'Roboto Mono',Menlo,Consolas,monospace}
  .calc-expr{font-size:12px;color:var(--text-light);min-height:14px;margin-bottom:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .calc-display{font-size:28px;font-weight:600;color:var(--navy);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.1}
  .calc-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
  .calc-btn{padding:12px 0;border:1px solid var(--border);background:white;border-radius:8px;font-size:16px;font-weight:600;color:var(--navy);cursor:pointer;transition:background .1s,transform .05s;font-family:inherit;-webkit-user-select:none;user-select:none}
  .calc-btn:hover{background:var(--cream)}
  .calc-btn:active,.calc-btn.flash{transform:scale(.95);background:var(--cream-dark)}
  .calc-btn.calc-fn{background:var(--cream);color:var(--text-light);font-size:15px}
  .calc-btn.calc-fn:hover{background:var(--cream-dark)}
  .calc-btn.calc-op{background:var(--navy);color:white;border-color:var(--navy);font-size:18px}
  .calc-btn.calc-op:hover{background:var(--navy-light)}
  .calc-btn.calc-eq{background:var(--gold);color:var(--navy);border-color:var(--gold);font-size:18px}
  .calc-btn.calc-eq:hover{background:var(--gold-light)}
  .calc-hint{font-size:10px;color:var(--text-light);margin-top:10px;text-align:center;line-height:1.4}
  .caisse-panel{background:white;border:1px solid var(--border);border-radius:12px;padding:16px}
  .caisse-panel-title{font-weight:600;color:var(--navy);margin-bottom:10px;font-size:14px}
  .caisse-step{display:flex;align-items:center;gap:9px;font-weight:700;color:var(--navy);font-size:15px;margin:0 0 12px}
  .caisse-step .num{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;background:var(--navy);color:#fff;font-size:14px;font-weight:700;flex-shrink:0}
  .caisse-step-sub{font-weight:400;font-size:12px;color:var(--text-light);margin-left:2px}
  .caisse-table{width:100%;border-collapse:collapse}
  .caisse-table th{font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--text-light);text-align:left;padding:4px 8px}
  .caisse-table td{padding:4px 8px;border-bottom:1px solid var(--cream-dark);font-size:13px}
  .caisse-qty{width:80px;padding:8px;border:1.5px solid var(--border);border-radius:6px;font-size:14px;text-align:right}
  .caisse-qty:focus{border-color:var(--navy);outline:none}
  .caisse-line-total{text-align:right;white-space:nowrap;color:var(--navy);font-weight:500}
  .caisse-field{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
  .caisse-field label{font-size:13px;color:var(--text)}
  .caisse-field input{width:120px;text-align:right;padding:8px;border:1.5px solid var(--border);border-radius:6px;font-size:14px}
  .caisse-field input:focus{border-color:var(--navy);outline:none}
  .caisse-totaux{display:flex;flex-direction:column;gap:8px;font-size:13px;border-top:1px solid var(--cream-dark);margin-top:12px;padding-top:12px}
  .caisse-total-row{display:flex;justify-content:space-between;align-items:baseline;gap:10px}
  .caisse-total-row > :first-child{min-width:0;overflow-wrap:anywhere}
  .caisse-total-row > :last-child{white-space:nowrap;flex-shrink:0;text-align:right}
  .caisse-total-row strong{font-size:16px;color:var(--navy)}
  .caisse-ecart-ok{color:var(--green)}
  .caisse-ecart-ko{color:var(--red)}
  strong.caisse-ecart-ok{color:var(--green)}
  strong.caisse-ecart-ko{color:var(--red)}
  .caisse-hist-table{width:100%;border-collapse:collapse;font-size:13px}
  .caisse-hist-table th{font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--text-light);text-align:left;padding:6px 8px;border-bottom:1px solid var(--border)}
  .caisse-hist-table td{padding:8px;border-bottom:1px solid var(--cream-dark)}
  .caisse-hist-table tbody tr{cursor:pointer}
  .caisse-hist-table tbody tr:hover{background:var(--cream)}
  @media(max-width:768px){
    .caisse-grid{grid-template-columns:1fr}
    .caisse-header{gap:8px}
  }

  /* ── Outil "Faire la monnaie" ── */
  /* Bandeau total : collé en BAS de l'écran, sur une seule ligne. */
  .mn-total-bar{position:sticky;bottom:0;z-index:20;display:flex;align-items:baseline;gap:14px;flex-wrap:nowrap;background:linear-gradient(135deg,var(--navy),#24365f);color:#fff;border-radius:12px;padding:11px 20px;margin:14px 0 4px;box-shadow:0 -4px 18px rgba(0,0,0,.20)}
  .mn-total-label{font-size:12px;text-transform:uppercase;letter-spacing:.6px;opacity:.85;white-space:nowrap}
  .mn-total-amount{font-family:'Playfair Display',serif;font-size:26px;font-weight:800;color:var(--gold-light);line-height:1;white-space:nowrap}
  .mn-total-meta{font-size:13px;opacity:.9;white-space:nowrap;margin-left:auto}
  .mn-flash{animation:mnFlash .5s ease-out}
  @keyframes mnFlash{0%{box-shadow:0 0 0 3px var(--gold)}100%{box-shadow:0 -4px 18px rgba(0,0,0,.20)}}
  .mn-intro{font-size:13px;color:var(--text-light);margin:0 0 10px}
  .mn-edit-badge{background:#b8860b;color:#fff;font-size:11px;font-weight:600;padding:3px 10px;border-radius:12px;white-space:nowrap}
  /* Lignes tassées pour l'ergonomie */
  .mn-table th{padding:6px 8px}
  .mn-table td{vertical-align:middle;padding:4px 8px}
  .mn-denom{font-weight:700;color:var(--navy);white-space:nowrap;font-size:15px;line-height:1.2}
  .mn-unit-sub{display:block;font-size:11px;color:var(--text-light);font-weight:400}
  .mn-stepper{display:inline-flex;align-items:center;gap:5px}
  .mn-step{width:34px;height:34px;border:1.5px solid var(--border);background:var(--cream);border-radius:8px;font-size:18px;font-weight:700;color:var(--navy);cursor:pointer;line-height:1;flex-shrink:0}
  .mn-step:hover{background:var(--cream-dark);border-color:var(--gold)}
  .mn-stepper .mn-qty{width:56px;text-align:center;padding:6px 4px;border:1.5px solid var(--border);border-radius:8px;font-size:16px;font-family:inherit;color:var(--text)}
  .mn-stepper .mn-qty:focus{outline:none;border-color:var(--navy)}
  .mn-chips{display:flex;gap:4px;margin-top:3px}
  .mn-chip{padding:2px 8px;border:1px solid var(--border);background:#fff;border-radius:12px;font-size:12px;color:var(--navy);cursor:pointer}
  .mn-chip:hover{background:var(--cream);border-color:var(--gold)}
  .mn-line-total{text-align:right;font-weight:700;color:var(--navy);white-space:nowrap}
  .mn-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
  @media(max-width:560px){
    .mn-total-bar{gap:10px}
    .mn-total-amount{font-size:21px}
    .mn-total-label{font-size:11px}
    .mn-total-meta{font-size:12px}
    .mn-actions .btn{flex:1 1 auto;justify-content:center}
  }

  /* ── Destinataires multiples (nouveau message) ── */
  .dest-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:6px;max-height:200px;overflow-y:auto;border:1.5px solid var(--border);border-radius:8px;padding:10px;background:white}
  .dest-item{display:flex;align-items:center;gap:8px;font-size:13px;cursor:pointer;padding:5px 8px;border-radius:6px;min-height:32px}
  .dest-item:hover{background:var(--cream)}
  .dest-item input{width:16px;height:16px;cursor:pointer;accent-color:var(--navy);flex-shrink:0}
  .dest-tous{grid-column:1/-1;font-weight:600;color:var(--navy);border-bottom:1px solid var(--cream-dark);border-radius:6px 6px 0 0;padding-bottom:8px}
  .dest-item-disabled{opacity:.45;cursor:not-allowed}

  /* ── Caisse : tableau comparatif compté / attendu / delta ── */
  .caisse-cmp-table{width:100%;border-collapse:collapse;margin-top:6px;table-layout:fixed}
  .caisse-cmp-table th{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--text-light);text-align:left;padding:4px 4px;overflow-wrap:anywhere}
  .caisse-cmp-table td{padding:6px 4px;border-bottom:1px solid var(--cream-dark);font-size:13px;overflow-wrap:anywhere}
  .caisse-cmp-table th:nth-child(2),.caisse-cmp-table td:nth-child(2),.caisse-cmp-table th:nth-child(3),.caisse-cmp-table td:nth-child(3){width:78px}
  .caisse-cmp-table th:nth-child(4),.caisse-cmp-table td:nth-child(4){width:66px}
  .caisse-cmp-table input{width:100%;box-sizing:border-box;min-width:0;text-align:right;padding:8px 6px;border:1.5px solid var(--border);border-radius:6px;font-size:14px}
  .caisse-cmp-table input:focus{border-color:var(--navy);outline:none}
  .caisse-cmp-table td:nth-child(2),.caisse-cmp-table td:nth-child(3),.caisse-cmp-table td:nth-child(4){text-align:right}
  .caisse-cmp-val{font-weight:600;color:var(--navy);white-space:nowrap}
  .caisse-cmp-delta{font-weight:700;white-space:nowrap}
  .caisse-cmp-note{font-size:10px;color:var(--text-light)}
  @media(max-width:480px){
    .caisse-cmp-table input{padding:6px 4px;font-size:13px}
    .caisse-cmp-table td{padding:4px 3px}
    .caisse-cmp-table th:nth-child(2),.caisse-cmp-table td:nth-child(2),.caisse-cmp-table th:nth-child(3),.caisse-cmp-table td:nth-child(3){width:66px}
    .caisse-cmp-table th:nth-child(4),.caisse-cmp-table td:nth-child(4){width:58px}
  }

  /* ── Caisse : remise du fond ── */
  .remise-ok{color:var(--green)}
  .remise-out{color:var(--red)}
  .remise-in{color:#e67e22}
  .remise-ok td,.remise-out td,.remise-in td{color:inherit}
  .remise-sug{font-size:11px;color:var(--text-light);font-weight:400}
  .remise-pieces{background:var(--cream);border-radius:8px;padding:10px 14px;font-size:13px;margin-bottom:12px}
  .remise-recap{background:var(--green-light);border-radius:8px;padding:10px 14px;font-size:13px;color:var(--navy)}

  /* Mobile : ancien comportement (tabs sur 2 lignes) remplace par la regle
     plus haut qui force nowrap + scroll horizontal. Le bloc reste vide
     volontairement pour preserver l'historique des commits. */

  /* ── Module Avoirs fournisseurs ── */
  .av-header{display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap}
  .av-dash{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:12px;margin-bottom:14px}
  .av-dash-card{background:white;border:1px solid var(--border);border-radius:12px;padding:14px 16px}
  .av-dash-label{font-size:10px;text-transform:uppercase;letter-spacing:.6px;color:var(--text-light);font-weight:700;margin-bottom:4px}
  .av-dash-value{font-size:20px;font-weight:700;color:var(--navy)}
  .av-dash-sub{font-size:11px;color:var(--text-light);margin-top:2px}
  .av-dash-delais{font-size:11px;line-height:1.5;color:var(--text)}
  .av-st{display:inline-block;padding:3px 10px;border-radius:12px;font-size:11px;font-weight:700;white-space:nowrap}
  .av-st-encours{background:#fef3e2;color:#b7600a}
  .av-st-pec{background:#e8f0fe;color:#1558b0}
  .av-st-valide{background:#e8f5ee;color:#1a7a4a}
  .av-st-refuse{background:#fde8e8;color:#c0392b}
  .av-alerte{color:var(--red);font-size:14px}
  .av-table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:8px;background:white}
  .av-table{width:100%;border-collapse:collapse;font-size:13px}
  .av-table th{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--text-light);text-align:left;padding:8px;border-bottom:1.5px solid var(--border);white-space:nowrap}
  .av-table td{padding:8px;border-bottom:1px solid var(--cream-dark)}
  .av-table tbody tr{cursor:pointer}
  .av-table tbody tr:hover{background:var(--cream)}
  .av-table-prods tbody tr{cursor:default}
  .av-table-prods tbody tr:hover{background:none}
  .av-th-sort{cursor:pointer;user-select:none}
  .av-th-sort:hover{color:var(--navy)}
  .av-p-row{display:grid;grid-template-columns:3fr 130px 64px 90px 80px 36px;gap:6px;align-items:center;margin-bottom:6px}
  .av-p-row .form-control{padding:8px 10px;font-size:13px}
  .av-p-total{text-align:right;font-size:12px;font-weight:600;color:var(--navy);white-space:nowrap}
  .av-detail-top{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
  .av-detail-type{font-size:13px;font-weight:600;color:var(--navy)}
  .av-meta-grid{background:var(--cream);border-radius:10px;padding:14px 16px;margin-bottom:12px;display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;font-size:13px}
  .av-meta-label{font-size:10px;font-weight:700;color:var(--text-light);text-transform:uppercase;letter-spacing:.6px;margin-bottom:2px}
  .av-avoir-box{background:#e8f5ee;border-radius:8px;padding:10px 14px;font-size:13px;margin-bottom:10px}
  .av-refus-box{background:#fde8e8;border-radius:8px;padding:10px 14px;font-size:13px;margin-bottom:10px;color:#c0392b}
  .av-actions-row{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px}
  .av-actions-row .btn{min-height:38px}
  .av-btn-pec{background:#1558b0;color:white;border:none}
  .av-btn-valide{background:#1a7a4a;color:white;border:none}
  .av-btn-refuse{background:#c0392b;color:white;border:none}
  .av-inline-panel{background:var(--cream);border:1px solid var(--border);border-radius:8px;padding:10px 14px;margin-bottom:10px}
  .av-inline-title{font-size:12px;font-weight:700;color:var(--navy);margin-bottom:8px}
  .av-inline-fields{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
  .av-inline-fields .form-control{flex:1;min-width:140px;padding:8px 10px;font-size:13px}
  .av-section-title{font-weight:700;color:var(--navy);font-size:14px;margin:16px 0 8px}
  .av-pieces-grid{display:flex;gap:10px;flex-wrap:wrap}
  .av-piece{width:130px;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:white}
  .av-piece img{width:100%;height:90px;object-fit:cover;cursor:pointer;display:block}
  .av-piece-pdf{display:flex;align-items:center;justify-content:center;height:90px;font-size:34px;text-decoration:none;background:var(--cream)}
  .av-piece-meta{font-size:10px;padding:5px 7px;color:var(--text);line-height:1.4}
  .av-piece-meta span{color:var(--text-light)}
  .av-histo{border-left:2px solid var(--cream-dark);padding-left:14px}
  .av-histo-item{padding:8px 0;border-bottom:1px solid var(--cream-dark);font-size:13px}
  .av-histo-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:3px}
  .av-histo-meta{font-size:11px;color:var(--text-light);margin-left:auto;white-space:nowrap}
  .av-histo-diff{margin:2px 0;padding:3px 8px;background:var(--cream);border-radius:4px;font-size:12px}
  .av-diff-avant{text-decoration:line-through;color:var(--red)}
  .av-diff-apres{color:var(--green)}
  .av-corbeille-item{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--cream-dark);font-size:13px;flex-wrap:wrap}
  .av-contact-badge{display:inline-flex;align-items:center;background:#fef3e2;color:#b7600a;border-radius:12px;padding:3px 10px;font-size:10px;font-weight:700;cursor:pointer;white-space:nowrap}
  .av-contact-badge:hover{background:#fbe4c4}
  @media(max-width:768px){
    .av-p-row{grid-template-columns:1fr 1fr;grid-auto-rows:auto}
    .av-p-row .av-p-designation{grid-column:1/-1}
    .av-grid-2{grid-template-columns:1fr !important}
    .av-col-hide{display:none}
    .av-actions-row .btn{flex:1;min-height:44px}
  }

  /* ─── Module Reunions d'equipe ─── */
  .re-wrap{max-width:1100px}
  /* Bouton genere par formatMsgText quand le contenu d'un message contient
     [REUNION:N] (cas typique : message automatique de cloture). Ouvre la
     reunion en un clic. */
  .re-msg-link{display:inline-flex;align-items:center;gap:6px;padding:9px 16px;background:var(--gold);color:var(--navy);border:2px solid var(--gold);border-radius:8px;font-weight:700;font-size:13px;text-decoration:none;margin:8px 0;transition:background .15s,transform .1s;cursor:pointer}
  .re-msg-link:hover{background:var(--gold-light);transform:translateY(-1px)}
  .re-msg-link:active{transform:translateY(0)}
  /* Le menu emoji s'ouvre juste sous le bouton emoji (parent .re-emoji-wrap
     en position:relative). display:flex applique uniquement en .open pour ne
     pas occuper d'espace inutilement, le inline-style display:none l'eteint
     au chargement. */
  .re-emoji-mini{position:absolute;top:calc(100% + 4px);left:0;background:white;border:1px solid var(--cream-dark);border-radius:8px;box-shadow:0 6px 18px rgba(0,0,0,.15);padding:6px;z-index:200;flex-wrap:wrap;gap:2px;width:260px;max-width:90vw}
  .re-emoji-mini span{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;font-size:18px;cursor:pointer;border-radius:5px;transition:background .1s}
  .re-emoji-mini span:hover{background:var(--cream)}
  /* v4.137.3 : le menu emoji de la barre partagée reprend le panneau des mémos
     (onglets par catégorie + grille), dans le cadre du menu rattaché au bouton. */
  .re-emoji-full{flex-direction:column;flex-wrap:nowrap;width:360px;max-height:320px;overflow-y:auto;padding:8px}
  .re-emoji-full .emoji-tab{width:auto;height:auto;font-size:14px;padding:4px 8px}
  .re-emoji-full .emoji-grid span{width:auto;height:auto;font-size:20px;padding:4px}
  /* Caractères spéciaux : même grille que les emoji, en plus dense (10 par ligne). */
  .re-symb-mini{width:320px}
  .re-symb-mini span{font-size:17px;color:var(--navy);font-family:'DM Sans',sans-serif}
  /* v4.146 — « 🔗 Outil » des mémos : liste des écrans du Carnet, par onglet. */
  .rte-lien-btn{width:auto;padding:0 8px;font-size:12px;font-weight:600;white-space:nowrap}
  .rte-lien-panel{flex-direction:column;flex-wrap:nowrap;width:290px;max-height:360px;overflow-y:auto;padding:6px}
  .rte-lien-aide{font-size:11px;color:var(--text-light);padding:2px 8px 6px;line-height:1.35}
  .rte-lien-groupe{font-size:10px;font-weight:700;letter-spacing:.5px;color:var(--text-light);padding:8px 8px 2px;border-top:1px solid var(--cream-dark)}
  .rte-lien-groupe:first-of-type{border-top:none}
  .rte-lien-item{padding:6px 10px;border-radius:6px;font-size:13px;color:var(--navy);cursor:pointer}
  .rte-lien-item:hover{background:var(--cream)}
  /* Le lien lui-même, partout où il est rendu (carte de mémo, éditeur) : une pastille dorée. */
  a[href^="#carnet:"]{display:inline;padding:1px 9px;margin:0 1px;border:1.5px solid var(--gold);border-radius:999px;background:var(--cream);color:var(--navy);font-weight:600;font-size:.92em;text-decoration:none;cursor:pointer;-webkit-box-decoration-break:clone;box-decoration-break:clone}
  a[href^="#carnet:"]:hover{background:var(--gold)}
  .rte-editor a[href^="#carnet:"]{cursor:text}
  /* v4.113 — l'éditeur du suivi labo : hauteur posée par slEditorFitHeight(),
     plafond de la classe levé, et redimensionnable à la main. */
  #sl-ed-contenu{max-height:none;resize:vertical}
  .re-header{display:flex;align-items:center;gap:12px;margin-bottom:18px;flex-wrap:wrap}
  .re-title{font-family:'Playfair Display',serif;font-size:20px;color:var(--navy);flex:1}
  .re-statut{display:inline-flex;align-items:center;padding:4px 12px;border-radius:14px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;white-space:nowrap}
  .re-statut-sondage{background:#fef3e2;color:#b7600a}
  .re-statut-date_validee{background:#e8f0fe;color:#1558b0}
  .re-statut-ordre_du_jour{background:#fef9e7;color:#a07308}
  .re-statut-cloturee{background:#e8f5ee;color:var(--green)}

  /* Liste des reunions */
  .re-list{display:flex;flex-direction:column;gap:10px}
  .re-list-item{background:white;border:1px solid var(--border);border-radius:10px;padding:14px 16px;display:flex;align-items:center;gap:12px;cursor:pointer;transition:border-color .15s,box-shadow .15s}
  .re-list-item:hover{border-color:var(--gold);box-shadow:var(--shadow-sm)}
  .re-list-item-main{flex:1;min-width:0}
  .re-list-item-title{font-weight:700;color:var(--navy);font-size:15px;margin-bottom:3px}
  .re-list-item-meta{font-size:12px;color:var(--text-light)}

  /* Etape 1 : sondage de dates */
  .re-sondage-table{width:100%;border-collapse:collapse;background:white;border-radius:10px;overflow:hidden;border:1px solid var(--border)}
  .re-sondage-table th{background:var(--navy);color:white;padding:10px;font-size:11px;text-transform:uppercase;letter-spacing:.5px;text-align:left}
  .re-sondage-table td{padding:10px;border-bottom:1px solid var(--cream-dark);vertical-align:top;font-size:13px}
  .re-sondage-table tr:last-child td{border-bottom:none}
  .re-sondage-table tr.retenue{background:#e8f5ee}
  .re-vote-btns{display:inline-flex;gap:4px;align-items:center;flex-wrap:wrap}
  .re-vote-btn{padding:5px 11px;border-radius:6px;border:1.5px solid var(--border);background:white;cursor:pointer;font-size:12px;font-weight:600;color:var(--text);transition:all .15s;min-height:30px}
  .re-vote-btn:hover{border-color:var(--navy)}
  .re-vote-btn.oui.active{background:#1a7a4a;color:white;border-color:#1a7a4a}
  .re-vote-btn.si_besoin.active{background:#e67e22;color:white;border-color:#e67e22}
  .re-vote-btn.non.active{background:#c0392b;color:white;border-color:#c0392b}
  .re-vote-tally{display:inline-flex;gap:8px;font-size:12px;align-items:center}
  .re-vote-tally span{display:inline-flex;align-items:center;gap:3px;padding:2px 8px;border-radius:10px;font-weight:600}
  .re-tally-oui{background:#e8f5ee;color:#1a7a4a}
  .re-tally-si{background:#fef3e2;color:#b7600a}
  .re-tally-non{background:#fde8e8;color:#c0392b}
  .re-participation{font-size:13px;color:var(--text);background:var(--cream);border-radius:8px;padding:8px 14px;display:inline-block;margin-bottom:14px}
  .re-voteurs-list{font-size:11px;color:var(--text-light);margin-top:4px;line-height:1.4}

  /* Etape 2 : brainstorming - mur d'idees */
  .re-cat-bar{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px;align-items:center}
  .re-cat-chip{padding:6px 12px;border-radius:14px;font-size:12px;font-weight:600;cursor:pointer;background:white;border:1.5px solid var(--border);transition:all .15s;color:var(--text)}
  .re-cat-chip:hover{border-color:var(--navy)}
  .re-cat-chip.active{background:var(--navy);color:white;border-color:var(--navy)}
  .re-tri-bar{display:inline-flex;gap:6px;margin-left:auto;font-size:12px;color:var(--text-light);align-items:center}
  .re-idees-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
  .re-idee-card{background:white;border-radius:10px;padding:12px 14px;border-left:4px solid var(--gold);box-shadow:var(--shadow-sm);display:flex;flex-direction:column;gap:6px;transition:box-shadow .15s,transform .1s;position:relative}
  .re-idee-card:hover{box-shadow:var(--shadow)}
  .re-idee-head{display:flex;justify-content:space-between;align-items:flex-start;gap:6px}
  .re-idee-cat{display:inline-block;font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.4px;padding:2px 8px;border-radius:10px}
  .re-idee-meta{font-size:11px;color:var(--text-light)}
  .re-idee-body{font-size:13px;line-height:1.5;color:var(--text);white-space:pre-wrap;word-wrap:break-word}
  .re-idee-foot{display:flex;align-items:center;gap:8px;margin-top:4px;padding-top:6px;border-top:1px solid var(--cream-dark)}
  .re-thumb{display:inline-flex;align-items:center;gap:4px;background:none;border:1.5px solid var(--border);border-radius:14px;padding:3px 10px;cursor:pointer;font-size:12px;color:var(--text-light);transition:all .15s;min-height:30px}
  .re-thumb:hover{border-color:var(--navy);color:var(--navy)}
  .re-thumb.voted{background:var(--gold);border-color:var(--gold);color:var(--navy);font-weight:700}
  .re-idee-actions{margin-left:auto;display:flex;gap:4px}
  .re-idee-action{background:none;border:none;cursor:pointer;font-size:14px;padding:3px 6px;border-radius:5px;color:var(--text-light);transition:all .15s;line-height:1}
  .re-idee-action:hover{background:var(--cream);color:var(--navy)}
  .re-idee-action.danger:hover{background:#fde8e8;color:var(--red)}
  .re-idee-retenue{position:absolute;top:6px;right:8px;font-size:14px}

  /* Couleurs par categorie (bordure gauche + chip) - palette douce cohesive */
  .re-card-organisation{border-left-color:#3498db}.re-cat-organisation{background:#e8f0fe;color:#1558b0}
  .re-card-methode{border-left-color:#9b59b6}.re-cat-methode{background:#f0e6f7;color:#6c3483}
  .re-card-referencement{border-left-color:#16a085}.re-cat-referencement{background:#e0f5f0;color:#0e6655}
  .re-card-missions{border-left-color:#27ae60}.re-cat-missions{background:#e8f5ee;color:var(--green)}
  .re-card-objectifs{border-left-color:#e67e22}.re-cat-objectifs{background:#fef3e2;color:#b7600a}
  .re-card-chiffres{border-left-color:var(--gold)}.re-cat-chiffres{background:#fdf5dc;color:#7c5f0a}
  .re-card-rh{border-left-color:#e91e63}.re-cat-rh{background:#fde7ee;color:#a01c4a}
  .re-card-divers{border-left-color:#7f8c8d}.re-cat-divers{background:#ecf0f1;color:#576574}

  /* Etape 2bis : construction de l'ordre du jour (admin) */
  .re-odj-builder{background:white;border:1px solid var(--border);border-radius:10px;padding:14px;margin-bottom:14px}
  .re-odj-row{display:flex;align-items:center;gap:10px;padding:8px;border-radius:6px;cursor:grab;transition:background .12s}
  .re-odj-row:hover{background:var(--cream)}
  .re-odj-row.dragging{opacity:.4;cursor:grabbing}
  .re-odj-row.drop-target{background:var(--cream-dark)}
  .re-odj-handle{color:var(--text-light);cursor:grab;font-size:14px;user-select:none}
  .re-odj-pos{min-width:24px;font-weight:700;color:var(--navy);text-align:center}

  /* Etape 3 : compte-rendu et pieces jointes */
  .re-cr-panel{background:white;border:1px solid var(--border);border-radius:10px;padding:14px 16px;margin-bottom:14px}
  .re-pieces-grid{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px}
  .re-piece{display:flex;flex-direction:column;align-items:center;background:var(--cream);border:1px solid var(--cream-dark);border-radius:8px;padding:10px;width:130px;font-size:11px;color:var(--text);position:relative;text-decoration:none}
  .re-piece-icon{font-size:30px;line-height:1;margin-bottom:6px}
  .re-piece img{max-width:110px;max-height:90px;object-fit:cover;border-radius:4px}
  .re-piece-nom{font-weight:600;color:var(--navy);text-align:center;word-break:break-word;line-height:1.3;max-height:32px;overflow:hidden}
  .re-piece-del{position:absolute;top:-6px;right:-6px;width:20px;height:20px;border-radius:50%;background:var(--red);color:white;border:none;cursor:pointer;font-size:11px;display:flex;align-items:center;justify-content:center;padding:0;line-height:1}
  /* v4.114 — vignette de PDF (1re page) : portrait, entière, jamais rognée. */
  .re-piece-pdf{display:flex;flex-direction:column;align-items:center}
  .re-piece-pdf img{max-width:110px;max-height:130px;object-fit:contain;border:1px solid var(--border);border-radius:3px;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.12)}
  .re-piece-dl{position:absolute;top:-6px;left:-6px;width:20px;height:20px;border-radius:50%;background:var(--navy);color:white;border:none;cursor:pointer;font-size:11px;display:flex;align-items:center;justify-content:center;padding:0;line-height:1}
  .re-piece[title="Ouvrir"]:hover{border-color:var(--navy)}
  .re-actions-table{width:100%;border-collapse:collapse;background:white;border-radius:8px;overflow:hidden;border:1px solid var(--border)}
  .re-actions-table th{background:var(--cream);color:var(--navy);padding:8px 10px;font-size:11px;text-transform:uppercase;letter-spacing:.4px;text-align:left;font-weight:700}
  .re-actions-table td{padding:8px 10px;border-bottom:1px solid var(--cream-dark);font-size:13px;vertical-align:middle}
  .re-actions-table input,.re-actions-table select{width:100%;padding:6px 8px;border:1px solid var(--border);border-radius:5px;font-family:inherit;font-size:13px;background:white}
  .re-actions-table .re-del-row{background:none;border:none;cursor:pointer;color:var(--red);font-size:16px;padding:2px 6px;border-radius:4px}
  .re-actions-table .re-del-row:hover{background:#fde8e8}

  /* Lecture du CR (vue equipe) */
  .re-cr-view{background:white;border-radius:10px;padding:18px 22px;border:1px solid var(--border);font-size:14px;line-height:1.6;color:var(--text)}
  .re-cr-view p{margin-bottom:10px}
  .re-cr-view h1,.re-cr-view h2,.re-cr-view h3{color:var(--navy);margin:14px 0 6px}
  .re-cr-view ul,.re-cr-view ol{margin:8px 0 8px 24px}
  .re-cr-view table{border-collapse:collapse;width:100%;margin:8px 0}
  .re-cr-view td,.re-cr-view th{border:1px solid #ddd;padding:5px 8px}
  .re-lecture-bar{display:flex;align-items:center;gap:12px;margin:12px 0;padding:10px 14px;background:var(--cream);border-radius:8px;flex-wrap:wrap}
  .re-lecture-progress{font-size:12px;color:var(--text-light);flex:1}

  /* Form ligne dates proposees (modale) */
  .re-date-row{display:flex;gap:6px;align-items:center;margin-bottom:6px}
  .re-date-row input{flex:1}
  .re-date-row .re-del-row{background:none;border:none;cursor:pointer;color:var(--red);font-size:18px;padding:4px 8px;border-radius:5px;line-height:1}
  .re-date-row .re-del-row:hover{background:#fde8e8}

  /* Mobile : cartes en une colonne, tableau dates en cartes empilees */
  @media(max-width:768px){
    .re-idees-grid{grid-template-columns:1fr}
    .re-sondage-table{display:block;border:none;background:transparent}
    .re-sondage-table thead{display:none}
    .re-sondage-table tbody{display:block}
    .re-sondage-table tr{display:block;background:white;border:1px solid var(--border);border-radius:10px;padding:12px;margin-bottom:10px}
    .re-sondage-table td{display:block;padding:4px 0;border:none;font-size:13px}
    .re-sondage-table td::before{content:attr(data-label);font-size:10px;text-transform:uppercase;letter-spacing:.4px;color:var(--text-light);font-weight:700;display:block;margin-bottom:2px}
    .re-vote-btns{margin-top:4px}
    .re-vote-btn{flex:1;min-height:40px}
  }


  /* ─── Module Veille reglementaire ─── */
  .vl-wrap{max-width:1100px}
  .vl-header{display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap}
  .vl-title{font-size:18px;font-weight:600;color:var(--navy)}
  .vl-meta{font-size:12px;color:var(--text-light);margin-bottom:10px;line-height:1.5}
  .vl-list{display:flex;flex-direction:column;gap:8px}
  .vl-item{background:white;border:1px solid var(--border);border-radius:10px;padding:12px 14px;cursor:pointer;transition:border-color .15s,box-shadow .15s}
  .vl-item:hover{border-color:var(--gold);box-shadow:var(--shadow-sm)}
  .vl-item-head{display:flex;align-items:center;gap:8px;margin-bottom:5px;flex-wrap:wrap}
  .vl-item-source{font-size:11px;color:var(--text-light);text-transform:uppercase;letter-spacing:.4px;font-weight:600}
  .vl-item-date{font-size:12px;color:var(--text-light);margin-left:auto}
  .vl-item-title{font-weight:600;color:var(--navy);font-size:14px;line-height:1.4}
  .vl-impacts{font-size:11px;color:var(--text-light);margin-top:4px}
  .vl-impacts-detail{font-size:13px;color:var(--text);background:var(--cream);border-radius:6px;padding:8px 12px;margin-bottom:12px}
  .vl-badge{display:inline-flex;align-items:center;padding:3px 10px;border-radius:12px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;white-space:nowrap}
  .vl-badge-provisoire{background:#fef3e2;color:#b7600a;border:1px solid #f0c474}
  .vl-badge-officiel{background:#e8f5ee;color:var(--green);border:1px solid #7fb898}
  .vl-warn{background:#fef3e2;border-left:4px solid #e67e22;padding:10px 14px;font-size:13px;color:var(--text);border-radius:6px;margin-bottom:14px;line-height:1.5}
  .vl-content{background:white;border:1px solid var(--border);border-radius:10px;padding:18px 22px;font-size:14px;line-height:1.7;color:var(--text);max-height:600px;overflow:auto}
  .vl-content p{margin-bottom:10px}
  .vl-content h1,.vl-content h2,.vl-content h3{color:var(--navy);margin:14px 0 6px}
  .vl-content table{border-collapse:collapse;width:100%;margin:8px 0}
  .vl-content td,.vl-content th{border:1px solid #ddd;padding:5px 8px}
  .vl-provisoire-ia{font-style:italic;color:#5a4a2a}
  .vl-admin-help{font-size:13px;color:var(--text);background:var(--cream);border-radius:8px;padding:10px 14px;margin-bottom:12px;line-height:1.5}
  .vl-admin-help code{background:white;padding:1px 6px;border-radius:3px;font-size:12px}
  .vl-admin-form{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px;align-items:center}
  .vl-admin-table{width:100%;border-collapse:collapse;background:white;border-radius:8px;overflow:hidden;font-size:12px}
  .vl-admin-table th{background:var(--cream);color:var(--navy);padding:8px 10px;text-align:left;font-weight:700;font-size:11px;text-transform:uppercase;letter-spacing:.4px}
  .vl-admin-table td{padding:8px 10px;border-bottom:1px solid var(--cream-dark);vertical-align:middle}
  .vl-admin-table code{font-size:11px}
  @media(max-width:768px){
    .vl-content{padding:12px 14px;font-size:13px}
    .vl-admin-table{font-size:11px;display:block;overflow-x:auto}
  }

  /* ==================== OUTIL : SUIVI LABORATOIRES ==================== */
  .sl-note{background:var(--green-light);border:1px solid #bfe3cd;border-radius:10px;padding:12px 16px;margin-bottom:14px;font-size:13px;color:var(--text);line-height:1.5}
  .sl-labo-list{display:flex;flex-direction:column;gap:8px}
  .sl-labo-row{display:flex;align-items:center;gap:12px;background:white;border:1px solid var(--border);border-radius:10px;padding:12px 16px;cursor:pointer;transition:border-color .15s,box-shadow .15s}
  .sl-labo-row:hover{border-color:var(--navy);box-shadow:var(--shadow-sm)}
  .sl-labo-main{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}
  .sl-labo-name{font-weight:700;color:var(--navy);font-size:14px}
  .sl-labo-sub{font-size:12px;color:var(--text-light)}
  .sl-labo-meta{display:flex;align-items:center;gap:8px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end}
  .sl-count-badge{font-size:11px;font-weight:700;background:var(--cream-dark);color:var(--navy);border-radius:20px;padding:3px 10px;white-space:nowrap}
  .sl-count-badge.sl-count-empty{background:transparent;color:var(--text-light);font-weight:500;font-style:italic}
  .sl-rdv-badge{font-size:11px;font-weight:700;background:#fff3d6;color:#9a6b00;border:1px solid #f0d79a;border-radius:20px;padding:3px 10px;white-space:nowrap}
  /* v4.145 — RDV saisi dans l'agenda : même pastille, bord pointillé et mention « · agenda » */
  .sl-rdv-badge.sl-rdv-agenda{border-style:dashed}
  .sl-rdv-src{font-weight:500;opacity:.85}
  .sl-rdv-entete{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 12px}
  .sl-match-badge{font-size:11px;font-weight:700;background:var(--green-light);color:var(--green);border:1px solid #bfe3cd;border-radius:20px;padding:3px 10px;white-space:nowrap}
  /* Surlignage du terme recherché dans un suivi (reste tant que la fiche est ouverte) */
  mark.sl-hl,mark.search-hl{background:#ffe08a;color:inherit;border-radius:3px;padding:0 1px;box-shadow:0 0 0 1px #f0c419}
  .sl-coords{font-size:13px;color:var(--text-light);margin:-2px 0 4px}
  .sl-editor{background:var(--cream);border:1px solid var(--border);border-radius:12px;padding:16px;margin-bottom:18px}
  .sl-editor-title{font-weight:700;color:var(--navy);font-size:15px;margin-bottom:12px}
  .sl-editor-fields{display:flex;gap:14px;flex-wrap:wrap;align-items:flex-end;margin-bottom:10px}
  .sl-import-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:8px 0}
  .sl-editor-buttons{display:flex;justify-content:flex-end;gap:10px;margin-top:14px}
  .sl-entry{background:white;border:1px solid var(--border);border-left:4px solid var(--navy);border-radius:8px;padding:12px 16px;margin-bottom:10px}
  .sl-entry-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px}
  .sl-entry-date{font-weight:700;color:var(--navy);font-size:13px;background:var(--cream-dark);border-radius:6px;padding:2px 8px}
  .sl-entry-titre{font-weight:600;color:var(--text)}
  .sl-entry-actions{display:inline-flex;gap:6px}
  .sl-entry-body{font-size:14px;line-height:1.6;color:var(--text);overflow-wrap:anywhere}
  .sl-entry-body h3{font-size:14px;color:var(--navy);margin:10px 0 4px}
  .sl-entry-body ul,.sl-entry-body ol{margin:4px 0 4px 20px}
  .sl-entry-foot{font-size:11px;color:var(--text-light);margin-top:8px;font-style:italic}
  .sl-import-item{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 4px;border-bottom:1px solid var(--border);flex-wrap:wrap}
  .sl-import-item:last-child{border-bottom:none}
  .sl-import-item-main{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:1;min-width:0}
  .sl-import-item-titre{font-weight:600;color:var(--navy)}
  .sl-import-item-date{font-size:12px;color:var(--text-light)}
  .sl-import-item-actions{display:flex;gap:6px;flex-shrink:0}
  .sl-import-tag{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;background:var(--cream-dark);color:var(--text-light);border-radius:6px;padding:2px 7px}
  .sl-import-tag.sl-import-tag-ok{background:var(--green-light);color:var(--green)}
  .contact-suivi-block{margin-top:12px;padding-top:12px;border-top:1px dashed var(--border)}
  .contact-suivi-title{font-size:11px;font-weight:700;color:var(--navy);text-transform:uppercase;letter-spacing:.6px;margin-bottom:8px}
  .sl-contact-entry{background:var(--cream);border-radius:8px;padding:8px 12px;margin-bottom:8px}
  .sl-contact-entry-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:4px;font-size:13px}
  .sl-contact-entry-body{font-size:13px;line-height:1.55;color:var(--text);max-height:160px;overflow:auto;overflow-wrap:anywhere}
  .sl-contact-entry-body h3{font-size:13px;color:var(--navy);margin:6px 0 2px}
  @media(max-width:768px){
    .sl-editor-fields{flex-direction:column;align-items:stretch}
    .sl-labo-meta{width:100%;justify-content:flex-start}
  }

/* ==================== BILAN PREVENTION ==================== */
.bp-wrap{max-width:860px;margin:0 auto;padding:6px 2px 40px}
.bp-list{width:100%;border-collapse:collapse;background:#fff;border:1px solid var(--border);border-radius:10px;overflow:hidden}
.bp-list th{text-align:left;font-size:12px;color:var(--text-light);padding:10px 12px;background:var(--cream);border-bottom:1px solid var(--border)}
.bp-list td{padding:11px 12px;border-bottom:1px solid var(--border);font-size:14px}
.bp-list tr:last-child td{border-bottom:none}
.bp-list tbody tr:hover{background:var(--cream)}
.bp-badge{display:inline-block;color:#fff;border-radius:20px;padding:2px 9px;font-size:11px;font-weight:600}
.bp-spin{font-size:12px;color:#c77700}
.bp-card{background:#fff;border:1px solid var(--border);border-radius:12px;padding:16px;margin-top:14px}
.bp-card-title{font-weight:700;color:var(--navy);margin-bottom:10px;font-size:15px}
.bp-form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px}
/* v4.144 — « + Nouveau patient » : coller une capture de la fiche Winpharma (bpPnCapture*). */
.bp-pn-cap{border:2px dashed var(--gold-light);border-radius:10px;background:var(--cream);padding:10px 12px;margin-bottom:12px}
.bp-pn-cap-survol{border-color:var(--gold);background:#fff8e1}
.bp-pn-cap-ligne{display:flex;gap:12px;align-items:center;justify-content:space-between}
.bp-pn-cap-titre{flex:1;min-width:0;font-size:12px;font-weight:700;letter-spacing:.06em;color:var(--navy)}
.bp-pn-cap-etapes{list-style:none;margin:4px 0 0;padding:0;counter-reset:bppncap;font-size:12.5px;line-height:1.45;color:var(--text)}
.bp-pn-cap-etapes li{counter-increment:bppncap;display:flex;align-items:flex-start;gap:8px;margin-top:5px}
.bp-pn-cap-etapes li>span{flex:1;min-width:0;padding-top:1px}
.bp-pn-cap-etapes li::before{content:counter(bppncap);flex:none;width:18px;height:18px;border-radius:50%;background:var(--gold);color:#fff;font-size:10.5px;font-weight:700;line-height:18px;text-align:center}
.bp-pn-cap kbd{white-space:nowrap;font-family:inherit;font-size:11px;font-weight:600;line-height:1;border:1px solid var(--border);border-bottom-width:2px;border-radius:4px;padding:1px 5px;background:var(--white)}
.bp-pn-capstat{font-size:12.5px;line-height:1.45}
.bp-pn-capstat:empty{display:none}
.bp-pn-cap-vignette{display:block;max-width:100%;max-height:70px;margin:8px 0 6px;border:1px solid var(--border);border-radius:4px}
.bp-pn-cap-attente{margin-top:6px;color:var(--text-light)}
.bp-pn-cap-ok{margin-top:6px;color:var(--green)}
.bp-pn-cap-err{margin-top:6px;color:var(--red)}
.bp-pn-cap-notes{margin:4px 0 0;padding-left:18px;color:var(--text)}
.bp-pn-cap-doublon{margin-top:8px;padding:8px 10px;background:#fdecea;border:1px solid #f5b7b1;border-radius:8px;color:#922}
.bp-pn-cap-doublon .btn{margin-left:6px}
/* v4.145.2 — `.form-input` n'avait AUCUN style de base (≈ 110 cases : Bilan, Prescription, Correspondances,
   Tâches, eMAIL, fenêtres patient…) : cases carrées du navigateur, largeurs inégales. Style commun, modèle
   `.config-input`. `:where()` garde la spécificité d'UNE classe : `.form-input.bp-pn-lu` (surlignage) et les
   styles en ligne des cases compactes (padding/largeur réduits) l'emportent toujours. Cases à cocher, boutons
   radio et fichiers exclus. Pas de `display` : une case compacte en ligne (`width:auto`) reste en ligne. */
.form-input:where(:not([type=checkbox],[type=radio],[type=file],[type=range],[type=color])){width:100%;box-sizing:border-box;padding:8px 11px;border:1.5px solid var(--border);border-radius:8px;font-family:'DM Sans',sans-serif;font-size:14px;line-height:1.35;color:var(--text);background:#fff;transition:border-color .15s,box-shadow .15s}
.form-input:where(:not([type=checkbox],[type=radio],[type=file],[type=range],[type=color])):focus{outline:none;border-color:var(--gold);box-shadow:0 0 0 3px rgba(200,169,81,.2)}
.form-input::placeholder{color:var(--text-light);opacity:.75}
.form-input:disabled{background:var(--cream);color:var(--text-light);cursor:not-allowed}
textarea.form-input{resize:vertical;min-height:80px}
/* Les deux fenêtres patient (v4.145.1) : hauteur alignée des cases, dates et menus compris. */
#bp-pnew-modal .form-input,#bp-pedit-modal .form-input{min-height:38px}
.form-input.bp-pn-lu{background:#fff9c4;border-color:#e8c97a}
.form-input.bp-pn-douteux{background:#ffe0b2;border-color:#e67e22}
@media (max-width:720px){.bp-pn-cap-ligne{flex-wrap:wrap}}
.bp-presult{padding:9px 11px;border:1px solid var(--border);border-radius:8px;margin-bottom:6px;cursor:pointer;font-size:14px}
.bp-presult:hover{background:var(--cream);border-color:var(--navy)}
.bp-patient-head{background:var(--cream);border:1px solid var(--border);border-radius:10px;padding:12px 14px;margin-top:12px;font-size:15px}
.bp-drapeau-banner{border:2px solid #c0392b;background:#fdecea;border-radius:10px;padding:12px 14px;margin-top:14px;color:#7b241c;font-weight:600}
.bp-drapeau{font-weight:400;margin-top:8px;font-size:13px;line-height:1.5}
.bp-scores{display:flex;flex-direction:column;gap:6px}
.bp-score-item{display:flex;justify-content:space-between;gap:10px;padding:7px 10px;background:var(--cream);border-radius:8px;font-size:14px}
.bp-signaux{margin:0;padding-left:18px;font-size:14px}
.bp-signaux li{margin:4px 0}
.bp-sig-orientation{color:#b9520b;font-weight:600}
.bp-sig-vigilance{color:#8a6d00}
.bp-sig-info{color:var(--text-light)}
.bp-q{margin:12px 0}
.bp-q-label{font-weight:600;margin-bottom:7px;font-size:14px;color:var(--navy)}
.bp-opts{display:flex;flex-wrap:wrap;gap:8px}
.bp-opt{border:1.5px solid var(--border);background:#fff;border-radius:9px;padding:9px 13px;font-size:14px;cursor:pointer;transition:all .12s;text-align:left}
.bp-opt:hover{border-color:var(--navy)}
.bp-opt.selected{background:var(--navy);color:#fff;border-color:var(--navy)}
.bp-num{width:120px;border:1.5px solid var(--border);border-radius:8px;padding:9px 11px;font-size:15px}
.bp-ia-status{margin-top:8px;font-size:13px;color:#2d6cdf}
.bp-ia-result{margin-top:10px;border-top:1px solid var(--border);padding-top:10px;font-size:14px;line-height:1.55}
.bp-ia-result h3{font-size:15px;color:var(--navy);margin:12px 0 4px}
.bp-cr-view{border:1px solid var(--border);border-radius:8px;padding:12px;font-size:14px;line-height:1.55;background:var(--cream)}
/* Kiosque plein ecran */
#bp-kiosk{position:fixed;inset:0;background:#f4f1ea;z-index:9000;overflow-y:auto;-webkit-overflow-scrolling:touch}
.bp-kiosk-inner{max-width:680px;margin:0 auto;padding:18px 16px 60px}
.bp-kiosk-top{display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;background:#f4f1ea;padding:8px 0 10px;border-bottom:1px solid var(--border)}
.bp-kiosk-title{font-weight:800;color:var(--navy);font-size:18px}
.bp-kiosk-exit{border:1px solid var(--border);background:#fff;border-radius:8px;width:34px;height:34px;font-size:16px;cursor:pointer;color:var(--text-light)}
.bp-kiosk-intro{font-size:14px;color:var(--text-light);margin:12px 0}
.bp-section{background:#fff;border:1px solid var(--border);border-radius:12px;padding:14px 16px;margin-top:14px}
.bp-section-title{font-weight:700;color:var(--navy);font-size:15px;margin-bottom:6px}
.bp-kiosk-inner .bp-opt{padding:12px 15px;font-size:15px}
@media(max-width:560px){
  /* Masque la 3e colonne des tables .bp-list serrees (liste bilans = Tranche,
     apercu import = Naissance) SAUF l'annuaire, dont la 3e colonne est la puce
     d'entretien cliquable (coeur de l'ecran) : l'annuaire scrolle a la place. */
  .bp-list:not(.bp-ann-table) th:nth-child(3),.bp-list:not(.bp-ann-table) td:nth-child(3){display:none}
  .bp-score-item{flex-direction:column;gap:2px}
}
/* Puces d'entretien de l'annuaire : espacement vertical si plusieurs. */
.bp-ent-chip{margin:2px 0}
/* En-têtes triables de l'annuaire : retour visuel au survol. */
.bp-ann-table thead th:hover{background:#efe9dc}
/* Colonnes Patient (nom) et Email sur UNE seule ligne (lignes uniformes). Le
   nom s'élargit à sa taille. L'email : ellipsis « … » portée par un bloc INTERNE
   (une cellule de tableau n'honore pas toujours max-width en layout auto) +
   bulle d'aide pour l'adresse complète. Le conteneur .bp-ann-table scrolle
   horizontalement si besoin (overflow-x:auto). */
.bp-ann-table td.bp-ann-nom{white-space:nowrap}
/* Nom cliquable = ouvre la fiche (accès Modifier/Supprimer garanti). */
.bp-ann-name-link{cursor:pointer}
.bp-ann-name-link:hover{text-decoration:underline;color:var(--navy)}
.bp-ann-table td.bp-ann-email{white-space:nowrap}
.bp-ann-table td.bp-ann-email a,.bp-ann-table td.bp-ann-email>span{display:inline-block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}
/* Volet de liste de l'annuaire : défile en interne (hauteur ajustée au bas de
   l'écran par bpAnnFitHeight). Sur écran étroit où la table déborde, la barre de
   défilement HORIZONTALE reste ainsi visible EN BAS DE L'ÉCRAN, et plus tout en
   bas d'une liste de milliers de lignes. En-têtes de colonnes FIGÉS en haut.
   overflow:visible sur la table = indispensable pour que le thead sticky se cale
   sur le volet .bp-ann-scroll et non sur la table (.bp-list a overflow:hidden). */
/* Colonne « Contact » de l'annuaire (v4.104). Compacte : elle doit tenir sans
   pousser les colonnes suivantes hors écran. */
/* ⚠️ Largeur BORNÉE et retour à la ligne autorisé : en `nowrap`, cette colonne
   faisait 190 px et la table débordait de 61 px à 1280 px — la garantie « pas
   de débordement à 1280 » de la v4.44 tombait, et près de la moitié de la
   colonne « Médecin traitant » passait hors écran (finding de revue, mesuré). */
.bp-ann-table td.bp-ann-contact{white-space:normal;font-size:12px;line-height:1.3;max-width:150px}
.bp-contact-l1{font-weight:600}
.bp-contact-l2{color:var(--text-light);font-size:11px}
.bp-contact-jamais{color:var(--text-light);font-style:italic}
/* ⚠️ « À redemander au comptoir » : c'est un RAPPEL D'ACTION, pas une alerte —
   le patient n'a rien fait de mal, c'est nous qui devons y revenir. Doré, donc,
   jamais rouge. */
.bp-contact-redemander{color:#8a6d00;background:#fff6e0;border:1px solid #e0c260;border-radius:6px;
  padding:0 5px;font-size:10px;font-weight:600;display:inline-block;margin-top:2px;cursor:help;line-height:1.3}
.bp-contact-definitif-chip{color:#7a1f1f;background:#fdecea;border:1px solid #f5b7b1;border-radius:6px;
  padding:0 5px;font-size:10px;font-weight:600;display:inline-block;margin-top:2px;cursor:help;line-height:1.3}
.bp-contact-actions{margin-top:3px;display:flex;gap:4px}
.bp-contact-avert{font-size:12px;background:#fff6e0;border:1px solid #e0c260;border-radius:8px;padding:7px 9px;line-height:1.45}
.bp-contact-def{display:block;font-size:13px;cursor:pointer;background:#fdecea;border:1px solid #f5b7b1;border-radius:8px;padding:7px 9px}
.bp-ann-scroll{overflow:auto}
.bp-ann-table{overflow:visible}
.bp-ann-table thead th{position:sticky;top:0;z-index:3;box-shadow:inset 0 -1px 0 var(--border)}
/* Colonne d'ACTIONS (✏️) TOUJOURS visible : épinglée à droite même quand le
   tableau déborde horizontalement (sinon le bouton Modifier/Corbeille sortait
   de l'écran). Fond opaque + ombre douce pour se détacher du contenu qui défile. */
.bp-ann-table th:last-child,.bp-ann-table td:last-child{position:sticky;right:0;background:#fff;box-shadow:-6px 0 8px -6px rgba(26,39,68,.14)}
/* En-tête de la colonne d'actions = coin figé (haut + droite) : z-index au-dessus
   de la rangée d'en-têtes ; conserve l'ombre gauche ET le filet sous l'en-tête. */
.bp-ann-table thead th:last-child{background:var(--cream);z-index:4;box-shadow:-6px 0 8px -6px rgba(26,39,68,.14),inset 0 -1px 0 var(--border)}
.bp-ann-table tbody td:last-child{z-index:1}
.bp-ann-table tbody tr:hover td:last-child{background:var(--cream)}

/* Bilan Prevention — lots A/B/C/D */
.bp-chk-opt{display:inline-flex;align-items:center;gap:6px;font-size:14px;cursor:pointer;border:1px solid var(--border);border-radius:9px;padding:8px 11px;background:#fff}
.bp-chk-opt input{width:16px;height:16px}
/* v4.140 — interrupteur « Questionnaire light » (même geste qu'un réglage de téléphone)
   et sélecteur « Entretien réalisé par ». La case réelle reste dans le DOM (clavier,
   lecteur d'écran) : seule son apparence est remplacée par le curseur. */
.bp-light-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:10px 0 2px;font-size:14px}
.bp-light-info{font-size:12px;color:var(--text-light);font-weight:400}
.bp-switch{position:relative;display:inline-block;width:46px;height:26px;flex:none;cursor:pointer}
.bp-switch input{position:absolute;opacity:0;width:100%;height:100%;margin:0;cursor:pointer;z-index:1}
.bp-switch-slider{position:absolute;inset:0;background:#c5cbd3;border-radius:26px;transition:background .2s}
.bp-switch-slider::before{content:'';position:absolute;width:20px;height:20px;left:3px;top:3px;background:#fff;border-radius:50%;box-shadow:0 1px 3px rgba(0,0,0,.3);transition:transform .2s}
.bp-switch input:checked + .bp-switch-slider{background:#2e8b57}
.bp-switch input:checked + .bp-switch-slider::before{transform:translateX(20px)}
.bp-switch input:focus-visible + .bp-switch-slider{outline:2px solid var(--navy);outline-offset:2px}
.bp-switch input:disabled{cursor:default}
.bp-switch input:disabled + .bp-switch-slider{opacity:.55}
.bp-chk-opt input[data-fixe]{accent-color:#2e8b57}
.bp-op-sel{font-size:13px;font-weight:600;border:1px solid var(--border);border-radius:6px;padding:3px 6px;background:#fff;max-width:100%}
.bp-card-sub{font-weight:700;color:var(--navy);font-size:13px;margin:12px 0 4px}
.bp-progress{height:8px;background:var(--border);border-radius:6px;overflow:hidden;margin:8px 0 2px}
.bp-progress-bar{height:100%;background:var(--navy);transition:width .2s}
.bp-progress-label{font-size:12px;color:var(--text-light);text-align:right;margin-bottom:4px}

/* ── Bilan Prévention : conseils officiels, guide d'entretien, médecin ── */
.bp-conseil-theme{border:1px solid var(--border);border-left:4px solid var(--gold);border-radius:10px;padding:10px 12px;margin:8px 0;background:#fffdf6}
.bp-conseil-titre{font-weight:700;color:var(--navy);font-size:14px;margin-bottom:4px}
.bp-conseil-repere{font-size:13px;color:#5a4a12;background:#fdf3d7;border-radius:8px;padding:7px 10px;margin:4px 0 6px;line-height:1.45}
.bp-conseil-list{margin:4px 0 8px 18px;font-size:13px;line-height:1.5}
.bp-conseil-list li{margin:3px 0}
.bp-ressource-chip{display:inline-block;background:var(--cream);border:1px solid var(--border);border-radius:20px;padding:3px 10px;font-size:12px;margin:3px 5px 0 0;color:var(--navy);font-weight:600}
.bp-guide-theme{border:1px solid var(--border);border-left:4px solid var(--navy);border-radius:10px;padding:10px 12px;margin:8px 0;background:#fafbff}
.bp-guide-titre{font-weight:700;color:var(--navy);font-size:14px;margin-bottom:4px;text-transform:capitalize}
.bp-guide-niv{font-size:11px;font-weight:600;border:1px solid currentColor;border-radius:12px;padding:1px 8px;margin-left:6px;text-transform:none}
.bp-guide-part{font-size:13px;margin:5px 0;line-height:1.5}
.bp-guide-part ul{margin:3px 0 3px 18px}
.bp-plan-entretien{margin:4px 0 10px 20px;font-size:13px;line-height:1.6}
.bp-tool-req{background:var(--gold);color:#fff;border-radius:12px;padding:2px 9px;font-size:11px;margin-left:8px;vertical-align:1px}
.bp-tool-done{color:var(--green);font-size:12px;margin-left:8px}
.bp-med-sugg{position:absolute;z-index:40;left:0;right:0;top:100%;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow);max-height:240px;overflow:auto}
.bp-med-item{padding:8px 10px;font-size:13px;cursor:pointer;border-bottom:1px solid var(--cream-dark)}
.bp-med-item:last-child{border-bottom:none}
.bp-med-item:hover{background:var(--cream)}
/* Liste de candidats issue de la 2e passe PHONETIQUE de bpPatientSearch (v4.123) :
   ces fiches n'ont PAS le nom demande, elles lui ressemblent. Le bandeau doit se
   voir sans hurler — il est en tete de liste, la ou l'oeil se pose avant de cliquer. */
.bp-approx-note{padding:6px 10px;font-size:11px;color:#7a5b00;background:#fff3cd;border-bottom:1px solid #e0c46c}
.bp-med-mail{font-size:12px;color:var(--text-light);margin-top:1px}

/* ── Kiosque patient : charte officielle « Mon Bilan Prévention » ──
   Bleu marine #232d72 + or #eaa401, pilules de section, accents par thème. */
:root{--bpk-navy:#232d72;--bpk-gold:#eaa401}
.bp-kiosk-top{background:var(--bpk-navy);margin:0 -16px;padding:12px 16px;border-bottom:none;border-radius:0 0 14px 14px}
.bp-kiosk-title{color:#fff;font-size:20px;font-weight:800;letter-spacing:.2px}
.bp-kiosk-title .bpk-gold{color:var(--bpk-gold)}
.bpk-tranche{background:var(--bpk-gold);color:#fff;border-radius:14px;padding:2px 12px;font-size:13px;margin-left:12px;vertical-align:3px;white-space:nowrap}
.bp-kiosk-exit{border:1px solid rgba(255,255,255,.4);background:transparent;color:#fff;border-radius:8px;width:34px;height:34px;font-size:16px;cursor:pointer}
.bp-progress{height:10px;background:#e4e0d2;border-radius:8px;margin:14px 0 2px}
.bp-progress-bar{background:linear-gradient(90deg,var(--bpk-gold),#f2b93d)}
.bp-kiosk-intro{font-size:14px;color:var(--text);margin:12px 0;background:#fff;border:1px solid var(--border);border-radius:10px;padding:10px 14px;line-height:1.5}
.bp-section-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px;flex-wrap:wrap}
.bp-section-pill{display:inline-block;background:var(--bpk-gold);color:#fff;font-weight:700;border-radius:20px;padding:8px 18px;font-size:15px;line-height:1.25}
.bp-sec-count{font-size:13px;color:var(--text-light);font-weight:600;white-space:nowrap}
.bp-sec-count.done{color:var(--green)}
.bpk-sec-a{border-top:5px solid #4f7cd1;background:#fbfcff}
.bpk-sec-b{border-top:5px solid #3aa06a;background:#fafdf9}
.bpk-sec-c{border-top:5px solid #d1804f;background:#fffcf8}
.bpk-sec-d{border-top:5px solid #8a6fc9;background:#fdfbff}
.bpk-sec-a .bp-section-pill{background:#4f7cd1}
.bpk-sec-b .bp-section-pill{background:#3aa06a}
.bpk-sec-c .bp-section-pill{background:#d1804f}
.bpk-sec-d .bp-section-pill{background:#8a6fc9}
.bp-kiosk-inner .bp-q-label{color:var(--bpk-navy);font-size:15px}
.bp-kiosk-inner .bp-opt{border-radius:22px;border:1.5px solid #c9cede;padding:12px 18px;font-size:15px;background:#fff}
.bp-kiosk-inner .bp-opt:hover{border-color:var(--bpk-gold)}
.bp-kiosk-inner .bp-opt.selected{background:var(--bpk-navy);border-color:var(--bpk-navy);color:#fff;box-shadow:0 2px 8px rgba(35,45,114,.25)}
.bp-kiosk-inner .bp-num{border-radius:14px;padding:12px 14px;font-size:16px}
.bpk-submit{width:100%;padding:16px;font-size:17px;margin-top:14px;border-radius:14px;background:var(--bpk-navy)}

/* ── Bilan : pad de signature (patient au kiosque, pharmacien à l'entretien) ── */
.bp-sig-canvas{display:block;width:100%;max-width:460px;height:140px;background:#fff;border:1.5px dashed var(--border);border-radius:10px;touch-action:none;cursor:crosshair}
.bp-sig-hint{font-size:11px;color:var(--text-light)}
.bp-kiosk-inner .bp-sig-canvas{max-width:560px;height:170px}

/* ── Bilan : guide d'entretien v4 (utilisable en direct) + éligibilité ── */
.bp-guide-num{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;background:var(--navy);color:#fff;border-radius:50%;font-size:12px;font-weight:700;vertical-align:-3px;margin-right:2px}
.bp-guide-constat{font-size:13px;color:#41506e;background:#eef1f8;border-radius:8px;padding:8px 10px;margin:6px 0;line-height:1.5}
.bp-guide-adire{background:#fdf6e3;border:1px solid #ecd9a0;border-radius:10px;padding:9px 12px;margin:8px 0}
.bp-guide-adire-t{font-size:12px;font-weight:700;color:#8a6d00;text-transform:uppercase;letter-spacing:.4px;margin-bottom:4px}
.bp-guide-adire-l{font-size:14px;color:#4a3f14;font-style:italic;line-height:1.55;margin:4px 0}
.bp-elig{display:inline-block;border-radius:12px;padding:2px 9px;font-size:11px;font-weight:700;margin-left:6px;white-space:nowrap}
.bp-elig.ok{background:var(--green-light);color:var(--green)}
.bp-elig.ko{background:#fdecea;color:var(--red)}
.bp-presult-ko{opacity:.75}

/* ═══ AGENDA (calendrier d'équipe façon Outlook) ═══ */
.ag-wrap { max-width: 1400px; margin: 0; padding: 12px 16px; }
.ag-toolbar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 12px; }
.ag-views { display: inline-flex; gap: 4px; margin: 0 6px; }
.ag-title { font-size: 20px; font-weight: 700; color: var(--navy); margin-left: 8px; text-transform: capitalize; }
.ag-body { display: flex; gap: 14px; align-items: flex-start; }
.ag-side { width: 210px; flex-shrink: 0; }
.ag-side-title { font-weight: 600; color: var(--navy); margin: 14px 0 6px; font-size: 14px; }
.ag-cal-item { display: flex; align-items: center; gap: 7px; font-size: 13px; padding: 3px 0; cursor: pointer; }
.ag-cal-item input { width: auto; }
.ag-dot { width: 12px; height: 12px; border-radius: 50%; display: inline-block; flex-shrink: 0; }
.ag-mini { background: #fff; border: 1px solid var(--border); border-radius: 10px; padding: 8px; }
.ag-mini-head { text-align: center; font-weight: 600; color: var(--navy); font-size: 13px; margin-bottom: 6px; text-transform: capitalize; }
.ag-mini-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 1px; }
.ag-mini-dow { font-size: 10px; color: var(--text-light); text-align: center; }
.ag-mini-day { font-size: 11px; text-align: center; padding: 3px 0; border-radius: 50%; cursor: pointer; }
.ag-mini-day:hover { background: var(--cream); }
.ag-mini-day.out { color: #c0c4cc; }
.ag-mini-day.today { background: var(--navy); color: #fff; font-weight: 700; }
.ag-main { flex: 1; min-width: 0; }
.ag-grid-head { display: grid; grid-template-columns: repeat(7, 1fr); font-size: 12px; color: var(--text-light); border-bottom: 1px solid var(--border); }
.ag-grid-head div { padding: 4px 8px; }
.ag-grid { display: grid; grid-template-columns: repeat(7, 1fr); border-left: 1px solid var(--border); }
.ag-cell { min-height: 96px; border-right: 1px solid var(--border); border-bottom: 1px solid var(--border); padding: 3px 4px; cursor: pointer; background: #fff; overflow: hidden; }
.ag-cell:hover { background: #fbfaf6; }
.ag-cell.out { background: #f6f6f8; }
.ag-cell.out .ag-cell-num { color: #b6bac4; }
.ag-cell.today { outline: 2px solid #d63384; outline-offset: -2px; }
.ag-cell.today .ag-cell-num { background: #d63384; color: #fff; border-radius: 50%; width: 22px; height: 22px; display: inline-flex; align-items: center; justify-content: center; }
.ag-cell-num { font-size: 12px; font-weight: 600; color: var(--text); margin-bottom: 2px; }
.ag-ev { --agc: #EAA401; font-size: 11px; line-height: 1.35; background: color-mix(in srgb, var(--agc) 14%, white); border-left: 3px solid var(--agc); border-radius: 4px; padding: 1px 5px; margin: 1px 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: pointer; color: #1e2340; }
.ag-ev:hover { background: color-mix(in srgb, var(--agc) 26%, white); }
.ag-ev-full { background: var(--agc); color: #fff; border-left: none; font-weight: 600; }
.ag-more { font-size: 11px; color: var(--text-light); cursor: pointer; padding-left: 4px; }
.ag-week { display: grid; gap: 8px; }
.ag-daycol { background: #fff; border: 1px solid var(--border); border-radius: 10px; overflow: hidden; }
.ag-daycol.today { outline: 2px solid #d63384; }
.ag-daycol-head { background: var(--cream); font-weight: 600; color: var(--navy); font-size: 13px; padding: 6px 10px; cursor: pointer; }
.ag-daycol-body { min-height: 220px; padding: 6px; cursor: pointer; }
.ag-daycol-body .ag-ev { font-size: 13px; padding: 5px 8px; white-space: normal; }
.ag-empty { color: var(--text-light); text-align: center; padding: 24px 0; font-size: 13px; }
@media (max-width: 800px) {
  .ag-side { display: none; }
  .ag-cell { min-height: 64px; }
  /* « Mercredi », « Dimanche » imposaient leur largeur aux colonnes (1fr = minmax(auto,1fr)) :
     la grille dépassait de 26 px sur un téléphone de 390 px. Colonnes égales, nom tronqué. */
  .ag-grid-head, .ag-grid { grid-template-columns: repeat(7, minmax(0, 1fr)); }
  .ag-grid-head div { padding: 4px 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
}

/* ═══ KIOSQUE MURAL (v4.119) — index.html?mode=kiosk ═══
   L'agenda en continu sur la tablette d'arrière-boutique : sans bandeau ni
   onglets, grille pleine largeur qui REMPLIT l'écran (lignes en 1fr, pas de
   min-height), cibles tactiles plus grandes, écran sombre la nuit. Tout est
   piloté par `body.kiosk` : le rendu de l'agenda est celui de l'application. */
body.kiosk .topbar, body.kiosk .tabs, body.kiosk #ask-fab, body.kiosk #ask-panel, body.kiosk #header-menu,
body.kiosk .auth-install, body.kiosk #section-messages, body.kiosk #section-contacts, body.kiosk #section-memo,
body.kiosk #section-outils, body.kiosk #section-email, body.kiosk #ag-dock { display: none !important; }
body.kiosk { overflow: hidden; }
body.kiosk #app { height: 100vh; flex-direction: column; }
body.kiosk #section-agenda { flex: 1; min-height: 0; overflow: hidden; }
body.kiosk .ag-wrap { max-width: none; height: 100%; box-sizing: border-box; display: flex; flex-direction: column; padding: 8px 10px; }
body.kiosk .ag-toolbar { margin-bottom: 8px; }
body.kiosk .ag-toolbar .btn { font-size: 15px; padding: 9px 14px; }
body.kiosk .ag-title { font-size: 20px; }
body.kiosk .ag-body { flex: 1; min-height: 0; }
body.kiosk .ag-main { height: 100%; display: flex; flex-direction: column; min-height: 0; }
body.kiosk .ag-grid-head div { font-size: 14px; }
body.kiosk .ag-grid { flex: 1; min-height: 0; grid-auto-rows: 1fr; }
body.kiosk .ag-cell { min-height: 0; }
body.kiosk .ag-cell-num { font-size: 14px; }
body.kiosk .ag-ev { font-size: 13px; line-height: 1.4; }
body.kiosk .ag-week { flex: 1; min-height: 0; grid-auto-rows: 1fr; }
body.kiosk .ag-daycol { display: flex; flex-direction: column; min-height: 0; }
body.kiosk .ag-daycol-head { font-size: 16px; padding: 8px 12px; }
body.kiosk .ag-daycol-body { flex: 1; overflow-y: auto; min-height: 0; }
body.kiosk .ag-daycol-body .ag-ev { font-size: 15px; padding: 7px 10px; }
.ag-kiosk-info { margin-left: auto; display: inline-flex; gap: 12px; align-items: center; font-size: 14px; color: var(--text-light); }
.ag-kiosk-echec { color: #922; font-weight: 600; }
.ag-kiosk-rh { white-space: nowrap; text-decoration: none; }
.kiosk-attente { padding: 60px 20px; text-align: center; font-size: 18px; color: var(--text-light); }
.kiosk-admin-card { background: var(--cream); border: 1px solid var(--border); border-left: 3px solid var(--gold); border-radius: 8px; padding: 12px 14px; margin-bottom: 16px; }
#kiosk-nuit { display: none; position: fixed; inset: 0; z-index: 9999; background: #0d1526; color: #fff;
  flex-direction: column; align-items: center; justify-content: center; gap: 12px; }
body.kiosk-nuit #kiosk-nuit { display: flex; }
.kiosk-nuit-croix { font-size: 64px; color: rgba(200,169,81,.45); }
.kiosk-nuit-heure { font-size: 72px; font-weight: 700; letter-spacing: 2px; color: rgba(255,255,255,.75); }
.kiosk-nuit-nom { font-size: 16px; color: rgba(255,255,255,.4); }
.kiosk-nuit-aide { font-size: 13px; color: rgba(255,255,255,.3); margin-top: 24px; }
#kiosk-nuit { cursor: pointer; }

/* ═══ Agenda en VOLET LATÉRAL (dock) ═══
   Ouvert depuis le suivi labo ou l'annuaire patient : l'agenda occupe la
   gauche, l'écran de travail est décalé à droite et RESTE monté (aucune
   donnée de saisie perdue). Fixed => indépendant du décalage de #app. */
#ag-dock { display: none; position: fixed; left: 0; top: 0; bottom: 0;
  width: min(46vw, 720px); z-index: 190; background: var(--cream);
  border-right: 2px solid var(--navy); box-shadow: 6px 0 28px rgba(10,20,50,.22);
  flex-direction: column; overflow: hidden; }
#ag-dock.open { display: flex; }
.ag-dock-head { display: flex; align-items: center; gap: 12px; padding: 11px 16px;
  background: var(--navy); color: #fff; flex-shrink: 0; }
.ag-dock-title { font-weight: 700; font-size: 15px; white-space: nowrap; }
.ag-dock-hint { font-size: 12px; opacity: .82; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ag-dock-close { margin-left: auto; flex-shrink: 0; background: rgba(255,255,255,.16); border: none;
  color: #fff; border-radius: 8px; padding: 6px 13px; cursor: pointer; font-size: 13px; font-weight: 600; }
.ag-dock-close:hover { background: rgba(255,255,255,.28); }
#ag-dock-body { flex: 1; overflow-y: auto; -webkit-overflow-scrolling: touch; }
/* La saisie en cours glisse vers la droite pour laisser place au volet. */
body.ag-docked #app { margin-left: min(46vw, 720px); transition: margin-left .18s ease; }
/* Agenda compacté dans le volet étroit : calendrier plein largeur sous le
   mini-cal et les cases « Mes agendas ». */
#ag-dock-body .ag-wrap { padding: 10px 12px; }
#ag-dock-body .ag-body { flex-direction: column; gap: 10px; }
#ag-dock-body .ag-side { width: auto; display: flex; flex-wrap: wrap; gap: 4px 18px; align-items: center; }
#ag-dock-body .ag-side .ag-mini { flex: 0 0 auto; }
#ag-dock-body .ag-side-title { width: 100%; margin: 4px 0 0; }
#ag-dock-body .ag-title { font-size: 16px; }
#ag-dock-body .ag-cell { min-height: 62px; }
/* Écrans étroits : le volet passe en plein écran par-dessus la saisie (qui
   reste montée dessous) ; pas de décalage puisqu'il recouvre. */
@media (max-width: 900px) {
  #ag-dock { width: 100vw; border-right: none; }
  body.ag-docked #app { margin-left: 0; }
  #ag-dock-body .ag-side { display: flex; }
}

/* ═══ « Demandez au Carnet » (recherche unifiée) ═══ */
#ask-fab { position: fixed; right: 18px; bottom: 18px; width: 54px; height: 54px; border-radius: 50%; border: none; background: linear-gradient(135deg, var(--navy) 0%, #1e3a6e 100%); color: #fff; font-size: 24px; cursor: pointer; box-shadow: 0 6px 20px rgba(10,20,50,.35); z-index: 90; transition: transform .15s; }
#ask-fab:hover { transform: scale(1.08); }
/* ⚠️ `touch-action:none` est INDISPENSABLE au déplacement par appui long : sans
   lui, le navigateur interprète le glissement comme un défilement et ANNULE le
   pointeur (pointercancel) dès le premier pixel — la bulle ne bougerait jamais
   sur téléphone. Contrepartie assumée : un défilement amorcé sur les 54 px de la
   bulle ne fait pas défiler la page. */
#ask-fab { touch-action: none; }
#ask-fab.ask-fab-dragging { transform: scale(1.16); box-shadow: 0 10px 28px rgba(10,20,50,.5); cursor: grabbing; opacity: .92; }
/* Dock de conversation ancré en bas à droite (façon messagerie) */
#ask-panel { display: none; position: fixed; right: 18px; bottom: 84px; width: 400px; max-width: calc(100vw - 24px); height: min(600px, calc(100vh - 110px)); background: #fff; border: 1px solid var(--border); border-radius: 16px; box-shadow: 0 14px 48px rgba(10,20,50,.35); z-index: 180; flex-direction: column; overflow: hidden; }
.ask-dock-head { display: flex; align-items: center; justify-content: space-between; padding: 10px 14px; background: linear-gradient(135deg, var(--navy) 0%, #1e3a6e 100%); color: #fff; flex: 0 0 auto; }
.ask-dock-title { font-weight: 700; font-size: 14px; letter-spacing: .2px; }
.ask-dock-close { background: transparent; border: none; color: #fff; font-size: 16px; cursor: pointer; padding: 2px 6px; border-radius: 6px; }
.ask-dock-close:hover { background: rgba(255,255,255,.15); }
#ask-results { flex: 1; overflow-y: auto; padding: 12px 14px; background: #f7f8fb; }
.ask-dock-foot { flex: 0 0 auto; border-top: 1px solid var(--border); padding: 8px 10px; background: #fff; }
.ask-dock-inputrow { display: flex; gap: 6px; align-items: center; }
#ask-input { flex: 1; min-width: 0; border: 1px solid var(--border); border-radius: 20px; padding: 9px 14px; font-size: 14px; font-family: 'DM Sans', sans-serif; }
.ask-foot-btn { width: 38px; height: 38px; min-width: 38px; border-radius: 50%; border: none; background: var(--cream); cursor: pointer; font-size: 16px; display: inline-flex; align-items: center; justify-content: center; }
.ask-foot-btn:hover { filter: brightness(.96); }
.ask-send { background: var(--navy); color: #fff; }
.ask-piece-chip { display: inline-flex; align-items: center; gap: 6px; max-width: 100%; background: var(--cream); border: 1px solid var(--border); border-radius: 14px; padding: 4px 10px; font-size: 12px; margin-bottom: 6px; }
.ask-piece-chip .nom { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ask-piece-chip button { border: none; background: transparent; cursor: pointer; color: #c0392b; font-weight: 700; }
.ask-bub-piece { display: inline-block; font-size: 11px; background: rgba(255,255,255,.18); border-radius: 10px; padding: 2px 8px; margin-top: 5px; }
.ask-hint { color: var(--text-light); font-size: 13px; line-height: 1.6; padding: 12px 4px; }
.ask-group { margin-top: 12px; }
.ask-group-title { font-weight: 700; color: var(--navy); font-size: 13px; margin-bottom: 4px; }
.ask-answer { background: #f6f9f4; border: 1px solid #d7e8d0; border-radius: 10px; padding: 8px 10px; }
.ask-item { padding: 7px 8px; border-radius: 8px; cursor: pointer; font-size: 14px; }
.ask-item:hover { background: var(--cream); }
.ask-date { color: var(--text-light); font-size: 12px; }
@media (max-width: 600px) { #ask-fab { right: 12px; bottom: 12px; } #ask-panel { right: 8px; left: 8px; bottom: 8px; width: auto; height: calc(100vh - 84px); border-radius: 14px; } }

/* ═══ Briefing du jour (carte ☀️) ═══ */
#briefing-card { background: linear-gradient(135deg, #fffdf5 0%, #fdf6e3 100%); border: 1px solid var(--gold); border-radius: 12px; margin: 0 0 14px; overflow: hidden; }
.brf-head { display: flex; align-items: center; gap: 8px; padding: 10px 14px; cursor: pointer; font-size: 14px; color: var(--navy); }
.brf-resume { color: var(--text-light); font-size: 12.5px; margin-left: 4px; flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.brf-chev { color: var(--text-light); }
.brf-body { padding: 0 14px 12px; }
.brf-sec { margin-top: 8px; font-size: 13px; color: var(--navy); }
.brf-item { padding: 4px 8px; margin-top: 3px; background: #fff; border-radius: 7px; cursor: pointer; font-size: 13px; color: #1e2340; }
.brf-item:hover { background: var(--cream); }
.brf-admin { margin-top: 12px; padding-top: 8px; border-top: 1px dashed var(--gold); font-size: 12px; color: var(--text); display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }

/* Étage 2 IA de « Demandez au Carnet » */
.ask-ia-bar { display: flex; align-items: center; gap: 10px; margin-top: 14px; padding-top: 10px; border-top: 1px dashed var(--border); flex-wrap: wrap; }
.ask-ia-note { font-size: 11px; color: var(--text-light); }
.ask-ia { background: #f2f5fb; border: 1px solid #ccd8ee; border-radius: 10px; padding: 10px 12px; }
.ask-ia-texte { font-size: 14px; line-height: 1.55; color: #1e2340; }
.ask-src-chip { display: inline-block; background: #fff; border: 1px solid var(--border); border-radius: 14px; padding: 3px 10px; font-size: 12px; margin: 2px 4px 2px 0; cursor: pointer; }
.ask-src-chip:hover { background: var(--cream); }

/* Fiche ciblée par « Demandez au Carnet » : signal visuel temporaire */
.ask-target-flash { animation: askFlash 1.3s ease-in-out 2; }
@keyframes askFlash { 0%,100% { box-shadow: none; } 50% { box-shadow: 0 0 0 3px var(--gold); } }

/* ── Admin → 📜 Historique (journal des actions) ── */
.audit-day{font-weight:700;font-size:12px;color:var(--primary,#1c355e);margin:12px 0 4px;border-bottom:1px solid var(--border,#e3e6ee);padding-bottom:3px}
.audit-row{display:flex;gap:8px;align-items:baseline;padding:3px 5px;font-size:12.5px;border-radius:4px;flex-wrap:wrap}
.audit-row:nth-child(even){background:rgba(0,0,0,.03)}
.audit-time{color:var(--text-light,#7a8194);font-variant-numeric:tabular-nums;flex-shrink:0}
.audit-user{font-weight:700;flex-shrink:0;min-width:70px}
.audit-act{flex-shrink:0}
.audit-detail{color:var(--text-light,#7a8194);overflow-wrap:anywhere}

/* ✏️ d'édition sur les RDV labo (le clic principal ouvre le suivi commercial) */
.ag-ev-edit{float:right;margin-left:4px;opacity:.5;cursor:pointer}
/* v4.147 — à qui le RDV est destiné (menu « 👤 Pour ») : prénom en tête de la pastille. */
.ag-ev-pour{display:inline-block;font-size:10px;font-weight:700;line-height:1.35;padding:0 5px;margin-right:1px;border-radius:999px;background:var(--navy);color:#fff;letter-spacing:.2px;vertical-align:1px}
.ag-ev-full .ag-ev-pour{background:rgba(255,255,255,.92);color:var(--navy)}
.ag-ev-edit:hover{opacity:1}
/* Pièces jointes d'un RDV (chips dans la fiche) */
.ag-piece{display:inline-flex;align-items:center;gap:4px;background:#fff;border:1px solid var(--border);border-radius:8px;padding:3px 8px;font-size:12px;max-width:100%}
.ag-piece a{color:var(--navy);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:220px}
.ag-piece a:hover{text-decoration:underline}
.ag-piece-pending{background:var(--cream);font-style:normal;color:var(--text-light)}
.ag-piece-del{border:none;background:none;color:#c0392b;font-size:14px;cursor:pointer;padding:0 2px;line-height:1}

/* ── « Demandez au Carnet » : mode discussion 💬 ── */
.ask-chat-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.ask-bub{max-width:88%;padding:9px 12px;border-radius:12px;font-size:13.5px;line-height:1.5;margin:6px 0;overflow-wrap:anywhere}
.ask-bub-user{margin-left:auto;background:var(--navy,#1c355e);color:#fff;border-bottom-right-radius:4px}
.ask-bub-ia{margin-right:auto;background:var(--cream,#f5f0e6);border:1px solid var(--border,#e3e6ee);border-bottom-left-radius:4px}
.ask-bub-busy{color:var(--text-light,#7a8194);font-style:italic}
.ask-bub-src{margin-top:7px;display:flex;flex-wrap:wrap;gap:5px}
.ask-action{margin-top:9px;padding:9px 11px;background:#fff;border:1px dashed var(--gold,#EAA401);border-radius:9px;font-weight:600;font-size:13px}
.ask-action-btns{display:flex;gap:8px;margin-top:8px;font-weight:400}
.ask-action-done{border-style:solid;border-color:#27ae60;color:#1d7a44}

/* ── ❓ Aide : notice d'utilisation (modale + rendu markdown) ── */
.aide-body{font-size:14px;line-height:1.6;color:var(--text)}
.aide-body .aide-h2{font-family:'Playfair Display',serif;color:var(--navy);font-size:20px;margin:18px 0 8px;border-bottom:2px solid var(--navy);padding-bottom:4px}
.aide-body .aide-h3{color:var(--navy);font-size:16px;margin:18px 0 6px}
.aide-body .aide-h4{color:var(--navy);font-size:14px;margin:14px 0 4px}
.aide-body p{margin:6px 0}
.aide-body ul,.aide-body ol{margin:6px 0 10px;padding-left:22px}
.aide-body li{margin:3px 0}
.aide-table{border-collapse:collapse;width:100%;margin:10px 0}
.aide-table th,.aide-table td{border:1px solid var(--border);padding:6px 10px;text-align:left;font-size:13px}
.aide-table th{background:var(--cream);color:var(--navy)}
.aide-quote{background:#fdf6e3;border-left:3px solid var(--gold);padding:8px 12px;margin:10px 0;border-radius:0 8px 8px 0;font-size:13px}
.aide-hr{border:none;border-top:1px solid var(--border);margin:20px 0}

/* ─── RENOUVELLEMENT D'ORDONNANCE (v4.38) — préfixe ro ─── */
.ro-jour-banner{background:var(--cream);border:1px solid var(--border);border-radius:8px;padding:8px 12px;margin:8px 0 4px;font-size:13px;color:var(--text)}
.ro-jour-banner a{color:var(--navy);font-weight:600}
.ro-stats{display:flex;gap:10px;flex-wrap:wrap;margin:12px 0 4px}
.ro-stat{display:flex;flex-direction:column;align-items:center;min-width:74px;background:var(--white);border:1px solid var(--border);border-radius:10px;padding:8px 12px;box-shadow:var(--shadow-sm)}
.ro-stat-n{font-size:22px;font-weight:700;color:var(--navy);line-height:1}
.ro-stat-l{font-size:11px;color:var(--text-light);margin-top:3px;text-align:center}
.ro-stat-warn .ro-stat-n{color:#c0651a}
.ro-stat-soft{opacity:.75}
.ro-chip{border:1.5px solid var(--border);background:var(--white);border-radius:999px;padding:6px 14px;font-size:13px;cursor:pointer;color:var(--text);font-family:inherit}
.ro-chip:hover{border-color:var(--navy)}
.ro-chip.active{background:var(--navy);color:var(--white);border-color:var(--navy)}
.ro-row{display:flex;gap:12px;align-items:flex-start;background:var(--white);border:1px solid var(--border);border-left:4px solid var(--border);border-radius:10px;padding:12px 14px;margin-bottom:10px;box-shadow:var(--shadow-sm)}
.ro-row.ro-st-retard{border-left-color:#c0392b}
.ro-row.ro-st-apreparer{border-left-color:#c8a951}
.ro-row.ro-st-prepare{border-left-color:#1a7a4a}
.ro-row.ro-st-relance{border-left-color:#e67e22}
.ro-row.ro-st-facture{border-left-color:#6b7a99}
.ro-row-main{flex:1;min-width:0}
.ro-row-top{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:3px}
.ro-row-name{font-weight:700;color:var(--navy);font-size:15px}
.ro-num{font-size:11px;color:var(--text-light);background:var(--cream);border-radius:6px;padding:1px 6px}
.ro-row-meta{font-size:12.5px;color:var(--text-light)}
.ro-row-notes{font-size:12.5px;color:var(--text);margin-top:4px;background:var(--cream);border-radius:6px;padding:4px 8px}
.ro-row-actions{display:flex;flex-direction:column;gap:6px;flex-shrink:0;align-items:stretch}
.ro-badge{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-weight:600;border-radius:999px;padding:2px 9px;background:var(--cream);color:var(--text)}
.ro-badge.ro-st-retard{background:#fdecea;color:#922}
.ro-badge.ro-st-apreparer{background:#fbf3d8;color:#8a6d0f}
.ro-badge.ro-st-prepare{background:var(--green-light);color:#155e37}
.ro-badge.ro-st-relance{background:#fdebd6;color:#a5591a}
.ro-badge.ro-st-facture{background:#eef1f6;color:#4a5978}
.ro-consent{margin-top:10px;padding:12px;background:var(--cream);border-radius:10px}
.ro-detail-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:6px 16px;font-size:13px;margin-bottom:12px}
.ro-dt-l{color:var(--text-light);font-size:11px;text-transform:uppercase;letter-spacing:.3px}
.ro-cycles-h{font-weight:700;color:var(--navy);font-size:13px;margin:14px 0 6px}
.ro-cycles-table{width:100%;border-collapse:collapse;font-size:12.5px}
.ro-cycles-table th,.ro-cycles-table td{border:1px solid var(--border);padding:5px 8px;text-align:left}
.ro-cycles-table th{background:var(--cream);color:var(--navy);font-size:11px}
/* Pastille agrégée « renouvellements à préparer » dans l'agenda */
.ag-ev-renouv{--agc:#8e44ad;background:color-mix(in srgb,var(--agc) 16%,white);border-left:3px solid var(--agc);font-weight:600;color:#5b2c72}
.ag-ev-renouv:hover{background:color-mix(in srgb,var(--agc) 30%,white)}
@media(max-width:640px){
  .ro-row{flex-direction:column}
  .ro-row-actions{flex-direction:row;flex-wrap:wrap;width:100%}
}

/* ── ☑️ Module Tâches (v4.59) ─────────────────────────────────────── */
.tk-row{display:flex;gap:10px;align-items:flex-start;padding:9px 12px;background:#fff;border:1px solid var(--border);border-radius:10px;margin-bottom:6px}
.tk-row.tk-done{opacity:.75}
.tk-row.tk-done .tk-titre{text-decoration:line-through;color:var(--text-light)}
.tk-check{width:20px;height:20px;flex:none;cursor:pointer;margin-top:2px;accent-color:var(--gold)}
.tk-titre{font-weight:600}
.tk-meta{font-size:12px;color:var(--text-light);margin-top:3px;display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.tk-badge{display:inline-block;border-radius:8px;padding:1px 8px;font-size:11px;font-weight:700;vertical-align:1px}
.tk-badge-mission{background:var(--gold);color:#fff}
.tk-badge-perso{background:var(--border);color:var(--text-light);font-weight:600}
.tk-retard{color:#c0392b;font-weight:700}
.tk-chip{display:inline-block;background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:1px 8px;font-size:11px;cursor:pointer;color:var(--text)}
.tk-chip:hover{border-color:var(--gold)}
.tk-sec-title{font-weight:700;margin:16px 0 8px;color:var(--navy)}
/* Badge de type de contact dans la liste Suivi (v4.60 : la liste mêle
   laboratoires et autres contacts ayant un suivi RDV). */
.sl-type-badge{display:inline-block;margin-left:8px;background:var(--bg);border:1px solid var(--border);color:var(--text-light);border-radius:8px;padding:1px 7px;font-size:10px;font-weight:600;vertical-align:1px}
/* Analyse IA en attente d'une pièce de l'étape 1 (v4.61) : dit CE QUI manque
   plutôt que d'afficher un bouton « Générer » muet. */
.bp-ia-attente{background:#fff8e1;border:1px solid #e8d9a0;border-radius:8px;padding:8px 10px;font-size:12.5px;color:#6b5500;margin:0 0 10px}
/* Refus de bilan (v4.63) : puce d'état + bouton discret de déclaration. */
.bp-refus-chip{background:#f4f4f6;border:1px solid var(--border);color:var(--text-light);border-left:4px solid #999!important}
.bp-refus-btn{background:transparent;border:1px solid var(--border);color:var(--text-light);padding:2px 7px;line-height:1.4}
.bp-refus-btn:hover{border-color:#c0392b;color:#c0392b}

/* ===== Module Entretiens pharmaceutiques (ent*) ===== */
.ent-badge{display:inline-flex;align-items:center;padding:3px 10px;border-radius:12px;font-size:12px;font-weight:600;white-space:nowrap}
.ent-badge-gris{color:#555;background:#eceff1}
.ent-card{background:#fff;border:1.5px solid var(--border);border-radius:12px;padding:16px 18px;margin:0 0 14px}
.ent-l{display:block;font-size:12px;font-weight:600;color:var(--text-light);margin:10px 0 4px}
.ent-lbl{font-size:12px;color:var(--text-light);text-transform:uppercase;letter-spacing:.03em;margin-right:4px}
.ent-grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px}
@media(max-width:640px){.ent-grid2{grid-template-columns:1fr}}
.ent-check{display:inline-flex;align-items:flex-start;gap:8px;font-size:13px;line-height:1.4;cursor:pointer}
.ent-check input{margin-top:2px}
.ent-sugg{position:absolute;z-index:40;left:0;right:0;top:100%;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow);max-height:260px;overflow:auto}
.ent-sugg-item{padding:8px 10px;font-size:13px;cursor:pointer;border-bottom:1px solid var(--cream-dark)}
.ent-sugg-item:last-child{border-bottom:none}
.ent-sugg-item:hover{background:var(--cream)}
.ent-rangs{display:flex;flex-wrap:wrap;gap:10px}
.ent-rang{display:flex;flex-direction:column;gap:2px;min-width:130px;padding:10px 12px;border:1.5px solid var(--border);border-radius:10px;background:#fff;cursor:pointer;text-align:left;font-family:inherit}
.ent-rang:hover{background:var(--cream)}
.ent-rang-todo{cursor:default;opacity:.7;background:var(--cream)}
.ent-rang-n{font-weight:600;font-size:13px;color:var(--text)}
.ent-q{padding:10px 0;border-bottom:1px solid var(--cream-dark)}
.ent-q:last-child{border-bottom:none}
.ent-q-lbl{display:block;font-size:14px;font-weight:500;color:var(--text);margin-bottom:2px}
.ent-q-aide{margin:0 0 6px;font-size:12px}
.ent-radios{display:flex;gap:16px;flex-wrap:wrap;margin-top:4px}
.ent-radio{display:inline-flex;align-items:center;gap:6px;font-size:13px;cursor:pointer}
.ent-multi{margin-top:4px}
.ent-facteur{margin:4px 0}
.ent-module h3{font-size:15px;color:var(--navy)}

/* ── Module MSSanté (messagerie sécurisée) — préfixe .mss- ── */
.mss-wrap{max-width:820px;margin:0 auto}
.mss-alert{border-radius:10px;padding:12px 16px;margin:10px 0;font-size:14px;line-height:1.5}
.mss-alert code{background:rgba(0,0,0,.06);padding:1px 5px;border-radius:4px;font-size:12px}
.mss-alert-gold{background:var(--gold-light);color:#5a4a12;border:1px solid var(--gold)}
.mss-alert-red{background:#fdecea;color:#8a2018;border:1px solid #e0a49c}
.mss-alert-green{background:var(--green-light);color:#155e37;border:1px solid #9ed3b3}
.mss-compose{background:var(--white);border:1px solid var(--cream-dark);border-radius:12px;padding:20px}
.mss-label{display:block;font-size:12px;font-weight:700;color:var(--navy);text-transform:uppercase;letter-spacing:.6px;margin-bottom:6px}
.mss-input{width:100%;padding:11px 13px;border:2px solid var(--border);border-radius:9px;font-family:'DM Sans',sans-serif;font-size:14px;color:var(--text);background:var(--cream)}
.mss-input:focus{outline:none;border-color:var(--gold)}
.mss-textarea{resize:vertical;min-height:150px;line-height:1.55}
.mss-help{font-size:12px;color:var(--text-light);margin-top:5px}
.mss-help code{background:var(--cream-dark);padding:1px 5px;border-radius:4px}
.mss-dest-toggle{display:flex;gap:8px;margin-bottom:10px}
.mss-pj-add{display:inline-flex;align-items:center;gap:6px;cursor:pointer;margin-top:8px;padding:9px 14px;border:1.5px dashed var(--gold);border-radius:9px;color:var(--navy);font-size:13px;font-weight:600;background:var(--cream)}
.mss-pj-add:hover{background:var(--cream-dark)}
.mss-pj-row{display:flex;align-items:center;gap:10px;padding:8px 12px;background:var(--cream);border-radius:8px;margin-top:6px}
.mss-pj-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;color:var(--navy)}
.mss-pj-size{font-size:12px;color:var(--text-light);flex:none}
.mss-pj-total{margin-top:8px;font-size:13px;color:var(--text-light);font-weight:600}
.mss-pj-over{color:var(--red)}
.mss-hds-note{margin-top:16px;font-size:12px;color:var(--text-light);background:var(--cream);border-left:3px solid var(--gold);border-radius:6px;padding:10px 14px;line-height:1.5}
.mss-contact-addr{font-family:monospace;font-size:13px;color:var(--navy);background:var(--cream);padding:2px 8px;border-radius:6px}
/* Journal */
.mss-journal{display:flex;flex-direction:column;gap:8px;margin-top:8px}
.mss-jitem{background:var(--white);border:1px solid var(--cream-dark);border-radius:10px;padding:12px 14px}
.mss-jitem-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.mss-jitem-to{font-family:monospace;font-size:13px;color:var(--navy);word-break:break-all}
.mss-jitem-pj{font-size:12px;color:var(--text-light);margin-left:auto}
.mss-jitem-meta{font-size:12px;color:var(--text-light);margin-top:5px}
.mss-jitem-err{font-size:12px;color:var(--red);margin-top:5px;white-space:pre-wrap;word-break:break-word}
.mss-badge{display:inline-block;font-size:11px;font-weight:700;padding:2px 8px;border-radius:20px;letter-spacing:.3px}
.mss-badge-green{background:var(--green-light);color:#155e37}
.mss-badge-red{background:#fdecea;color:#8a2018}
.mss-badge-gray{background:var(--cream-dark);color:var(--text-light)}
.mss-badge-gold{background:var(--gold-light);color:#5a4a12}
/* Indicateur de lecture d'un message recu : discret (l'info utile est QUI/QUAND,
   pas un aplat de couleur qui concurrencerait le badge « nouveau »). */
.mss-lu-mention{font-size:.78rem;color:var(--text-light);font-weight:500}
/* Annuaire Sante national (ANS) — recherche d'un professionnel + sa BAL. */
.mss-ann-form{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:6px}
.mss-ann-form .mss-input{flex:1 1 160px;min-width:130px;margin:0}
.mss-ann-dest{background:var(--cream);border:1px solid var(--cream-dark);border-radius:10px;
  padding:8px 12px;margin-bottom:10px;font-size:.9rem;word-break:break-word}
.mss-ann-list{display:flex;flex-direction:column;gap:10px;margin-top:12px}
.mss-ann-item{background:var(--white);border:1px solid var(--cream-dark);border-radius:12px;padding:12px 14px}
.mss-ann-item-sel{border-color:var(--gold);box-shadow:0 0 0 2px var(--gold-light)}
.mss-ann-qui{font-weight:700;color:var(--navy)}
/* Profession/specialite + ville : ce sont EUX qui departagent les homonymes. */
.mss-ann-meta{display:flex;gap:12px;flex-wrap:wrap;color:var(--text-light);font-size:.82rem;margin-top:3px}
/* Lieux d'exercice : une personne = N PractitionerRole a l'ANS, on les liste tous
   (ils departagent deux homonymes dont aucun n'a publie de boite). */
.mss-ann-lieux{margin:6px 0 0 0;padding-left:18px;color:var(--text-light);font-size:.82rem}
.mss-ann-lieux li{margin:1px 0}
/* Une BOITE = une ligne avec SON bouton : le destinataire est un couple
   (personne, boite), jamais une personne — cf. mssAnnChoisir. */
.mss-ann-bal{margin-top:8px;font-size:.88rem;word-break:break-all;
  border:1px solid var(--cream-dark);border-radius:9px;padding:8px 10px;background:var(--cream)}
.mss-ann-bal-sel{border-color:var(--gold);background:var(--gold-light)}
.mss-ann-bal .mss-ann-actions{margin-top:6px}
.mss-ann-bal-none{color:var(--text-light);font-style:italic;background:transparent;border-style:dashed}
/* Libelle de la boite fourni par l'ANS (« Secretariat ») : souvent la SEULE chose
   qui distingue deux boites d'un meme professionnel. */
.mss-ann-ballib{color:var(--text-light);font-size:.85rem}
.mss-ann-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
/* v4.141 — ⚕️ Annuaire médecin (OUTILS → Base de données) : mêmes cartes que la rédaction
   MSSanté, plus le rapprochement avec les fiches du carnet. */
.annmed-wrap{max-width:1100px}
.annmed-source{font-size:12px;color:var(--text-light);flex:1;min-width:200px}
.annmed-form{margin-top:4px}
.annmed-form .annmed-rpps{flex:0 1 200px;min-width:150px}
.annmed-ou{font-size:12px;color:var(--text-light);font-weight:600}
.annmed-carnet{margin-top:8px;font-size:.84rem;background:var(--cream);border:1px dashed var(--cream-dark);border-radius:9px;padding:6px 10px}
.annmed-carnet-ok{background:#e8f5ee;border:1px solid #9fd3b4;color:#1a5c38}
.annmed-lien{color:var(--navy);font-weight:600}
.annmed-origine{margin-top:12px;display:flex;gap:10px;flex-wrap:wrap;align-items:center}
/* Téléphone : la source passe sous le titre, et « ou » sur sa propre ligne, au-dessus du RPPS. */
@media (max-width: 600px) {
  .annmed-source{flex-basis:100%}
  .annmed-ou{flex:1 1 100%;text-align:center}
}
/* v4.141 — adresse MSSanté EN TÊTE de la ligne d'un contact. */
.contact-line-mss{display:inline-flex;align-items:center;gap:3px;font-size:10px;font-weight:600;color:var(--navy);background:var(--gold-light);border:1px solid var(--gold);border-radius:10px;padding:0 7px;word-break:break-all}
.contact-line-mss-in{font-weight:700}
/* Piece jointe hors plafond unitaire : signalee SUR SA LIGNE (un message global
   ne dit pas laquelle retirer quand il y en a six). */
.mss-pj-row-over{background:#fdecec;border-radius:8px}
.mss-pj-row-over .mss-pj-size{color:#b3261e;font-weight:600}
/* Rapprochement DEDUIT (sujet + correspondant) et non prouve par un en-tete :
   badge volontairement plus discret que le doré, pour que l'oeil fasse la
   difference entre « verifie » et « probable ». */
.mss-badge-soft{background:var(--cream);color:var(--text-light);border:1px dashed var(--cream-dark)}
/* Ligne de journal relisible : le contenu vit chez l'operateur (3 mois), pas ici. */
.mss-jitem-open{cursor:pointer}
.mss-jitem-open:hover{background:var(--cream)}
.mss-jitem-relire{margin-left:auto;color:var(--gold);font-size:.8rem;font-weight:600}
.mss-contact-rpps{color:var(--text-light);font-size:.78rem}
.mss-pager{display:flex;align-items:center;gap:10px;justify-content:center;margin-top:14px}
/* Admin */
.mss-card{background:var(--white);border:1px solid var(--cream-dark);border-radius:12px;padding:16px 18px;margin-top:14px}
.mss-card-title{font-size:13px;font-weight:700;color:var(--navy);text-transform:uppercase;letter-spacing:.6px;margin-bottom:10px}
.mss-cert{font-family:monospace;font-size:12.5px;line-height:1.7;color:var(--text);word-break:break-word}
.mss-cfg{display:grid;grid-template-columns:1fr 1fr;gap:6px 20px}
.mss-kv{display:flex;justify-content:space-between;gap:10px;font-size:13px;padding:4px 0;border-bottom:1px solid var(--cream)}
.mss-kv span{color:var(--text-light)}
.mss-kv strong{color:var(--navy)}
.mss-diag{margin-top:12px;background:var(--navy);color:#e7edf7;padding:14px;border-radius:9px;font-size:12px;line-height:1.5;max-height:420px;overflow:auto;white-space:pre-wrap;word-break:break-word}
@media(max-width:640px){.mss-cfg{grid-template-columns:1fr}}
.mss-global-banner{position:fixed;left:0;right:0;bottom:0;z-index:300;background:#8a2018;color:#fff;padding:10px 16px;display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:13px;box-shadow:0 -2px 10px rgba(0,0,0,.25);flex-wrap:wrap}
.mss-global-banner button{background:rgba(255,255,255,.18);color:#fff;border:1px solid rgba(255,255,255,.45);border-radius:7px;padding:5px 12px;font-size:12px;cursor:pointer;font-weight:600}
.mss-global-banner button:hover{background:rgba(255,255,255,.30)}

/* ── Tableau de bord pharma (fréquentation & fidélité) — préfixe .pharma- ── */
.pharma-wrap{max-width:1100px;margin:0 auto}
.pharma-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;margin:12px 0}
.pharma-card{background:var(--white);border:1px solid var(--cream-dark);border-radius:12px;padding:14px 16px}
.pharma-card-t{font-size:11px;font-weight:700;color:var(--navy);text-transform:uppercase;letter-spacing:.6px}
.pharma-card-n{font-family:'Playfair Display',serif;font-size:34px;line-height:1.1;color:var(--navy);margin:4px 0 2px}
.pharma-card-s{font-size:12px;color:var(--text-light)}
.pharma-card-h{font-size:11px;color:var(--text-light);opacity:.75;margin-top:4px}
.pharma-evo{font-weight:700;margin-left:4px;white-space:nowrap}
.pharma-evo-up{color:var(--green)}
.pharma-evo-down{color:var(--red)}
.pharma-block{background:var(--white);border:1px solid var(--cream-dark);border-radius:12px;padding:16px 18px;margin-bottom:14px}
.pharma-block-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.pharma-block-t{font-size:13px;font-weight:700;color:var(--navy);text-transform:uppercase;letter-spacing:.6px}
.pharma-note{font-size:12px;color:var(--text-light);background:var(--cream);border-left:3px solid var(--gold);border-radius:6px;padding:9px 12px;margin-top:10px;line-height:1.5}
.pharma-note-warn{border-left-color:#e08a1e;background:#fdf5e7;color:#7a5510}
/* Histogramme (pur CSS, aucune bibliothèque) */
.pharma-graphe{display:flex;align-items:flex-end;gap:2px;height:170px;padding-top:16px;overflow-x:auto}
.pharma-bar-wrap{flex:1;min-width:16px;height:100%;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;position:relative}
.pharma-bar{width:74%;background:linear-gradient(180deg,var(--gold-light),var(--gold));border-radius:3px 3px 0 0;min-height:0;transition:height .2s}
.pharma-bar-wrap:hover .pharma-bar{background:var(--navy)}
.pharma-bar-val{font-size:9px;color:var(--text-light);height:12px;line-height:12px}
.pharma-bar-lbl{font-size:9px;color:var(--text-light);margin-top:4px;white-space:nowrap;transform:rotate(-45deg);transform-origin:center;height:22px}
/* Répartition par segment */
.pharma-seg-row{display:flex;align-items:center;gap:10px;padding:6px 0;font-size:13px}
.pharma-seg-pastille{width:10px;height:10px;border-radius:50%;flex:none}
.pharma-seg-lbl{min-width:120px;color:var(--navy);font-weight:600}
.pharma-seg-bar{flex:1;height:9px;background:var(--cream-dark);border-radius:5px;overflow:hidden;min-width:60px}
.pharma-seg-bar>span{display:block;height:100%;border-radius:5px}
.pharma-seg-n{min-width:60px;text-align:right;font-weight:700;color:var(--navy)}
.pharma-seg-pct{min-width:44px;text-align:right;color:var(--text-light);font-size:12px}
/* Onglets de segment */
.pharma-seg-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.pharma-seg-tab{padding:7px 14px;border-radius:20px;border:1.5px solid;background:var(--white);font-family:'DM Sans',sans-serif;font-size:13px;font-weight:600;cursor:pointer;transition:all .15s}
.pharma-seg-tab:hover{filter:brightness(.95)}
.pharma-table td,.pharma-table th{vertical-align:middle}
.pharma-rang{color:var(--text-light);font-size:12px;text-align:center}
.pharma-tel{color:var(--navy);text-decoration:none;white-space:nowrap}
.pharma-badge{display:inline-block;color:#fff;font-size:11px;font-weight:700;padding:2px 9px;border-radius:20px}
@media(max-width:640px){
  .pharma-card-n{font-size:28px}
  .pharma-seg-lbl{min-width:90px;font-size:12px}
  .pharma-graphe{height:140px}
}
.pharma-card-u{font-family:'DM Sans',sans-serif;font-size:12px;font-weight:600;color:var(--text-light);margin-left:5px;text-transform:uppercase;letter-spacing:.4px}
.pharma-note-alerte{border-left-color:var(--red);background:#fdecea;color:#8a2018;font-size:13px}
.mss-corps{margin-top:10px;padding:12px;background:var(--cream);border-radius:8px;font-size:14px;line-height:1.6;color:var(--text);word-break:break-word;overflow-x:auto}
.mss-corps img{max-width:100%}
/* ⚠️ Corps d'un message reçu : rendu dans une IFRAME CLOISONNÉE (sandbox sans
   allow-scripts ni allow-same-origin). Hauteur FIXE avec défilement interne,
   assumé : mesurer le contenu exigerait un script DANS l'iframe, c'est-à-dire
   exactement ce qu'on vient d'interdire. */
.mss-corps{padding:0;background:transparent}
.mss-jfiltres{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:10px}
.mss-jfiltres select{padding:5px 8px;border:1px solid var(--border);border-radius:6px;background:#fff;font-size:13px}
.mss-jfiltre-check{display:flex;align-items:center;gap:5px;font-size:13px;color:var(--text-light);cursor:pointer}
.mss-corps-frame{display:block;width:100%;height:min(60vh,520px);border:1px solid var(--border);
  border-radius:8px;background:#fff}
@media(max-width:700px){.mss-corps-frame{height:min(55vh,420px)}}

/* ── ✉️ Correspondances médecins — préfixe .corr- ─────────────────────────────
   Charte du Carnet (navy / gold / cream), mobile-first : l'outil est utilisé au
   comptoir, souvent sur tablette ou téléphone. */
.corr-wrap{max-width:1100px}
.corr-kpis{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.corr-kpi{border:1px solid var(--border);border-radius:10px;padding:10px 16px;background:#fff;
  cursor:pointer;min-width:120px;font-size:12px;color:var(--text-light);transition:box-shadow .15s}
.corr-kpi:hover{box-shadow:var(--shadow-sm)}
.corr-kpi b{display:block;font-size:22px;line-height:1.2;color:var(--navy)}
.corr-filtres{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px;align-items:center}
.corr-table{width:100%;border-collapse:collapse;font-size:13px;background:#fff}
.corr-table th{text-align:left;padding:8px 10px;background:var(--cream);color:var(--navy);
  font-weight:600;border-bottom:2px solid var(--border);white-space:nowrap}
.corr-table td{padding:8px 10px;border-bottom:1px solid var(--cream-dark);vertical-align:top}
.corr-table tbody tr:hover{background:var(--cream)}
.corr-sub{font-size:11px;color:var(--text-light);line-height:1.45}
.corr-ref{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;
  background:var(--cream);border:1px solid var(--border);border-radius:5px;padding:1px 5px;white-space:nowrap}
.corr-ref-big{font-size:15px;padding:3px 8px}
.corr-badge{display:inline-block;padding:2px 8px;border-radius:10px;color:#fff;font-size:11px;
  font-weight:600;white-space:nowrap}
.corr-vide{text-align:center;color:var(--text-light);padding:34px 16px;font-size:14px}
.corr-form{display:flex;flex-direction:column;gap:14px;max-width:820px}
.corr-grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.corr-radio{display:block;font-size:13px;margin:4px 0;cursor:pointer}
.corr-radio input{width:auto;margin-right:6px;vertical-align:middle}
.corr-corps{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;line-height:1.5;
  white-space:pre-wrap;resize:vertical}
.corr-objet{background:var(--cream);border:1px solid var(--border);border-radius:8px;
  padding:8px 10px;font-size:13px;margin-bottom:6px}
.corr-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}
.corr-detail{display:flex;flex-direction:column;gap:12px}
.corr-dhead{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.corr-h3{font-family:'Playfair Display',serif;font-size:16px;color:var(--navy);margin:16px 0 6px}
.corr-info{border:1px solid var(--border);border-radius:8px;padding:8px 12px;background:#fff;font-size:13px}
.corr-alerte{border-left:4px solid var(--red);background:#fdf3f2;border-radius:8px;padding:10px 14px;font-size:13px}
.corr-alerte-info{border-left-color:var(--gold);background:var(--cream)}
.corr-fil{display:flex;flex-direction:column;gap:10px}
.corr-fil-item{border:1px solid var(--border);border-radius:10px;padding:10px 12px;background:#fff}
.corr-fil-entrant{border-left:4px solid var(--green)}
.corr-fil-sortant{border-left:4px solid var(--navy-light)}
.corr-fil-head{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:6px;font-size:13px}
.corr-note{background:var(--cream);border-radius:6px;padding:6px 10px;font-size:13px;margin:4px 0}
.corr-urps{display:flex;gap:16px;align-items:center;flex-wrap:wrap;
  border:1px solid var(--border);border-radius:10px;padding:10px 14px;background:#fff}
.corr-details{border:1px solid var(--border);border-radius:10px;padding:10px 14px;background:#fff}
.corr-details summary{cursor:pointer;font-size:13px;color:var(--navy);font-weight:600}
.corr-bars{display:flex;align-items:flex-end;gap:5px;height:150px;padding:8px;
  border:1px solid var(--border);border-radius:10px;background:#fff}
.corr-bar{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;height:100%}
.corr-bar-v{width:100%;background:linear-gradient(180deg,var(--gold-light),var(--gold));border-radius:4px 4px 0 0;min-height:3px}
.corr-bar-l{font-size:10px;color:var(--text-light);margin-top:4px}
.corr-fiche-head{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:8px}
@media(max-width:700px){
  .corr-grid2{grid-template-columns:1fr}
  .corr-kpi{flex:1;min-width:calc(50% - 6px);padding:8px 10px}
  .corr-kpi b{font-size:18px}
  /* Sur téléphone la table déborde : on masque la colonne « Objet », la moins
     structurante — la référence, le patient et le statut restent lisibles.
     ⚠️ CIBLÉE SUR LA SEULE TABLE DE LISTE (`.corr-table-liste`). Écrite sur
     `.corr-table`, elle s'appliquait à TOUTES les tables du module : dans
     l'écran ⚙️ Types, la 5e colonne est celle des ACTIONS — plus aucun bouton
     ✏️/🗑 n'était visible sur la tablette du comptoir (0 sur 26, mesuré). */
  .corr-table-liste th:nth-child(5),.corr-table-liste td:nth-child(5){display:none}
}

/* ═══════════════ 💊 Référentiel Médicaments (BDPM) — préfixe .med-* ═══════ */
/* v4.136 — le champ de recherche est dans l'en-tête (filter-input, comme l'annuaire patients). */
.med-search-aide { font-size: 11px; color: var(--text-light); margin: 8px 0 6px; }
.med-vide { padding: 28px 10px; text-align: center; color: var(--text-light); }
.med-note { font-size: 11px; color: var(--text-light); }
.med-mono { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; }
.med-noncom { color: #a04000; font-size: 11px; }

.med-liste { display: flex; flex-direction: column; gap: 6px; margin-top: 10px; }
.med-item { background: #fff; border: 1px solid #e6e0d2; border-radius: 10px; padding: 11px 13px; cursor: pointer; transition: .12s; }
.med-item:hover { border-color: var(--gold); box-shadow: 0 2px 8px rgba(0,0,0,.06); }
.med-item-nom { font-weight: 600; color: var(--navy); }
.med-item-meta { font-size: 12px; color: var(--text-light); margin-top: 3px; }

.med-badge { display: inline-block; font-size: 10.5px; font-weight: 700; padding: 2px 7px; border-radius: 20px; vertical-align: middle; }
.med-badge-or { background: #fdf3d7; color: #8a6d1f; }
.med-badge-noir { background: #2c3e50; color: #fff; }
.med-badge-gris { background: #eef1f4; color: #5d6d7e; }

.med-alerte { border-radius: 10px; padding: 11px 14px; margin: 10px 0; font-size: 13.5px; line-height: 1.45; }
.med-alerte-rouge { background: #fdecea; border: 1px solid #c0392b; color: #922b21; }
.med-alerte-info { background: var(--cream); border: 1px solid #e6e0d2; color: var(--navy); }

.med-dispo { border: 2px solid; border-radius: 10px; padding: 12px 14px; margin: 12px 0; }
.med-dispo-titre { font-weight: 700; font-size: 15px; }
.med-dispo-detail { font-size: 12.5px; color: #444; margin-top: 4px; }
.med-dispo-lien { display: inline-block; margin-top: 6px; font-size: 12px; color: var(--navy); }

.med-fiche-tete { margin: 14px 0 6px; }
.med-fiche-nom { font-family: 'Playfair Display', serif; color: var(--navy); margin: 0 0 4px; font-size: 21px; }
.med-fiche-badges { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 6px; }
.med-fiche-meta { font-size: 12.5px; color: var(--text-light); }

.med-carte { background: #fff; border: 1px solid #e6e0d2; border-radius: 10px; padding: 13px 15px; margin: 12px 0; }
.med-carte-info { background: #fffdf5; border-color: var(--gold); }
.med-carte-lien { background: var(--cream); }
.med-carte-titre { font-size: 11px; font-weight: 700; color: var(--navy); text-transform: uppercase; letter-spacing: .6px; margin-bottom: 9px; }
.med-info-item { font-size: 13.5px; line-height: 1.5; margin-bottom: 8px; }
.med-info-item a { color: var(--navy); }
.med-ul { margin: 0; padding-left: 20px; font-size: 13.5px; line-height: 1.6; }

.med-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.med-table th { text-align: left; font-size: 10.5px; text-transform: uppercase; letter-spacing: .5px; color: var(--text-light); border-bottom: 1px solid #e6e0d2; padding: 6px 8px; white-space: nowrap; }
.med-table td { padding: 8px; border-bottom: 1px solid #f2ede1; vertical-align: top; }

.med-groupe { display: flex; flex-direction: column; gap: 5px; }
.med-groupe-item { padding: 8px 10px; border: 1px solid #eee7d8; border-radius: 8px; font-size: 13.5px; cursor: pointer; }
.med-groupe-item:hover { border-color: var(--gold); }
.med-groupe-courant { background: var(--cream); font-weight: 600; cursor: default; }
.med-groupe-absent { color: var(--text-light); cursor: default; font-size: 12.5px; }

.med-chips { display: flex; gap: 6px; flex-wrap: wrap; margin: 10px 0; }
.med-chip { border: 1px solid #e6e0d2; background: #fff; border-radius: 20px; padding: 5px 12px; font-size: 12.5px; cursor: pointer; color: var(--navy); }
.med-chip-on { background: var(--navy); color: #fff; border-color: var(--navy); }

/* ⚠️ Les mentions légales ne sont pas décoratives : elles portent la SOURCE et la
   DATE DES DONNÉES, et la phrase qui borne l'usage du module. Elles restent
   lisibles (pas de gris trop clair) et présentes sur chaque écran. */
.med-mentions { font-size: 11px; color: #6b6b6b; line-height: 1.5; margin: 18px 0 8px; padding-top: 10px; border-top: 1px solid #e6e0d2; }

@media (max-width: 700px) {
  .med-table th:nth-child(4), .med-table td:nth-child(4) { display: none; }
}

/* Une ligne de rupture dont la spécialité n'est pas publiée au référentiel :
   elle reste LISIBLE (la rupture est réelle) mais n'invite pas à un clic qui
   n'aboutirait qu'à un message d'erreur. */
.med-item-inerte { cursor: default; }
.med-item-inerte:hover { background: inherit; }
/* Déclaration qui ne concerne pas la présentation scannée : présente, mais
   visuellement mise en retrait — elle ne doit pas se lire comme une alerte
   sur la boîte qu'on tient. */
.med-dispo-autre .med-dispo-titre { font-weight: 600; }


/* ═══ 💊 Scanner par l'appareil photo (module Médicaments) ═══════════════════ */
.med-cam-btn { white-space:nowrap; }
/* Recouvrement plein écran. z-index sous les modales (200) et sous le kiosque,
   au-dessus de tout le reste : on filme, on ne navigue pas. */
.med-cam {
  position:fixed; inset:0; z-index:195; background:#000;
  display:flex; align-items:center; justify-content:center;
}
.med-cam video { width:100%; height:100%; object-fit:cover; }
/* Cadre de visée : purement indicatif — le décodeur lit toute l'image, viser
   trop précisément ferait rater des lectures qui auraient marché. */
.med-cam-cadre {
  position:absolute; left:50%; top:50%; transform:translate(-50%,-50%);
  width:min(78vw,420px); height:min(34vw,180px);
  border:3px solid rgba(255,255,255,.9); border-radius:12px;
  box-shadow:0 0 0 100vmax rgba(0,0,0,.45);
}
.med-cam-aide {
  position:absolute; left:0; right:0; top:calc(50% + min(17vw,90px) + 18px);
  text-align:center; color:#fff; font-size:15px; padding:0 18px; text-shadow:0 1px 3px #000;
}
.med-cam-actions {
  position:absolute; left:0; right:0; bottom:calc(18px + env(safe-area-inset-bottom,0px));
  display:flex; gap:10px; justify-content:center;
}
.med-cam-actions .btn { min-width:130px; }
/* Repère de mise au point : montre OÙ l'on vient de faire le point. Sans retour
   visible, on ne sait pas si le geste a été pris en compte, et on tape partout. */
.med-cam-point {
  position:absolute; display:none; width:64px; height:64px; margin:-32px 0 0 -32px;
  border:2px solid #f5c34b; border-radius:50%; pointer-events:none;
  animation:med-cam-pulse .9s ease-out;
}
@keyframes med-cam-pulse { from { transform:scale(1.5); opacity:0; } to { transform:scale(1); opacity:1; } }
/* ⚠️ La vidéo doit RECEVOIR les taps (mise au point) : le cadre et l'aide sont
   posés par-dessus, ils ne doivent pas les intercepter. */
.med-cam-cadre, .med-cam-aide { pointer-events:none; }


/* ═══ 🕰️ Bilan rétrospectif (entretien antidaté, administrateur seul) ═══════ */
.bp-retro-badge { font-size:13px; opacity:.85; cursor:help; }
/* Acte facturé au comptoir dont l'entretien n'est pas terminé (v4.104). Doré et
   discret : c'est un rappel, pas une alerte — l'état est légitime, il ne doit
   simplement pas être oublié. */
.bp-facture-tot { display:inline-block; font-size:10.5px; font-weight:700; color:#7a5c00;
  background:#fff6e0; border:1px solid #e0c260; border-radius:6px; padding:1px 6px;
  margin-left:4px; white-space:nowrap; cursor:help; vertical-align:middle; }
/* Non masquable : c'est la date ANTIDATÉE qui part sur le document du médecin. */
.bp-retro-bandeau {
  background:#fdf6e3; border:1px solid var(--gold); border-left:4px solid var(--gold);
  border-radius:8px; padding:10px 12px; margin:0 0 12px; font-size:13.5px; line-height:1.55;
}

/* Mémo ARCHIVÉ : conservé, mais visiblement hors service. Il n'apparaît que
   sous le filtre « 📦 Archivés » (ou « Actifs + archivés ») — le contraste
   atténué évite qu'on le prenne pour une procédure courante quand les deux
   sont affichés côte à côte. */
.memo-window.memo-archived { opacity: .72; border-style: dashed; background: var(--cream); }
.memo-window.memo-archived .memo-window-header { filter: grayscale(.35); }

/* ══════════════════════════════════════════════════════════════════════════
   eMAIL (v4.108) — messagerie de l'officine.
   Trois volets façon client de messagerie : dossiers / liste / lecture. Les
   deux canaux (email ordinaire et MSSanté) partagent l'onglet, PAS l'écran :
   ce sont deux régimes différents et les confondre serait le premier pas vers
   un compte rendu de santé parti en clair.
   ══════════════════════════════════════════════════════════════════════════ */
.email-subtabs { display:flex; gap:6px; margin:0 0 14px; border-bottom:2px solid var(--border); }
.email-subtab { padding:10px 18px; cursor:pointer; font-weight:600; font-size:14px; color:var(--text-light);
  border-radius:8px 8px 0 0; border:2px solid transparent; border-bottom:none; margin-bottom:-2px; white-space:nowrap;
  /* v4.125 — glisser-déposer des sous-onglets : le doigt glisse à l'horizontale
     sans que le navigateur prenne le geste pour un défilement (pan-y = le
     défilement VERTICAL lui reste), et la souris ne sélectionne pas le texte. */
  touch-action:pan-y; user-select:none; -webkit-user-select:none; -webkit-touch-callout:none; }
.email-subtab:hover { background:var(--cream); color:var(--navy); }
.email-subtab.active { background:var(--white); color:var(--navy); border-color:var(--border); border-bottom-color:var(--white); }
.email-subtab.email-subtab-drag { opacity:.55; cursor:grabbing; background:var(--cream); box-shadow:0 2px 8px rgba(0,0,0,.18); }
/* v4.148 — pastille des non-lus de la boîte de réception, sur chaque sous-onglet eMAIL.
   ⚠️ `[hidden]` redit explicitement : un `display` posé par la règle l'emporterait sur l'attribut,
   et une pastille vide resterait affichée. */
.email-subtab-nb { display:inline-block; min-width:18px; margin-left:7px; padding:0 6px; border-radius:10px;
  background:#c62828; color:#fff; font-size:11px; font-weight:700; line-height:18px; text-align:center; vertical-align:1px; }
.email-subtab-nb[hidden] { display:none; }
/* v4.130 — SECONDE RANGÉE de sous-onglets (COMPTOIR : Entretiens, Prescription).
   Volontairement plus discrète que la première : deux rangées identiques se
   liraient comme deux niveaux équivalents, et on ne saurait plus lequel commande
   l'autre. Elle n'est rendue que lorsque le sous-onglet courant a des enfants. */
.email-subtabs2 { margin:-10px 0 14px; border-bottom:1px solid var(--border); padding-left:10px; }
.email-subtabs2 .email-subtab { padding:7px 14px; font-size:13px; border-radius:0 0 6px 6px; }
.email-subtabs2 .email-subtab.active { border-bottom-color:var(--gold); }
@media (max-width:720px) {
  /* Sur téléphone les rangées défilent horizontalement plutôt que de se replier
     sur trois lignes qui mangeraient l'écran avant le premier contenu. */
  .email-subtabs { overflow-x:auto; flex-wrap:nowrap; -webkit-overflow-scrolling:touch; }
  .email-subtab { white-space:nowrap; padding:9px 12px; font-size:13px; }
  .email-subtabs2 .email-subtab { padding:7px 10px; font-size:12px; }
}

.ml-barre { display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin-bottom:10px; }
.ml-q { flex:1; min-width:220px; max-width:520px; }
/* v4.143.1 — L'ADRESSE DE LA BOÎTE se lit d'un coup d'œil (demande du titulaire) : en gras, surlignée
   en jaune et encadrée. Un seul élément pour les trois sous-onglets (Messagerie, Outlook, MSSanté) :
   c'est lui qui dit dans quelle boîte on travaille. Jamais coupée par « … » : sur un écran trop
   étroit, l'adresse passe à la ligne DANS son cadre plutôt que d'en perdre un morceau. */
.ml-boite-nom { margin-left:auto; font-size:13px; font-weight:700; color:var(--navy);
  background:#fff176; border:2px solid #b8860b; border-radius:3px; padding:3px 10px;
  max-width:100%; overflow-wrap:anywhere; }
.ml-boite-nom:empty { display:none; }
.ml-bandeau { background:var(--cream); border:1px solid var(--border); border-radius:8px;
  padding:9px 12px; margin:8px 0; font-size:13px; color:var(--text); }
.ml-bandeau-warn { background:#fff7e0; border-color:#e8c97a; }
.ml-bandeau-err { background:#fdecea; border-color:#f5b7b1; color:#922; }

/* ⚠️ La largeur de la LISTE est une variable (`--ml-liste-w`) : c'est elle que la
   poignée déplaçable (v4.118, `mlSplitStart`) fait varier, et elle est posée en
   style inline sur la grille par le rendu. Sans valeur : 380 px, comme avant. */
.ml-3volets { display:grid; grid-template-columns:var(--ml-doss-w,230px) var(--ml-liste-w,380px) 1fr; gap:12px;
  height:calc(100vh - var(--topbar-h) - 190px); min-height:420px; position:relative; }
/* Poignée entre la liste et la lecture : posée en ABSOLU sur la grille (elle
   n'occupe donc aucune colonne), centrée dans les 12 px de gouttière. */
.ml-split { position:absolute; top:0; bottom:0; width:10px; z-index:5; cursor:col-resize; touch-action:none;
  left:calc(var(--ml-doss-w,230px) + 12px + var(--ml-liste-w,380px) + 1px); }
.ml-split::after { content:''; position:absolute; left:4px; top:0; bottom:0; width:2px; border-radius:1px;
  background:transparent; transition:background .15s; }
.ml-split:hover::after, .ml-split.actif::after { background:var(--gold); }
.ml-dossiers, .ml-liste, .ml-lecture { background:var(--white); border:1px solid var(--border);
  border-radius:10px; overflow-y:auto; overflow-x:hidden; }
.ml-dossiers { padding:8px; }
.ml-dossier { display:flex; align-items:center; gap:8px; padding:8px 10px; border-radius:7px;
  cursor:pointer; font-size:14px; }
.ml-dossier:hover { background:var(--cream); }
.ml-dossier.actif { background:var(--navy); color:var(--white); font-weight:600; }
.ml-dossier-nom { flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.ml-pastille { background:var(--gold); color:var(--navy); font-size:11px; font-weight:700;
  border-radius:10px; padding:1px 7px; min-width:20px; text-align:center; }
.ml-dossier.actif .ml-pastille { background:var(--gold-light); }
.ml-dossier-note { margin:14px 6px 4px; font-size:11px; color:var(--text-light); line-height:1.4; }
/* Deuxième boîte (sous-onglet Outlook) : la lecture seule doit se VOIR. */
.ml2-badge { display:inline-flex; align-items:center; gap:5px; padding:4px 10px; border-radius:999px;
  background:#eef2f7; border:1px solid #cdd8e6; color:var(--navy); font-size:12px; font-weight:600; }
.ml2-lect-note { font-size:12px; color:var(--text-light); font-style:italic; }

.ml-filtres { display:flex; gap:6px; align-items:center; padding:8px 10px; border-bottom:1px solid var(--border);
  position:sticky; top:0; background:var(--white); z-index:2; flex-wrap:wrap; }
.ml-chip { font-size:12px; padding:3px 10px; border-radius:12px; background:var(--cream);
  border:1px solid var(--border); cursor:pointer; }
.ml-chip.actif { background:var(--navy); color:var(--white); border-color:var(--navy); }
.ml-compte { margin-left:auto; font-size:11px; color:var(--text-light); }

/* ⚠️ UNE SEULE GRILLE pour l'en-tête et pour les lignes : c'est ce qui fait de
   vraies COLONNES alignées, et non deux mises en page qui dérivent l'une de
   l'autre au premier ajustement. */
.ml-th, .ml-msg { display:grid; grid-template-columns:28px minmax(90px, 26%) 1fr auto;
  gap:8px; align-items:center; padding:8px 12px; }
.ml-th { position:sticky; top:0; z-index:2; background:var(--cream); border-bottom:1px solid var(--border);
  font-size:11px; text-transform:uppercase; letter-spacing:.03em; color:var(--text-light); }
.ml-th .ml-tri { cursor:pointer; user-select:none; white-space:nowrap; }
.ml-th .ml-tri:hover { color:var(--navy); }
.ml-th .ml-tri.actif { color:var(--navy); font-weight:700; }
.ml-fleche { margin-left:3px; font-size:9px; }
.ml-c { display:flex; align-items:center; justify-content:center; }
.ml-c input { cursor:pointer; width:15px; height:15px; }
.ml-msg { border-bottom:1px solid var(--cream-dark); cursor:pointer; }
.ml-msg:hover { background:var(--cream); }
.ml-msg.actif { background:var(--cream-dark); box-shadow:inset 3px 0 0 var(--gold); }
.ml-msg.coche { background:#fff7e0; }
.ml-msg.non-lu .ml-col-de, .ml-msg.non-lu .ml-col-obj { font-weight:700; color:var(--navy); }
.ml-col-de, .ml-col-obj { font-size:13px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; min-width:0; }
.ml-col-date { font-size:11px; color:var(--text-light); white-space:nowrap; }
.ml-msg-lu { font-size:11px; color:var(--green); margin-left:6px; }
/* ⚠️ Deux icônes PERMANENTES sur la ligne des filtres, plutôt qu'un bandeau qui
   surgit : un bandeau décale la liste sous le curseur au moment même où l'on
   coche, et masquait l'en-tête de colonnes. Inactives tant que rien n'est coché. */
.ml-actions { position:relative; display:inline-flex; align-items:center; gap:4px; margin-left:6px; }
.ml-actions-n { font-size:11px; font-weight:700; color:var(--navy); background:var(--gold);
  border-radius:9px; padding:1px 7px; }
.ml-ico { border:1px solid transparent; background:none; cursor:pointer; font-size:15px;
  line-height:1; padding:3px 5px; border-radius:6px; }
.ml-ico:hover:not(.off) { background:var(--cream-dark); border-color:var(--border); }
.ml-ico.off { opacity:.3; cursor:default; }
.ml-menu { position:absolute; top:26px; left:0; z-index:40; min-width:190px; max-height:320px;
  overflow:auto; background:var(--white); border:1px solid var(--border); border-radius:8px;
  box-shadow:0 6px 20px rgba(0,0,0,.16); padding:4px 0; }
.ml-menu-i { padding:6px 12px; font-size:13px; cursor:pointer; white-space:nowrap; }
.ml-menu-i:hover { background:var(--cream); }
.ml-menu-vide { padding:8px 12px; font-size:12px; color:var(--text-light); }
.ml-selbar-dest { font-size:12px; padding:3px 6px; border-radius:6px; border:1px solid var(--border); max-width:190px; }
.ml-dossier-actions { padding:8px 10px; border-top:1px solid var(--cream-dark); }
.ml-note-tri { font-size:11px; color:var(--text-light); padding:5px 12px; background:var(--cream); }
/* Sur téléphone, la colonne « De » ne peut pas rester aussi large que l'objet. */
@media (max-width: 900px) {
  .ml-th, .ml-msg { grid-template-columns:26px minmax(70px, 34%) 1fr auto; gap:6px; }
}
.ml-point { display:inline-block; width:8px; height:8px; border-radius:50%; background:var(--gold); margin-right:6px; }
.ml-ic { font-size:12px; flex-shrink:0; }
.ml-drapeau { color:var(--red); }
.ml-pagination { display:flex; gap:10px; align-items:center; justify-content:center; padding:10px; font-size:12px; }

.ml-lecture { display:flex; flex-direction:column; }
.ml-lect-head { padding:12px 16px; border-bottom:1px solid var(--border); flex-shrink:0; }
.ml-lect-top { display:flex; align-items:flex-start; gap:8px; margin-bottom:8px; }
.ml-lect-sujet { margin:0; font-size:17px; color:var(--navy); flex:1; min-width:0; word-break:break-word; }
.ml-lect-meta { font-size:12px; color:var(--text-light); line-height:1.6; word-break:break-word; }
.ml-lect-actions { display:flex; gap:6px; flex-wrap:wrap; padding:8px 16px; border-bottom:1px solid var(--cream-dark); flex-shrink:0; }
/* Sur ORDINATEUR les destinataires sont toujours affichés (il y a la place) et le
   bouton « Détails » n'a pas lieu d'être ; c'est sur téléphone qu'ils se replient. */
.ml-plus { display:none; }
.ml-retour { display:none; flex-shrink:0; border:0; background:none; padding:0 4px;
  font-size:22px; line-height:1; color:var(--navy); cursor:pointer; }
.ml-classer { position:relative; display:inline-flex; }
/* Menu qui s'ouvre VERS LE HAUT : sur téléphone la barre d'actions est en bas de
   l'écran, un menu déroulant vers le bas sortirait de la fenêtre. */
.ml-menu-haut { top:auto; bottom:calc(100% + 4px); left:auto; right:0; }
.ml-pieces { display:flex; gap:6px; flex-wrap:wrap; padding:8px 16px; flex-shrink:0; }
.ml-piece { background:var(--cream); border:1px solid var(--border); border-radius:16px;
  padding:4px 12px; font-size:12px; cursor:pointer; }
.ml-piece:hover { background:var(--cream-dark); }
.ml-piece-t { color:var(--text-light); }
/* ⚠️ L'iframe n'a ni allow-scripts ni allow-same-origin : le HTML d'un tiers ne
   peut RIEN exécuter. Hauteur fixe + défilement interne, assumé : mesurer le
   contenu exigerait un script DANS l'iframe, c'est-à-dire ce qu'on interdit. */
.ml-corps { flex:1; width:100%; border:0; background:var(--white); min-height:220px; }

.ml-attente, .ml-vide { padding:26px 16px; text-align:center; color:var(--text-light); font-size:13px; }
.ml-vide-lecture { padding-top:60px; }
.ml-err { padding:16px; color:#922; font-size:13px; }
.ml-err-note { margin-top:6px; font-size:11px; color:var(--text-light); }
.ml-vide-grand { text-align:center; padding:50px 20px; }
.ml-vide-ic { font-size:44px; margin-bottom:10px; }
.ml-vide-grand h3 { color:var(--navy); margin:0 0 8px; }
.ml-vide-grand p { color:var(--text-light); font-size:14px; line-height:1.6; }

.ml-compose-modal { max-width:820px !important; width:96vw; }
.ml-champ { display:flex; align-items:center; gap:10px; margin-bottom:8px; }
.ml-champ label { width:100px; flex-shrink:0; font-size:13px; color:var(--text-light); font-weight:600; }
.ml-champ .form-input { flex:1; }
.ml-editeur { min-height:220px; max-height:44vh; overflow-y:auto; text-align:left; }
.ml-pj-zone { display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin-top:10px; }
.ml-pj { display:inline-flex; align-items:center; gap:6px; background:var(--cream);
  border:1px solid var(--border); border-radius:14px; padding:3px 10px; font-size:12px; margin:2px; }
.ml-pj em { color:var(--text-light); font-style:normal; }
.ml-pj button { border:0; background:none; cursor:pointer; color:var(--red); font-size:13px; }
.ml-pj-trop { border-color:#f5b7b1; background:#fdecea; }
.ml-pj-alerte { color:#922; font-size:12px; font-weight:600; }
.ml-envoi-info { margin-top:10px; font-size:12px; color:var(--text-light); }

/* Mobile : les trois volets ne tiennent pas. La liste occupe l'écran, et
   ouvrir un message la REMPLACE (avec un bouton « ← Liste » pour revenir) —
   c'est ce que font tous les clients de messagerie sur téléphone. */
/* ── MSSanté sur la MÊME grille que les autres boîtes (v4.118) ─────────────
   Le formulaire de rédaction et le message reçu vivent dans le volet de lecture ;
   l'iframe cloisonnée y prend toute la hauteur disponible. */
.mss-3volets .mss-compose { border:0; border-radius:0; padding:14px 16px 20px; }
.mss-3volets .mss-corps { margin:0; padding:8px 16px 12px; flex:1; display:flex; min-height:240px; }
.mss-3volets .mss-corps-frame { flex:1; height:auto; min-height:240px; }
.mss-3volets .mss-jfiltres { padding:8px 10px; border-bottom:1px solid var(--border); margin:0; }
.mss-3volets .mss-badge { margin-right:4px; }
.mss-liste-titre { font-size:12px; font-weight:700; color:var(--navy); }
.mss-ic-soft { color:var(--text-light); }
.mss-lect-note { padding:8px 16px 12px; font-size:11px; color:var(--text-light); line-height:1.4; }

@media (max-width: 1100px) {
  .ml-3volets { grid-template-columns:200px 1fr; }
  .ml-split { display:none; }
  .ml-lecture { display:none; }
  .ml-3volets.ml-lecture-ouverte { grid-template-columns:200px 1fr; }
  .ml-3volets.ml-lecture-ouverte .ml-liste { display:none; }
  .ml-3volets.ml-lecture-ouverte .ml-lecture { display:flex; }
  .ml-retour { display:inline-block; }
}
@media (max-width: 720px) {
  /* ⚠️ LES DEUX SÉLECTEURS SONT NÉCESSAIRES : `.ml-3volets.ml-lecture-ouverte` du
     bloc 1100px (spécificité 0,2,0) l'emporterait sur `.ml-3volets` seul (0,1,0),
     et le volet de lecture atterrissait dans la colonne de 200 px laissée par les
     dossiers masqués — mesuré : 200 px de large sur un écran de 390 px. */
  .ml-3volets, .ml-3volets.ml-lecture-ouverte { grid-template-columns:1fr; }
  .ml-3volets { height:calc(100vh - var(--topbar-h) - 210px); }
  .ml-dossiers { max-height:130px; }
  .ml-3volets.ml-lecture-ouverte .ml-dossiers { display:none; }
  .ml-champ { flex-direction:column; align-items:stretch; gap:3px; }
  .ml-champ label { width:auto; }

  /* ── Lecture d'un message sur téléphone, d'après Outlook mobile ────────────
     Le message prend TOUT l'écran : la barre de recherche du dessus s'efface
     (`ml-barre-repli`), l'en-tête est compact, le corps occupe la place restante
     et les actions forment une barre d'ICÔNES EN BAS, à portée du pouce. */
  .ml-barre-repli { display:none; }
  .ml-3volets.ml-lecture-ouverte { height:calc(100vh - var(--topbar-h) - 150px); }
  .ml-lecture { overflow:hidden; }
  .ml-lect-head { padding:10px 12px; max-height:34vh; overflow-y:auto; }
  .ml-lect-sujet { font-size:16px; }
  .ml-retour { display:inline-flex; font-size:24px; padding:0 6px; }
  /* Destinataires repliés derrière « Détails » : trois lignes d'adresses
     poussaient le corps du message hors de l'écran. */
  .ml-lect-detail { display:none; }
  .ml-lect-detail.ouvert { display:block; }
  .ml-plus { display:inline-block; margin-left:8px; border:0; background:none; padding:0;
    font-size:12px; color:var(--navy); text-decoration:underline; cursor:pointer; }
  /* `order` positif = la barre passe EN DERNIER, donc en bas du volet. Les autres
     enfants gardent l'ordre 0 : pièces jointes et bandeaux restent au-dessus du corps. */
  /* ⚠️ `padding-right` = la place de la bulle ✨ (#ask-fab : 54 px + 12 de marge),
     qui est `position:fixed` en bas à droite. Sans cette réserve elle recouvrait
     le dernier bouton de la barre — « Supprimer » — et le rendait INTOUCHABLE.
     (La bulle est déplaçable depuis la v4.105, mais un recouvrement d'origine
     n'est pas quelque chose que l'équipe doit contourner elle-même.) */
  .ml-lect-actions { order:2; justify-content:space-around; gap:2px; padding:6px 70px 6px 4px;
    border-bottom:0; border-top:1px solid var(--border); background:var(--white); }
  /* Le libellé disparaît, l'icône reste — et le `title` porte le mot pour qui
     appuie longuement. Un seul balisage sert les deux tailles d'écran. */
  .ml-lect-actions .ml-lab { display:none; }
  .ml-lect-actions .btn { padding:9px 10px; font-size:17px; line-height:1; min-width:42px; }
  .ml-corps { min-height:0; }
  .ml-pieces { padding:6px 10px; }
}

/* v4.116 — Admin → Accès aux outils : « Opérateurs choisis » (une case par profil) */
.tool-ops{display:flex;flex-wrap:wrap;gap:6px 16px;margin-top:8px;padding:8px 10px;background:rgba(0,0,0,.035);border-radius:8px}
.tool-op{display:inline-flex;align-items:center;gap:6px;font-size:13px;cursor:pointer}
.tool-op input{width:auto;margin:0}
.tool-op-adm{opacity:.7;cursor:default}
.tool-op-note{font-size:11px;color:var(--text-light);flex-basis:100%}

/* ═══════════════════════════════════════════════════════════════════════
   v4.122 — 💳 FIDÉLITÉ (onglet) + 🗃️ BASE DONNÉE PRODUIT WIN (outil)
   Préfixe .fid-* / .win-*. Même grammaire que les sous-onglets de l'onglet eMAIL.
   ═══════════════════════════════════════════════════════════════════════ */
/* v4.132.2 — la barre des programmes REPREND la seconde rangée de COMPTOIR
   (`.email-subtabs.email-subtabs2`, celle d'Entretiens / Prescription) :
   le balisage porte les deux classes, il ne reste ici que ce qui est propre
   à la Fidélité. Deux copies des mêmes règles avaient divergé. */
.fid-subtabs { flex-wrap:wrap; }
.fid-subtab-off { opacity:.6; }
.fid-subtab-new { color:var(--gold); }
.fid-badge-nb { background:var(--gold); color:var(--navy); }
.fid-vide { padding:18px; text-align:center; color:var(--text-light); font-size:14px; }
.fid-err { color:var(--red); }
.fid-muted { color:var(--text-light); font-size:12px; }
.fid-warn { color:var(--red); font-size:12px; font-weight:600; }
.fid-num { white-space:nowrap; color:var(--text-light); font-weight:600; }
.fid-prog-head { display:flex; gap:16px; align-items:center; background:#fff; border:1px solid var(--border); border-radius:12px; padding:12px 16px; margin-bottom:12px; flex-wrap:wrap; }
.fid-prog-visuel { width:96px; max-height:140px; object-fit:contain; border-radius:8px; box-shadow:var(--shadow-sm); background:#fff; }
.fid-prog-infos { flex:1; min-width:200px; }
.fid-prog-nom { font-family:'Playfair Display',serif; font-size:20px; color:var(--navy); }
.fid-prog-offre { font-weight:600; color:var(--navy); margin:2px 0; }
.fid-prog-actions { display:flex; gap:8px; flex-wrap:wrap; }
.fid-recherche { display:flex; gap:10px; align-items:center; margin-bottom:10px; flex-wrap:wrap; }
.fid-q { flex:1; min-width:220px; max-width:560px; font-size:16px; padding:12px 14px; }
.fid-resultats { display:flex; flex-direction:column; gap:6px; margin-bottom:12px; }
.fid-res { display:flex; align-items:center; gap:12px; background:#fff; border:1px solid var(--border); border-radius:10px; padding:10px 14px; flex-wrap:wrap; }
.fid-res-nom { flex:1; min-width:200px; font-size:14px; }
.fid-nouveau { background:var(--cream); border:1px dashed var(--gold); border-radius:10px; padding:12px 14px; margin-bottom:10px; }
.fid-nouveau-titre { font-size:12px; color:var(--text-light); margin-bottom:8px; }
.fid-nouveau-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(160px,1fr)); gap:8px; }
.fid-nouveau-actions { display:flex; gap:8px; margin-top:8px; flex-wrap:wrap; }
.fid-chips { display:flex; gap:6px; flex-wrap:wrap; margin:6px 0 10px; }
.fid-chip { border:1.5px solid var(--border); background:#fff; border-radius:16px; padding:5px 12px; font-size:12px; cursor:pointer; color:var(--text); font-family:'DM Sans',sans-serif; }
.fid-chip.active { background:var(--navy); color:#fff; border-color:var(--navy); }
.fid-table-wrap { overflow-x:auto; }
.fid-table td { vertical-align:middle; }
.fid-row { cursor:pointer; }
.fid-badge { display:inline-block; border-radius:12px; padding:2px 9px; font-size:11px; font-weight:600; white-space:nowrap; background:var(--cream-dark); color:var(--navy); }
.fid-st-cours { background:#e8eefb; color:#1e4fa3; }
.fid-st-pleine { background:#fff3d6; color:#8a5a00; }
.fid-st-term { background:var(--green-light); color:var(--green); }
.fid-st-arch { background:var(--cream-dark); color:var(--text-light); }
.fid-st-annul { background:#fbe8e6; color:var(--red); }
/* Tampons : ronds ✓ posés / numéro à venir / 🎁 */
.fid-tampons { display:inline-flex; gap:5px; flex-wrap:wrap; align-items:center; }
.fid-tampon { width:30px; height:30px; border-radius:50%; border:2px solid var(--border); display:inline-flex; align-items:center; justify-content:center; font-size:12px; font-weight:700; color:var(--text-light); background:#fff; }
.fid-tampon-ok { background:var(--navy); border-color:var(--navy); color:#fff; }
.fid-tampon-suivant { border-color:var(--gold); border-style:dashed; color:var(--gold); }
.fid-tampon-cadeau { border-color:var(--gold); background:#fff8e6; font-size:15px; }
.fid-tampon-cadeau.fid-tampon-ok { background:var(--gold); }
.fid-carte .fid-tampons { margin:8px 0 12px; }
.fid-carte .fid-tampon { width:40px; height:40px; font-size:14px; }
.fid-carte { background:#fff; border:1px solid var(--border); border-radius:12px; padding:14px 16px; }
.fid-carte-head { display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:8px; }
.fid-carte-titre { font-family:'Playfair Display',serif; font-size:20px; color:var(--navy); flex:1; min-width:160px; }
.fid-carte-client { font-size:15px; margin-bottom:2px; }
.fid-carte-offre { color:var(--text-light); font-size:13px; }
.fid-achats { margin:8px 0; }
.fid-ticket-vignette img { width:44px; height:44px; object-fit:cover; border-radius:6px; border:1px solid var(--border); vertical-align:middle; }
.fid-ticket-mini { width:44px; height:44px; object-fit:cover; border-radius:6px; border:1px solid var(--border); vertical-align:middle; }
.fid-mini { border:none; background:transparent; cursor:pointer; font-size:13px; color:var(--text-light); padding:2px 5px; }
.fid-mini:hover { color:var(--red); }
.fid-alerte { background:#fff3d6; color:#8a5a00; border-radius:8px; padding:8px 12px; font-size:13px; margin:8px 0; }
.fid-bloc { background:var(--cream); border-radius:10px; padding:12px 14px; margin-top:12px; }
.fid-bloc-ok { background:var(--green-light); display:flex; gap:14px; align-items:center; flex-wrap:wrap; justify-content:space-between; }
.fid-form-titre { font-weight:600; color:var(--navy); margin-bottom:8px; font-size:15px; }
.fid-form-cadeau { border:2px solid var(--gold); background:#fff8e6; }
.fid-form .form-label { margin-top:8px; }
.fid-prod-ligne { display:flex; gap:8px; align-items:center; }
.fid-prod-q { flex:1; font-size:16px; padding:11px 12px; }
.fid-prod-sugg { background:#fff; border:1px solid var(--border); border-radius:8px; margin-top:4px; max-height:220px; overflow-y:auto; }
.fid-prod-sugg:empty { display:none; }
.fid-prod-info { padding:8px 10px; font-size:13px; color:#8a5a00; }
.fid-src { font-size:10px; border-radius:8px; padding:1px 6px; background:var(--cream-dark); color:var(--text-light); margin-left:4px; }
.fid-src-win { background:#e8eefb; color:#1e4fa3; }
.fid-src-carnet { background:var(--green-light); color:var(--green); }
.fid-prod-ok { margin-top:6px; font-size:14px; font-weight:600; color:var(--green); }
.fid-form-ligne { display:flex; gap:14px; align-items:center; flex-wrap:wrap; margin-top:8px; }
.fid-form-ligne label { font-size:13px; display:inline-flex; gap:6px; align-items:center; }
.fid-nb { width:80px; }
.fid-check { display:inline-flex; gap:6px; align-items:center; font-size:13px; cursor:pointer; margin-top:6px; }
.fid-check input { width:auto; margin:0; }
.fid-ticket-zone { margin-top:8px; padding:10px; border:1.5px dashed var(--border); border-radius:8px; background:#fff; }
.fid-ticket-ligne { display:flex; gap:10px; align-items:center; flex-wrap:wrap; }
.fid-file-btn { cursor:pointer; }
.fid-form-actions { display:flex; gap:10px; margin-top:12px; flex-wrap:wrap; }
.fid-carte-pied { margin-top:14px; text-align:right; }
.fid-kpis { display:grid; grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); gap:10px; margin-bottom:6px; }
.fid-kpi { background:#fff; border:1px solid var(--border); border-radius:10px; padding:10px 12px; border-left:4px solid var(--navy); }
.fid-kpi-nb { font-size:24px; font-weight:700; color:var(--navy); }
.fid-kpi-lib { font-size:12px; color:var(--text-light); }
.fid-kpi-pleine { border-left-color:var(--gold); }
.fid-kpi-term { border-left-color:var(--green); }
.fid-kpi-arch { border-left-color:var(--text-light); }
.fid-kpi-warn { border-left-color:var(--red); }
.fid-lot-form { margin-top:12px; padding-top:10px; border-top:1px solid var(--border); }
.fid-agregat { margin:4px 0 0 18px; font-size:14px; }
.fid-pf .config-input { margin-bottom:4px; }
.fid-pf-visuel { width:80px; max-height:110px; object-fit:contain; border-radius:6px; border:1px solid var(--border); background:#fff; }
.win-etat { display:flex; gap:14px; align-items:center; flex-wrap:wrap; font-size:14px; margin:12px 0 10px; }
/* v4.136 — les trois sous-onglets de « 🗄️ Base de données » (annuaire, médicaments, base WIN) posent
   leur recherche AU MÊME ENDROIT : le titre (flex:1) absorbait l'espace laissé par un champ plafonné à
   500 px et poussait la recherche vers la droite sur un écran sans bouton à droite (base WIN). Plafonné
   à la largeur qu'il prend déjà dans l'annuaire, le titre ne la pousse plus. */
.av-header > .bdd-titre { max-width:420px; }
/* v4.136 — import / export en petits boutons sous l'en-tête (comme l'annuaire patients). */
.win-barre { display:flex; gap:8px; flex-wrap:wrap; align-items:center; margin-top:8px; }
.win-filtre { display:flex; gap:10px; align-items:center; flex-wrap:wrap; font-size:14px; margin:0 0 10px; padding:8px 12px; background:var(--cream-dark); border-radius:8px; }
.win-cats td.win-cat-actions { white-space:nowrap; text-align:right; }
.win-res td .fid-muted { font-size:12px; }
.win-etat .fid-badge { white-space:normal; max-width:100%; overflow-wrap:anywhere; }
@media(max-width:720px){
  .fid-subtabs { flex-wrap:nowrap; }
  .fid-prog-visuel { width:70px; }
  .fid-carte .fid-tampon { width:34px; height:34px; }
  .fid-res { padding:8px 10px; }
  .fid-table th:nth-child(5), .fid-table td:nth-child(5) { display:none; }
}

/* ═══ 📠 CAPTURE DE DOCUMENT — scanner / appareil photo (v4.124) ═══ */
.doc-cap-sec{margin-bottom:16px}
.doc-cap-titre{font-weight:600;color:var(--navy);margin-bottom:6px;font-size:14px}
.doc-cap-aide{font-size:12px;color:var(--text-light);margin:0 0 8px}
.doc-cap-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.doc-cap-pages{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}
.doc-cap-page{position:relative;width:84px;height:110px;border:1.5px solid var(--border);border-radius:8px;overflow:hidden;background:#fff}
.doc-cap-page img{width:100%;height:100%;object-fit:cover;display:block}
.doc-cap-page .doc-cap-num{position:absolute;left:4px;bottom:4px;background:var(--navy);color:#fff;font-size:10px;padding:1px 6px;border-radius:6px}
.doc-cap-page .doc-cap-del{position:absolute;right:0;top:0;background:rgba(255,255,255,.85);border-radius:0 0 0 8px}
.doc-cap-liste{display:flex;flex-direction:column;gap:6px;max-height:min(52vh,420px);overflow:auto}
.doc-cap-item{display:flex;align-items:center;gap:10px;padding:8px;border:1.5px solid var(--border);border-radius:8px;cursor:pointer;background:#fff}
.doc-cap-item:hover{border-color:var(--gold);background:var(--cream)}
.doc-cap-item.doc-cap-encours{opacity:.55;cursor:wait}
.doc-cap-item.doc-cap-busy{opacity:.6;pointer-events:none}
.doc-cap-vignette{position:relative;width:56px;height:72px;flex:none;border:1px solid var(--border);border-radius:6px;background:#fff;display:flex;align-items:center;justify-content:center;overflow:hidden;font-size:22px}
.doc-cap-vignette img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.doc-cap-meta{flex:1;min-width:0;font-size:13px;line-height:1.35}
.doc-cap-meta strong{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.doc-cap-meta small{color:var(--text-light);display:block}
.doc-cap-pris{font-size:11px;color:#2a6}
.doc-cap-del{background:none;border:none;cursor:pointer;font-size:15px;padding:4px 6px;opacity:.7;line-height:1}
.doc-cap-del:hover{opacity:1}
.doc-cap-etat{padding:12px;border-radius:8px;background:var(--cream);font-size:13px}
.doc-cap-err{background:#fde8e8;color:#922}

/* ═══ 💉 PRESCRIPTION (v4.128) ═══ */
.rx-form .rx-bloc{border:1px solid var(--border);border-radius:12px;padding:12px 14px;margin:10px 0;background:#fff}
.rx-bloc h3{margin:0 0 8px;font-size:15px;color:var(--navy)}
.rx-ligne{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin:6px 0}
.rx-lab{font-weight:600;color:var(--navy);min-width:140px}
.rx-radio,.rx-check{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;cursor:pointer}
.rx-muted{color:var(--text-light);font-size:12px}
.rx-ok{color:var(--green);font-size:13px;margin-top:4px}
.rx-avert{background:#fdf3e3;border:1px solid #e0a94a;color:#7a4b00;border-radius:8px;padding:6px 10px;font-size:13px;margin-top:6px}
.rx-modele-auto{background:#eafaf1;border:1px solid #9fd8b5;border-radius:8px;padding:8px 10px;font-size:13.5px;margin:6px 0}
.rx-modele-aucun{background:#fdecea;border:1px solid #c0392b;color:#922b21;border-radius:8px;padding:8px 10px;font-size:13.5px;margin:6px 0}
.rx-modele-autre{margin:4px 0 8px}.rx-modele-autre summary{cursor:pointer;color:var(--navy);font-size:13px}
.rx-modele-autre select{margin:6px 0}
.rx-patient-carte{background:var(--cream);border-radius:10px;padding:10px 12px;font-size:14px}
.rx-nir-ligne{display:flex;gap:8px;align-items:center;margin-top:6px;flex-wrap:wrap}.rx-nir-ligne input{max-width:260px}
.rx-chips{display:flex;flex-wrap:wrap;gap:6px}
.rx-chip{border:1px solid var(--border);background:#fff;border-radius:20px;padding:5px 12px;font-size:13px;cursor:pointer;text-align:left}
  .rx-chip-on{background:var(--navy);color:#fff;border-color:var(--navy)}   /* bon cystite : antibiotique choisi */
.rx-chip:hover{background:var(--cream)}.rx-chip-off{opacity:.6}
.rx-vaccin-choisi{background:#eafaf1;border:1px solid #9fd8b5;border-radius:8px;padding:8px 10px;font-size:14px}
.rx-grille{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px 14px;align-items:start}
/* v4.129 — fenêtre 4 : les cases doivent s'ALIGNER. Le libellé tient sur une ligne (hauteur imposée,
   donc identique d'un champ à l'autre) et l'explication passe SOUS la case, en plus petit. Tant que
   l'explication vivait dans le <label>, celui-ci passait sur deux ou trois lignes et chaque case
   démarrait à une hauteur différente. */
.rx-champ{display:flex;flex-direction:column}
.rx-champ>.form-label{min-height:1.15rem;line-height:1.15rem;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rx-champ>.form-input{margin:0}
.rx-aide{color:var(--text-light);font-size:11.5px;line-height:1.3;margin-top:4px}
@media(max-width:560px){.rx-champ>.form-label{white-space:normal;min-height:0}}
.rx-modele-ordo{background:#fdf3e3;border:1px solid #e0a94a;color:#7a4b00;border-radius:8px;padding:9px 11px;font-size:13.5px;margin:6px 0}
.rx-tag-ordo{background:#fdf3e3;border-color:#e0a94a;color:#7a4b00}
/* Saisie libre du comptoir : repliée par défaut — la recherche du référentiel vit dans ⚙️ Réglages. */
.rx-sous-bloc{margin-top:14px;padding-top:12px;border-top:1px dashed var(--border)}
.rx-vac-liste{display:flex;flex-direction:column;gap:4px;max-height:280px;overflow:auto;border:1px solid var(--cream-dark);border-radius:8px;padding:8px;margin:8px 0}
.rx-vac-liste .rx-check{font-size:13px}
.rx-vac-tete{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-bottom:6px}
#rx-vacl-modal .modal-body{max-height:80vh;overflow:auto}
.rx-check-off{opacity:.65}
.rx-tag{display:inline-block;background:var(--cream);border:1px solid var(--border);border-radius:12px;padding:1px 8px;font-size:11px;color:var(--navy)}
.rx-tag-warn{background:#fdf3e3;border-color:#e0a94a;color:#7a4b00}
.rx-action{margin:14px 0;display:flex;align-items:center;flex-wrap:wrap;gap:8px}
.rx-resultat{background:#eafaf1;border:1px solid #9fd8b5;border-radius:10px;padding:10px 12px;margin:10px 0;font-size:14px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.rx-hist-wrap{overflow:auto}
.rx-hist{width:100%;border-collapse:collapse;font-size:13px}.rx-hist th,.rx-hist td{border-bottom:1px solid var(--cream-dark);padding:6px 8px;text-align:left;vertical-align:top}
.rx-hist th{background:var(--cream);color:var(--navy);font-size:12px}
.rx-hist tr.rx-annule td{opacity:.55}
.rx-tampon-zone{margin:8px 0;min-height:60px}.rx-tampon-img{max-width:360px;max-height:180px;border:1px solid var(--border);background:#fff}
.rx-regl-table{width:100%;border-collapse:collapse}.rx-regl-table td,.rx-regl-table th{padding:4px 6px;vertical-align:middle;text-align:left;font-size:.85rem}
.btn.rx-actif{outline:2px solid var(--gold)}
@media (max-width:720px){.rx-lab{min-width:0;width:100%}.rx-hist{font-size:12px}}

/* v4.137 — fusion d'un doublon de fiche patient */
.bp-fusion-cand { display:block; width:100%; text-align:left; padding:8px 10px; margin-bottom:6px; border:1px solid var(--border, #ddd); border-radius:8px; background:var(--card, #fff); cursor:pointer; font-size:13px; color:inherit; }
.bp-fusion-cand:hover { border-color:var(--gold, #c9a227); }
.bp-fusion-cand.active { border-color:var(--gold, #c9a227); box-shadow:0 0 0 2px rgba(201,162,39,.25); }
.bp-fusion-tag { display:inline-block; font-size:11px; padding:1px 6px; border-radius:10px; background:rgba(201,162,39,.15); margin-left:4px; }
.bp-fusion-recap { font-size:13px; line-height:1.6; padding:8px 10px; border-radius:8px; background:rgba(0,0,0,.03); }
.bp-fusion-warn { margin-top:10px; padding:8px 10px; border-radius:8px; background:#fff6e0; color:#8a5a00; font-size:13px; }
.bp-fusion-err { margin-top:10px; padding:8px 10px; border-radius:8px; background:#fdecea; color:#a32020; font-size:13px; }

/* ═══ v4.142 — 🖼️ images dans les notes d'un mémo + cartes élargies à la main ═══ */
#memo-contenu{max-height:none}
#memo-contenu img,.memo-window-contenu img{max-width:100%;height:auto;vertical-align:bottom;border-radius:4px}
#memo-contenu img{cursor:pointer}
.memo-window-contenu img{cursor:zoom-in}
.memo-notes-aide{font-weight:400;text-transform:none;letter-spacing:0;color:var(--text-light);font-size:11px}
#modal-memo .modal-body{position:relative}
.memo-img-cadre{position:absolute;display:none;border:2px solid var(--gold);border-radius:4px;pointer-events:none;z-index:20;box-sizing:border-box}
.memo-img-barre{position:absolute;left:-2px;bottom:100%;margin-bottom:4px;display:flex;gap:2px;align-items:center;background:var(--navy);border-radius:6px;padding:3px;pointer-events:auto;white-space:nowrap;box-shadow:0 2px 8px rgba(0,0,0,.2)}
.memo-img-cadre.barre-dessous .memo-img-barre{bottom:auto;top:100%;margin:4px 0 0}
.memo-img-barre button{background:transparent;border:none;color:#fff;font-size:11px;font-weight:600;padding:5px 7px;border-radius:4px;cursor:pointer;min-height:auto;line-height:1}
.memo-img-barre button:hover{background:rgba(255,255,255,.18)}
.memo-img-px{color:var(--gold-light);font-size:10px;padding:0 6px;min-width:42px;text-align:center}
.memo-img-poignee{position:absolute;right:-8px;bottom:-8px;width:16px;height:16px;background:var(--gold);border:2px solid #fff;border-radius:3px;cursor:nwse-resize;pointer-events:auto;touch-action:none;box-shadow:0 1px 3px rgba(0,0,0,.35)}
.memo-resize{position:absolute;display:none;z-index:6;touch-action:none}
.memo-window.expanded .memo-resize{display:block}
.memo-resize-e{top:44px;right:0;bottom:38px;width:10px;cursor:ew-resize}
.memo-resize-e::after{content:'';position:absolute;top:50%;right:2px;width:4px;height:44px;margin-top:-22px;border-radius:3px;background:var(--gold);opacity:.45;transition:opacity .15s}
.memo-resize-e:hover::after,.memo-window.redim .memo-resize-e::after{opacity:1}
.memo-resize-se{right:0;bottom:0;width:15px;height:15px;cursor:nwse-resize;background:linear-gradient(135deg,transparent 50%,var(--gold) 50%);opacity:.6}
.memo-resize-se:hover{opacity:1}
.memo-window.redim{transition:none;user-select:none}
@media(max-width:768px){.memo-window.expanded .memo-resize{display:none}}

/* ═══ v4.149 — Carnet affiché dans le site de l'équipe Pharmabsolu (pont.js) ═══
   La colonne et les onglets du portail remplacent le bandeau, les onglets principaux et les
   sous-onglets de rangement ; les onglets propres à chaque écran restent. */
body.pont { --topbar-h: 0px; }
body.pont .topbar,
body.pont #comptoir-subtabs, body.pont #comptoir-subtabs2,
body.pont #backoffice-subtabs,
body.pont #outils-subtabs, body.pont #outils-subtabs2 { display: none !important; }
/* Accueil du portail : le brief du jour seul, toujours déplié. */
body.pont-accueil #section-messages .filters,
body.pont-accueil #section-messages .section-header,
body.pont-accueil #section-messages .table-header,
body.pont-accueil #messages-list { display: none !important; }
body.pont-accueil #section-messages .messages-table { border: 0; box-shadow: none; background: none; }
body.pont-accueil #brf-body { display: block !important; }
body.pont-accueil .brf-chev { display: none; }
body.pont-accueil #briefing-card .brf-head { cursor: default; }
.pont-ferme { max-width: 460px; margin: 15vh auto; padding: 24px; text-align: center; background: #fff; border: 1px solid var(--border, #e3dccb); border-radius: 14px; font-size: 15px; color: var(--navy, #1b2a4a); }
