/* ============================================================
   admin.css — panneau d'administration RayVo Studio + page de connexion
   Même palette que le site (taupe, bleu, marine, crème), interface sombre et sobre.
   ============================================================ */

.admin-body,.login-body{
  --panel:#15161d;--panel-2:#1b1c25;--border:rgba(252,242,231,0.09);--border-strong:rgba(252,242,231,0.18);
  --ok:#66c79a;--warn:#e3b452;--err:#e6746b;--radius:14px;
  background:var(--bg);
}
.ico{flex:none;}

/* ---------- Connexion ---------- */
.login-body{display:grid;place-items:center;min-height:100vh;padding:24px;background:radial-gradient(60% 50% at 50% 0%,rgba(123,145,196,.18),transparent 70%),var(--bg);}
.login-card{width:min(400px,100%);background:var(--panel);border:1px solid var(--border);border-radius:20px;padding:36px 32px;display:flex;flex-direction:column;gap:18px;align-items:center;box-shadow:0 30px 80px -30px rgba(0,0,0,.8);}
.login-card img{height:34px;width:auto;}
.login-card h1{font-size:19px;text-align:center;}
.login-card p.login-sub{margin:-8px 0 0;color:var(--muted);font-size:14px;text-align:center;}
.login-card form{display:flex;flex-direction:column;gap:14px;width:100%;}
.login-card input{font:inherit;font-size:15px;padding:13px 14px;border:1px solid var(--border-strong);border-radius:10px;background:var(--bg);color:var(--text);width:100%;}
.login-card input:focus{outline:2px solid var(--accent);outline-offset:1px;}
.login-error{color:var(--err);font-size:14px;text-align:center;margin:0;}

/* ---------- Structure ---------- */
.admin-shell{display:grid;grid-template-columns:264px minmax(0,1fr);min-height:100vh;}
.admin-sidebar{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;padding:22px 14px 16px;background:var(--panel);border-right:1px solid var(--border);overflow-x:hidden;overflow-y:auto;}
/* Sidebar rétractable au survol (2026-09-21, bureau seulement — la version mobile est déjà un
   panneau plein écran qui glisse, gérée plus bas et non concernée) : repliée = rail d'icônes
   (76px), la page de contenu récupère l'espace (grid-template-columns en 1fr) ; survol ou focus
   clavier = dépliée en plein (264px). :has() est du CSS pur, aucun JS — le contenu se
   redimensionne tout seul puisqu'il est déjà en 1fr dans la grille, pas en superposition. */
@media (min-width:901px){
  /* Repliée par défaut : transition RETARDÉE de .12s avant de se refermer (mais instantanée dès que
     la souris revient) — sans ça, un passage rapide sur le rail lance et annule l'animation en
     cours de route à chaque fois, ce qui donnait l'impression que ça "buggait" (2026-09-22). Même
     durée/allure (.24s, même courbe) que le dépli pour que les deux sens se ressentent pareil. */
  .admin-shell{grid-template-columns:76px minmax(0,1fr);transition:grid-template-columns .24s cubic-bezier(.4,0,.2,1) .12s;}
  .admin-shell:has(.admin-sidebar:hover),.admin-shell:has(.admin-sidebar:focus-within){grid-template-columns:264px minmax(0,1fr);transition-delay:0s;}
  .admin-shell:has(.admin-sidebar:hover) .admin-content-inner,.admin-shell:has(.admin-sidebar:focus-within) .admin-content-inner{max-width:1080px;}
  /* Replié : texte des liens/groupes caché (icônes seules), groupes de nav forcés fermés
     visuellement même si [open] (rouvrent normalement au survol), sélecteur Site/Cloud réduit à
     ses icônes. */
  .admin-sidebar:not(:hover):not(:focus-within) .admin-nav-group-label,
  .admin-sidebar:not(:hover):not(:focus-within) .admin-nav-group-chevron,
  .admin-sidebar:not(:hover):not(:focus-within) .admin-nav-link span,
  .admin-sidebar:not(:hover):not(:focus-within) .admin-sidebar-foot a span,
  .admin-sidebar:not(:hover):not(:focus-within) .nav-count,
  .admin-sidebar:not(:hover):not(:focus-within) .admin-section-switch .range a span{
    opacity:0;width:0;overflow:hidden;white-space:nowrap;transition-delay:.12s;
  }
  .admin-sidebar:hover .admin-nav-group-label,.admin-sidebar:focus-within .admin-nav-group-label,
  .admin-sidebar:hover .admin-nav-group-chevron,.admin-sidebar:focus-within .admin-nav-group-chevron,
  .admin-sidebar:hover .admin-nav-link span,.admin-sidebar:focus-within .admin-nav-link span,
  .admin-sidebar:hover .admin-sidebar-foot a span,.admin-sidebar:focus-within .admin-sidebar-foot a span,
  .admin-sidebar:hover .nav-count,.admin-sidebar:focus-within .nav-count,
  .admin-sidebar:hover .admin-section-switch .range a span,.admin-sidebar:focus-within .admin-section-switch .range a span{
    transition-delay:0s;
  }
  .admin-sidebar:not(:hover):not(:focus-within) .admin-nav-group-body{grid-template-rows:minmax(0,0fr) !important;transition:none;}
  .admin-sidebar:hover .admin-nav-group-body,.admin-sidebar:focus-within .admin-nav-group-body{transition-delay:0s;}
  .admin-sidebar:not(:hover):not(:focus-within) .admin-nav-group-body-inner{padding:0;}
  .admin-sidebar:not(:hover):not(:focus-within) .admin-nav-group summary,
  .admin-sidebar:not(:hover):not(:focus-within) .admin-nav-link,
  .admin-sidebar:not(:hover):not(:focus-within) .admin-sidebar-foot a{justify-content:center;gap:0;}
  .admin-sidebar:not(:hover):not(:focus-within) .admin-section-switch .range{flex-direction:column;background:transparent;border:0;padding:0;gap:6px;}
  .admin-sidebar:not(:hover):not(:focus-within) .admin-section-switch .range a{padding:8px;}
  /* Repère "on est là" : le groupe qui contient la page active se distingue nettement dans le
     rail d'icônes (pas juste un fond gris discret) — sinon impossible de savoir où on est sans
     survoler (2026-09-21). */
  .admin-sidebar:not(:hover):not(:focus-within) .admin-nav-group[open] summary{
    background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--text);
  }
  .admin-sidebar:not(:hover):not(:focus-within) .admin-nav-group[open] .admin-nav-group-icon{color:var(--accent);opacity:1;}
}
.admin-brand{display:block;padding:4px 10px 22px;}
.admin-brand img{height:auto;width:auto;max-height:32px;max-width:100%;display:block;}
.admin-section-switch{padding:0 6px 16px;}
.admin-section-switch .range{width:100%;}
.admin-section-switch .range a{flex:1;justify-content:center;gap:8px;}
.admin-nav{display:flex;flex-direction:column;gap:3px;flex:1;}
.admin-nav-group{margin:0;border-radius:12px;transition:background .15s;}
.admin-nav-group[open]{background:var(--panel-2);}
.admin-nav-group summary{display:flex;align-items:center;gap:10px;padding:10px 12px;font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);cursor:pointer;list-style:none;user-select:none;border-radius:12px;transition:background .15s,color .15s;}
.admin-nav-group summary::-webkit-details-marker{display:none;}
.admin-nav-group summary:hover{color:var(--text);background:rgba(252,242,231,.05);}
.admin-nav-group[open] summary{color:var(--text);}
.admin-nav-group-chevron{display:inline-flex;flex:none;opacity:.55;transition:transform .18s ease;}
.admin-nav-group-chevron .ico{width:14px;height:14px;}
.admin-nav-group[open] .admin-nav-group-chevron{transform:rotate(90deg);opacity:.9;}
.admin-nav-group-icon{display:inline-flex;flex:none;opacity:.8;}
.admin-nav-group-icon .ico{width:16px;height:16px;}
.admin-nav-group-label{flex:1;}
.admin-nav-group-body{display:grid;grid-template-rows:minmax(0,0fr);overflow:hidden;transition:grid-template-rows .24s cubic-bezier(.4,0,.2,1);}
.admin-nav-group[open] .admin-nav-group-body{grid-template-rows:minmax(0,1fr);}
.admin-nav-group-body-inner{overflow:hidden;padding:2px 6px 6px;}
.admin-nav-link{display:flex;align-items:center;gap:12px;min-height:40px;padding:7px 12px;border-radius:9px;color:var(--muted);text-decoration:none;font-size:14px;font-weight:500;transition:background .15s,color .15s;}
.admin-nav-link span,.admin-nav-group-label,.admin-sidebar-foot a span,.admin-section-switch .range a span{transition:opacity .18s cubic-bezier(.4,0,.2,1),width .18s cubic-bezier(.4,0,.2,1);}
.admin-nav-link:hover{background:rgba(252,242,231,.05);color:var(--text);}
.admin-nav-link.active{background:color-mix(in srgb,var(--accent) 20%,transparent);color:var(--text);box-shadow:inset 3px 0 0 var(--accent);}
.admin-nav-link .ico{opacity:.85;}
.nav-count{margin-left:auto;font-style:normal;font-size:11px;font-weight:700;min-width:20px;height:20px;padding:0 6px;border-radius:999px;background:var(--accent);color:var(--accent-ink);display:inline-grid;place-items:center;}
.admin-sidebar-foot{display:flex;flex-direction:column;gap:2px;padding-top:12px;margin-top:10px;border-top:1px solid var(--border);}
.admin-sidebar-foot a{display:flex;align-items:center;gap:12px;min-height:40px;padding:8px 12px;border-radius:10px;color:var(--muted);text-decoration:none;font-size:14px;}
.admin-sidebar-foot a:hover{color:var(--text);background:rgba(252,242,231,.05);}

.admin-main{min-width:0;display:flex;flex-direction:column;}
.admin-topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:16px;padding:16px 32px;background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--border);}
.topbar-publish{white-space:nowrap;margin-left:auto;}
.admin-topbar{padding-block:10px;}
/* Pages Cloud : plus de titre ni de bouton Publier, la barre ne sert qu au bouton menu sur petit écran. */
@media (min-width:901px){.admin-topbar--bare{display:none;}}
.topbar-publish strong{font-weight:700;}
.admin-menu-btn{display:none;width:44px;height:44px;border:1px solid var(--border-strong);border-radius:12px;background:var(--panel);color:var(--text);cursor:pointer;place-items:center;}
.admin-content{flex:1;min-width:0;}
.admin-content-inner{max-width:1320px;margin:0 auto;padding:28px 32px 120px;display:flex;flex-direction:column;gap:20px;}

/* ---------- Messages ---------- */
.admin-flash{display:flex;align-items:flex-start;gap:12px;background:color-mix(in srgb,var(--ok) 14%,var(--panel));border:1px solid color-mix(in srgb,var(--ok) 55%,transparent);color:var(--text);padding:14px 16px;border-radius:12px;font-size:14px;}
.admin-flash .ico{color:var(--ok);margin-top:1px;}
.admin-flash a{color:var(--text);text-underline-offset:3px;}
.admin-flash-error{background:color-mix(in srgb,var(--err) 14%,var(--panel));border-color:color-mix(in srgb,var(--err) 55%,transparent);}
.admin-flash-error .ico{color:var(--err);}

/* ---------- Cartes et grilles ---------- */
.admin-card,.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:24px;}
.admin-card h3,.card h3,.modal-box h3{font-size:17px;margin-bottom:4px;}
.card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px;flex-wrap:wrap;}
.card-head p{margin:2px 0 0;color:var(--muted);font-size:14px;}
.grid{display:grid;gap:20px;}
.grid--2{grid-template-columns:repeat(2,minmax(0,1fr));}
.grid--3{grid-template-columns:repeat(3,minmax(0,1fr));}
.grid--4{grid-template-columns:repeat(4,minmax(0,1fr));}
.grid--main{grid-template-columns:minmax(0,1.7fr) minmax(0,1fr);}

/* Chiffres clés */
.kpi{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:20px;display:flex;flex-direction:column;gap:6px;min-width:0;}
.kpi-label{font-size:13px;color:var(--muted);display:flex;align-items:center;gap:8px;}
.kpi-value{font-size:34px;line-height:1.1;font-weight:700;letter-spacing:-.01em;}
.kpi-value small{font-size:15px;font-weight:600;color:var(--muted);margin-left:4px;}
.kpi-sub{font-size:13px;color:var(--muted);}
.kpi--accent .kpi-value{color:var(--accent);}
.delta{font-weight:600;font-size:13px;}
.delta--up{color:var(--ok);}
.delta--down{color:var(--err);}

/* Pastilles */
.badge{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;padding:4px 10px;border-radius:999px;border:1px solid var(--border-strong);color:var(--muted);white-space:nowrap;}
.badge--ok{color:var(--ok);border-color:color-mix(in srgb,var(--ok) 50%,transparent);background:color-mix(in srgb,var(--ok) 10%,transparent);}
.badge--warn{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 50%,transparent);background:color-mix(in srgb,var(--warn) 10%,transparent);}
.badge--error{color:var(--err);border-color:color-mix(in srgb,var(--err) 50%,transparent);background:color-mix(in srgb,var(--err) 10%,transparent);}
.badge--info{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 50%,transparent);background:color-mix(in srgb,var(--accent) 10%,transparent);}

/* Liste de contrôles (audit SEO) */
.checklist{display:flex;flex-direction:column;margin:0;padding:0;list-style:none;}
.check{display:grid;grid-template-columns:28px minmax(0,1fr);gap:12px;padding:14px 0;border-top:1px solid var(--border);}
.check:first-child{border-top:0;}
.check-icon{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;}
.check-icon .ico{width:15px;height:15px;}
.check--ok .check-icon{background:color-mix(in srgb,var(--ok) 18%,transparent);color:var(--ok);}
.check--warn .check-icon{background:color-mix(in srgb,var(--warn) 18%,transparent);color:var(--warn);}
.check--error .check-icon{background:color-mix(in srgb,var(--err) 18%,transparent);color:var(--err);}
.check--info .check-icon{background:color-mix(in srgb,var(--accent) 18%,transparent);color:var(--accent);}
.check strong{display:block;font-size:14px;}
.check span{display:block;font-size:13px;color:var(--muted);margin-top:2px;}

/* Score */
.score{--v:0;width:132px;height:132px;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--score-color,var(--accent)) calc(var(--v) * 1%),rgba(252,242,231,.08) 0);flex:none;}
.score-inner{width:106px;height:106px;border-radius:50%;background:var(--panel);display:grid;place-items:center;text-align:center;}
.score-inner b{font-size:32px;line-height:1;}
.score-inner small{display:block;font-size:12px;color:var(--muted);margin-top:2px;}
.score-row{display:flex;align-items:center;gap:24px;flex-wrap:wrap;}
.score-row > div:last-child{flex:1 1 300px;min-width:0;}

/* Formulaires */
.admin-form{display:flex;flex-direction:column;gap:20px;}
.field{display:flex;flex-direction:column;gap:6px;}
.field label,.field .label{font-size:13px;font-weight:600;color:var(--text);display:flex;justify-content:space-between;gap:12px;align-items:baseline;}
.field label small,.counter{font-weight:500;font-size:12px;color:var(--muted);}
.field input[type="text"],.field input[type="email"],.field input[type="password"],.field input[type="url"],.field input[type="number"],.field input[type="search"],.field input[type="datetime-local"],.field input[type="date"],.field input[type="time"],.field select,.field textarea{
  font:inherit;font-size:15px;padding:11px 13px;border:1px solid var(--border-strong);border-radius:10px;background:var(--bg);color:var(--text);width:100%;resize:vertical;transition:border-color .15s,box-shadow .15s;
}
.field input:focus,.field textarea:focus,.field select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 28%,transparent);}
.field input[type="color"]{width:56px;height:38px;padding:3px;border:1px solid var(--border-strong);border-radius:10px;background:var(--bg);cursor:pointer;}
.field--spaced{margin-top:14px;}
.field--narrow input{max-width:240px;}
.field--after-title{margin-top:14px;}
.admin-hint,.hint{color:var(--muted);font-size:13px;margin:4px 0 0;max-width:72ch;overflow-wrap:anywhere;}
.admin-hint strong,.hint strong{color:var(--text);}
.admin-note{color:var(--muted);font-size:14px;margin-top:8px;}
.counter.is-ok{color:var(--ok);}.counter.is-warn{color:var(--warn);}.counter.is-bad{color:var(--err);}
.admin-card .field + .field{margin-top:16px;}
.form-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:start;}
.admin-card .form-row .field + .field{margin-top:0;}
.admin-form-actions{position:sticky;bottom:0;z-index:15;display:flex;gap:12px;align-items:center;padding:14px 0;margin-top:4px;background:linear-gradient(180deg,transparent,var(--bg) 40%);}
.admin-form-actions .dirty{display:none;color:var(--warn);font-size:13px;}
.admin-form.is-dirty .admin-form-actions .dirty{display:inline;}

/* Interrupteur */
.switch{display:flex;align-items:flex-start;gap:14px;cursor:pointer;position:relative;}
.switch input{position:absolute;opacity:0;pointer-events:none;}
.switch-track{flex:none;width:46px;height:26px;border-radius:999px;background:rgba(252,242,231,.14);position:relative;transition:background .2s;margin-top:1px;}
.switch-track::after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:var(--text);transition:transform .2s;}
.switch input:checked + .switch-track{background:var(--accent);}
.switch input:checked + .switch-track::after{transform:translateX(20px);background:#fff;}
.switch input:focus-visible + .switch-track{outline:2px solid var(--accent);outline-offset:3px;}
.switch-text strong{display:block;font-size:14px;}
.switch-text span{display:block;font-size:13px;color:var(--muted);margin-top:2px;}

/* Boutons */
.btn-sm{padding:8px 16px;font-size:13px;min-height:40px;display:inline-flex;align-items:center;gap:8px;}
.md-toolbar{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px;}
.md-toolbar-sep{width:1px;align-self:stretch;background:var(--border-strong);margin:0 4px;}
.newsletter-preview{margin-top:14px;padding:16px;border:1px dashed var(--border-strong);border-radius:12px;background:color-mix(in srgb,var(--bg) 96%,var(--text) 4%);}
.newsletter-preview-body{font-size:14px;line-height:1.55;}
.newsletter-preview-body p{margin:0 0 10px;}
.newsletter-preview-body p:last-child{margin-bottom:0;}
.newsletter-preview-body h1,.newsletter-preview-body h2,.newsletter-preview-body h3{margin:0 0 8px;}
.newsletter-preview-body img{max-width:100%;border-radius:8px;display:block;}
.newsletter-preview-body a{color:var(--accent);}
.newsletter-preview-body ul,.newsletter-preview-body ol{margin:0 0 10px;padding-left:22px;}
.newsletter-preview-body blockquote{margin:0 0 10px;padding:2px 14px;border-left:3px solid var(--accent);color:var(--muted);}
.newsletter-preview-body hr{border:none;border-top:1px solid var(--border-strong);margin:14px 0;}
.newsletter-preview-body pre{margin:0 0 10px;padding:10px 12px;border-radius:8px;background:color-mix(in srgb,var(--text) 6%,transparent);overflow-x:auto;}
.newsletter-preview-body table{border-collapse:collapse;margin:0 0 10px;width:100%;}
.newsletter-preview-body th,.newsletter-preview-body td{border:1px solid var(--border-strong);padding:6px 10px;text-align:left;}
.newsletter-preview-var{background:color-mix(in srgb,var(--accent) 18%,transparent);border-radius:4px;padding:1px 6px;font-style:italic;color:var(--muted);}
/* Tableaux : base commune (.admin-table : Newsletter, Contacts ; .fx-table : Fichiers) — en-têtes discrets, lignes séparées, survol. */
.admin-table,.fx-table{width:100%;border-collapse:collapse;font-size:14px;}
.admin-table th,.fx-table th{text-align:left;font-size:12px;font-weight:600;letter-spacing:.02em;color:var(--muted);padding:10px 12px;border-bottom:1px solid var(--border);white-space:nowrap;}
.admin-table td,.fx-table td{text-align:left;padding:9px 12px;border-bottom:1px solid var(--border);vertical-align:middle;}
.admin-table tbody tr:last-child td{border-bottom:none;}
.admin-table tbody tr:hover,.admin-table tbody tr:focus-within,.fx-row:hover,.fx-row:focus-within{background:rgba(252,242,231,.04);}
@media (prefers-reduced-motion:no-preference){.admin-table tbody tr{transition:background-color .12s ease;}}
.table-wrap{overflow-x:auto;}
.admin-table-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.admin-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;}
.admin-list li{padding:12px 4px;border-bottom:1px solid var(--border);}
.admin-list li:last-child{border-bottom:none;}
.admin-list li.is-past{opacity:.55;}
.admin-list-row{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;}
.admin-list-row>div:first-child{min-width:0;}
.admin-list-row form{flex:none;}
.md-slash{position:relative;}
.md-slash-menu{position:absolute;z-index:20;list-style:none;margin:4px 0 0;padding:6px;min-width:220px;max-width:320px;border-radius:10px;border:1px solid var(--border-strong);background:var(--bg);box-shadow:0 12px 30px rgba(0,0,0,.35);font-size:13px;}
.md-slash-menu li{padding:7px 10px;border-radius:6px;cursor:pointer;}
.md-slash-menu li.is-active,.md-slash-menu li:hover{background:var(--accent);color:var(--accent-ink);}
.is-filtered{display:none!important;}
.btn-danger{background:transparent;border:1.5px solid var(--err);color:var(--err);}
button.btn-ghost,button.btn-danger{background:transparent;}
button{font-family:inherit;}
.btn-danger:hover{background:var(--err);color:#fff;}
.btn[disabled]{opacity:.5;cursor:not-allowed;}

/* Aperçus Google et réseaux */
.serp{background:#fff;color:#202124;border-radius:14px;padding:18px 20px;font-family:Arial,Helvetica,sans-serif;max-width:640px;}
.serp-site{display:flex;align-items:center;gap:10px;font-size:14px;color:#202124;margin-bottom:6px;}
.serp-fav{width:28px;height:28px;border-radius:50%;background:#0c0d13;display:grid;place-items:center;overflow:hidden;}
.serp-fav img{width:18px;height:auto;}
.serp-url{font-size:12px;color:#4d5156;line-height:1.3;}
.serp-title{font-size:20px;line-height:1.3;color:#1a0dab;margin:2px 0 4px;overflow-wrap:anywhere;}
.serp-desc{font-size:14px;line-height:1.58;color:#4d5156;overflow-wrap:anywhere;}
.serp--mobile{max-width:380px;}
.serp--mobile .serp-title{font-size:18px;}
.og-card{border:1px solid var(--border-strong);border-radius:14px;overflow:hidden;background:var(--panel-2);max-width:520px;}
.og-card img{display:block;width:100%;height:auto;aspect-ratio:1200/630;object-fit:cover;background:#000;}
.og-body{padding:14px 16px;}
.og-host{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;}
.og-title{font-weight:600;margin:4px 0;overflow-wrap:anywhere;}
.og-desc{font-size:14px;color:var(--muted);overflow-wrap:anywhere;}
.tabs{display:inline-flex;gap:4px;padding:4px;background:var(--bg);border:1px solid var(--border);border-radius:12px;margin-bottom:14px;}
.tabs button{border:0;background:transparent;color:var(--muted);font:inherit;font-size:13px;font-weight:600;padding:8px 14px;border-radius:9px;cursor:pointer;min-height:36px;}
.tabs button[aria-pressed="true"]{background:var(--panel-2);color:var(--text);}

/* Liens d'outils */
.tool-links{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:12px;}
.tool-link{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;border:1px solid var(--border);border-radius:12px;color:var(--text);text-decoration:none;background:var(--panel-2);font-size:14px;}
.tool-link:hover{border-color:var(--accent);}
.tool-link small{display:block;color:var(--muted);font-size:12px;margin-top:2px;}
pre.code{margin:0;padding:14px 16px;background:var(--bg);border:1px solid var(--border);border-radius:12px;font-size:12.5px;line-height:1.6;overflow:auto;white-space:pre-wrap;color:var(--muted);}

/* Statistiques */
.chart{width:100%;height:auto;display:block;}
.chart-grid{stroke:rgba(252,242,231,.09);stroke-width:1;}
.chart-axis{fill:var(--muted);font-size:11px;font-family:var(--font);}
.chart-line{fill:none;stroke:var(--accent);stroke-width:2.4;stroke-linejoin:round;stroke-linecap:round;}
.chart-dot{fill:var(--bg);stroke:var(--accent);stroke-width:2;}
.range{display:inline-flex;gap:4px;padding:4px;background:var(--bg);border:1px solid var(--border);border-radius:12px;}
.range a{padding:8px 14px;border-radius:9px;font-size:13px;font-weight:600;color:var(--muted);text-decoration:none;min-height:36px;display:inline-flex;align-items:center;}
.range a.is-on{background:var(--panel-2);color:var(--text);}
.bars{display:flex;flex-direction:column;gap:12px;margin:0;padding:0;list-style:none;}
.bars li{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 12px;font-size:14px;}
.bars li span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.bars li b{font-variant-numeric:tabular-nums;}
.bars li i{grid-column:1 / -1;display:block;height:6px;border-radius:999px;background:rgba(252,242,231,.07);position:relative;overflow:hidden;}
.bars li i::after{content:"";position:absolute;inset:0 auto 0 0;width:var(--w,0%);background:linear-gradient(90deg,var(--accent),color-mix(in srgb,var(--accent) 55%,#fff));border-radius:inherit;}
.empty{color:var(--muted);font-size:14px;margin:0;} /* état vide : variantes communes en fin de fichier (« États vides ») */
.event-highlight{margin:0 0 14px;font-size:15px;color:var(--muted);}
.event-highlight strong{font-size:28px;line-height:1;color:var(--accent);margin-right:8px;font-variant-numeric:tabular-nums;}
.demo-banner{display:flex;gap:12px;align-items:center;padding:12px 16px;border-radius:12px;background:color-mix(in srgb,var(--warn) 12%,var(--panel));border:1px dashed color-mix(in srgb,var(--warn) 60%,transparent);font-size:14px;}
.steps{counter-reset:s;display:flex;flex-direction:column;gap:14px;margin:0;padding:0;list-style:none;}
.steps li{counter-increment:s;display:grid;grid-template-columns:32px minmax(0,1fr);gap:14px;font-size:14px;}
.steps li::before{content:counter(s);width:28px;height:28px;border-radius:50%;background:color-mix(in srgb,var(--accent) 22%,transparent);color:var(--accent);display:grid;place-items:center;font-weight:700;font-size:13px;}
.steps li b{display:block;}
.steps li span{color:var(--muted);font-size:13px;display:block;margin-top:2px;}

/* Publication */
.log{margin:0;padding:16px;background:var(--bg);border:1px solid var(--border);border-radius:12px;font-size:12.5px;line-height:1.6;white-space:pre-wrap;max-height:320px;overflow:auto;}
.history{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;}
.history li{display:grid;grid-template-columns:130px minmax(0,1fr);gap:12px;padding:10px 0;border-top:1px solid var(--border);font-size:14px;}
.history li:first-child{border-top:0;}
.history time{color:var(--muted);font-size:13px;}
.change-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px;font-size:14px;}
.change-list li{display:flex;gap:10px;align-items:center;}
.muted{color:var(--muted);font-style:normal;font-size:13px;}
.change-list li::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--warn);flex:none;}

/* Tableau de bord */
.dash-preview{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:var(--panel);}
.dash-preview iframe{width:100%;height:440px;border:0;display:block;background:var(--bg);}
.dash-preview-bar{padding:12px 18px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;font-size:14px;color:var(--muted);}
.dash-preview-link{color:var(--accent);text-decoration:none;font-weight:600;}
.quick{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;}
.quick a{display:flex;align-items:center;gap:12px;padding:14px 16px;border:1px solid var(--border);border-radius:12px;background:var(--panel-2);color:var(--text);text-decoration:none;font-size:14px;font-weight:500;min-height:52px;}
.quick a:hover{border-color:var(--accent);}
.quick .ico{color:var(--accent);}

/* Gestion des réalisations */
.sync-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;}
.sync-bar .admin-hint{margin:0;max-width:60ch;}
.portfolio-manager-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:18px;}
.portfolio-manager-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;display:flex;flex-direction:column;}
.portfolio-manager-thumb{aspect-ratio:4/3;background-size:cover;background-position:center;position:relative;display:flex;align-items:center;justify-content:center;background-color:var(--panel-2);}
.portfolio-manager-thumb video,.portfolio-manager-thumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;}
.portfolio-manager-thumb--color{background:var(--swatch);}
.portfolio-manager-thumb .media-kind{position:absolute;top:10px;left:10px;background:rgba(0,0,0,.6);color:#fff;font-size:10px;text-transform:uppercase;letter-spacing:.08em;padding:4px 8px;border-radius:6px;font-weight:700;}
.portfolio-manager-body{padding:16px;display:flex;flex-direction:column;gap:8px;flex:1;}
.portfolio-manager-body h4{font-size:15px;font-family:var(--font);font-weight:700;}
.portfolio-manager-caption{font-size:13px;color:var(--muted);}
.portfolio-manager-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:auto;padding-top:6px;}
.reel-hint{font-size:12px;color:var(--accent);text-decoration:none;}
.add-card{border:1.5px dashed var(--border-strong);border-radius:var(--radius);display:flex;align-items:center;justify-content:center;min-height:240px;text-decoration:none;color:var(--muted);font-weight:600;flex-direction:column;gap:8px;}
.add-card:hover{border-color:var(--accent);color:var(--text);}
.add-card .plus{font-size:30px;line-height:1;}
.media-type-toggle{display:flex;gap:8px;flex-wrap:wrap;}
.media-type-toggle label{display:flex;align-items:center;gap:8px;padding:10px 16px;border:1px solid var(--border-strong);border-radius:999px;font-size:14px;cursor:pointer;color:var(--muted);min-height:44px;}
.media-type-toggle input{accent-color:var(--accent);}
.media-type-toggle label:has(input:checked){border-color:var(--accent);color:var(--text);}
.media-panel{display:none;margin-top:14px;padding:16px;border:1px solid var(--border);border-radius:12px;background:var(--panel-2);}
.media-panel.visible{display:flex;flex-direction:column;gap:10px;}
.current-media-preview{max-width:240px;border-radius:10px;aspect-ratio:4/3;object-fit:cover;display:block;}
input[type="file"]{font:inherit;font-size:14px;color:var(--muted);}

/* Instagram : vérification automatique */
.ig-bar{display:flex;align-items:center;gap:6px 14px;flex-wrap:wrap;padding:12px 16px;border:1px solid var(--border);border-radius:12px;background:var(--panel);color:var(--text);text-decoration:none;font-size:14px;}
.ig-bar:hover{border-color:var(--accent);}
.ig-bar .ico{color:var(--accent);flex:none;}
.ig-bar small{color:var(--muted);font-size:13px;}
.ig-bar em{margin-left:auto;font-style:normal;color:var(--accent);font-weight:600;}
.ig-actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:18px;}
.ig-actions form{display:contents;}
.lang-tabs{display:flex;align-items:center;gap:8px 14px;flex-wrap:wrap;}
.lang-tabs-label{font-size:13px;color:var(--muted);}
.lang-tabs .range small{font-size:11px;font-weight:500;opacity:.75;margin-left:6px;}
.ig-notice{display:flex;gap:12px;align-items:flex-start;margin-top:14px;padding:12px 14px;border-radius:12px;background:color-mix(in srgb,var(--accent) 12%,var(--panel));border:1px solid color-mix(in srgb,var(--accent) 45%,transparent);font-size:14px;}
.ig-notice .ico{color:var(--accent);flex:none;margin-top:1px;}
.admin-flash-action{align-items:center;flex-wrap:wrap;background:color-mix(in srgb,var(--accent) 12%,var(--panel));border-color:color-mix(in srgb,var(--accent) 45%,transparent);}
.admin-flash-action .ico{color:var(--accent);}
.admin-flash-action span{flex:1 1 260px;}
.admin-flash-action form{margin:0;}

/* Informations (paramètres) */
.facts{display:grid;grid-template-columns:minmax(130px,200px) minmax(0,1fr);margin:0;font-size:14px;}
.facts dt,.facts dd{margin:0;padding:12px 0;border-top:1px solid var(--border);}
.facts dt{color:var(--muted);}
.facts dt:first-of-type,.facts dt:first-of-type + dd{border-top:0;}
.facts dd{overflow-wrap:anywhere;}
.facts a{color:var(--accent);margin-left:8px;font-size:13px;}
.user-list{display:flex;flex-direction:column;gap:14px;}
.user-card{padding:18px 20px;}
.user-card-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:14px;}
.user-card-name{font-size:16px;font-weight:600;}
.user-card-name small{font-weight:500;color:var(--muted);}
.user-card-meta{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:8px;font-size:13px;color:var(--muted);}
.user-card-actions{display:flex;flex-wrap:wrap;gap:8px;}
.user-card-edit{margin-top:16px;padding-top:16px;border-top:1px solid var(--border);}
.user-card-edit summary{cursor:pointer;list-style:none;color:var(--accent);font-size:13px;font-weight:600;}
.user-card-edit summary::-webkit-details-marker{display:none;}
.user-card-edit summary::before{content:"+ ";}
.user-card-edit[open] summary::before{content:"− ";}
.user-card-edit .form-row{margin-top:14px;}
.admin-form.card{gap:16px;}
code{font-size:.92em;background:var(--panel-2);padding:1px 6px;border-radius:6px;}

/* Réalisations : ordre, visibilité, corbeille */
.admin-flash-warn{background:color-mix(in srgb,var(--warn) 14%,var(--panel));border-color:color-mix(in srgb,var(--warn) 55%,transparent);}
.admin-flash-warn .ico{color:var(--warn);}
.btn-icon{width:40px;min-width:40px;height:40px;padding:0;display:inline-grid;place-items:center;}
.btn-icon .ico{width:18px;height:18px;}
.pm-intro .admin-hint{max-width:none;margin:0;}
.pm-hidden-count{color:var(--warn);font-weight:600;}
.pm-inline{display:contents;}
.pm-edit{flex:1 1 100%;justify-content:center;}
.portfolio-manager-card{position:relative;transition:opacity .15s,transform .15s;}
.portfolio-manager-thumb{cursor:grab;}
.portfolio-manager-card.is-dragging{opacity:.45;transform:scale(.97);}
.portfolio-manager-card.is-dragging .portfolio-manager-thumb{cursor:grabbing;}
.portfolio-manager-card.is-hidden .portfolio-manager-thumb img,.portfolio-manager-card.is-hidden .portfolio-manager-thumb video{filter:grayscale(1) brightness(.55);}
.portfolio-manager-card.is-hidden h4{color:var(--muted);}
.pm-hidden-veil{position:absolute;right:10px;bottom:10px;display:inline-flex;align-items:center;gap:6px;background:rgba(0,0,0,.75);color:#fff;font-size:11px;font-weight:700;padding:5px 10px;border-radius:999px;}
.pm-hidden-veil .ico{width:14px;height:14px;}
.pm-grip{position:absolute;top:8px;right:8px;width:30px;height:30px;border-radius:8px;background:rgba(0,0,0,.65);color:#fff;display:grid;place-items:center;opacity:0;transition:opacity .15s;}
.pm-grip .ico{width:16px;height:16px;}
.portfolio-manager-card:hover .pm-grip{opacity:1;}
@media (hover:none){.pm-grip{display:none;}}
.pm-select{position:absolute;top:8px;left:8px;z-index:3;width:24px;height:24px;border-radius:7px;background:rgba(0,0,0,.65);display:grid;place-items:center;cursor:pointer;}
.pm-select input{width:16px;height:16px;accent-color:var(--accent);cursor:pointer;}
.pm-toolbar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:14px;margin-bottom:16px;}
.pm-toolbar .field{flex:1 1 220px;}
.pm-bulk-bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:12px 16px;border-radius:12px;border:1px solid var(--border);background:color-mix(in srgb,var(--accent) 10%,var(--panel));font-size:14px;}
.pm-badges{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;}
.pm-weight{font-size:12px;color:var(--muted);}
.pm-weight.is-heavy{color:var(--warn);font-weight:600;}
.pm-badge-link{font-size:12px;font-weight:600;color:var(--accent);text-decoration:none;border:1px solid color-mix(in srgb,var(--accent) 45%,transparent);border-radius:999px;padding:2px 9px;}
.pm-badge-link:hover{background:color-mix(in srgb,var(--accent) 14%,transparent);}
.trash-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;}
.trash-list li{display:flex;align-items:center;gap:14px;padding:12px 0;border-top:1px solid var(--border);flex-wrap:wrap;}
.trash-list li:first-child{border-top:0;}
.trash-thumb{width:56px;height:42px;border-radius:8px;overflow:hidden;background:var(--swatch,var(--panel-2));flex:none;display:block;}
.trash-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.trash-info{flex:1 1 180px;min-width:0;display:flex;flex-direction:column;gap:2px;}
.trash-info strong{font-size:14px;}
.trash-info small{color:var(--muted);font-size:12px;}
.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%,16px);opacity:0;background:var(--panel-2);border:1px solid var(--border-strong);color:var(--text);padding:12px 18px;border-radius:12px;font-size:14px;box-shadow:0 12px 40px rgba(0,0,0,.5);z-index:60;transition:opacity .2s,transform .2s;pointer-events:none;max-width:calc(100vw - 32px);}
.toast.is-on{opacity:1;transform:translate(-50%,0);}
.toast.is-bad{border-color:var(--err);}

/* Lancement officiel */
.progress{height:10px;border-radius:999px;background:rgba(252,242,231,.08);overflow:hidden;}
.progress i{display:block;height:100%;width:var(--w,0%);border-radius:inherit;background:linear-gradient(90deg,var(--accent),color-mix(in srgb,var(--accent) 55%,#fff));}
.launch-next{list-style:none;margin:14px 0 0;padding:0;display:flex;flex-direction:column;gap:2px;}
.launch-next a{display:flex;align-items:center;gap:12px;padding:10px 4px;color:var(--text);text-decoration:none;font-size:14px;border-radius:10px;}
.launch-next a:hover{background:rgba(252,242,231,.05);}
.launch-next .ico{width:18px;height:18px;color:var(--accent);flex:none;}
.launch-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;}
.launch-step{display:grid;grid-template-columns:32px minmax(0,1fr) auto;gap:14px;padding:18px 0;border-top:1px solid var(--border);align-items:start;scroll-margin-top:90px;}
.launch-step:first-child{border-top:0;}
.launch-icon{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:rgba(252,242,231,.08);color:var(--muted);font-size:13px;}
.launch-icon .ico{width:15px;height:15px;}
.launch-step.is-done .launch-icon{background:color-mix(in srgb,var(--ok) 18%,transparent);color:var(--ok);}
.launch-step.is-warn .launch-icon{background:color-mix(in srgb,var(--warn) 18%,transparent);color:var(--warn);}
.launch-main h4{font-size:15px;margin:0;display:flex;gap:4px 10px;flex-wrap:wrap;align-items:baseline;}
.launch-tag{font-size:11px;font-style:normal;font-weight:600;color:var(--muted);letter-spacing:.04em;text-transform:uppercase;}
.launch-main p{margin:4px 0 0;font-size:13px;color:var(--muted);max-width:68ch;}
.launch-main p.launch-how{color:var(--text);margin-top:8px;}
.launch-side{display:flex;flex-direction:column;gap:8px;align-items:stretch;min-width:190px;}
.launch-side .btn{justify-content:center;}
.launch-side form{display:contents;}

/* ---------- Adaptation tablette et téléphone ---------- */
@media (max-width:1100px){
  .grid--4{grid-template-columns:repeat(2,minmax(0,1fr));}
  .grid--main{grid-template-columns:minmax(0,1fr);}
}
@media (max-width:900px){
  .admin-shell{grid-template-columns:minmax(0,1fr);}
  /* Fermé : visibility:hidden en plus du décalage, sinon Tab parcourt les liens hors écran (masqué après l'animation). */
  .admin-sidebar{position:fixed;inset:0 auto 0 0;z-index:40;width:min(300px,86vw);transform:translateX(-102%);visibility:hidden;transition:transform .25s ease,visibility 0s linear .25s;box-shadow:24px 0 60px rgba(0,0,0,.6);}
  .admin-sidebar.is-open{transform:none;visibility:visible;transition:transform .25s ease;}
  .admin-menu-btn{display:grid;}
  .admin-topbar{padding:12px 16px;gap:12px;}
  .admin-content-inner{padding:20px 16px 110px;}
  .grid--3,.grid--2,.form-row{grid-template-columns:minmax(0,1fr);}
  .topbar-publish{padding-inline:12px;}
  .launch-step{grid-template-columns:32px minmax(0,1fr);}
  .launch-side{grid-column:2;flex-direction:row;flex-wrap:wrap;min-width:0;}
}
@media (max-width:560px){
  .grid--4{grid-template-columns:minmax(0,1fr);}
  .topbar-publish{font-size:0;gap:0;padding:0;width:44px;justify-content:center;}
  .topbar-publish .ico{width:20px;height:20px;}
  .kpi-value{font-size:30px;}
  .history li{grid-template-columns:minmax(0,1fr);gap:2px;}
  .facts{grid-template-columns:minmax(0,1fr);}
  .facts dt{padding-bottom:0;}
  .facts dd{border-top:0;padding-top:2px;}
  .score-row{justify-content:center;}
}
@media (prefers-reduced-motion:reduce){.admin-sidebar,.switch-track,.switch-track::after{transition:none;}}

/* ---------- Mail (nextcloud-mail.php) : disposition façon Gmail — dossiers / liste / lecture ---------- */
.mail-account-tabs{display:flex;gap:4px;margin-bottom:12px;overflow-x:auto;}
.mail-account-tabs a{padding:8px 14px;border-radius:999px;font-size:13px;font-weight:600;color:var(--muted);text-decoration:none;background:var(--panel);border:1px solid var(--border);white-space:nowrap;}
.mail-account-tabs a.is-current{background:color-mix(in srgb,var(--accent) 20%,transparent);color:var(--text);border-color:transparent;}
.mail-list-wrap{display:flex;flex-direction:column;min-width:0;}
.mail-search{display:flex;align-items:center;gap:6px;padding:10px 20px;border-bottom:1px solid var(--border);background:var(--panel-2);}
.mail-search input[type="search"]{flex:1;border:1px solid var(--border-strong);border-radius:8px;background:var(--bg);color:var(--text);font:inherit;font-size:13px;padding:8px 10px;}
.mail-search-all{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--muted);white-space:nowrap;cursor:pointer;}
.mail-row-folder{flex:none;font-size:11px;color:var(--muted);background:var(--panel-2);border:1px solid var(--border);border-radius:999px;padding:2px 8px;}
.mail-row-attach{flex:none;opacity:.6;}
.mail-row-attach .ico{width:15px;height:15px;}
.mail-load-more{padding:14px 20px;text-align:center;}
.mail-attachments{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px;}
.mail-attachment{display:inline-flex;align-items:center;gap:8px;padding:8px 12px;border-radius:9px;border:1px solid var(--border-strong);background:var(--panel-2);color:var(--text);text-decoration:none;font-size:13px;}
.mail-attachment:hover{background:var(--border);}
.mail-attachment em{font-style:normal;color:var(--muted);font-size:12px;}
.mail-compose-draft{padding:9px 16px;border-radius:999px;border:1px solid var(--border-strong);background:transparent;color:var(--muted);font-weight:600;font-size:13px;cursor:pointer;}
.mail-compose-draft:hover,.mail-compose-draft:focus-visible{color:var(--text);background:var(--border);}
.mail-shell{display:grid;grid-template-columns:220px 1fr;gap:0;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:var(--panel);min-height:520px;}
.mail-folders{background:var(--panel-2);border-right:1px solid var(--border);padding:18px 12px;display:flex;flex-direction:column;gap:4px;}
.mail-compose-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:12px 16px;margin-bottom:14px;border-radius:999px;background:var(--accent);color:var(--accent-ink,#141520);font-weight:600;font-size:14px;text-decoration:none;min-height:44px;}
.mail-compose-btn:hover,.mail-compose-btn:focus-visible{filter:brightness(1.08);}
.mail-folder-link{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 12px;border-radius:10px;color:var(--text);text-decoration:none;font-size:14px;min-height:40px;}
.mail-folder-link:hover{background:var(--border);}
.mail-folder-link.is-current{background:color-mix(in srgb,var(--accent) 18%,transparent);font-weight:700;}
.mail-folder-link:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;}
.mail-folder-link--sub{font-size:13px;color:var(--muted);min-height:34px;}
.mail-folder-link--sub.is-current{color:var(--text);}
.mail-unread-badge{background:var(--accent);color:var(--accent-ink,#141520);font-size:11px;font-weight:700;border-radius:999px;padding:2px 7px;min-width:18px;text-align:center;}

.mail-list-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:8px 10px;padding:10px 20px;border-bottom:1px solid var(--border);background:var(--panel-2);}
.mail-list-toolbar[hidden]{display:none;}
.mail-selected-count{font-size:13px;color:var(--muted);margin-right:auto;white-space:nowrap;}
.mail-list-toolbar .btn{white-space:nowrap;}
.mail-list{display:flex;flex-direction:column;overflow-y:auto;max-height:640px;}
.mail-row{display:flex;align-items:center;gap:10px;padding:12px 20px;border-bottom:1px solid var(--border);}
.mail-row:hover{background:var(--panel-2);}
.mail-row.is-unread{font-weight:700;background:color-mix(in srgb,var(--accent) 6%,transparent);}
.mail-row-check{flex:none;width:18px;height:18px;accent-color:var(--accent);}
.mail-star{flex:none;width:32px;height:32px;border:0;background:transparent;color:var(--muted);cursor:pointer;border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:16px;}
.mail-star:hover,.mail-star:focus-visible{background:var(--border);color:var(--text);}
.mail-star.is-starred{color:#e3b452;}
.mail-row-open{display:flex;align-items:center;gap:14px;flex:1;min-width:0;text-decoration:none;color:var(--text);}
.mail-row-open:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;}
.mail-row-avatar{flex:none;width:34px;height:34px;border-radius:50%;background:var(--accent);color:var(--accent-ink,#141520);display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;text-transform:uppercase;}
.mail-row-from{flex:0 0 160px;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mail-row-body{flex:1;min-width:0;font-size:14px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mail-row-body strong{color:var(--text);font-weight:inherit;}
.mail-row.is-unread .mail-row-body strong{color:var(--text);}
.mail-row-date{flex:none;font-size:12px;color:var(--muted);}

/* Barre d'actions de lecture (Répondre / Répondre à tous / Transférer / favoris / menu ⋮) */
.mail-reading-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:16px;padding-top:16px;border-top:1px solid var(--border);}
.mail-row-menu{position:relative;margin-left:auto;}
.mail-row-menu summary{list-style:none;width:36px;height:36px;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--muted);}
.mail-row-menu summary::-webkit-details-marker{display:none;}
.mail-row-menu summary:hover,.mail-row-menu[open] summary{background:var(--border);color:var(--text);}

.mail-reading{padding:24px 28px;overflow-y:auto;max-height:640px;}
.mail-reading .mail-back{font-size:13px;color:var(--muted);text-decoration:none;display:inline-block;margin-bottom:14px;}
.mail-reading h3{font-size:20px;margin-bottom:10px;overflow-wrap:anywhere;}
.mail-reading iframe{width:100%;height:440px;height:min(70vh,900px);border:0;border-radius:10px;background:#fff;margin-top:16px;}
/* Mail en texte brut : retours à la ligne d'origine (pre-wrap seul ; avant, nl2br en plus doublait chaque ligne), longues adresses coupées. */
.mail-plain{padding-top:16px;white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.55;}
.mail-images-blocked{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:16px;padding:10px 14px;border:1px solid var(--border);border-radius:10px;font-size:13px;color:var(--muted);}
.mail-images-blocked a{color:var(--accent);font-weight:600;}

.mail-composer{display:none;}
.mail-composer.is-closed{display:none !important;} /* fermée sans rechargement : :target ne suit pas pushState (assets/js/admin.js) */
.mail-composer:target{display:flex;flex-direction:column;position:fixed;right:24px;bottom:0;width:min(480px,calc(100vw - 48px));max-height:min(560px,calc(100vh - 48px));overflow:hidden;background:var(--panel);border:1px solid var(--border-strong);border-bottom:0;border-radius:12px 12px 0 0;box-shadow:0 30px 80px -20px rgba(0,0,0,.7);z-index:40;}
/* Le compositeur ("Nouveau message") prend le grand format d'une vraie fenêtre de rédaction sur
   écran large — le panneau Signature (même classe .mail-composer) reste le petit format réglage. */
#compose:target{right:auto;left:50%;bottom:auto;top:50%;transform:translate(-50%,-50%);width:min(760px,92vw);height:min(80vh,760px);border-radius:16px;border-bottom:1px solid var(--border-strong);}
#compose .mail-compose-body{min-height:160px;}
.mail-composer-head{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:var(--panel-2);border-bottom:1px solid var(--border);flex:none;}
.mail-composer-head strong{font-size:13px;}
.mail-composer-close{color:var(--muted);text-decoration:none;font-size:18px;line-height:1;padding:6px;min-width:32px;min-height:32px;display:flex;align-items:center;justify-content:center;border-radius:6px;}
.mail-composer-close:hover,.mail-composer-close:focus-visible{color:var(--text);background:var(--border);}
.mail-composer-close .ico{width:16px;height:16px;}
.mail-composer form{position:relative;display:flex;flex-direction:column;flex:1;min-height:0;padding:0 16px;overflow-y:auto;}
.mail-composer .hint{padding:10px 0 0;flex:none;}

.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;}
.mail-compose-field{flex:none;width:100%;border:0;border-bottom:1px solid var(--border);background:transparent;color:var(--text);font:inherit;font-size:14px;padding:12px 0;}
.mail-compose-field::placeholder{color:var(--muted);}
.mail-compose-field:focus-visible{outline:none;border-bottom-color:var(--accent);}
.mail-compose-body{flex:1;min-height:140px;width:100%;border:0;background:transparent;color:var(--text);font:inherit;font-size:14px;line-height:1.55;padding:14px 0;resize:none;}
.mail-compose-body::placeholder{color:var(--muted);}
/* Focus clavier visible dans le compositeur (avant : aucun repère dans la zone de texte). */
.mail-compose-body:focus-visible{outline:none;box-shadow:inset 0 -2px 0 var(--accent);}
.mail-compose-toolbar{flex:none;position:sticky;bottom:0;z-index:2;display:flex;flex-wrap:wrap;align-items:center;gap:4px;padding:10px 0 16px;border-top:1px solid var(--border);background:var(--panel);}
.mail-compose-toolbar button[data-before]{width:32px;height:32px;border-radius:6px;border:0;background:transparent;color:var(--muted);display:flex;align-items:center;justify-content:center;font-size:14px;cursor:pointer;}
.mail-compose-toolbar button[data-before]:hover,.mail-compose-toolbar button[data-before]:focus-visible{background:var(--border);color:var(--text);}
.mail-compose-send{margin-left:auto;padding:9px 22px;border-radius:999px;border:0;background:var(--accent);color:var(--accent-ink);font-weight:700;font-size:14px;cursor:pointer;min-height:40px;}
.mail-compose-send:hover,.mail-compose-send:focus-visible{filter:brightness(1.08);}
.mail-undo{margin-left:auto;display:flex;align-items:center;gap:10px;font-size:13px;color:var(--muted);}
.mail-undo[hidden]{display:none;}
.mail-undo button{padding:8px 16px;border-radius:999px;border:1px solid var(--border-strong);background:transparent;color:var(--text);font-weight:600;cursor:pointer;min-height:36px;}
.mail-attach-btn{position:relative;display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:999px;border:1px solid var(--border-strong);color:var(--text);font-size:13px;font-weight:600;cursor:pointer;min-height:36px;}
.mail-attach-btn:hover{background:var(--border);}
.mail-attach-btn:focus-within{outline:2px solid var(--accent);outline-offset:2px;}
.mail-attach-btn .ico{width:16px;height:16px;}
.mail-attach-btn input{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden;}
.mail-attach-list{order:-1;flex-basis:100%;list-style:none;margin:0 0 8px;padding:0;display:flex;flex-wrap:wrap;gap:6px;}
.mail-attach-list:empty{display:none;}
.mail-attach-list li{display:inline-flex;align-items:center;gap:8px;max-width:100%;padding:5px 6px 5px 12px;border-radius:999px;background:var(--panel-2);border:1px solid var(--border);font-size:12px;}
.mail-attach-list span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:220px;}
.mail-attach-list em{font-style:normal;color:var(--muted);}
.mail-attach-list button{width:24px;height:24px;border:0;border-radius:50%;background:transparent;color:var(--muted);font-size:16px;line-height:1;cursor:pointer;}
.mail-attach-list button:hover,.mail-attach-list button:focus-visible{background:var(--border);color:var(--text);}
.mail-compose-schedule{flex:none;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 0;border-bottom:1px solid var(--border);font-size:13px;color:var(--muted);}
.mail-new-banner{display:flex;align-items:center;gap:10px;margin-bottom:12px;padding:12px 16px;border-radius:12px;background:color-mix(in srgb,var(--accent) 14%,var(--panel));border:1px solid color-mix(in srgb,var(--accent) 50%,transparent);font-size:14px;}
.mail-new-banner[hidden]{display:none;}
.mail-new-banner a{margin-left:auto;color:var(--text);font-weight:600;}
.mail-folders-heading{display:flex;align-items:center;justify-content:space-between;margin:14px 0 4px;padding:12px 4px 0 12px;border-top:1px solid var(--border);font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);}
.mail-folder-row{display:flex;align-items:center;}
.mail-folder-row .mail-folder-link{flex:1;min-width:0;}
.mail-folder-add{flex:none;width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;color:var(--muted);text-decoration:none;}
.mail-folder-add .ico{width:16px;height:16px;}
.mail-folder-add:hover,.mail-folder-add:focus-visible{background:var(--border);color:var(--text);}
/* + visible seulement au survol de sa ligne (ou au clavier) ; toujours visible sur écran tactile, sans survol. */
.mail-folder-row .mail-folder-add,.mail-folders-heading .mail-folder-add{opacity:0;transition:opacity .12s;}
.mail-folder-row:hover .mail-folder-add,.mail-folders-heading:hover .mail-folder-add,.mail-folder-add:focus-visible{opacity:1;}
@media (hover:none){.mail-folder-row .mail-folder-add,.mail-folders-heading .mail-folder-add{opacity:1;}}
.mail-thread-count{font-style:normal;font-size:11px;color:var(--muted);font-weight:600;margin-left:4px;}
.mail-thread{margin-top:12px;border:1px solid var(--border);border-radius:10px;background:var(--panel-2);}
.mail-thread summary{cursor:pointer;padding:10px 14px;font-size:13px;font-weight:600;}
.mail-thread-item{display:flex;align-items:baseline;gap:10px;padding:9px 14px;border-top:1px solid var(--border);color:var(--text);text-decoration:none;font-size:13px;}
.mail-thread-item:hover{background:var(--border);}
.mail-thread-item span{flex:1;min-width:0;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mail-thread-item em{flex:none;font-style:normal;font-size:12px;color:var(--muted);}
.mail-danger,.mail-row-menu-list button.mail-danger{color:var(--err);}
.mail-move-menu{margin-left:0;}
.mail-move-menu summary.btn{width:auto;height:auto;min-height:40px;}
.mail-move-menu summary .ico{width:14px;height:14px;transform:rotate(90deg);transition:transform .15s;}
.mail-move-menu[open] summary .ico{transform:rotate(-90deg);}
.mail-move-menu .mail-row-menu-list{max-height:320px;overflow-y:auto;}
.mail-menu-label{margin:6px 0 2px;padding:8px 10px 4px;border-top:1px solid var(--border);font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);}

/* Lien Signature (même classe que les dossiers) : icône et libellé côte à côte, pas écartés aux deux bords. */
.mail-folders > .mail-folder-link{justify-content:flex-start;}
@media (max-width:760px){
  .mail-shell{grid-template-columns:1fr;grid-template-rows:auto 1fr;} /* barre des dossiers à sa hauteur, la liste prend le reste */
  .mail-folders{flex-direction:row;flex-wrap:wrap;align-items:center;border-right:0;border-bottom:1px solid var(--border);padding:14px 12px;}
  /* Dossiers sur une ligne qui défile (avant : empilés, ~300 px de hauteur avant la liste des messages). */
  .mail-folders > nav{flex:1 0 100%;display:flex;gap:4px;overflow-x:auto;scrollbar-width:none;}
  .mail-folders > nav .mail-folder-row{flex:none;}
  .mail-folders > nav .mail-folder-link{white-space:nowrap;}
  .mail-folders > nav .mail-folders-heading{display:none;}
  .mail-row-from{flex:0 0 110px;}
}
/* Téléphone : sur une ligne, l'objet n'avait plus que ~50 px. Expéditeur + date en haut, objet et aperçu dessous, sans avatar. */
@media (max-width:520px){
  .mail-row{padding:12px 14px;gap:8px;}
  .mail-row-open{flex-wrap:wrap;row-gap:2px;gap:8px;}
  .mail-row-avatar{display:none;}
  .mail-row-from{flex:1 1 0;min-width:0;}
  .mail-row-body{flex:1 0 100%;order:5;}
}

/* ---------- Calendrier (nextcloud-calendar.php) : semaine façon Google Calendar ---------- */
.cal-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.cal-nav-btn{width:36px;height:36px;border-radius:8px;border:1px solid var(--border-strong);background:var(--panel);color:var(--text);display:flex;align-items:center;justify-content:center;text-decoration:none;}
.cal-nav-btn:hover,.cal-nav-btn:focus-visible{background:var(--border);}
.cal-nav-btn .ico{width:16px;height:16px;}
.cal-range-label{font-size:17px;margin:0 4px;text-transform:capitalize;}
.cal-shell{display:grid;grid-template-columns:220px 1fr;gap:0;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:var(--panel);margin-top:16px;}
.cal-sidebar{background:var(--panel-2);border-right:1px solid var(--border);padding:18px 14px;}
.cal-sidebar-label{margin:14px 0 6px;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);}
.cal-sidebar-label:first-child{margin-top:0;}
.field label.cal-check,.cal-check{display:flex;align-items:center;justify-content:flex-start;gap:9px;padding:6px 2px;font-size:13px;color:var(--text);cursor:pointer;}
.cal-check input{accent-color:var(--accent);}
.cal-dot{width:10px;height:10px;border-radius:50%;flex:none;}
.cal-grid-wrap{min-width:0;overflow-x:auto;}
.cal-grid-head,.cal-allday-row{display:grid;grid-template-columns:52px repeat(var(--cal-cols,7),minmax(90px,1fr));}
.cal-grid-head{border-bottom:1px solid var(--border);}
.cal-gutter{padding:8px 6px;font-size:11px;color:var(--muted);}
.cal-day-head{padding:10px 6px;text-align:center;border-left:1px solid var(--border);}
.cal-day-head span{display:block;font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;}
.cal-day-head strong{display:block;font-size:18px;font-weight:700;margin-top:2px;}
.cal-day-head.is-today strong{color:var(--accent-ink,#141520);background:var(--accent);width:28px;height:28px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;margin-top:2px;}
.cal-allday-row{border-bottom:1px solid var(--border);min-height:32px;}
.cal-allday-cell{border-left:1px solid var(--border);padding:3px;display:flex;flex-direction:column;gap:2px;}
.cal-allday-event{display:block;padding:2px 6px;border-radius:5px;color:#fff;font-size:11px;font-weight:600;text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.cal-grid-body{display:grid;grid-template-columns:52px repeat(var(--cal-cols,7),minmax(90px,1fr));max-height:640px;overflow-y:auto;}
.cal-hour-gutter,.cal-day-col{height:1152px;}
.cal-hour-gutter{display:flex;flex-direction:column;}
.cal-hour-label{flex:1 1 0;height:0;font-size:11px;color:var(--muted);padding-right:6px;text-align:right;transform:translateY(-6px);}
.cal-day-col{position:relative;display:flex;flex-direction:column;border-left:1px solid var(--border);}
.cal-hour-line{flex:1 1 0;height:0;border-top:1px solid var(--border);}
.cal-hour-line:first-child{border-top:0;}
.cal-now-line{position:absolute;left:0;right:0;height:2px;background:var(--err);z-index:5;pointer-events:none;}
.cal-now-line::before{content:"";position:absolute;left:-4px;top:-3px;width:8px;height:8px;border-radius:50%;background:var(--err);}
.cal-event{position:absolute;left:2px;right:2px;min-height:18px;border-radius:6px;padding:3px 6px;color:#fff;font-size:11px;line-height:1.3;text-decoration:none;overflow:hidden;box-shadow:0 2px 6px rgba(0,0,0,.3);}
.cal-event strong{display:block;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.cal-event span{opacity:.85;}
.cal-event:hover,.cal-event:focus-visible{filter:brightness(1.12);z-index:6;}
.cal-panel{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:min(420px,calc(100vw - 48px));max-height:calc(100vh - 48px);overflow-y:auto;background:var(--panel);border:1px solid var(--border-strong);border-radius:16px;box-shadow:0 30px 80px -20px rgba(0,0,0,.7);padding:20px 22px;z-index:50;} /* même apparence que .modal-box, mais NON modale : ni fond assombri, ni focus retenu */
.cal-panel-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:14px;}
.cal-panel-head strong{font-size:17px;font-weight:700;line-height:1.3;padding-top:6px;overflow-wrap:anywhere;}
.cal-panel-close{flex:none;}
.cal-panel-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px;}
.cal-panel-subhead{margin:18px 0 6px;font-size:14px;}
@keyframes cal-pop{from{opacity:0;transform:translate(-50%,-48%) scale(.98);}to{opacity:1;transform:translate(-50%,-50%);}} /* garde le centrage (translate) pendant l'apparition */
@media (prefers-reduced-motion:no-preference){.cal-panel{animation:cal-pop .18s ease-out;}}
.cal-time-fields{display:flex;flex-direction:row;gap:12px;}
.cal-time-fields[hidden]{display:none;}
.field[hidden]{display:none;}
.cal-type-tag{display:inline-block;padding:1px 6px;border-radius:4px;background:rgba(0,0,0,.28);font-style:normal;font-weight:700;font-size:10px;text-transform:uppercase;letter-spacing:.03em;}
.cal-connect-row{display:flex;gap:8px;align-items:center;}
.cal-connect-row input{flex:1;min-width:0;}
.cal-connect-row .btn{flex:none;}
.cal-time-fields > div{flex:1;}

@media (max-width:900px){
  .cal-shell{grid-template-columns:1fr;}
  .cal-sidebar{border-right:0;border-bottom:1px solid var(--border);}
}

/* ---------- Talk (nextcloud-talk.php) : discussions + présence — réutilise .mail-shell/.mail-folders/
   .mail-folder-link/.mail-unread-badge/.mail-reading/.empty--block telles quelles ---------- */
.talk-presence{padding-bottom:12px;margin-bottom:10px;border-bottom:1px solid var(--border);}
.talk-presence-row{display:flex;align-items:center;gap:7px;padding:5px 2px;font-size:13px;}
.talk-presence-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.talk-dot{width:9px;height:9px;border-radius:50%;flex:none;background:var(--muted);opacity:.5;}
.talk-dot-online{background:var(--ok);opacity:1;}
.talk-dot-away,.talk-dot-busy{background:var(--warn);opacity:1;}
.talk-dot-dnd{background:var(--err);opacity:1;}
.talk-messages{display:flex;flex-direction:column;}
.talk-message{padding:10px 0;border-bottom:1px solid var(--border);}
.talk-message strong{margin-right:8px;}
.talk-message p{margin:4px 0 0;white-space:pre-wrap;font-size:14px;}
.talk-send{display:flex;gap:8px;margin-top:16px;padding-top:16px;border-top:1px solid var(--border);}
.talk-send input{flex:1;min-width:0;border:1px solid var(--border-strong);border-radius:10px;background:var(--bg);color:var(--text);font:inherit;font-size:14px;padding:10px 12px;}
.talk-send input:focus-visible{outline:none;border-color:var(--accent);}
.talk-toolbar{display:flex;justify-content:flex-end;}
.talk-room-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;}
.talk-room-head h3{margin:0;}
.talk-room-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.talk-edit-form{display:flex;gap:8px;margin-top:6px;}
.talk-edit-form input[type="text"]{flex:1;border:1px solid var(--border-strong);border-radius:8px;background:var(--bg);color:var(--text);font:inherit;font-size:14px;padding:6px 10px;}
.talk-reactions{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px;}
.talk-reaction{border:1px solid var(--border-strong);border-radius:999px;background:var(--panel-2);color:var(--text);font-size:12px;padding:2px 9px;cursor:pointer;}
.talk-reaction:hover,.talk-reaction:focus-visible{background:var(--border);}
.talk-reaction.is-mine{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 20%,transparent);}
.talk-message-actions{display:flex;align-items:center;gap:6px;margin-top:6px;}
.talk-message-actions .mail-row-menu{margin-left:0;position:relative;}
.talk-message-actions .mail-row-menu summary{width:auto;height:auto;padding:6px 10px;border-radius:6px;font-size:13px;color:var(--muted);}
.talk-message-actions .mail-row-menu summary:hover{background:var(--border);color:var(--text);}
.rv-menu-list.talk-emoji-list{display:flex;gap:2px;min-width:0;width:max-content;}
.rv-menu-list.talk-emoji-list button{width:auto;justify-content:center;padding:6px 8px;font-size:16px;}
.talk-danger-zone{display:flex;gap:8px;margin-top:20px;padding-top:16px;border-top:1px solid var(--border);}
[data-tag-picker]{display:flex;flex-direction:column;gap:8px;}
.tag-input-wrap{position:relative;}
[data-tag-input]{font:inherit;font-size:15px;padding:11px 13px;border:1px solid var(--border-strong);border-radius:10px;background:var(--bg);color:var(--text);width:100%;}
[data-tag-input]:focus-visible{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 28%,transparent);}
[data-tag-dropdown]{position:absolute;top:calc(100% + 6px);left:0;right:0;background:var(--panel);border:1px solid var(--border-strong);border-radius:10px;box-shadow:0 20px 50px -20px rgba(0,0,0,.7);padding:6px;z-index:30;max-height:240px;overflow-y:auto;}
[data-tag-dropdown] button{display:flex;flex-direction:column;width:100%;text-align:left;padding:8px 10px;border:0;background:transparent;color:var(--text);font:inherit;font-size:14px;border-radius:6px;cursor:pointer;}
[data-tag-dropdown] button:hover,[data-tag-dropdown] button:focus-visible{background:var(--border);}
[data-tag-dropdown] button small{color:var(--muted);font-size:12px;font-weight:400;}
.talk-chips{display:flex;flex-wrap:wrap;gap:6px;}
.talk-chip{display:inline-flex;align-items:center;gap:4px;padding:4px 6px 4px 10px;border-radius:999px;background:var(--panel-2);border:1px solid var(--border-strong);font-size:13px;}
.talk-chip button{border:0;background:transparent;color:var(--muted);cursor:pointer;font-size:14px;line-height:1;padding:2px 4px;border-radius:50%;}
.talk-chip button:hover,.talk-chip button:focus-visible{background:var(--border);color:var(--text);}

/* Fichiers — interface façon Nextcloud (refonte 2026-10-13) : deux volets (navigation + liste), barre d'outils sombre, liste triable, menu d'actions par ligne.
   Mêmes variables que le reste du panneau (accent bleu --accent, aucun nouvel accent). Menus en <details> : fonctionnent sans JavaScript. */
.fx-shell{display:grid;grid-template-columns:240px minmax(0,1fr);border:1px solid var(--border);border-radius:var(--radius);background:var(--panel);min-height:560px;}
.fx-side{background:var(--panel-2);border-right:1px solid var(--border);border-radius:var(--radius) 0 0 var(--radius);padding:14px 10px;display:flex;flex-direction:column;gap:2px;min-width:0;}
.fx-nav{display:flex;flex-direction:column;gap:2px;}
.fx-nav-link{display:flex;align-items:center;gap:10px;min-height:44px;padding:8px 12px;border-radius:10px;color:var(--text);text-decoration:none;font-size:14px;}
.fx-nav-link .ico{width:18px;height:18px;color:var(--muted);}
.fx-nav-link:hover{background:var(--border);}
.fx-nav-link.is-current{background:color-mix(in srgb,var(--accent) 20%,transparent);font-weight:700;}
.fx-nav-link.is-current .ico{color:var(--accent);}
.fx-side-title{margin:14px 12px 4px;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);}
.fx-tree,.fx-tree ul{list-style:none;margin:0;padding:0;}
.fx-tree ul{padding-left:14px;border-left:1px solid var(--border);margin-left:14px;}
.fx-tree-link{display:flex;align-items:center;gap:8px;min-height:36px;padding:6px 10px;border-radius:8px;color:var(--muted);text-decoration:none;font-size:13px;}
.fx-tree-link .ico{width:16px;height:16px;flex:none;}
.fx-tree-link span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.fx-tree-link:hover{background:var(--border);color:var(--text);}
.fx-tree-link.is-current{color:var(--text);font-weight:700;background:color-mix(in srgb,var(--accent) 14%,transparent);}
.fx-quota{margin-top:auto;padding:14px 12px 4px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:6px;}
.fx-quota-label{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:6px;}
.fx-quota-label svg{width:14px;height:14px;}
.fx-quota .progress--sm{height:4px;}
.fx-main{min-width:0;display:flex;flex-direction:column;}
.fx-top{display:flex;align-items:center;gap:12px;padding:12px 20px;background:var(--bg);border-bottom:1px solid var(--border);border-radius:0 var(--radius) 0 0;flex-wrap:wrap;}
.fx-title{margin:0;font-size:18px;font-weight:700;flex:none;max-width:40ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.fx-filter{flex:1 1 220px;max-width:420px;min-height:40px;padding:8px 16px;border:1px solid var(--border-strong);border-radius:999px;background:var(--panel-2);color:var(--text);font:inherit;font-size:14px;}
.fx-filter:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
.fx-new{position:relative;margin-left:auto;}
.fx-new summary{list-style:none;cursor:pointer;}
.fx-new summary::-webkit-details-marker{display:none;}
.fx-new-panel{position:absolute;right:0;top:calc(100% + 6px);z-index:30;min-width:300px;max-width:min(92vw,360px);background:var(--panel);border:1px solid var(--border-strong);border-radius:12px;box-shadow:0 20px 50px -20px rgba(0,0,0,.7);padding:14px;display:flex;flex-direction:column;gap:14px;}
.fx-new-block{display:flex;flex-direction:column;gap:8px;margin:0;}
.fx-new-block + .fx-new-block{padding-top:12px;border-top:1px solid var(--border);}
.fx-field{font-size:12px;color:var(--muted);display:flex;flex-direction:column;gap:4px;}
.fx-new-block select,.fx-mkdir-row input[type=text]{min-height:40px;padding:8px 10px;border:1px solid var(--border-strong);border-radius:8px;background:var(--panel-2);color:var(--text);font:inherit;font-size:14px;}
.fx-mkdir-row{display:flex;gap:8px;}
.fx-mkdir-row input[type=text]{flex:1;min-width:0;}
#fileUpload:focus-visible + label{outline:2px solid var(--accent);outline-offset:2px;}
.fx-crumbs{padding:10px 20px 6px;font-size:14px;color:var(--muted);display:flex;flex-wrap:wrap;gap:6px;align-items:center;}
.fx-crumbs a{color:var(--text);text-decoration:none;padding:4px 2px;}
.fx-crumbs a:hover{color:var(--accent);text-decoration:underline;}
.fx-chips{display:flex;flex-wrap:wrap;gap:8px;padding:6px 20px 12px;}
.fx-chip{display:inline-flex;align-items:center;gap:6px;min-height:34px;padding:4px 14px;border:1px solid var(--border-strong);border-radius:999px;color:var(--text);text-decoration:none;font-size:13px;}
.fx-chip em{font-style:normal;color:var(--muted);font-size:12px;}
.fx-chip:hover{background:var(--border);}
.fx-chip.is-current{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:700;}
.fx-chip.is-current em{color:inherit;opacity:.75;}
.fx-main > .empty,.fx-main > .fx-note{padding:20px;}
.fx-note{margin:0;color:var(--muted);font-size:13px;}
.fx-table-wrap{padding:0 8px 12px;}
.fx-sort{color:inherit;text-decoration:none;}
.fx-sort:hover,.fx-sort.is-on{color:var(--text);}
.fx-sort.is-asc::after{content:" \25B2";font-size:9px;}
.fx-sort.is-desc::after{content:" \25BC";font-size:9px;}
.fx-cell-name{width:100%;}
.fx-ico{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:10px;margin-right:12px;vertical-align:middle;background:rgba(252,242,231,.08);color:var(--muted);}
.fx-ico .ico{width:20px;height:20px;}
.fx-ico--folders{background:color-mix(in srgb,var(--accent) 22%,transparent);color:var(--accent);}
.fx-ico--images{background:rgba(102,199,154,.16);color:var(--ok);}
.fx-ico--docs{background:rgba(227,180,82,.16);color:var(--warn);}
.fx-name-wrap{display:inline-block;vertical-align:middle;max-width:calc(100% - 52px);}
.fx-name{color:var(--text);text-decoration:none;font-weight:600;overflow-wrap:anywhere;}
.fx-name:hover{color:var(--accent);text-decoration:underline;}
.fx-name:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px;}
.fx-inline-meta{display:none;font-size:12px;color:var(--muted);}
.fx-sub{display:block;font-size:12px;color:var(--muted);overflow-wrap:anywhere;}
.fx-sub a{color:var(--accent);}
.fx-col-size,.fx-col-date{color:var(--muted);white-space:nowrap;font-size:13px;}
.fx-col-share{white-space:nowrap;}
.fx-muted{color:var(--muted);}
.fx-share-badge{display:inline-flex;align-items:center;gap:6px;min-height:30px;padding:2px 12px;border:1px solid var(--border-strong);border-radius:999px;color:var(--accent);text-decoration:none;font-size:12px;font-weight:600;}
.fx-share-badge .ico{width:14px;height:14px;}
.fx-share-badge:hover{background:var(--border);}
.fx-col-actions{width:56px;text-align:right;}
.fx-menu{position:relative;display:inline-block;}
.fx-menu summary{list-style:none;width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--muted);}
.fx-menu summary::-webkit-details-marker{display:none;}
.fx-menu summary:hover,.fx-menu[open] summary{background:var(--border);color:var(--text);}
.fx-menu summary:focus-visible,.fx-new summary:focus-visible,.fx-chip:focus-visible,.fx-sort:focus-visible,.fx-tree-link:focus-visible,.fx-nav-link:focus-visible,.fx-crumbs a:focus-visible,.fx-share-badge:focus-visible,.fx-menu-list a:focus-visible,.fx-menu-list button:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
@media (prefers-reduced-motion:no-preference){.fx-row,.fx-nav-link,.fx-tree-link,.fx-chip{transition:background-color .12s ease,color .12s ease;}}
/* D2 : colonne « Partagé avec » élargie, URL coupées proprement */
.fx-col-with{min-width:220px;width:34%;}
.fx-col-with .fx-sub,.fx-col-with .fx-sub a{overflow-wrap:anywhere;word-break:break-word;}
/* M1 : barre de tri visible quand les en-têtes disparaissent (≤700 px) */
.fx-sortbar{display:none;align-items:center;flex-wrap:wrap;gap:8px;padding:6px 12px;font-size:13px;color:var(--muted);}
.fx-sortchip{display:inline-flex;align-items:center;min-height:44px;padding:4px 14px;border:1px solid var(--border-strong);border-radius:999px;color:var(--text);text-decoration:none;font-size:13px;}
.fx-sortchip.is-on{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:700;}
.fx-sortchip:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
/* M2 : message « aucun résultat » quand le filtre masque toutes les lignes (CSS seul, le JS de filtre ne change pas) */
.fx-nores-row{display:none;}
.fx-nores-row td{padding:18px 12px;color:var(--muted);}
.fx-table tbody:not(:has(.fx-row:not(.is-filtered))) .fx-nores-row{display:table-row;}
/* M4 : écriture indisponible */
.fx-new-off{margin-left:auto;opacity:.5;cursor:not-allowed;}
.fx-empty p{margin:0 0 4px;}
/* M5 : menu de ligne ouvert vers le haut près du bas de la fenêtre */
/* M6 : badge de partage dans la méta (affiché seulement quand la colonne Partage est masquée) */
.fx-share-inline{display:none;margin-top:4px;min-height:44px;align-self:flex-start;}
@media (max-width:900px){
  .fx-shell{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr);min-height:0;}
  .fx-side{border-right:0;border-bottom:1px solid var(--border);border-radius:var(--radius) var(--radius) 0 0;padding:10px;}
  .fx-nav{flex-direction:row;flex-wrap:wrap;gap:6px;}
  .fx-tree,.fx-side-title{display:none;}
  .fx-quota{margin-top:6px;padding:8px 8px 0;}
  .fx-top{border-radius:0;}
}
@media (max-width:700px){
  .fx-top{padding:10px 12px;}
  .fx-new{margin-left:0;}
  .fx-col-size,.fx-col-date{display:none;}
  .fx-inline-meta{display:block;}
  .fx-sortbar{display:flex;}
  .fx-crumbs,.fx-chips{padding-inline:12px;}
  .fx-table-wrap{padding-inline:0;}
}
@media (max-width:520px){
  .fx-col-share{display:none;}
  .fx-share-inline{display:inline-flex;}
  .fx-col-with{min-width:0;width:auto;}
  .fx-filter{flex-basis:100%;max-width:none;}
  .fx-new-panel{right:auto;left:0;}
}
@media (hover:none),(pointer:coarse){
  .fx-menu summary{width:44px;height:44px;}
  .rv-menu-list a,.rv-menu-list button{min-height:44px;}
  .fx-chip,.fx-new summary,.fx-new-off,.fx-filter{min-height:44px;}
  .fx-tree-link{min-height:44px;}
  .fx-share-badge{min-height:44px;}
}

/* Fenêtre centrée générique par-dessus la page (comme le compositeur mail) — panneau "Partager"
   d'abord (pas poussée au-dessus de la grille, demande explicite), puis généralisée 2026-09-23
   pour le dialogue de renommage (remplace le prompt() natif du navigateur, "ce truc moche"). */
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:40;display:flex;align-items:center;justify-content:center;padding:20px;}
.modal-overlay[hidden]{display:none;}
.modal-box{background:var(--panel);border:1px solid var(--border-strong);border-radius:16px;box-shadow:0 30px 80px -20px rgba(0,0,0,.7);width:min(560px,92vw);max-height:min(85vh,720px);overflow-y:auto;overflow-x:hidden;padding:20px 22px;}
.modal-box--sm{width:min(420px,92vw);}
.confirm-box p{font-size:15px;line-height:1.55;margin:4px 0 20px;}
.confirm-actions{display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap;}

/* Tâches (VTODO CalDAV, comme le calendrier) — listes filtrables, tâches groupées par liste avec
   sous-tâches indentées (RELATED-TO), priorité/échéance/étiquettes en pastilles. */
.tasks-toolbar{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap;margin-bottom:16px;}
.tasks-filter-details{flex:1;min-width:200px;}
.tasks-filter-details summary{cursor:pointer;font-size:13px;color:var(--muted);font-weight:600;padding:6px 2px;list-style:none;}
.tasks-filter-details summary::-webkit-details-marker{display:none;}
.tasks-filter-details summary::before{content:'▸ ';font-size:10px;}
.tasks-filter-details[open] summary::before{content:'▾ ';}
.tasks-filters{display:flex;gap:20px;flex-wrap:wrap;align-items:flex-start;padding:6px 2px 0;}
.tasks-filters fieldset{border:0;padding:0;margin:0;}
.tasks-filters legend{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);padding:0 0 6px;}
.task-list-card{margin-bottom:16px;}
.task-quickadd{margin:0 0 10px;}
.task-quickadd input{width:100%;border:1px dashed var(--border-strong);background:transparent;border-radius:8px;padding:9px 12px;font-size:14px;color:var(--text);font-family:inherit;}
.task-quickadd input::placeholder{color:var(--muted);}
.task-quickadd input:focus{border-style:solid;border-color:var(--accent);outline:none;}
.task-list{list-style:none;margin:0;padding:0;}
.task-row{display:flex;align-items:flex-start;gap:10px;padding:9px 6px 9px 10px;border-bottom:1px solid var(--border);border-left:3px solid transparent;}
.task-row:last-child{border-bottom:none;}
.task-row.is-done{opacity:.6;}
.task-row.is-done .task-summary{color:var(--muted);text-decoration:line-through;}
.task-row--high{border-left-color:var(--err);}
.task-row--medium{border-left-color:var(--warn);}
.task-row--low{border-left-color:var(--accent);}
.task-check{display:inline-flex;flex:none;margin-top:1px;}
.task-checkbox{width:22px;height:22px;border-radius:6px;border:1.5px solid var(--border-strong);background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--accent-ink);flex:none;padding:0;}
.task-checkbox:hover{border-color:var(--accent);}
.task-checkbox.is-checked{background:var(--accent);border-color:var(--accent);}
.task-checkbox .ico{width:14px;height:14px;}
.task-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px;}
.task-main{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;}
.task-summary{color:var(--text);text-decoration:none;font-size:14px;font-weight:500;flex:1;min-width:120px;}
.task-summary:hover{color:var(--accent);}
.task-meta{display:flex;gap:6px;flex-wrap:wrap;align-items:center;}
.task-priority{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;padding:2px 7px;border-radius:999px;flex:none;}
.task-priority--high{background:color-mix(in srgb,var(--err) 22%,transparent);color:var(--err);}
.task-priority--medium{background:color-mix(in srgb,var(--warn) 22%,transparent);color:var(--warn);}
.task-priority--low{background:color-mix(in srgb,var(--accent) 22%,transparent);color:var(--accent);}
.task-due{font-size:12px;color:var(--muted);flex:none;}
.task-due.is-overdue{color:var(--err);font-weight:600;}
.task-percent{font-size:11px;font-weight:600;color:var(--accent);flex:none;}
.task-status{font-size:10.5px;text-transform:uppercase;letter-spacing:.03em;color:var(--muted);flex:none;}
.task-tag{font-size:11px;color:var(--muted);background:var(--border);padding:2px 8px;border-radius:999px;flex:none;}

/* Suggestions de destinataires (nextcloud-mail.php, input[data-contacts] dans admin.js) : remplace le
   menu natif du <datalist>, non stylable. Positionnée sous le champ par le JS (top = bas du champ). */
.mail-suggest{position:absolute;left:0;right:0;z-index:5;list-style:none;margin:4px 0 0;padding:6px;background:var(--panel);border:1px solid var(--border-strong);border-radius:12px;box-shadow:0 20px 50px -20px rgba(0,0,0,.7);}
.mail-suggest[hidden]{display:none;}
.mail-suggest li{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:8px;cursor:pointer;min-height:44px;}
.mail-suggest li:hover,.mail-suggest li.is-active{background:var(--border);}
.mail-suggest-avatar{flex:none;width:28px;height:28px;border-radius:50%;background:var(--accent);color:var(--accent-ink,#141520);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;}
.mail-suggest b{display:block;font-size:13px;font-weight:600;color:var(--text);}
.mail-suggest em{display:block;font-style:normal;font-size:12px;color:var(--muted);}

/* ============================================================
   Listes déroulantes, calendriers et heures maison (admin.js, bloc "Listes déroulantes,
   calendriers et heures") : remplacent les menus natifs du système, non stylables. Le vrai champ
   reste dans le formulaire, invisible (.ui-native) ; .ui-trigger a l'apparence d'un champ.
   ============================================================ */
.ui-wrap{position:relative;display:block;width:100%;}
.ui-native{position:absolute!important;inset:0;width:100%!important;height:100%!important;opacity:0;pointer-events:none;}
.ui-trigger{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;min-height:44px;font:inherit;font-size:15px;text-align:left;padding:11px 13px;border:1px solid var(--border-strong);border-radius:10px;background:var(--bg);color:var(--text);cursor:pointer;transition:border-color .15s,box-shadow .15s;}
.ui-trigger::after{content:'';flex:none;width:8px;height:8px;border-right:1.5px solid var(--muted);border-bottom:1.5px solid var(--muted);transform:translateY(-2px) rotate(45deg);}
.ui-wrap--date .ui-trigger::after,.ui-wrap--datetime .ui-trigger::after,.ui-wrap--time .ui-trigger::after{width:14px;height:14px;border:1.5px solid var(--muted);border-radius:3px;transform:none;}
.ui-trigger[aria-expanded="true"],.ui-trigger:focus-visible{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 28%,transparent);}
.ui-trigger.is-empty{color:var(--muted);}
.ui-trigger:disabled{opacity:.5;cursor:not-allowed;}
.ui-panel{position:fixed;z-index:500;display:flex;gap:6px;max-height:min(360px,calc(100vh - 24px));padding:8px;background:var(--panel);border:1px solid var(--border-strong);border-radius:12px;box-shadow:0 24px 60px -18px rgba(0,0,0,.75);color:var(--text);font-size:14px;}
.ui-panel[hidden]{display:none;}
.ui-panel--select{flex-direction:column;gap:2px;overflow-y:auto;}
.ui-option{display:block;width:100%;text-align:left;padding:9px 12px;border:0;border-radius:8px;background:transparent;color:var(--text);font:inherit;font-size:14px;cursor:pointer;min-height:38px;white-space:nowrap;}
.ui-option:hover,.ui-option.is-active,.ui-option:focus-visible{background:var(--border);outline:none;}
.ui-option.is-selected{background:color-mix(in srgb,var(--accent) 22%,transparent);font-weight:600;}
.ui-option:disabled{opacity:.4;cursor:not-allowed;}
.ui-cal{width:252px;}
.ui-cal-head{display:flex;align-items:center;justify-content:space-between;padding:2px 2px 8px;}
.ui-cal-head strong{font-size:14px;text-transform:capitalize;}
.ui-cal-nav{width:32px;height:32px;border:0;border-radius:8px;background:transparent;color:var(--text);font-size:20px;line-height:1;cursor:pointer;}
.ui-cal-nav:hover,.ui-cal-nav:focus-visible{background:var(--border);outline:none;}
.ui-cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;}
.ui-cal-dow{text-align:center;font-size:11px;font-weight:700;color:var(--muted);padding:4px 0;}
.ui-cal-day{height:34px;border:0;border-radius:8px;background:transparent;color:var(--text);font:inherit;font-size:13px;cursor:pointer;}
.ui-cal-day:hover,.ui-cal-day:focus-visible{background:var(--border);outline:none;}
.ui-cal-day.is-today{box-shadow:inset 0 0 0 1px var(--accent);}
.ui-cal-day.is-selected{background:var(--accent);color:var(--accent-ink,#141520);font-weight:700;}
.ui-cal-day:disabled{opacity:.3;cursor:not-allowed;background:transparent;}
.ui-cal-foot{display:flex;justify-content:space-between;padding-top:8px;margin-top:6px;border-top:1px solid var(--border);}
.ui-cal-foot button{border:0;background:transparent;color:var(--accent);font:inherit;font-size:13px;font-weight:600;padding:6px 8px;border-radius:8px;cursor:pointer;}
.ui-cal-foot button:hover,.ui-cal-foot button:focus-visible{background:var(--border);outline:none;}
.ui-time{display:flex;gap:4px;}
.ui-panel--datetime .ui-time{padding-left:8px;border-left:1px solid var(--border);}
.ui-time-col{display:flex;flex-direction:column;gap:2px;width:58px;max-height:300px;overflow-y:auto;scrollbar-width:thin;}
.ui-time-col .ui-option{text-align:center;padding:7px 0;min-height:34px;}
/* Contextes compacts */
.mail-compose-schedule .ui-wrap{width:auto;}
.mail-compose-schedule .ui-trigger{min-height:36px;padding:6px 10px;font-size:13px;border-radius:8px;}
/* Champs fichier restés visibles (réalisations) : bouton natif habillé comme les pilules du site */
input[type="file"]::file-selector-button{margin-right:12px;padding:8px 16px;border:1px solid var(--border-strong);border-radius:999px;background:transparent;color:var(--text);font:inherit;font-size:13px;font-weight:600;cursor:pointer;}
input[type="file"]::file-selector-button:hover{background:var(--border);}

/* ============================================================
   Pages "appli" qui tiennent dans l'écran (demandé 2026-09-24 : "toutes les heures sans faire
   défiler") : Calendrier (.cal-shell), Mail et Talk (.mail-shell). Le contenu prend exactement la
   hauteur de la fenêtre ; la grille / la liste / le panneau de lecture s'étirent pour la remplir et
   défilent à l'intérieur si besoin. Les pages "liste" (Tâches, Contacts, Fichiers…) gardent leur
   défilement normal. Seulement sur écran assez grand : en dessous, la page défile comme avant.
   ============================================================ */
@media (min-width:901px) and (min-height:600px){
  .admin-content-inner:has(> .cal-shell),.admin-content-inner:has(> .mail-shell){height:100vh;padding-top:20px;padding-bottom:20px;gap:12px;}
  .admin-content-inner > .cal-shell,.admin-content-inner > .mail-shell{flex:1;min-height:0;margin-top:0!important;}
  /* Calendrier : les 24 h se partagent la hauteur disponible (événements placés en % de la journée). */
  .cal-shell{grid-template-rows:minmax(0,1fr);}
  .cal-sidebar{overflow-y:auto;}
  .cal-grid-wrap{display:flex;flex-direction:column;min-height:0;}
  .cal-grid-body{flex:1;min-height:0;max-height:none;overflow:hidden;}
  .cal-hour-gutter,.cal-day-col{height:100%;}
  .cal-hour-label{font-size:10px;}
  .cal-event{font-size:10px;padding:1px 5px;}
  /* Mail / Talk : liste de dossiers, liste de messages et lecture défilent chacune dans leur cadre. */
  .mail-shell{grid-template-rows:minmax(0,1fr);min-height:0;}
  .mail-folders{overflow-y:auto;}
  .mail-list-wrap{min-height:0;}
  .mail-list{flex:1;max-height:none;}
  .mail-reading{max-height:none;display:flex;flex-direction:column;}
  .mail-reading iframe{flex:1;min-height:240px;}
  .talk-messages{flex:1;min-height:0;overflow-y:auto;}
  .mail-reading:has(.talk-messages){overflow:hidden;}
}

/* Calendrier : choix de la vue (Jour / Semaine / Mois / Année) + vues mois et année. */
.cal-views{margin-left:auto;display:inline-flex;padding:3px;gap:2px;border:1px solid var(--border-strong);border-radius:999px;background:var(--panel);}
.cal-views a{padding:6px 14px;border-radius:999px;color:var(--muted);font-size:13px;font-weight:600;text-decoration:none;min-height:32px;display:inline-flex;align-items:center;}
.cal-views a:hover,.cal-views a:focus-visible{color:var(--text);background:var(--border);outline:none;}
.cal-views a.is-current{background:var(--accent);color:var(--accent-ink,#141520);}
.cal-month{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));grid-auto-rows:minmax(96px,1fr);height:100%;}
.cal-month-dow{padding:8px 6px;text-align:center;font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--border);}
.cal-month > .cal-month-dow{grid-row:1;min-height:0;}
.cal-month-cell{min-width:0;min-height:0;overflow:hidden;display:flex;flex-direction:column;gap:2px;padding:4px;border-left:1px solid var(--border);border-bottom:1px solid var(--border);}
.cal-month-cell:nth-child(7n+8){border-left:0;}
.cal-month-cell.is-other{background:color-mix(in srgb,var(--bg) 40%,transparent);}
.cal-month-cell.is-other .cal-month-num{color:var(--muted);opacity:.6;}
.cal-month-num{align-self:flex-start;min-width:26px;height:26px;padding:0 6px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;color:var(--text);text-decoration:none;}
.cal-month-num:hover{background:var(--border);}
.cal-month-cell.is-today .cal-month-num{background:var(--accent);color:var(--accent-ink,#141520);}
.cal-month-event{display:block;padding:2px 6px;border-radius:5px;background:var(--ev);color:#fff;font-size:11px;font-weight:600;text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.cal-month-event span{opacity:.85;font-weight:500;}
.cal-month-more{font-size:11px;color:var(--muted);text-decoration:none;padding:0 6px;}
.cal-month-more:hover{color:var(--text);}
.cal-year{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:18px 22px;padding:18px;overflow-y:auto;height:100%;}
.cal-year-title{display:block;margin-bottom:6px;font-size:14px;font-weight:700;color:var(--text);text-decoration:none;}
.cal-year-title:hover{color:var(--accent);}
.cal-year-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;}
.cal-year-dow{text-align:center;font-size:10px;font-weight:700;color:var(--muted);padding:2px 0;}
.cal-year-day{position:relative;height:26px;display:flex;align-items:center;justify-content:center;border-radius:6px;font-size:12px;color:var(--text);text-decoration:none;}
.cal-year-day:hover{background:var(--border);}
.cal-year-day.has-events{font-weight:700;}
.cal-year-day.has-events::after{content:'';position:absolute;bottom:2px;width:4px;height:4px;border-radius:50%;background:var(--accent);}
.cal-year-day.is-today{background:var(--accent);color:var(--accent-ink,#141520);}
.cal-year-day.is-today::after{background:var(--accent-ink,#141520);}
@media (min-width:901px) and (min-height:600px){
  .cal-grid-wrap:has(.cal-month),.cal-grid-wrap:has(.cal-year){overflow:hidden;}
  .cal-month{grid-template-rows:auto;grid-auto-rows:minmax(0,1fr);}
}

/* Notifications : bouton × et disparition en fondu (admin.js, bloc "Notifications en haut de page"). */
.admin-flash{position:relative;padding-right:52px;transition:opacity .25s,transform .25s;}
.admin-flash.is-leaving{opacity:0;transform:translateY(-6px);}
.admin-flash-close{position:absolute;top:50%;right:10px;transform:translateY(-50%);width:32px;height:32px;border:0;border-radius:8px;background:transparent;color:var(--muted);font-size:20px;line-height:1;cursor:pointer;}
.admin-flash-close:hover,.admin-flash-close:focus-visible{background:var(--border);color:var(--text);outline:none;}
/* Focus clavier : ces commandes retirent le contour global (base.css) et n'ont qu'un fond à 9 %, presque invisible ;
   anneau intérieur à la couleur d'accent, comme le contour des autres éléments. */
.ui-option:focus-visible,.ui-cal-nav:focus-visible,.ui-cal-day:focus-visible,.ui-cal-foot button:focus-visible,.cal-views a:focus-visible,.admin-flash-close:focus-visible{box-shadow:inset 0 0 0 2px var(--accent);}

/* Import : barre de progression flottante (nextcloud-files.php) */
.fx-upload{position:fixed;right:16px;bottom:16px;z-index:60;display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;max-width:min(420px,calc(100vw - 32px));padding:12px 14px;background:var(--surface,#fff);border:1px solid var(--line,#ddd);border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,.18);}
.fx-upload strong{flex:1 1 100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.fx-upload progress{flex:1 1 140px;min-width:0;}
.fx-upload .btn{min-height:44px;}
.fx-search{display:flex;gap:6px;align-items:center;}
.fx-search input{min-width:0;}

/* Ligne : bouton Partager + menu ⋮ ; menu plat avec séparateur ; panneau latéral de partage ; sélecteur de dossier */
.fx-actions{display:flex;align-items:center;justify-content:flex-end;gap:2px;}
.fx-iconbtn{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;border:0;border-radius:var(--radius);background:transparent;color:var(--muted);cursor:pointer;}
.fx-iconbtn:hover,.fx-iconbtn:focus-visible{background:var(--panel-2);color:var(--text);}
.fx-iconbtn svg{width:20px;height:20px;}
.fx-shell--drawer{grid-template-columns:240px minmax(0,1fr) minmax(300px,380px);}
.fx-drawer{border-left:1px solid var(--border);padding:16px;display:flex;flex-direction:column;gap:14px;min-width:0;overflow-wrap:anywhere;}
.fx-drawer-head{display:flex;justify-content:space-between;gap:8px;align-items:flex-start;}
.fx-drawer-head h3{margin:0;font-size:18px;}
.fx-drawer-tabs{display:flex;gap:6px;}
.fx-drawer-tabs a{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;padding:10px 6px;border-radius:var(--radius);color:var(--muted);text-decoration:none;border-bottom:2px solid transparent;min-height:44px;}
.fx-drawer-tabs a.is-current{background:var(--panel-2);color:var(--text);border-bottom-color:var(--accent,currentColor);}
.fx-drawer-sec h4{margin:0 0 8px;font-size:15px;}
.fx-add-person{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px;}
.fx-add-person select{flex:1 1 140px;min-width:0;}
.fx-people{list-style:none;margin:0;padding:0;display:grid;gap:8px;}
.fx-people li{display:flex;flex-wrap:wrap;align-items:center;gap:10px;}
.fx-person{flex:1;min-width:0;display:grid;gap:2px;}
.fx-person select{max-width:100%;}
.fx-avatar{width:40px;height:40px;border-radius:50%;background:var(--panel-2);display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;flex:none;}
.fx-avatar--sq{border-radius:var(--radius);}
.fx-avatar svg{width:20px;height:20px;}
.fx-ext-edit{flex:1 1 100%;}
.fx-ext-edit form,.fx-newlink form{display:grid;gap:6px;padding-top:8px;}
.fx-newlink{margin-top:12px;}
.fx-newlink-btn{display:flex;align-items:center;gap:10px;cursor:pointer;min-height:44px;}
.fx-activity{list-style:none;margin:0;padding:0;display:grid;gap:10px;}
.fx-activity li{display:grid;gap:2px;}
.fx-pick{max-height:320px;overflow:auto;}
.fx-pick a{display:flex;align-items:center;gap:8px;padding:10px;min-height:44px;text-decoration:none;color:inherit;}
.fx-pick-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px;}
@media (max-width:900px){
  .fx-shell--drawer{grid-template-columns:minmax(0,1fr);}
  .fx-drawer{position:fixed;inset:0;z-index:70;background:var(--panel);overflow:auto;border-left:0;}
}
.fx-top{flex-wrap:wrap;}
.fx-search{flex:1 1 220px;min-width:0;}
.fx-search input{flex:1;min-width:0;width:100%;}
.fx-drawer-sec{display:grid;gap:10px;}
.fx-drawer-sec .field,.fx-drawer-sec form{margin:0;}
.fx-people{margin-top:4px;}
.fx-search input[type=search]{background:var(--panel-2);border:1px solid var(--border);border-radius:999px;color:var(--text);padding:10px 16px;font:inherit;min-height:44px;}
.fx-search input[type=search]:focus-visible{outline:2px solid var(--accent);outline-offset:1px;}
@media (max-width:720px){
  .fx-search{flex:1 1 100%;}
  .fx-search input[type=search]{flex:1 1 auto;}
}
.fx-main > .admin-list{padding:0 20px 16px;}
.fx-drawer input[type=text],.fx-drawer input[type=number],.fx-drawer input[type=date]{width:100%;min-height:44px;padding:10px 14px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--panel-2);color:var(--text);font:inherit;}
.fx-drawer input:focus-visible,.fx-drawer select:focus-visible{outline:2px solid var(--accent);outline-offset:1px;}
.fx-drawer label{font-size:13px;color:var(--muted);}

/* Panneau de partage : glissement à l'ouverture / fermeture, squelette pendant le chargement */
@keyframes fx-slide-in{from{opacity:0;transform:translateX(28px)}to{opacity:1;transform:none}}
@keyframes fx-slide-out{to{opacity:0;transform:translateX(28px)}}
@keyframes fx-shimmer{0%{opacity:.35}50%{opacity:.8}100%{opacity:.35}}
.fx-drawer{animation:fx-slide-in .22s ease-out;}
.fx-drawer.no-anim{animation:none;}
.fx-drawer.is-leaving{animation:fx-slide-out .18s ease-in forwards;pointer-events:none;}
.fx-drawer.is-busy{opacity:.55;transition:opacity .15s;}
.fx-skel{display:grid;gap:14px;}
.fx-skel i{display:block;height:44px;border-radius:var(--radius);background:var(--panel-2);animation:fx-shimmer 1.1s ease-in-out infinite;}
.fx-skel i:nth-child(2){animation-delay:.12s;}.fx-skel i:nth-child(3){animation-delay:.24s;}.fx-skel i:nth-child(4){animation-delay:.36s;}
@media (prefers-reduced-motion:reduce){.fx-drawer,.fx-drawer.is-leaving,.fx-skel i{animation:none;}}

/* Fluidité sur tout le panneau : (1) transition entre pages — l'ancienne page reste affichée jusqu'à ce que la suivante soit prête, la barre latérale
   ne bouge pas (Chrome/Edge, Safari 18.2+ ; ignoré ailleurs) ; (2) retour visuel immédiat au clic (barre de progression, contenu atténué, bouton occupé). */
@view-transition{navigation:auto;}
.admin-sidebar{view-transition-name:admin-sidebar;}
.admin-topbar{view-transition-name:admin-topbar;}
::view-transition-old(root),::view-transition-new(root){animation-duration:.16s;}
::view-transition-group(admin-sidebar),::view-transition-group(admin-topbar){animation:none;}
.admin-body::before{content:"";position:fixed;top:0;left:0;height:3px;width:0;background:var(--accent);z-index:300;opacity:0;pointer-events:none;}
html.is-navigating .admin-body::before,html.is-soft-loading .admin-body::before{opacity:1;animation:rv-progress 10s cubic-bezier(.1,.6,.2,1) forwards;} /* même barre pour les navigations sans rechargement */
html.is-navigating .admin-content{opacity:.6;transition:opacity .2s .12s;}
html.is-navigating,html.is-navigating a,html.is-navigating button{cursor:progress;}
.is-submitting button[type=submit],.is-submitting input[type=submit]{opacity:.6;cursor:progress;}
@keyframes rv-progress{to{width:92%;}}
@media (prefers-reduced-motion:reduce){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none !important;}html.is-navigating .admin-body::before{animation:none;width:60%;}}

/* Page Fichiers sans rechargement : entrée douce de la zone, lignes décalées, attente discrète, survols et ouvertures animés */
@keyframes fx-enter{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
@keyframes fx-row-in{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}
@keyframes fx-pop{from{opacity:0;transform:translateY(-4px) scale(.97)}to{opacity:1;transform:none}}
@keyframes fx-fade{from{opacity:0}to{opacity:1}}
.fx-main.fx-enter{animation:fx-enter .18s ease-out;}
.fx-main.fx-enter .fx-row,.fx-main.fx-enter .admin-list li{animation:fx-row-in .22s ease-out backwards;animation-delay:calc(var(--i,0) * 22ms);}
.fx-main{position:relative;}
.fx-main.is-loading{opacity:.55;transition:opacity .15s;pointer-events:none;}
html.is-soft-loading,html.is-soft-loading a,html.is-soft-loading button{cursor:progress;}
.modal-overlay:not([hidden]){animation:fx-fade .16s ease-out;}
.modal-overlay:not([hidden]) .modal-box{animation:fx-pop .18s ease-out;}
.fx-nav-link,.fx-tree-link,.fx-chip,.fx-iconbtn{transition:background-color .12s ease,color .12s ease,transform .12s ease;}
.fx-iconbtn:active{transform:scale(.92);}
.fx-row{transition:background-color .12s ease;}
.admin-flash{animation:fx-pop .2s ease-out;}
@media (prefers-reduced-motion:reduce){.fx-main.fx-enter,.fx-main.fx-enter .fx-row,.fx-main.fx-enter .admin-list li,.rv-menu[open] .rv-menu-list,.modal-overlay:not([hidden]),.modal-overlay:not([hidden]) .modal-box,.admin-flash,.fx-main.is-loading::after{animation:none;}}
.admin-content-inner.fx-enter{animation:fx-enter .18s ease-out;}
.admin-content-inner.fx-enter .task-row,.admin-content-inner.fx-enter .card{animation:fx-row-in .22s ease-out backwards;animation-delay:calc(var(--i,0) * 22ms);}
.admin-content-inner.is-loading,.mail-shell.is-loading{opacity:.6;transition:opacity .15s;pointer-events:none;} /* état de chargement commun (window.rvBusy) */
@media (prefers-reduced-motion:reduce){.admin-content-inner.fx-enter,.admin-content-inner.fx-enter .task-row,.admin-content-inner.fx-enter .card{animation:none;}}

/* ===== Composants communs : menus et listes maison (assets/js/admin.js) =====
   Même famille visuelle que .ui-panel/.ui-option : listes déroulantes, menu contextuel, sous-menus.
   z-index 500 : au-dessus des fenêtres (.modal-overlay 40), du panneau de partage plein écran (70) et des envois (60). */
@keyframes ui-pop{from{opacity:0;transform:translateY(-4px) scale(.98);}to{opacity:1;transform:none;}}
@media (prefers-reduced-motion:no-preference){.ui-panel:not([hidden]){animation:ui-pop .12s ease-out;}}
.ui-panel--select{padding:6px;}
.ui-list{display:flex;flex-direction:column;gap:2px;}
.ui-option{display:flex;align-items:center;gap:10px;user-select:none;}
.ui-option.is-disabled{opacity:.4;cursor:not-allowed;}
.ui-group{padding:10px 12px 4px;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);}
.ui-group:first-child{padding-top:4px;}
.ui-search{position:sticky;top:-6px;z-index:1;width:100%;margin:-6px 0 6px;padding:9px 12px;border:0;border-bottom:1px solid var(--border);border-radius:10px 10px 0 0;background:var(--panel);color:var(--text);font:inherit;font-size:14px;}
.ui-search:focus{outline:none;border-bottom-color:var(--accent);}
.ui-empty{margin:0;padding:12px;color:var(--muted);font-size:13px;}
.ui-trigger.is-invalid{border-color:var(--err);box-shadow:0 0 0 3px color-mix(in srgb,var(--err) 22%,transparent);}
.ui-panel--menu{flex-direction:column;gap:1px;overflow-y:auto;overscroll-behavior:contain;min-width:230px;max-width:min(320px,calc(100vw - 16px));padding:6px;}
.ui-menuitem{flex:none;min-height:38px;padding:8px 10px;white-space:nowrap;}
.ui-menuitem > span:not(.ui-ico-gap):not(.ui-sub){overflow:hidden;text-overflow:ellipsis;}
.ui-menuitem .ico,.ui-ico-gap{width:16px;height:16px;flex:none;color:var(--muted);}
.ui-menuitem:hover .ico,.ui-menuitem:focus-visible .ico{color:var(--text);}
.ui-menuitem.is-danger,.ui-menuitem.is-danger .ico{color:var(--err);}
.ui-menuitem.is-danger:hover,.ui-menuitem.is-danger:focus-visible{background:color-mix(in srgb,var(--err) 14%,transparent);}
.ui-sub{margin-left:auto;padding-left:12px;color:var(--muted);}
.ui-sep{height:1px;margin:4px 6px;background:var(--border);}
@media (pointer:coarse){.ui-menuitem,.ui-option{min-height:44px;}}
[data-ctx]{-webkit-touch-callout:none;}

/* ===== Glisser-déposer (fichiers, messages) ===== */
[draggable="true"]{cursor:grab;}
[draggable="true"] a,[draggable="true"] button,[draggable="true"] input{cursor:pointer;}
.is-dragging{opacity:.42;}
.is-moving{opacity:.5;pointer-events:none;transition:opacity .15s;}
.is-dragging-items .is-drop-ok{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 45%,transparent);border-radius:10px;}
.is-dragging-items .is-drop-over,.is-dragging-items tr.is-drop-over td{background:color-mix(in srgb,var(--accent) 24%,transparent);box-shadow:inset 0 0 0 2px var(--accent);}
.is-dragging-items tr.is-drop-ok td:first-child{box-shadow:inset 3px 0 0 color-mix(in srgb,var(--accent) 55%,transparent);}
.is-dragging-items tr.is-drop-over td{box-shadow:none;}
.is-dragging-items tr.is-drop-over td:first-child{box-shadow:inset 3px 0 0 var(--accent);}
.rv-drag-ghost{position:fixed;top:-200px;left:0;max-width:280px;padding:8px 14px;border:1px solid var(--accent);border-radius:999px;background:var(--panel-2);color:var(--text);font:600 13px/1.3 var(--font);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-shadow:0 10px 30px -10px rgba(0,0,0,.7);}


/* ===== Menu déroulant commun (.rv-menu = <details>, .rv-menu-list = liste, .rv-menu-sep = séparateur) =====
   Fichiers (⋮ des lignes), Mail (⋮ d'un message, « Déplacer vers »), réactions Talk. Les anciennes classes (.fx-menu, .mail-row-menu…)
   ne gardent que les réglages propres à leur page (taille du bouton, liste défilante). .is-up : ouvert vers le haut (assets/js/admin.js). */
.rv-menu{position:relative;}
.rv-menu[open]{z-index:25;}
.rv-menu > summary{list-style:none;cursor:pointer;}
.rv-menu > summary::-webkit-details-marker{display:none;}
.rv-menu-list{position:absolute;right:0;top:calc(100% + 4px);min-width:230px;text-align:left;background:var(--panel);border:1px solid var(--border-strong);border-radius:10px;box-shadow:0 20px 50px -20px rgba(0,0,0,.7);padding:6px;z-index:30;}
.rv-menu-list form{margin:0;}
.rv-menu-list a,.rv-menu-list button{display:flex;align-items:center;gap:10px;width:100%;min-height:40px;padding:8px 10px;border:0;border-radius:6px;background:transparent;color:var(--text);font:inherit;font-size:14px;text-align:left;text-decoration:none;cursor:pointer;}
.rv-menu-list .ico{width:16px;height:16px;color:var(--muted);flex:none;}
.rv-menu-list a:hover,.rv-menu-list button:hover,.rv-menu-list a:focus-visible,.rv-menu-list button:focus-visible{background:var(--border);}
.rv-menu-list a:focus-visible,.rv-menu-list button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;}
.rv-menu-list .fx-danger,.rv-menu-list .fx-danger .ico,.rv-menu-list .mail-danger{color:var(--err);}
.rv-menu-sep{border:0;border-top:1px solid var(--border);margin:4px 8px;}
.rv-menu.is-up .rv-menu-list{top:auto;bottom:calc(100% + 4px);}
.rv-menu.is-right .rv-menu-list{right:auto;left:0;transform-origin:top left;}
@media (prefers-reduced-motion:no-preference){.rv-menu[open] .rv-menu-list{animation:fx-pop .14s ease-out;transform-origin:top right;}.rv-menu.is-up[open] .rv-menu-list{transform-origin:bottom right;}}
@media (pointer:coarse){.rv-menu-list a,.rv-menu-list button{min-height:44px;}}

/* ===== États vides : un composant (.empty) et ses variantes =====
   neutre (rien à afficher) : .empty ; indisponible (service ou donnée inaccessible) : .empty--unavailable ; erreur (lecture/opération échouée) : .empty--error.
   Disposition : .empty--block (zone centrée, listes Mail/Talk), .empty--dashed (encadré pointillé, panneau de partage). Icône facultative (adm_icon) en tête. */
.empty--unavailable,.empty--error{display:flex;align-items:flex-start;gap:8px;flex-wrap:wrap;}
.empty--unavailable > .ico,.empty--error > .ico{flex:none;width:18px;height:18px;margin-top:1px;}
.empty--unavailable > .ico{color:var(--warn);}
.empty--error{color:color-mix(in srgb,var(--err) 70%,var(--text));}
.empty--error > .ico{color:var(--err);}
.empty--block{padding:40px 20px;text-align:center;justify-content:center;}
.empty--dashed{margin:4px 0 10px;padding:12px 14px;border:1px dashed var(--border-strong);border-radius:12px;font-size:13px;}
.nowrap{white-space:nowrap;}
/* Utilitaires d'espacement (remplacent des style="" écrits dans les pages : même priorité qu'un style en ligne, d'où !important) */
.u-mt-8{margin-top:8px !important;}.u-mt-10{margin-top:10px !important;}.u-mt-12{margin-top:12px !important;}.u-mt-16{margin-top:16px !important;}
.u-inline{display:inline !important;}
