/* GÉNÉRÉ par scripts/extraire.py depuis Ancrag (app/ui.py) — ne pas éditer. */
@font-face{font-family:'Inter';font-style:normal;font-weight:400 700;font-display:swap;src:url(/ancrag-ui/polices/inter-var.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:400 500;font-display:swap;src:url(/ancrag-ui/polices/jetbrainsmono-var.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
:root{--sp-1:.25rem;--sp-2:.5rem;--sp-3:.75rem;--sp-4:1rem;--sp-5:1.5rem;--sp-6:2rem;--r-1:8px;--r-2:11px;--r-3:14px;--r-pill:99px;--fs-1:.75rem;--fs-2:.8125rem;--fs-3:.875rem;--fs-4:.9375rem;
--fs-5:1.0625rem;--fs-6:1.3125rem;--fs-7:1.5rem;--fs-lecture:1rem;--bg:#0d0f14;--surface:#12141a;--card:#171a21;--elev:#1e222a;--border:#262a33;
--border-l:#333845;--text:#d1d4dc;--text-2:#8a8d98;--muted:#7e8391;
--blue:#2962ff;--blue-l:#5481ff;--blue-bg:color-mix(in srgb,var(--blue) 16%,var(--card));--green:#089981;--green-l:#26a69a;
--green-bg:color-mix(in srgb,var(--green) 16%,var(--card));--red:#f23645;--red-l:#f55e6a;--red-bg:color-mix(in srgb,var(--red) 16%,var(--card));
--orange:#ff9800;--orange-bg:color-mix(in srgb,var(--orange) 16%,var(--card));--code:#d9a7ff;--glow:color-mix(in srgb,var(--blue) 14%,transparent);--strong:#fff;--logo-s1:color-mix(in srgb,var(--blue-l) 32%,transparent);--logo-s2:color-mix(in srgb,var(--blue-l) 70%,transparent);--logo-a:#7aa2ff;--logo-b:#22d3ee;--logo-glow:color-mix(in srgb,var(--blue) 45%,transparent)}
*{box-sizing:border-box}
@keyframes fadeUp{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}
html{background:#0d0f14;color-scheme:dark}
body{font-family:'Inter',system-ui,sans-serif;color:var(--text);max-width:880px;
margin:0 auto;padding:1.2rem;font-size:var(--fs-4);line-height:1.55;-webkit-font-smoothing:antialiased;
background:radial-gradient(900px 420px at 50% -12%,color-mix(in srgb,var(--blue) 7%,transparent),transparent 60%) var(--bg);
min-height:100vh}
body>*{animation:fadeUp .35s ease both}
a{color:var(--blue-l);text-decoration:none;transition:color .12s}
a:hover{color:var(--blue-l)}
p a:hover,li a:hover,.md a:hover,.steptxt a:hover,.tiny a:hover,.outils-aide a:hover
{text-decoration:underline;text-underline-offset:2px;text-decoration-thickness:1px}
/* Au clavier, on doit voir ou l'on est : les champs avaient un etat de focus,
   pas les liens, boutons, onglets ni details. */
:where(a,button,summary,select,[tabindex]):focus-visible{outline:2px solid var(--blue);
outline-offset:2px;border-radius:var(--r-1)}
:where(a,button,summary,select,[tabindex]):focus:not(:focus-visible){outline:none}
h1{font-size:var(--fs-5);font-weight:600;margin:.5rem 0 1rem;letter-spacing:.01em}
h3{font-size:var(--fs-1);font-weight:600;color:var(--text-2);text-transform:uppercase;
letter-spacing:.09em;margin:1.7rem 0 .6rem;display:flex;align-items:center;gap:.5rem}
h3 .count{background:var(--elev);border:1px solid var(--border-l);border-radius:var(--r-pill);
padding:.05rem .55rem;font-size:var(--fs-1);color:var(--text-2)}
/* ---- barre de navigation ---- */
:root{--h-nav:59px}
.topbar{position:fixed;top:0;left:0;right:0;z-index:40;background:var(--bg);
box-shadow:0 1px 0 var(--border),0 10px 24px -10px rgba(0,0,0,.6);animation:none}
.top{max-width:880px;margin:0 auto;padding:.7rem 1.2rem;display:flex;
justify-content:space-between;align-items:center;gap:1rem}
body:has(.topbar){padding-top:4.5rem}
/* Titre, recherche et filtres ne bougent pas : la page ne defile pas, c'est
   la liste qui a son propre defilement. `100dvh` (et non `100vh`) pour que la
   barre d'adresse mobile ne rogne pas la zone visible. */
body:has(.stickytop){height:100dvh;overflow:hidden;display:flex;flex-direction:column}
.stickytop{position:relative;z-index:35;flex:none;background:var(--bg);padding:.9rem 0 .1rem}
.stickytop .sect{margin-top:0}
.stickytop .filterbar{margin-bottom:.85rem}
.stickytop .searchbar{margin-bottom:.9rem}
.pagescroll{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;
-webkit-overflow-scrolling:touch;padding-bottom:1.2rem;
scrollbar-width:thin;scrollbar-color:var(--border-l) transparent}
.pagescroll::-webkit-scrollbar{width:9px}
.pagescroll::-webkit-scrollbar-track{background:transparent}
.pagescroll::-webkit-scrollbar-thumb{background:var(--border-l);border-radius:var(--r-pill)}
.pagescroll::-webkit-scrollbar-thumb:hover{background:var(--muted)}
/* Les avis d'import restent au-dessus de la liste, sans defiler avec elle. */
body:has(.stickytop)>.avis{flex:none}
.brand{display:flex;align-items:center;gap:.5rem;font-weight:700;letter-spacing:.01em;font-size:var(--fs-4)}
a.brand{color:var(--text);text-decoration:none;transition:opacity .12s}
a.brand:hover{color:var(--text);opacity:.78}
.brand .mark svg{width:30px;height:30px;display:block;filter:drop-shadow(0 2px 7px var(--logo-glow))}
.brand .mark{width:30px;height:30px;display:flex;align-items:center;justify-content:center;background:none;border:0;box-shadow:none}
.wm,.wordmark{color:var(--strong)}
.wm b,.wordmark b{color:var(--blue-l)}
.brand-name b{color:var(--blue-l)}
.nav{display:flex;gap:1.1rem;align-items:center;font-size:var(--fs-2)}
/* Les trois espaces forment un groupe : un rail commun, l'onglet courant en
   pastille dedans. L'avatar reste dehors — ce n'est pas un espace, c'est toi. */
.navseg{display:flex;gap:.15rem;padding:3px;border-radius:var(--r-pill);
background:var(--surface);border:1px solid var(--border)}
.nav a:not(.avatar){display:inline-flex;align-items:center;gap:.4rem;height:28px;padding:0 .7rem;
border-radius:var(--r-pill);color:var(--text-2);font-weight:500;
transition:color .12s,background .12s}
.nav a:not(.avatar) svg{width:15px;height:15px;flex:none;opacity:.9}
.nav a:not(.avatar):hover{color:var(--blue-l);background:color-mix(in srgb,var(--blue-l) 18%,var(--surface))}
.nav a.on{color:var(--text);background:var(--card);
box-shadow:0 1px 2px rgba(0,0,0,.35),inset 0 0 0 1px var(--border-l)}
.nav a.on svg{opacity:1;color:var(--blue-l)}
.nav a.on:hover{color:var(--text);background:var(--card)}
[data-theme=clair] .nav a.on:hover{color:var(--blue);background:color-mix(in srgb,var(--blue) 18%,var(--surface))}
[data-theme=clair] .nav a.on{color:var(--text);background:var(--card);
box-shadow:0 1px 3px rgba(45,52,72,.16),inset 0 0 0 1px var(--border-l)}
[data-theme=clair] .nav a.on svg{color:var(--blue)}
.avatar{width:34px;height:34px;border-radius:50%;display:inline-flex;align-items:center;
justify-content:center;position:relative;flex:none;color:var(--pc,var(--blue-l));
background:color-mix(in srgb,var(--pc,var(--blue-l)) 16%,var(--surface));
border:1px solid color-mix(in srgb,var(--pc,var(--blue-l)) 38%,transparent);
transition:border-color .15s,background .15s,box-shadow .15s}
.avatar:hover{border-color:var(--pc,var(--blue-l));
background:color-mix(in srgb,var(--pc,var(--blue-l)) 28%,var(--surface))}
.avatar:focus-visible{outline:none;border-color:var(--pc,var(--blue-l));
box-shadow:0 0 0 3px color-mix(in srgb,var(--pc,var(--blue-l)) 25%,transparent)}
.avatar svg{width:18px;height:18px}
.nav a.avatar.on,[data-theme=clair] .nav a.avatar.on{color:var(--pc,var(--blue-l));background:color-mix(in srgb,var(--pc,var(--blue-l)) 22%,transparent);border-color:var(--pc,var(--blue-l));box-shadow:none}
.nav a.avatar.on:hover,[data-theme=clair] .nav a.avatar.on:hover{background:color-mix(in srgb,var(--pc,var(--blue-l)) 34%,var(--surface))}
.avatar .abadge{position:absolute;top:-2px;right:-2px;min-width:9px;height:9px;border-radius:var(--r-pill);background:var(--red);border:2px solid var(--bg)}
/* ---- cartes ---- */
.card{background:var(--card);border:1px solid var(--border);
border-radius:var(--r-2);padding:.95rem 1.05rem;margin:.6rem 0;
transition:border-color .15s,transform .15s,box-shadow .15s}
.card:hover{border-color:color-mix(in srgb,var(--blue-l) 38%,transparent);transform:translateY(-1px);box-shadow:0 6px 22px rgba(0,0,0,.55)}
/* ---- stats ---- */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(132px,1fr));gap:.6rem;margin:.3rem 0 1.5rem}
.statico{display:none;width:17px;height:17px;color:var(--text-2);margin-bottom:.35rem}
.stats-lg{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
.stat{min-width:0;background:var(--card);border:1px solid var(--border);border-radius:var(--r-2);padding:.85rem 1rem}
.stat b{display:block;font-size:var(--fs-7);font-weight:700;letter-spacing:-.02em;line-height:1.15;color:var(--blue-l)}
.stat span{font-size:var(--fs-1);color:var(--text-2);text-transform:uppercase;letter-spacing:.09em}
.stat.accent b{color:var(--blue-l)}.stat.ok b{color:var(--green-l)}
/* Ecarts : carte coloree par gravite + modale. Le socle est `:target`, en CSS
   pur — la CSP du site est `script-src 'self'`, aucun script en ligne. Un
   fichier servi (/assets/ecarts.js) n'ajoute que l'accessoire : touche Echap
   et geste de glissement. Sans lui, tout continue de fonctionner. */
a.stat.ec{background:var(--ec-bg);border-color:var(--ec-bd)}
a.stat.ec b{color:var(--ec-fg)}
a.stat.ec:hover{border-color:var(--ec-fg)}
.ec-g{--ec-bg:var(--red-bg);--ec-bd:var(--red);--ec-fg:var(--red-l)}
.ec-c{--ec-bg:var(--orange-bg);--ec-bd:var(--orange);--ec-fg:var(--orange)}
.ec-t{--ec-bg:var(--card);--ec-bd:var(--border-l);--ec-fg:var(--text)}
.ecmod{position:fixed;inset:0;z-index:90;display:none;align-items:center;justify-content:center;padding:1rem;background:rgba(4,6,10,.6)}
.ecmod:target{display:flex}
.ecfond{position:absolute;inset:0}
.ecbox{position:relative;display:flex;flex-direction:column;background:var(--card);border:1px solid var(--border-l);border-radius:var(--r-2);width:100%;max-width:47rem;max-height:82vh;overflow:hidden;box-shadow:0 18px 50px rgba(0,0,0,.55)}
.ecmod:target .ecbox{animation:ecin .16s ease-out}
@keyframes ecin{from{opacity:0;transform:translateY(8px) scale(.99)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.ecmod:target .ecbox{animation:none}}
.ecpoignee{display:none;flex:none;width:2.6rem;height:4px;border-radius:2px;background:var(--border-l);margin:.6rem auto .15rem}
.echaut{display:flex;align-items:flex-start;gap:.8rem;padding:1.05rem 1.25rem .9rem;border-bottom:1px solid var(--border)}
.echt{min-width:0}
.ectitre{font-size:1.2rem;font-weight:700;letter-spacing:-.02em;line-height:1.2}
.ecsous{margin:.28rem 0 0;font-size:.85rem;color:var(--text-2);line-height:1.45}
.ecrouge{color:var(--red-l)}
.ecx{margin-left:auto;flex:none;font-size:1.45rem;line-height:1;padding:.1rem .35rem;border-radius:8px;color:var(--text-2);text-decoration:none}
.ecx:hover{color:var(--text);background:var(--border)}
.eccorps{overflow:auto;-webkit-overflow-scrolling:touch;padding:0 1.25rem .35rem}
.ecgrp{display:flex;align-items:center;gap:.5rem;margin:1.05rem 0 .1rem;font-size:.72rem;text-transform:uppercase;letter-spacing:.1em;color:var(--text-2)}
.ecgrp b{font-weight:700;color:var(--text)}
.ecgrp i{flex:1;height:1px;background:var(--border)}
.ecl{position:relative;display:flex;gap:.55rem;align-items:baseline;flex-wrap:wrap;padding:.62rem 0 .62rem .85rem;border-bottom:1px solid var(--border)}
.ecl:last-child{border-bottom:0}
.ecl::before{content:"";position:absolute;left:0;top:.7rem;bottom:.7rem;width:3px;border-radius:2px;background:var(--ecl-c)}
.ecl.r{--ecl-c:var(--red)}
.ecl.j{--ecl-c:var(--orange)}
.ecsujet{flex:none;font-size:.71rem;font-weight:600;text-transform:uppercase;letter-spacing:.07em;padding:.17rem .45rem;border-radius:7px;white-space:nowrap;color:var(--ecl-c);background:color-mix(in srgb,var(--ecl-c) 17%,transparent)}
.ect{flex:1;min-width:13rem;font-size:.94rem;line-height:1.45}
.ecage{flex:none;font-size:.76rem;padding:.17rem .5rem;border-radius:999px;white-space:nowrap;font-variant-numeric:tabular-nums;color:var(--text-2);background:var(--border)}
.ecage.vieux{color:var(--red-l);background:var(--red-bg)}
.ecpied{display:flex;align-items:baseline;gap:.8rem;flex-wrap:wrap;padding:.8rem 1.25rem;border-top:1px solid var(--border)}
.ecpied span{margin-left:auto;font-size:.78rem;color:var(--text-2)}
/* Mobile : plein ecran, pas de croix (hors de portee du pouce sur un ecran
   plein), fermeture par glissement vers le bas — la poignee l'annonce. */
@media(max-width:34rem){
.ecmod{padding:0;align-items:stretch}
.ecbox{max-width:none;max-height:none;height:100%;border:0;border-radius:0;box-shadow:none}
.ecmod:target .ecbox{animation:ecmont .18s ease-out}
@keyframes ecmont{from{transform:translateY(14px);opacity:.6}to{transform:none;opacity:1}}
.ecpoignee{display:block}
.ecx{display:none}
.echaut{padding:.7rem 1.05rem .8rem}
.eccorps{padding:0 1.05rem .35rem}
.ecpied{padding:.75rem 1.05rem}
.ect{min-width:100%;order:3}
.ecpied span{margin-left:0}
}
/* ---- badges & chips ---- */
.badge{display:inline-block;font-size:var(--fs-1);font-weight:600;letter-spacing:.05em;
padding:.17rem .52rem;border-radius:var(--r-1);text-transform:uppercase;vertical-align:middle}
.b-creer{background:var(--green-bg);color:var(--green-l)}
.b-mettre_a_jour{background:var(--blue-bg);color:var(--blue-l)}
.b-supprimer{background:var(--red-bg);color:var(--red-l)}
.b-greffer_source{background:var(--orange-bg);color:var(--orange)}
.b-auto,.b-humain{background:var(--elev);color:var(--text-2)}
.b-annule{background:var(--red-bg);color:var(--red-l)}
.chip{display:inline-block;background:var(--surface);border:1px solid var(--border);
border-radius:var(--r-1);padding:.28rem .6rem;font-size:var(--fs-1);margin:.15rem .3rem .15rem 0;
font-family:'JetBrains Mono',monospace}
.chip b{color:var(--blue-l);font-weight:500}
/* ---- boutons (tailles BSN : py-2.5 / text-sm / medium) ---- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;
padding:.625rem 1.25rem;border-radius:var(--r-1);border:0;font-size:var(--fs-3);font-weight:500;
cursor:pointer;font-family:inherit;line-height:1.25;
transition:background .12s,border-color .12s,color .12s,opacity .12s}
.btn:active{transform:translateY(1px)}
.btn:disabled:active,.btn[disabled]:active{transform:none}
a.btn{text-decoration:none}
a.btn-danger,a.btn-green,a.btn-danger:hover,a.btn-green:hover{color:#fff}
a.btn-blue,a.btn-blue:hover{color:var(--sur-accent,#fff)}
[data-theme=clair] a.btn-danger:hover,[data-theme=clair] a.btn-green:hover{color:#fff}
[data-theme=clair] a.btn-blue:hover{color:var(--sur-accent,#fff)}
a.btn-ghost{color:var(--text)}
a.btn-ghost:hover{color:var(--blue-l)}
.btn-green{background:var(--green);color:#fff;box-shadow:0 1px 2px rgba(0,0,0,.25),inset 0 1px 0 rgba(255,255,255,.14)}
.btn-green:hover{background:color-mix(in srgb,var(--green) 86%,white)}
.btn-blue{background:var(--blue);color:var(--sur-accent,#fff);box-shadow:0 1px 2px rgba(0,0,0,.25),inset 0 1px 0 rgba(255,255,255,.14)}
.btn-blue:hover{background:color-mix(in srgb,var(--blue) 86%,white)}
[data-theme=clair] .btn-blue:hover{background:color-mix(in srgb,var(--blue) 88%,black)}
.btn-red{background:var(--red-bg);color:var(--red-l);border:1px solid color-mix(in srgb,var(--red) 40%,transparent)}
.btn-red:hover{background:color-mix(in srgb,var(--blue-l) 20%,var(--card));border-color:var(--blue-l);color:var(--blue-l)}
[data-theme=clair] .btn-red:hover{background:color-mix(in srgb,var(--blue-l) 18%,var(--card));color:var(--blue-l)}
.btn:disabled,.btn[disabled]{opacity:.45;cursor:not-allowed;filter:saturate(.6)}
.btn:disabled:hover,.btn[disabled]:hover{border-color:inherit}
.btn-danger{background:var(--red);color:#fff;box-shadow:0 1px 2px rgba(0,0,0,.25),inset 0 1px 0 rgba(255,255,255,.14)}
.btn-danger:hover{background:color-mix(in srgb,var(--red) 86%,white)}
.btn-orange{background:var(--orange-bg);color:var(--orange);border:1px solid color-mix(in srgb,var(--orange) 40%,transparent)}
.btn-orange:hover{background:color-mix(in srgb,var(--blue-l) 20%,var(--card));border-color:var(--blue-l);color:var(--blue-l)}
[data-theme=clair] .btn-orange:hover{background:color-mix(in srgb,var(--blue-l) 16%,var(--card));color:var(--blue-l)}
.btn-ghost{background:var(--elev);color:var(--text);border:1px solid var(--border-l)}
.btn-ghost:hover{filter:none;background:color-mix(in srgb,var(--blue-l) 22%,var(--elev));
border-color:color-mix(in srgb,var(--blue-l) 55%,transparent);color:var(--blue-l)}
.btn-ghost:active{background:color-mix(in srgb,var(--blue-l) 30%,var(--elev))}
.btn-sm{padding:.5rem .95rem;font-size:var(--fs-2);border-radius:var(--r-1)}
/* ---- formulaires ---- */
select{appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238a8d98' stroke-width='2.4' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .5rem center;background-size:13px;padding:.5rem 1.75rem .5rem .7rem;border-radius:var(--r-1);border:1px solid var(--border-l);background-color:var(--surface);color:var(--text);font-family:inherit;font-size:var(--fs-2)}
[data-theme=clair] select{border-color:var(--border-l);background-color:#fff}
select option,select optgroup{background-color:var(--surface);color:var(--text);
font-size:var(--fs-2);padding:.35rem .5rem}
select optgroup{color:var(--text-2);font-weight:600}
select option:checked{background-color:color-mix(in srgb,var(--blue-l) 22%,var(--surface));color:var(--text)}
[data-theme=clair] select option,[data-theme=clair] select optgroup{background-color:#fff}
textarea{width:100%;padding:.7rem .85rem;border-radius:var(--r-1);border:1px solid var(--border-l);background:var(--surface);color:var(--text);font-family:'JetBrains Mono',monospace;font-size:var(--fs-2);line-height:1.55;resize:vertical}
textarea:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--glow)}
[data-theme=clair] textarea{border-color:var(--border-l);background:#fff}
input{width:100%;padding:.66rem .85rem;border-radius:var(--r-1);
border:1px solid var(--border-l);background:var(--surface);color:var(--text);
font-size:var(--fs-3);font-family:inherit;background-clip:padding-box;
transition:border-color .15s,box-shadow .15s,background-color .15s}
input:hover{border-color:color-mix(in srgb,var(--blue-l) 32%,transparent)}
input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus{
-webkit-text-fill-color:var(--text);caret-color:var(--text);
border:1px solid var(--border-l);
transition:background-color 9999999s ease-out 0s}
input:autofill{box-shadow:0 0 0 1000px var(--surface) inset;
-webkit-text-fill-color:var(--text);border:1px solid var(--border-l)}
input::placeholder{color:var(--muted)}
input:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--glow)}
label{display:block;margin:.9rem 0 .35rem;font-size:var(--fs-1);color:var(--text-2)}
pre{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-1);
padding:1rem;white-space:pre-wrap;word-break:break-word;
font-family:'JetBrains Mono',monospace;font-size:var(--fs-2);line-height:1.6}
/* ---- auth ---- */
.auth{max-width:340px;margin:0 auto;min-height:calc(100vh - 2.4rem);min-height:calc(100dvh - 2.4rem);display:flex;flex-direction:column;justify-content:center}
.auth-card{background:linear-gradient(180deg,var(--elev),var(--card));border:1px solid var(--border-l);
border-radius:var(--r-3);padding:1.8rem 1.6rem 1.6rem;box-shadow:0 20px 55px -14px rgba(0,0,0,.72)}
.logo-badge svg{width:54px;height:54px;display:block;filter:drop-shadow(0 6px 20px var(--logo-glow))}
.logo-badge{width:54px;height:54px;margin:0 auto .95rem;display:flex;align-items:center;justify-content:center}
.wordmark{text-align:center;font-weight:700;font-size:var(--fs-7);letter-spacing:-.01em;margin-bottom:1.5rem}
.brand-name{text-align:center;font-weight:700;letter-spacing:.22em;font-size:var(--fs-2);
color:var(--text-2);text-transform:uppercase;margin-bottom:1.3rem}

.field{margin-bottom:.85rem}
.err{color:var(--red-l);font-size:var(--fs-2);text-align:center;margin:.8rem 0 .2rem}
.okmsg{color:var(--green-l);font-size:var(--fs-2);text-align:center;margin:.8rem 0 .2rem}
.muted{color:var(--text-2)}.tiny{font-size:var(--fs-1);color:var(--muted)}
.totp{text-align:center;letter-spacing:.35em;
font-family:'JetBrains Mono',monospace}
input:user-invalid{border-color:var(--border-l);box-shadow:none}
input:user-invalid:focus{border-color:var(--blue);box-shadow:0 0 0 3px var(--glow)}
.check{display:flex;gap:.5rem;align-items:center;margin:.95rem 0 0;font-size:var(--fs-2);
color:var(--text-2)}.check input{width:auto}

/* ---- rendu Markdown des notes ---- */
/* overflow-wrap (13/09/2026) : un « mot » sans espace plus large que l'ecran (ligne de
   40 « ─ » d'un .docx converti) sortait du cadre et elargissait toute la page sur
   telephone. Il se coupe desormais. break-word et non anywhere : la largeur minimale des
   cellules ne change pas, un tableau large defile toujours au lieu de hacher ses mots. */
.md{font-size:var(--fs-lecture);line-height:1.7;color:var(--text);overflow-wrap:break-word}
.md>*:first-child{margin-top:0}
.md h1,.md h2,.md h3,.md h4{color:var(--strong);font-weight:600;line-height:1.3;margin:1.4rem 0 .6rem}
.md h1{font-size:var(--fs-6);border-bottom:1px solid var(--border);padding-bottom:.4rem}
.md h2{font-size:var(--fs-5)}
.md h3{font-size:var(--fs-4);color:var(--blue-l)}
.md h4{font-size:var(--fs-2);color:var(--text-2);text-transform:uppercase;letter-spacing:.05em}
.md p{margin:.6rem 0}
.md strong{color:var(--strong);font-weight:600}
.md em{color:var(--green-l);font-style:italic}
.md del{color:var(--muted)}
.md a{color:var(--blue-l);border-bottom:1px solid color-mix(in srgb,var(--blue-l) 35%,transparent)}
.md a:hover{border-bottom-color:var(--blue-l)}
.md ul,.md ol{margin:.5rem 0;padding-left:1.4rem}
.md li{margin:.28rem 0}
.md li::marker{color:var(--blue-l)}
.md code{background:var(--elev);border:1px solid var(--border);border-radius:var(--r-1);
padding:.08rem .42rem;font-family:'JetBrains Mono',monospace;font-size:.82em;color:var(--code)}
.md pre{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-1);
padding:.9rem 1rem;overflow-x:auto;margin:.8rem 0}
.md pre code{background:none;border:0;padding:0;color:var(--text);font-size:var(--fs-2)}
.md blockquote{border-left:3px solid var(--blue);margin:.8rem 0;padding:.35rem 0 .35rem .95rem;
color:var(--text-2);background:linear-gradient(90deg,color-mix(in srgb,var(--blue) 7%,transparent),transparent);
border-radius:0 6px 6px 0}
.md blockquote p{margin:.2rem 0}
.md table{border-collapse:collapse;width:100%;margin:.9rem 0;font-size:var(--fs-2);
border:1px solid var(--border-l);border-radius:var(--r-1);overflow:hidden}
.md th,.md td{border-bottom:1px solid var(--border);border-right:1px solid var(--border);
padding:.5rem .75rem;text-align:left}
.md th{background:var(--elev);color:var(--strong);font-weight:600}
.md tr:last-child td{border-bottom:0}
.md td:last-child,.md th:last-child{border-right:0}
.md tbody tr:nth-child(even){background:rgba(255,255,255,.018)}
.md hr{border:0;border-top:1px solid var(--border);margin:1.3rem 0}
.md img{max-width:100%;border-radius:var(--r-1)}


/* ---- pages notes : liste epuree + detail ---- */
.sect{display:flex;align-items:baseline;gap:.55rem;margin:2.1rem 0 .6rem}
/* La barre de titre porte l'action de la page, comme « Partager » sur une
   note : le bouton Outils y est toujours au meme endroit, en haut a droite,
   au lieu de tomber sous le champ de recherche des que l'ecran retrecit. */
.sect-liste{align-items:center}
/* Carte « cette semaine » : ce que l'assistant a ecrit sans qu'on lui demande.
   Chaque ligne mene a la note touchee ; la date reste calee a droite. */
.sect-sem{margin-top:0;margin-bottom:1.05rem}
.semtxt{margin:0 0 .8rem;font-size:var(--fs-3);color:var(--text-2)}
.semtxt b{color:var(--text)}
.semlist{display:flex;flex-direction:column;gap:.1rem}
.semrow{display:flex;align-items:center;gap:.6rem;padding:.5rem .55rem;border-radius:var(--r-1);
color:var(--text);font-size:var(--fs-2);transition:background .12s}
a.semrow:hover{background:color-mix(in srgb,var(--blue-l) 12%,var(--card));color:var(--text)}
.semres{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.semq{flex:none;font-size:var(--fs-1);color:var(--muted)}
.semrow a.semres{color:var(--text)}
.semrow a.semres:hover{color:var(--blue-l)}
/* Activité au fil des semaines. Douze barres, la couleur du compte, et les
   semaines creuses laissées en trait bas : c'est une information, pas un trou
   à masquer. Aucune librairie — des div et des hauteurs en pourcentage. */
/* Barres groupees, en echelle logarithmique. Trois barres par semaine plutot
   qu'une barre empilee : empilee, une serie 600 fois plus petite occupe un
   quart de pixel et disparait. Les graduations sont A GAUCHE et en HTML — le
   graphique est en div, pas en SVG, donc rien n'est deforme et les infobulles
   natives font le reste. */
/* Le graphique prend TOUTE la largeur du panneau, aligne sur le titre et la
   legende. Les graduations vivaient dans une colonne de grille a gauche : le
   cadre etait donc creuse de 3.25rem d un cote, colle au bord de l autre, et
   paraissait pousse a droite. Elles sont passees DANS le cadre, en gouttiere
   d axe — le cadre est centre parce qu il occupe la colonne entiere.
   Effet de bord bienvenu : reperees sur la meme boite que la grille (inset
   .45rem), les valeurs tombent enfin pile sur leurs lignes ; en colonne de
   grille elles se calaient sur la hauteur de rangee, 16 px plus haute. */
.gwrap{display:grid;grid-template-columns:1fr;gap:.15rem;margin:.4rem 0 .7rem}
.gval{position:absolute;left:.7rem;top:.75rem;bottom:.75rem;width:2.2rem;
text-align:right;font-size:var(--fs-1);color:var(--muted);
font-variant-numeric:tabular-nums;line-height:1;pointer-events:none;z-index:1}
.gval span{position:absolute;right:0;transform:translateY(-50%)}
.graphe{position:relative;height:212px;border-radius:var(--r-1);
background:var(--elev);border:1px solid var(--border);padding:.75rem 1rem .75rem 3.15rem}
.ggrille{position:absolute;inset:.75rem 1rem .75rem 3.15rem;pointer-events:none}
.ggrille i{position:absolute;left:0;right:0;height:1px;background:var(--border-l);opacity:.45}
.gbarres{position:relative;display:flex;align-items:flex-end;gap:.5rem;height:100%}
.ggroupe{position:relative;flex:1;min-width:0;height:100%;display:flex;
align-items:flex-end;justify-content:center;gap:3px;padding:0 2px;
border-radius:5px;transition:background .12s}
.ggroupe:hover{background:color-mix(in srgb,var(--blue-l) 15%,transparent)}
.gnow{background:color-mix(in srgb,var(--blue-l) 8%,transparent)}
.gb{flex:1;max-width:14px;border-radius:3px 3px 0 0;transition:filter .12s}
.ggroupe:hover .gb{filter:brightness(1.18)}
.gb-note{background:linear-gradient(180deg,var(--blue-l),
color-mix(in srgb,var(--blue-l) 68%,var(--elev)))}
.gb-doc{background:linear-gradient(180deg,#a78bfa,color-mix(in srgb,#a78bfa 68%,var(--elev)))}
.gb-form{background:linear-gradient(180deg,var(--green-l),
color-mix(in srgb,var(--green-l) 68%,var(--elev)))}
.ggroupe::before{content:attr(data-info);position:absolute;bottom:calc(100% + 6px);
left:50%;transform:translateX(-50%);white-space:nowrap;padding:.28rem .55rem;
border-radius:var(--r-1);background:var(--card);border:1px solid var(--border-l);
color:var(--text);font-size:var(--fs-1);box-shadow:0 8px 20px -10px rgba(0,0,0,.75);
opacity:0;pointer-events:none;transition:opacity .12s;z-index:5}
.ggroupe:hover::before{opacity:1}
/* les derniers groupes : l'etiquette rentre dans le cadre */
.ggroupe:nth-last-child(-n+3)::before{left:auto;right:0;transform:none}
.ggroupe:nth-child(-n+2)::before{left:0;transform:none}
/* Une semaine sans rien reste une semaine : un trait bas plutot qu'un vide. */
.gvide::after{content:'';position:absolute;bottom:0;left:22%;right:22%;height:2px;
border-radius:2px;background:var(--border-l)}
.ggroupe{position:relative}
.gdates{display:flex;justify-content:space-between;font-size:var(--fs-1);color:var(--muted);
font-variant-numeric:tabular-nums;padding:.5rem 1rem 0 3.15rem}
.gnote{margin:.7rem 0 0;font-size:var(--fs-1);color:var(--muted)}
.gbilan{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));
gap:1.35rem 2.2rem;margin:1.6rem 0 0;padding-top:1.45rem;border-top:1px solid var(--border)}
.gbil{display:flex;flex-direction:column;gap:.65rem;min-width:0}
.gbilt{font-size:var(--fs-2);color:var(--text-2)}
.gbilt b{color:var(--text);font-weight:600}
.gbils{font-size:var(--fs-1);color:var(--muted)}
.gjauge{display:flex;height:8px;border-radius:var(--r-pill);overflow:hidden;background:var(--elev)}
.gjauge i{display:block;height:100%}
.gj-cree{background:var(--blue-l)}
.gj-enr{background:color-mix(in srgb,var(--blue-l) 45%,var(--elev))}
.gcarnet{display:flex;align-items:center;gap:.75rem;color:var(--text);font-size:var(--fs-2)}
.gcarnet:hover{color:var(--blue-l)}
.gcarnet:hover .gcbar i{background:var(--blue-l)}
.gcnom{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
max-width:9rem}
.gcbar{flex:1;min-width:26px;height:6px;border-radius:var(--r-pill);background:var(--elev);
overflow:hidden}
.gcbar i{display:block;height:100%;border-radius:var(--r-pill);
background:color-mix(in srgb,var(--blue-l) 55%,var(--elev));transition:background .12s}
.gcnb{flex:none;font-size:var(--fs-1);color:var(--muted);font-variant-numeric:tabular-nums}
.gpuce{width:9px;height:9px;border-radius:3px;flex:none}
.gpuce.gp-note{background:var(--blue-l)}
.gpuce.gp-doc{background:#a78bfa}
.gpuce.gp-form{background:var(--green-l)}
.glegende{display:flex;flex-wrap:wrap;gap:.5rem 1.5rem;margin:1rem 0 0}
.gleg{display:inline-flex;align-items:center;gap:.4rem;font-size:var(--fs-1);color:var(--text-2)}
.gtete{display:flex;align-items:center;gap:1.5rem;margin:0 0 1.25rem;flex-wrap:wrap}
.gtaux{display:flex;gap:1.7rem;flex:none;padding-right:1.6rem;
border-right:1px solid var(--border)}
.gtaux1{display:flex;flex-direction:column;align-items:flex-start;line-height:1.15;gap:.2rem}
.gtaux1 b{font-size:var(--fs-4);font-weight:700;color:var(--green-l)}
.gtaux1 span{font-size:var(--fs-1);color:var(--muted);text-transform:uppercase;letter-spacing:.07em}
.gtaux-err b{color:var(--orange)}
.gtete .semtxt{flex:1 1 220px;min-width:0}
@media(max-width:560px){.gtaux{border-right:0;padding-right:0}}
.gaxe{display:flex;justify-content:space-between;font-size:var(--fs-1);color:var(--muted)}
.gfric{color:var(--orange)}
.recoup{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:.7rem;
padding:.6rem .55rem;border-radius:var(--r-1)}
.recoup+.recoup{border-top:1px solid var(--border)}
.recoupn{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
font-size:var(--fs-2);color:var(--text)}
.recoupn:hover{color:var(--blue-l)}
.recoupsim{flex:none;padding:.12rem .5rem;border-radius:var(--r-pill);
background:color-mix(in srgb,var(--blue-l) 14%,var(--card));color:var(--blue-l);
font-size:var(--fs-1);font-weight:600}
@media(max-width:560px){
.recoup{grid-template-columns:1fr auto;gap:.35rem .6rem}
.recoupn:last-child{grid-column:1/-1;color:var(--text-2)}}
@media(max-width:480px){.semq{display:none}}
@media(max-width:560px){
/* Sur telephone la place manque : la gouttiere d axe et les ecarts se
   resserrent, sinon les barres perdent toute epaisseur. */
.graphe{height:120px;padding:.55rem .7rem .55rem 2.6rem}
.ggrille{inset:.55rem .7rem .55rem 2.6rem}
.gval{left:.45rem;top:.55rem;bottom:.55rem;width:2rem}
.gdates{padding:.4rem .7rem 0 2.6rem}
.gbarres{gap:.25rem}
.ggroupe{gap:2px;padding:0 1px}}
.btn-outils{margin-left:auto;display:inline-flex;align-items:center;gap:.4rem;flex:none}
.btn-outils svg{width:16px;height:16px;flex:none}
.sect h3{margin:0}
.note{display:flex;align-items:center;gap:.85rem;padding:.88rem .75rem;border-radius:var(--r-2);
color:var(--text);border:1px solid transparent;transition:background .13s,border-color .13s}
.note:hover{background:color-mix(in srgb,var(--blue-l) 14%,var(--card));border-color:color-mix(in srgb,var(--blue-l) 40%,transparent)}
.note .dot{width:8px;height:8px;border-radius:50%;flex:none}
.note .body{flex:1;min-width:0;display:flex;flex-direction:column;gap:.28rem}
.note .t{font-weight:500;font-size:var(--fs-3);color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tag{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;vertical-align:bottom}
.note:hover .t{color:var(--strong)}
.note .m{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;font-size:var(--fs-1);color:var(--muted)}
.pj{display:inline-flex;align-items:center;gap:.2em;padding:.02em .38em;border-radius:var(--r-1);background:var(--pj-bg);color:var(--pj);font-weight:700}
.pj svg{width:.92em;height:.92em;stroke:currentColor;fill:none}
/* --- Ligne de document -------------------------------------------------
   Une note se resume a un point de couleur ; un document, lui, a un type et
   un poids. La vignette d'extension occupe la colonne de gauche restee vide,
   la ligne se resserre, et la meta dit enfin quelque chose du fichier. */
.note.doc{gap:.7rem;padding:.5rem .75rem}
.list .note.doc{padding:.5rem .8rem}
.notegroup .list .note.doc{padding:.5rem .95rem .5rem 1.1rem}
.note.doc .body{gap:.1rem}
.note.doc .t{line-height:1.3}
.note.doc .m{line-height:1.25;gap:.35rem}
.docic{--fc:var(--text-2);flex:none;width:34px;height:34px;border-radius:var(--r-1);
display:flex;align-items:center;justify-content:center;font-size:.6rem;font-weight:700;
letter-spacing:.01em;color:var(--fc);background:color-mix(in srgb,var(--fc) 13%,var(--card));
border:1px solid color-mix(in srgb,var(--fc) 26%,var(--card));transition:background .13s,border-color .13s}
.note.doc:hover .docic{background:color-mix(in srgb,var(--fc) 20%,var(--card));
border-color:color-mix(in srgb,var(--fc) 42%,var(--card))}
.docic.fam-pdf{--fc:var(--red-l)}
.docic.fam-image{--fc:#a78bfa}
.docic.fam-doc{--fc:var(--blue-l)}
.docic.fam-tableur{--fc:var(--green-l)}
.docic.fam-presentation{--fc:var(--orange)}
.docic.fam-archive{--fc:var(--pj)}
.docic.fam-code{--fc:#22d3ee}
.docic.fam-audio{--fc:#f472b6}
.docic.fam-video{--fc:#38bdf8}
/* Notes : la vignette porte le metier, avec une teinte stable par mot.
   Formulaires : une icone de grille a la couleur du compte. */
.docic svg{width:17px;height:17px;fill:none;stroke:currentColor}
.docic.met-0{--fc:var(--text-2)}
.docic.met-1{--fc:var(--blue-l)}
.docic.met-2{--fc:var(--green-l)}
.docic.met-3{--fc:#a78bfa}
.docic.met-4{--fc:var(--orange)}
.docic.met-5{--fc:#22d3ee}
.docic.met-6{--fc:#f472b6}
.docic.met-7{--fc:var(--pj)}
.docic.met-8{--fc:#38bdf8}
.docic.form{--fc:var(--pc,var(--blue-l))}
.docic.form svg{width:18px;height:18px}
.pjpdf{width:100%;height:100%;object-fit:cover;object-position:top center;
background:#fff;display:block}
/* Un formulaire archive n'est pas cliquable : il ne doit pas reagir au survol
   comme une ligne qui mene quelque part. Son bouton Restaurer reste a droite. */
.formact{flex:none;margin:0}
.note.formrow{cursor:default}
.note.formrow:hover{background:transparent;border-color:transparent}
.note.formrow:hover .t{color:var(--text)}
.natbadge{display:inline-flex;align-items:center;gap:.32em;font-weight:600}
.natbadge::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor;flex:none}
.nat-stable{color:var(--green-l)}
.nat-volatil{color:var(--orange)}
.notegroup{background:var(--card);border:1px solid var(--border);border-radius:var(--r-2);margin-bottom:.55rem;overflow:hidden}
.notegroup>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:.7rem;padding:.85rem .95rem;transition:background .12s;user-select:none}
.notegroup>summary::-webkit-details-marker{display:none}
.notegroup>summary:hover{background:color-mix(in srgb,var(--blue-l) 14%,var(--card))}
.notegroup>summary::before{content:"";flex:none;width:7px;height:7px;border-right:2px solid var(--text-2);border-bottom:2px solid var(--text-2);transform:rotate(-45deg);transition:transform .16s}
.notegroup[open]>summary::before{transform:rotate(45deg)}
.gname{flex:1;min-width:0;font-weight:600;font-size:var(--fs-4);color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.notegroup .count{flex:none;font-size:var(--fs-1);font-weight:600;color:var(--muted)}
.notegroup .list{padding:0;margin:0;border:0;border-radius:0;background:transparent;box-shadow:none}
.notegroup .list .note{padding:.72rem .95rem .72rem 1.85rem;background:transparent;border-bottom:1px solid var(--border)}
.notegroup .list .note:last-child{border-bottom:0}
.notegroup .list .note:hover{background:color-mix(in srgb,var(--blue-l) 14%,var(--card))}
:root{--pj:#e3b341;--pj-bg:rgba(227,179,65,.15)}
[data-theme=clair]{--pj:#8a5a00;--pj-bg:rgba(154,101,0,.12)}
.pjm{position:fixed;inset:0;z-index:200;display:none;align-items:center;justify-content:center;padding:3vh 3vw;background:rgba(4,4,8,.72);backdrop-filter:blur(3px)}
.pjm.on{display:flex}
.pjm-card{display:flex;flex-direction:column;width:min(920px,96vw);max-height:94vh;background:var(--card);border:1px solid var(--border);border-radius:var(--r-3);box-shadow:0 24px 60px -12px rgba(0,0,0,.6);overflow:hidden}
.pjm-head{display:flex;align-items:center;gap:.5rem;padding:.55rem .7rem;border-bottom:1px solid var(--border)}
.pjm-title{flex:1;font-weight:600;font-size:var(--fs-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}
.pjm-id{flex:1;min-width:0;display:flex;flex-direction:column;gap:.05rem}
.pjm-id .pjm-title{flex:none}
.pjm-sub{font-size:var(--fs-1);color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pjm-nav{flex:none;width:30px;height:30px;border-radius:var(--r-1);border:1px solid var(--border);background:transparent;color:var(--text-2);font-size:var(--fs-5);line-height:1;cursor:pointer;font-family:inherit}
.pjm-nav:hover{border-color:var(--blue);color:var(--blue-l)}
.pjm-nav[hidden]{display:none}
.pjm-dl,.pjm-close{flex:none;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:var(--r-1);border:1px solid var(--border);background:transparent;color:var(--text-2);cursor:pointer;text-decoration:none;font-size:var(--fs-4);line-height:1}
.pjm-dl:hover,.pjm-close:hover{border-color:var(--blue);color:var(--blue-l)}
.pjm-body{flex:1;overflow:auto;min-height:120px}
.pjm-body .md{padding:1rem 1.2rem}
.pjm-img{display:block;max-width:100%;max-height:88vh;margin:0 auto}
.pjm-frame{display:block;width:100%;height:86vh;border:0;background:#fff}
.pjm-load,.pjm-none{padding:2.4rem 1.2rem;text-align:center;color:var(--text-2)}
.noteactions{display:flex;gap:.6rem;flex-wrap:wrap;margin:.5rem 0 1.6rem}
.pjbox{background:var(--card);border:1px solid var(--border);border-radius:var(--r-3);padding:1.35rem 1.55rem;margin-bottom:1.2rem}
.pjgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.65rem}
.pjcard{position:relative;margin:0;background:var(--card);border:1px solid var(--border);border-radius:var(--r-2);overflow:hidden;transition:border-color .14s,transform .14s,box-shadow .14s}
.pjcard:hover{border-color:color-mix(in srgb,var(--blue-l) 38%,transparent);transform:translateY(-1px);box-shadow:0 10px 22px -14px rgba(0,0,0,.7)}
.pjcard>a{display:block;color:inherit}
.pjthumb{display:flex;align-items:center;justify-content:center;aspect-ratio:4/3;background:var(--elev);overflow:hidden;border-bottom:1px solid var(--border)}
.pjthumb img{width:100%;height:100%;object-fit:cover;display:block}
.pjext{font-size:var(--fs-1);font-weight:700;letter-spacing:.05em;padding:.42rem .66rem;border-radius:var(--r-1);border:1px solid currentColor;color:var(--text-2);background:var(--card)}
.fam-pdf .pjext{color:var(--red-l)}
.fam-image .pjext,.fam-doc .pjext{color:var(--blue-l)}
.fam-tableur .pjext{color:var(--green-l)}
.fam-presentation .pjext{color:var(--orange)}
.fam-archive .pjext{color:var(--pj)}
.fam-code .pjext{color:#22d3ee}
.pjcap{display:block;padding:.5rem .6rem .55rem}
.pjnom{display:block;font-size:var(--fs-2);font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pjsub{display:block;margin-top:.12rem;font-size:var(--fs-1);color:var(--muted)}
.pjact{position:absolute;top:.4rem;right:.4rem;display:flex;gap:.25rem;opacity:0;transition:opacity .14s}
.pjcard:hover .pjact,.pjcard:focus-within .pjact{opacity:1}
@media(hover:none){.pjact{opacity:1}}
.pjbtn{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;padding:0;border-radius:var(--r-1);border:1px solid var(--border-l);background:var(--card);color:var(--text-2);font-size:var(--fs-2);line-height:1;font-family:inherit;cursor:pointer;text-decoration:none}
.pjbtn:hover{border-color:var(--blue);color:var(--blue-l);background:color-mix(in srgb,var(--blue-l) 22%,var(--card))}
.pjbtn-sup:hover{border-color:var(--red);color:var(--red-l);background:color-mix(in srgb,var(--red) 22%,var(--card))}
.pjdrop{display:flex;flex-direction:column;align-items:center;gap:.15rem;width:100%;padding:.95rem 1rem;border:1px dashed var(--border-l);border-radius:var(--r-2);background:transparent;text-align:center;cursor:pointer;transition:border-color .14s,background .14s}
.pjdrop:hover,.pjdrop:focus-visible{border-color:var(--blue);background:color-mix(in srgb,var(--blue-l) 14%,var(--card))}
.pjdrop.on{border-color:var(--green-l);background:var(--green-bg)}
.pjdrop.busy{cursor:progress;border-style:solid;border-color:var(--pj)}
.pjdrop-lg{padding:1.6rem 1.1rem;gap:.3rem}
.pjdrop-btns{display:flex;gap:.5rem;justify-content:center;flex-wrap:wrap;margin-top:.75rem}
.pjdrop-t{font-size:var(--fs-2);font-weight:500;color:var(--text)}
.pjdrop-s{font-size:var(--fs-1);color:var(--muted)}
/* --- Filtres en puces ---------------------------------------------------
   Une puce par filtre, meme forme et meme hauteur pour toutes : la liste
   deroulante native fait le travail (elle s'ouvre en roue sur telephone,
   reste accessible au clavier), la puce ne fait que l'habiller. La puce
   allumee porte la couleur du compte, donc un filtre actif se voit sans lire.
   Plus de rangee qui defile horizontalement : ce qui sortait de l'ecran
   n'existait pas pour l'utilisateur. */
.filterbar{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin:.1rem 0 1.5rem;position:relative;z-index:40}
.fchip{position:relative;display:inline-flex;align-items:center;align-self:center;margin:0;gap:.45rem;min-width:0;
height:42px;padding:0 .85rem;border-radius:var(--r-1);background:var(--surface);
border:1px solid var(--border-l);color:var(--text-2);font-size:var(--fs-3);line-height:1;
cursor:pointer;-webkit-user-select:none;user-select:none;
transition:background .13s,border-color .13s,color .13s}
.fchip:hover{border-color:var(--border-l);color:var(--text)}
.fchip:focus-within{border-color:var(--blue-l);box-shadow:0 0 0 3px color-mix(in srgb,var(--blue-l) 15%,transparent)}
.fchip svg{width:15px;height:15px;flex:none;opacity:.85}
/* Liste deroulante maison. Le <select> natif ouvrait un menu peint par le
   navigateur — et sur telephone par le systeme : ni le theme de la page ni la
   couleur du compte ne l'atteignaient, d'ou un fond noir sur un compte en
   theme clair. Ici tout est du HTML ordinaire, donc tout suit les tokens. */
.fdrop{padding:0}
.fdrop.open{z-index:70}
.fdrop-b{display:flex;align-items:center;gap:.45rem;width:100%;height:100%;min-width:0;
padding:0 1.9rem 0 .85rem;background:none;border:0;color:inherit;font:inherit;
line-height:1;text-align:left;cursor:pointer}
.fdrop-b:focus{outline:none}
.fdrop-v{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fdrop::after{content:'';position:absolute;right:.8rem;top:50%;width:7px;height:7px;
border-right:1.8px solid currentColor;border-bottom:1.8px solid currentColor;
transform:translateY(-70%) rotate(45deg);opacity:.6;pointer-events:none;transition:transform .14s}
.fdrop.open::after{transform:translateY(-20%) rotate(225deg)}
.fdrop-m{position:absolute;top:calc(100% + 6px);left:0;z-index:60;display:none;
min-width:100%;width:max-content;max-width:min(320px,calc(100vw - 2.5rem));
max-height:min(58vh,340px);overflow-y:auto;margin:0;padding:.3rem;list-style:none;
background:var(--elev);border:1px solid var(--border-l);border-radius:var(--r-2);
box-shadow:0 18px 40px -18px rgba(0,0,0,.6)}
.fdrop.open .fdrop-m{display:block}
.fdrop.vers-gauche .fdrop-m{left:auto;right:0}
.fdrop-m li{padding:.55rem .7rem;border-radius:var(--r-1);font-size:var(--fs-2);
color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
.fdrop-m li:hover,.fdrop-m li:focus{outline:none;
background:color-mix(in srgb,var(--blue-l) 16%,var(--elev))}
.fdrop-m li.on{color:var(--blue-l);font-weight:600;
background:color-mix(in srgb,var(--blue-l) 13%,var(--elev))}
.fdrop-m li.on:hover,.fdrop-m li.on:focus{background:color-mix(in srgb,var(--blue-l) 22%,var(--elev))}
.fchip.on{color:var(--blue-l);border-color:color-mix(in srgb,var(--blue-l) 45%,var(--surface));
background:color-mix(in srgb,var(--blue-l) 14%,var(--surface))}
.fchip.on svg{opacity:1}
.fchip.on:hover{background:color-mix(in srgb,var(--blue-l) 20%,var(--surface))}
.fchip.on:hover{color:var(--blue-l)}
/* La bascule « Archives » : la case native reste la (formulaire, clavier,
   lecteur d'ecran), c'est la puce qui montre l'etat. */
.fchip-tgl{gap:.55rem;padding:0 .4rem}
.fchip-tgl,.fchip-tgl:hover,.fchip-tgl.on,.fchip-tgl.on:hover,.fchip-tgl:focus-within{
background:transparent;border-color:transparent;box-shadow:none}
.fchip-tgl input[type=checkbox]{position:absolute;opacity:0;width:100%;height:100%;
left:0;top:0;margin:0;padding:0;border:0;cursor:pointer}
.swmini{position:relative;flex:none;width:32px;height:18px;border-radius:var(--r-pill);
border:1px solid var(--border-l);background:var(--elev);
transition:background .16s,border-color .16s}
.swmini .swk{position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;
background:var(--text-2);transition:transform .16s,background .16s}
.fchip-tgl.on .swmini{background:var(--blue-l);border-color:var(--blue-l)}
.fchip-tgl.on .swmini .swk{transform:translateX(14px);background:var(--sur-accent,#fff)}
.fchip-tgl:focus-within .swmini{border-color:var(--blue-l)}
.fchip-t{line-height:1}
.tgl{position:relative;display:inline-flex;align-items:center;gap:.55rem;margin:0;
font-size:var(--fs-2);color:var(--text-2);line-height:1;cursor:pointer}
.tgl input[type=checkbox]{position:absolute;opacity:0;width:100%;height:100%;
left:0;top:0;margin:0;padding:0;border:0;cursor:pointer}
.tgl:hover{color:var(--text)}
.tgl:has(input:checked){color:var(--text)}
.tgl:has(input:checked) .swmini{background:var(--blue-l);border-color:var(--blue-l)}
.tgl:has(input:checked) .swmini .swk{transform:translateX(14px);background:var(--sur-accent,#fff)}
.tgl:focus-within .swmini{border-color:var(--blue-l)}
.fchip-tgl:has(input:checked) .swmini{background:var(--blue-l);border-color:var(--blue-l)}
.fchip-tgl:has(input:checked) .swmini .swk{transform:translateX(14px);background:var(--sur-accent,#fff)}
.fchk{display:inline-flex;align-items:center;gap:.35rem;font-size:var(--fs-2);color:var(--text-2);cursor:pointer}
.dangerbox{display:grid;grid-template-columns:auto 1fr;gap:.7rem;align-items:start;background:var(--elev);border:1px solid var(--border-l);border-radius:var(--r-2);padding:.8rem .9rem;margin:1rem 0 0;cursor:pointer;transition:border-color .12s,background .12s}
.dangerbox:hover{border-color:color-mix(in srgb,var(--red) 45%,transparent)}
.dangerbox:focus-within{border-color:color-mix(in srgb,var(--red) 55%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--red) 12%,transparent)}
.dangerbox input[type=checkbox]{width:17px;height:17px;margin:.1rem 0 0;accent-color:var(--red);cursor:pointer;flex:none}
.dangerbox span{font-size:var(--fs-3);line-height:1.45;color:var(--text);-webkit-user-select:none;user-select:none}
.dangerbox:has(input:checked){background:color-mix(in srgb,var(--red) 9%,transparent);border-color:color-mix(in srgb,var(--red) 50%,transparent)}
/* Onglets de la modale : meme segment a puces que la barre de menu, pour
   qu'un outil se choisisse comme un espace se choisit. */
.tabs{display:flex;gap:.15rem;flex:none;min-width:0;padding:3px;border-radius:var(--r-pill);
background:var(--surface);border:1px solid var(--border)}
.tab{display:inline-flex;align-items:center;gap:.4rem;height:30px;padding:0 .8rem;
background:transparent;border:0;border-radius:var(--r-pill);color:var(--text-2);
font-family:inherit;font-size:var(--fs-2);font-weight:500;line-height:1;cursor:pointer;
white-space:nowrap;transition:background .13s,color .13s}
.tab svg{width:15px;height:15px;flex:none;opacity:.9}
.tab:hover{color:var(--text);background:color-mix(in srgb,var(--blue-l) 14%,var(--surface))}
.tab.on{color:var(--text);background:var(--card);box-shadow:0 1px 2px rgba(0,0,0,.22)}
.tab.on svg{opacity:1;color:var(--blue-l)}
[data-theme=clair] .tab.on{box-shadow:0 1px 2px rgba(45,52,72,.10)}
.tabpane{padding:1.4rem 1.6rem}
.tabpane[hidden]{display:none}
/* --- contenu des outils --- */
.outils-aide{margin:0 0 1rem;font-size:var(--fs-2);color:var(--text-2);line-height:1.5}
.tabpane .sect{margin:1.4rem 0 .5rem}
.tabpane .sect:first-child{margin-top:0}
.list.liste-courte{max-height:230px;overflow-y:auto;overflow-x:hidden}
.liste-courte{scrollbar-width:thin;scrollbar-color:var(--border-l) transparent}
.liste-courte::-webkit-scrollbar{width:8px}
.liste-courte::-webkit-scrollbar-track{background:transparent}
.liste-courte::-webkit-scrollbar-thumb{background:var(--border-l);border-radius:var(--r-pill)}
.liste-courte::-webkit-scrollbar-thumb:hover{background:var(--muted)}
.impopt{display:flex;flex-wrap:wrap;align-items:center;gap:.7rem .9rem;margin:1rem 0 0;
padding:.7rem .8rem;border-radius:var(--r-2);background:var(--elev);border:1px solid var(--border)}
.impopt .btn{margin-left:auto;flex:none}
.impchamp{display:flex;align-items:center;gap:.55rem;margin:0;flex:1 1 210px;min-width:0;
font-size:var(--fs-2);color:var(--text-2)}
.impchamp span{flex:none}
.impchamp input{width:auto;min-width:0;flex:1}
.impopt .btn,.exprow .btn{display:inline-flex;align-items:center;gap:.45rem}
.impopt .btn svg,.exprow .btn svg{width:16px;height:16px;flex:none;fill:none;stroke:currentColor;stroke-width:1.9}
#imp-status:empty{display:none}
#imp-status{margin:.7rem 0 0}
.exprow{display:flex;flex-wrap:wrap;gap:.6rem}
/* Un carnet par ligne : le nom s'edite sur place, le compteur reste a droite. */
.cnrow{display:flex;align-items:center;gap:.6rem;margin:0 0 .5rem}
.cnrow input{flex:1;min-width:0;margin:0}
.cnnb{flex:none;min-width:28px;padding:.15rem .45rem;border-radius:var(--r-pill);
background:var(--elev);border:1px solid var(--border);color:var(--muted);
font-size:var(--fs-1);font-weight:600;text-align:center}
.cnrow-new{margin-top:1rem;padding-top:.95rem;border-top:1px solid var(--border)}
/* Partage d'un carnet : a qui il est ouvert, et a qui l'ouvrir. */
.cnpart{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem;margin:0 0 .9rem;padding-left:.15rem}
.cntag{display:inline-flex;align-items:center;gap:.25rem;padding:.16rem .3rem .16rem .55rem;
border-radius:var(--r-pill);background:color-mix(in srgb,var(--blue-l) 13%,var(--card));
border:1px solid color-mix(in srgb,var(--blue-l) 32%,var(--card));
color:var(--blue-l);font-size:var(--fs-1);font-weight:600}
.cnx{margin:0;display:inline-flex}
.cnx button{background:none;border:0;padding:0 .2rem;color:inherit;opacity:.6;
cursor:pointer;font-size:var(--fs-1);line-height:1}
.cnx button:hover{opacity:1}
.cnouvre{display:inline-flex;align-items:center;gap:.4rem;margin:0}
.cnouvre input{width:auto;flex:0 1 150px;min-width:0;margin:0;padding:.3rem .55rem;
font-size:var(--fs-1)}
.cnrecu{display:flex;align-items:center;gap:.6rem;padding:.5rem .15rem;
border-bottom:1px solid var(--border)}
.cnrecu:last-child{border-bottom:0}
.cnnom{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
font-size:var(--fs-2)}
.cnde{flex:none;padding:.1rem .5rem;border-radius:var(--r-pill);background:var(--elev);
border:1px solid var(--border);color:var(--muted);font-size:var(--fs-1)}
.pjdrop-lg>svg{width:26px;height:26px;fill:none;stroke:var(--blue-l);stroke-width:1.7;margin-bottom:.15rem}
[hidden]{display:none!important}
#outilsmodal .pjm-card{width:min(780px,96vw)}
#outilsmodal .pjm-head{padding:.8rem 1.15rem}
#outilsmodal .pjm-close{margin-left:auto}
#outilsmodal .pjm-body{min-height:0}
.pjgrid+.pjadd{border-top:1px solid var(--border);margin-top:.75rem;padding-top:.8rem}
.pjadd{margin:0}
.btn-blue-o{background:transparent;color:var(--blue-l);border:1px solid var(--blue)}
.btn-blue-o:hover{background:var(--blue);color:var(--sur-accent,#fff)}
[data-theme=clair] .btn-blue-o{color:var(--blue);border-color:var(--blue)}
.note .chev{color:var(--muted);opacity:0;transition:opacity .13s,transform .13s;flex:none}
.note:hover .chev{opacity:1;transform:translateX(3px)}
.note.done .t{color:var(--text-2);font-weight:400}
.note.cancelled{opacity:.5}.note.cancelled .t{text-decoration:line-through}
.dot-creer{background:var(--green-l)}.dot-mettre_a_jour{background:var(--blue-l)}
.dot-supprimer{background:var(--red-l)}.dot-greffer_source{background:var(--orange)}
.tag{color:var(--text-2)}.tagred{color:var(--red-l)}
.back{display:inline-block;color:var(--text-2);font-size:var(--fs-2);margin:.1rem 0 1.2rem}
.back:hover{color:var(--text)}
.itembar{display:flex;align-items:center;justify-content:space-between;gap:.7rem;margin:.1rem 0 1.2rem}
.itembar .back{margin:0}
/* Formulaires alignes sur les Notes (13/09/2026) : sans bouton d'action (« Partager »,
   « Outils »), la barre de retour et l'en-tete de liste gardent la hauteur de ce bouton,
   pour que titre, recherche et lignes tombent au meme endroit (mesure au banc Chromium). */
.itembar{min-height:34px}
/* Saisies gardees sur l'appareil, hors ligne (13/09/2026) : badge flottant et detail. */
/* Centre par marges et non par transform : l'animation d'apparition d'Ancrag (fadeUp)
   ecrase transform — le badge partait a droite sur telephone (banc, 13/09). */
.attente-badge{position:fixed;left:0;right:0;margin:0 auto;width:max-content;animation:none;
bottom:calc(16px + env(safe-area-inset-bottom));z-index:70;max-width:calc(100vw - 32px);padding:.5rem 1rem;border-radius:999px;border:1px solid var(--orange);
background:var(--orange-bg);color:var(--orange);font-family:inherit;font-size:var(--fs-2);cursor:pointer;
box-shadow:0 4px 18px rgba(0,0,0,.35)}
.attente-badge.attente-refus{border-color:var(--red);background:var(--red-bg);color:var(--red-l)}
.attente-detail{position:fixed;left:0;right:0;margin:0 auto;animation:none;bottom:calc(64px + env(safe-area-inset-bottom));
z-index:70;width:min(560px,calc(100vw - 32px));max-height:50vh;overflow:auto}
.attente-panel{border-color:var(--orange)}
.attente-ligne{display:flex;gap:.6rem;align-items:center;justify-content:space-between;padding:.45rem 0;
border-top:1px solid var(--border);font-size:var(--fs-2);color:var(--text-2);overflow-wrap:anywhere}
.attente-ligne-refus{color:var(--red-l)}
.sect-liste{min-height:39.5px}
@media(max-width:480px){.sect-liste{min-height:38px}}
.nh{display:flex;align-items:center;gap:.7rem;margin-bottom:.55rem}
.nh h1{margin:0;font-size:var(--fs-5);min-width:0;overflow-wrap:anywhere}
.btn-partage{flex:none;display:inline-flex;align-items:center;justify-content:center;
width:34px;height:34px;padding:0;border-radius:var(--r-1);cursor:pointer;font-family:inherit;
color:var(--pc,var(--blue-l));border:1px solid var(--border-l);background:var(--elev);
transition:border-color .13s,background .13s,transform .13s}
.btn-partage{border-color:color-mix(in srgb,var(--pc,var(--blue-l)) 45%,transparent);
background:color-mix(in srgb,var(--pc,var(--blue-l)) 16%,var(--bg))}
.btn-partage svg{width:17px;height:17px}
.btn-partage:hover{border-color:var(--pc,var(--blue-l));transform:translateY(-1px);
background:color-mix(in srgb,var(--pc,var(--blue-l)) 28%,var(--bg))}
.btn-partage:focus-visible{outline:2px solid var(--pc,var(--blue-l));outline-offset:2px}
.nh .dot{width:10px;height:10px;border-radius:50%;flex:none}
.submeta{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;font-size:var(--fs-1);
color:var(--muted);margin-bottom:1.3rem}
.panel{background:var(--card);border:1px solid var(--border);border-radius:var(--r-3);
padding:1.35rem 1.55rem;margin-bottom:1.2rem}
#partagemodal .pjm-card{width:min(470px,94vw);overflow:visible}
#partagemodal .pjm-head{padding:.8rem 1.15rem}
#partagemodal .pjm-body{min-height:0;padding:1.15rem 1.25rem;overflow:visible}
.partage{display:flex;gap:.7rem;align-items:flex-end;flex-wrap:wrap;margin:0}
.destfield{position:relative;flex:1;min-width:230px}
.destlab{display:block;margin-bottom:.3rem;font-size:var(--fs-1);font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--text-2)}
.destfield input{margin:0}
.ac-user{display:flex;align-items:center;gap:.6rem}
.ac-av{width:26px;height:26px;border-radius:50%;flex:none;display:inline-flex;align-items:center;justify-content:center;background:var(--elev);border:1px solid var(--border-l)}
.ac-av svg{width:15px;height:15px}
.ac-vide{padding:.6rem .85rem;font-size:var(--fs-2);color:var(--muted)}
/* Etats. Un seul jeu, pris dans la palette : les bandeaux d'import avaient
   le leur, en dur, qui ne basculait pas en theme clair. */
.flash{margin:.75rem 0 0;padding:.5rem .8rem;border-radius:var(--r-1);font-size:var(--fs-2)}
.avis{display:flex;align-items:flex-start;gap:.6rem;margin:.4rem 0 0;padding:.7rem .9rem;
border-radius:var(--r-2);border:1px solid;font-size:var(--fs-3);line-height:1.5}
.avis::before{content:"";flex:none;width:8px;height:8px;border-radius:50%;
margin-top:.42rem;background:currentColor}
.avis p{margin:0}
.avis+.avis{margin-top:.35rem}
.flash-ok,.avis-ok{background:var(--green-bg);border-color:var(--green);color:var(--green-l)}
.flash-nok,.avis-err{background:var(--red-bg);border-color:var(--red);color:var(--red-l)}
.avis-warn{background:var(--orange-bg);border-color:var(--orange);color:var(--orange)}
.avis-info{background:var(--blue-bg);border-color:var(--blue);color:var(--blue-l)}
.avis b,.flash b{color:inherit}
.avis-txt{color:var(--text)}
.flash-ok,.flash-nok{border-width:1px;border-style:solid}
.stat,.list,.panel,.pjbox{box-shadow:0 1px 2px rgba(0,0,0,.28)}
a.stat{transition:border-color .14s,transform .14s,box-shadow .14s}
a.stat:hover{border-color:color-mix(in srgb,var(--blue-l) 45%,transparent);transform:translateY(-1px);background:color-mix(in srgb,var(--blue-l) 12%,var(--card));
box-shadow:0 12px 26px -18px rgba(0,0,0,.9),0 1px 2px rgba(0,0,0,.3)}
[data-theme=clair] .stat,[data-theme=clair] .list{box-shadow:0 1px 2px rgba(45,52,72,.06),0 6px 18px -12px rgba(45,52,72,.14)}
.list .note{transition:background .12s}
/* Regles structurelles qui remplacent des styles ecrits dans les gabarits :
   un paragraphe seul dans un panneau n'a pas besoin de margin:0 en ligne. */
.panel>p:first-child,.avis>p:first-child{margin-top:0}
.panel>p:last-child,.avis>p:last-child{margin-bottom:0}
.panel>form{margin-bottom:0}
.champ-cache{position:absolute;left:-9999px;width:1px;height:1px}
#confirmmodal .pjm-card{width:min(520px,94vw)}
#confirmmodal .pjm-head{padding:.8rem 1.15rem}
#confirmmodal .pjm-body{min-height:0;padding:1.05rem 1.25rem}
.sect-espace{margin-top:var(--sp-5)}
/* Rien ne doit pousser la page de cote : ce qui est large scrolle chez lui. */
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:.8rem 0;
border:1px solid var(--border);border-radius:var(--r-2)}
.tablewrap>table{margin:0;border:0}
.md table{display:block;width:max-content;max-width:100%;overflow-x:auto}
.md pre,.kv{max-width:100%}
img,svg,video{max-width:100%}
.submeta{flex-wrap:wrap}
.metas{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:1.3rem}
.actions{display:flex;gap:.6rem}


/* ---- page securite ---- */
.dot{width:8px;height:8px;border-radius:50%;flex:none;display:inline-block}
.statusline{display:flex;align-items:center;gap:.5rem;font-size:var(--fs-3);flex-wrap:wrap}
/* En-tete de panneau : pastille d'etat, titre, puis la phrase en dessous.
   Avant, la phrase suivait le titre sur la meme ligne, precedee d'un « · »
   qui se collait au texte des que la place manquait. */
/* Badge d'etat : le point seul obligeait a connaitre le code couleur.
   Le mot est dans la pastille, le point n'est plus qu'un rappel. */
.etat{display:inline-flex;align-items:center;padding:.22rem .66rem;
border-radius:var(--r-pill);border:1px solid;font-size:var(--fs-1);font-weight:600;
letter-spacing:.05em;text-transform:uppercase;line-height:1.5;white-space:nowrap}
.etat-on{color:var(--green-l);background:var(--green-bg);
border-color:color-mix(in srgb,var(--green) 45%,transparent)}
.etat-off{color:var(--muted);background:var(--elev);border-color:var(--border-l)}
.etat-warn{color:var(--orange);background:var(--orange-bg);
border-color:color-mix(in srgb,var(--orange) 45%,transparent)}
.etat-info{color:var(--blue-l);background:var(--blue-bg);
border-color:color-mix(in srgb,var(--blue) 45%,transparent)}
.pinfo>.etat{margin-bottom:.35rem}
.pstate{display:flex;gap:.75rem;align-items:flex-start}
.pstate .dot{margin-top:.5rem}
.pinfo{min-width:0}
.pinfo strong{display:block;font-size:var(--fs-4);font-weight:600;color:var(--text);line-height:1.35}
.pdesc{display:block;margin-top:.2rem;font-size:var(--fs-3);color:var(--text-2);line-height:1.5}
.panel>.pstate+*{margin-top:1.05rem}
.panel>.pstate:only-child{margin:0}
.panel>form.inline-form{margin-bottom:0}
.panel>.tiny:last-child{margin-bottom:0}
.copiable{position:relative;user-select:all;word-break:break-all;margin:.5rem 0 0;
cursor:pointer;transition:border-color .13s,background .13s}
.kv.copiable,.copiable{padding-right:5.2rem}
.copiable:hover{border-color:color-mix(in srgb,var(--blue-l) 45%,var(--border-l));
background:color-mix(in srgb,var(--blue-l) 7%,var(--surface))}
.copiable::after{content:'Copier';position:absolute;top:.42rem;right:.65rem;
font-family:'Inter',system-ui,sans-serif;font-size:var(--fs-1);font-weight:600;
letter-spacing:.02em;color:var(--text-2);opacity:.55;transition:opacity .13s,color .13s;
pointer-events:none;-webkit-user-select:none;user-select:none}
.copiable:hover::after{opacity:1;color:var(--blue-l)}
.copiable.copie{border-color:color-mix(in srgb,var(--green-l) 55%,var(--border-l));
background:color-mix(in srgb,var(--green-l) 9%,var(--surface))}
.copiable.copie::after{content:'✓ Copié';opacity:1;color:var(--green-l)}
@media(hover:none){.copiable::after{opacity:.75}}
.pintro{margin:0 0 1rem}
.pactions{margin-top:1.15rem;gap:.6rem}
/* dans un panneau, tout ce qui suit garde le meme intervalle */
.panel>*+*{margin-top:.9rem}
.panel>*+.sect,.panel>.pstate+.pstate{margin-top:1.2rem}
.panel>p:first-child,.panel>div:first-child,.panel>form:first-child{margin-top:0}
.statusline strong{color:var(--strong);font-weight:600;text-transform:capitalize}
.statusline .muted{font-size:var(--fs-2)}
.inline-form{display:flex;gap:.6rem;align-items:center;flex-wrap:wrap;margin:.95rem 0 .35rem}
.inline-form .totp{max-width:170px;margin:0}
input[type=file]{font-size:var(--fs-2);color:var(--text-2);max-width:100%}
input[type=checkbox],input[type=radio]{width:auto;height:auto;padding:0;background:none;border:0;accent-color:var(--blue)}
input[type=file]::file-selector-button{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;padding:.625rem 1.25rem;border-radius:var(--r-1);border:0;font-size:var(--fs-3);font-weight:500;cursor:pointer;font-family:inherit;line-height:1.25;transition:background .12s,border-color .12s,color .12s,opacity .12s;background:transparent;color:var(--text-2);border:1px solid rgba(255,255,255,.10);margin-right:.7rem}
input[type=file]::file-selector-button:hover{filter:none;background:color-mix(in srgb,var(--blue-l) 22%,var(--elev));border-color:color-mix(in srgb,var(--blue-l) 30%,transparent);color:var(--blue-l)}
[data-theme=clair] input[type=file]::file-selector-button{border-color:var(--border-l);color:var(--text-2)}
[data-theme=clair] input[type=file]::file-selector-button:hover{background:color-mix(in srgb,var(--blue-l) 22%,var(--elev));border-color:color-mix(in srgb,var(--blue-l) 55%,transparent);color:var(--blue-l)}
.step{display:flex;gap:.8rem;margin:1.25rem 0}
.step:last-child{margin-bottom:0}
.steptxt{font-size:var(--fs-3);color:var(--text-2);margin:.15rem 0 .55rem}


/* ---- notes regroupees en panneau-liste (delimitation sobre) ---- */
.list{background:var(--card);border:1px solid var(--border);border-radius:var(--r-2);
overflow:hidden;margin:.15rem 0 .3rem}
.list .note{border-radius:0;border:0;border-bottom:1px solid var(--border);padding:.82rem .95rem}
.list .note:last-child{border-bottom:0}
.list .note:hover{background:color-mix(in srgb,var(--blue-l) 14%,var(--card))}


/* ---- browse ---- */
.searchbar{display:flex;gap:.5rem;margin:.1rem 0 2.3rem;position:relative;z-index:30}
.searchbar input{flex:1;margin:0}
.qwrap{position:relative;flex:1;display:flex}
.qwrap::before{content:'';position:absolute;left:.72rem;top:50%;transform:translateY(-50%);width:16px;height:16px;opacity:.8;pointer-events:none;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238a8d98' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M20 20l-3.6-3.6'/%3E%3C/svg%3E") center/contain no-repeat}
.qwrap input{padding-left:2.25rem}
.qwrap:focus-within::before{opacity:1}
.qclear{position:absolute;right:.45rem;top:50%;transform:translateY(-50%);width:22px;height:22px;display:flex;align-items:center;justify-content:center;border-radius:50%;color:var(--muted);font-size:var(--fs-2);line-height:1;text-decoration:none;transition:color .12s,background .12s}
.qclear:hover{color:var(--blue-l);background:color-mix(in srgb,var(--blue-l) 22%,var(--surface))}
.qwrap:has(.qclear) input,.qwrap:has(.qclear) #qghost{padding-right:2.1rem}
.qwrap #qghost{padding-left:2.25rem}
.qwrap>input{width:100%}
#qghost{position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;padding:.66rem .85rem;border:1px solid transparent;font-size:var(--fs-3);font-family:inherit;white-space:pre;overflow:hidden;display:flex;align-items:center}
#qghost .gt{visibility:hidden}
#qghost .gg{color:var(--muted)}
.filters{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:.85rem}
.chip{max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
a.chip{cursor:pointer;text-decoration:none;transition:border-color .12s,color .12s,background .12s}
a.chip:hover{border-color:color-mix(in srgb,var(--blue-l) 38%,transparent);color:var(--blue-l)}
a.chip.on{background:var(--blue-bg);border-color:var(--blue);color:var(--blue-l)}


/* ---- stats cliquables + badge nav ---- */
a.stat{text-decoration:none;color:inherit;cursor:pointer;
transition:border-color .13s,transform .13s,background .13s}
a.stat:hover{border-color:color-mix(in srgb,var(--blue-l) 45%,transparent);transform:translateY(-1px);background:color-mix(in srgb,var(--blue-l) 12%,var(--card))}
a.stat.on{border-color:var(--blue);background:var(--blue-bg)}
.navbadge{display:inline-block;background:var(--red);color:#fff;border-radius:var(--r-pill);
padding:.02rem .42rem;font-size:var(--fs-1);font-weight:700;vertical-align:middle;margin-left:.2rem}
.sect{scroll-margin-top:4.8rem}

.ac-list{position:absolute;top:100%;left:0;right:0;z-index:50;margin-top:.35rem;
background:rgba(23,26,33,.94);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(14px);
border:1px solid var(--border-l);border-radius:var(--r-2);overflow:hidden auto;max-height:280px;
box-shadow:0 14px 34px -10px rgba(0,0,0,.75)}
.ac-item{padding:.55rem .85rem;font-size:var(--fs-2);color:var(--text);cursor:pointer;
white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ac-item:hover,.ac-item.on{background:var(--blue-bg);color:var(--blue-l)}


/* ---- variante claire (data-theme=clair, posé par le middleware) ---- */
[data-theme=clair]{--bg:#e9ebf1;--surface:#eef0f5;--card:#ffffff;--elev:#e2e6ee;
--border:#dde1ea;--border-l:#c6ccd9;--text:#1f232c;--text-2:#4e5462;--muted:#5d6470;
--blue:#1f54e8;--blue-l:#123fc4;--blue-bg:color-mix(in srgb,var(--blue) 13%,var(--card));--green:#0a7d68;--green-l:#0a7360;--green-bg:color-mix(in srgb,var(--green) 13%,var(--card));
--red:#d92637;--red-l:#c31f30;--red-bg:color-mix(in srgb,var(--red) 13%,var(--card));--orange:#a15400;--orange-bg:color-mix(in srgb,var(--orange) 13%,var(--card));--code:#6d28d9;--glow:color-mix(in srgb,var(--blue) 20%,transparent);--strong:#0e1220;--logo-s1:color-mix(in srgb,var(--blue) 55%,transparent);--logo-s2:color-mix(in srgb,var(--blue) 85%,transparent);--logo-a:#1c46d6;--logo-b:#0b6a86;--logo-glow:color-mix(in srgb,var(--blue) 24%,transparent)}
html[data-theme=clair]{background:#e9ebf1;color-scheme:light}
[data-theme=clair] body{background:radial-gradient(900px 420px at 50% -12%,rgba(31,84,232,.05),transparent 62%) var(--bg)}
[data-theme=clair] a:hover{color:#0d33a8}

[data-theme=clair] .btn-green{color:#fff}[data-theme=clair] .btn-blue{color:var(--sur-accent,#fff)}
[data-theme=clair] .btn-danger{color:#fff}
[data-theme=clair] .card:hover{border-color:color-mix(in srgb,var(--blue-l) 38%,transparent);box-shadow:0 6px 20px rgba(50,56,76,.13)}
[data-theme=clair] .topbar{background:#eef0f5;box-shadow:0 1px 0 var(--border),0 8px 22px -16px rgba(50,56,76,.28)}
[data-theme=clair] .note:hover{background:color-mix(in srgb,var(--blue-l) 13%,var(--card))}
[data-theme=clair] .ac-list{background:rgba(255,255,255,.96);box-shadow:0 14px 32px -12px rgba(50,56,76,.28)}
/* peaufinage clair : élévation douce, bordures visibles, ombres tamisées */
[data-theme=clair] body{background:radial-gradient(880px 400px at 50% -14%,rgba(31,84,232,.035),transparent 60%) var(--bg)}
[data-theme=clair] .card,[data-theme=clair] .stat,[data-theme=clair] .panel,[data-theme=clair] .pjbox{box-shadow:0 1px 2px rgba(45,52,72,.05),0 4px 14px -6px rgba(45,52,72,.10)}
[data-theme=clair] .btn-ghost{border-color:var(--border-l);color:var(--text-2)}
[data-theme=clair] .btn-ghost:hover{background:color-mix(in srgb,var(--blue-l) 22%,var(--elev));border-color:color-mix(in srgb,var(--blue-l) 55%,transparent);color:var(--blue-l)}
.btn-ghost.btn-sup:hover{background:color-mix(in srgb,var(--red) 22%,var(--elev));border-color:var(--red);color:var(--red-l)}
.btn-ghost.btn-sup:focus-visible{border-color:var(--red);color:var(--red-l);outline-color:var(--red)}
.btn-ghost.btn-mod:hover{background:color-mix(in srgb,var(--orange) 22%,var(--elev));border-color:var(--orange);color:var(--orange)}
.btn-ghost.btn-mod:focus-visible{border-color:var(--orange);color:var(--orange);outline-color:var(--orange)}
[data-theme=clair] input{border-color:var(--border-l);background:#fff}
[data-theme=clair] input:autofill{box-shadow:0 0 0 1000px #fff inset}
[data-theme=clair] .auth-card{background:linear-gradient(180deg,#fff,var(--surface));box-shadow:0 16px 44px -18px rgba(45,52,72,.32),0 2px 6px -3px rgba(45,52,72,.12)}
[data-theme=clair] .kv{background:var(--surface)}
[data-theme=clair] .md pre{background:var(--surface)}
[data-theme=clair] .qr{box-shadow:0 6px 20px rgba(45,52,72,.16)}
[data-theme=clair] .tagred{background:var(--red-bg);color:var(--red-l)}
.flabel{font-size:var(--fs-1);color:var(--muted);text-transform:uppercase;letter-spacing:.09em;
align-self:center;margin-right:.25rem;flex:none;min-width:72px}
details.tool{background:var(--card);border:1px solid var(--border);border-radius:var(--r-2);margin:.55rem 0}
details.tool summary{cursor:pointer;padding:.7rem 1rem;font-size:var(--fs-2);font-weight:600;
color:var(--text-2);list-style:none;display:flex;align-items:center;gap:.55rem;user-select:none}
details.tool summary::-webkit-details-marker{display:none}
details.tool summary::before{content:"▸";color:var(--muted);transition:transform .15s}
details.tool[open] summary::before{transform:rotate(90deg)}
details.tool summary:hover{color:var(--text)}
details.tool .inner{padding:.1rem 1rem 1rem}
/* En-tete du compte : le depliant prend la largeur, la deconnexion se
   tient en haut a droite — elle etait en bas de page, apres tous les reglages. */
.ptete{position:relative;margin:0 0 1.6rem}
.ptete .avpick{margin:0}
.ptete summary.phead{padding-right:190px}
.ptete-act{position:absolute;top:0;right:0;display:flex;align-items:center;gap:1.15rem}
.pdeco-in{margin:0}
.btn-parrain{display:inline-flex;align-items:center;gap:.45rem;height:34px;
padding:0 .85rem;font-size:var(--fs-2)}
.btn-parrain svg{width:16px;height:16px;flex:none}
/* Appel a l'action : trois effets qui se repondent — un halo qui s'ouvre, un
   leger gonflement, et un reflet qui traverse le bouton. Pas de clignotement :
   l'oeil est attire sans etre agresse, et le texte reste lisible (le reflet
   est bref et n'atteint pas 35 % d'opacite). */
/* Appel a l'action. Le fond garde la couleur du compte : c'est lui qui porte
   le texte, et `--sur-accent` y garantit le contraste. C'est l'ANNEAU qui
   change de teinte en s'ouvrant — couleur du compte, puis rose vif — la ou
   aucun texte ne se lit. S'y ajoutent un gonflement et un reflet qui traverse.
   Pas de clignotement : voyant sans agresser. */
/* Appel a l'action : le bouton traverse les NEUF couleurs du module Apparence
   en fondu continu — 27 s pour le tour, 3 s par couleur — l'anneau battant
   dans la teinte du moment.
   Fond et anneau vivent dans UNE SEULE animation : une propriete personnalisee
   animee par une animation n'est pas lisible par une seconde dans le meme
   cycle de style — le navigateur y retombe sur `initial-value`, et l'anneau
   restait bleu quelle que soit la couleur du fond.
   Le fond prend une version assombrie de la teinte, juste ce qu'il faut pour
   que le texte blanc garde 4,5:1 sur les neuf ; l'anneau garde la teinte vive,
   rien ne s'y lisant. Images-cles generees depuis la palette. */
@keyframes appel{0.00%{background-color:#486fdb;transform:scale(1.05);box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 7px 20px -7px #5481ff8c,0 0 0 0 #5481ffe0}6.89%{transform:scale(1);box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 5px 14px -8px #5481ff59,0 0 0 15px #5481ff00}10.33%{box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 5px 14px -8px #5481ff59,0 0 0 0 #5481ff00}11.11%{background-color:#2962ff;transform:scale(1.05);box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 7px 20px -7px #2962ff8c,0 0 0 0 #2962ffe0}18.00%{transform:scale(1);box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 5px 14px -8px #2962ff59,0 0 0 15px #2962ff00}21.44%{box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 5px 14px -8px #2962ff59,0 0 0 0 #2962ff00}22.22%{background-color:#147f8f;transform:scale(1.05);box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 7px 20px -7px #22d3ee8c,0 0 0 0 #22d3eee0}29.11%{transform:scale(1);box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 5px 14px -8px #22d3ee59,0 0 0 15px #22d3ee00}32.56%{box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 5px 14px -8px #22d3ee59,0 0 0 0 #22d3ee00}33.33%{background-color:#1e8178;transform:scale(1.05);box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 7px 20px -7px #26a69a8c,0 0 0 0 #26a69ae0}40.22%{transform:scale(1);box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 5px 14px -8px #26a69a59,0 0 0 15px #26a69a00}43.67%{box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 5px 14px -8px #26a69a59,0 0 0 0 #26a69a00}44.44%{background-color:#a86400;transform:scale(1.05);box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 7px 20px -7px #ff98008c,0 0 0 0 #ff9800e0}51.33%{transform:scale(1);box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 5px 14px -8px #ff980059,0 0 0 15px #ff980000}54.78%{box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 5px 14px -8px #ff980059,0 0 0 0 #ff980000}55.56%{background-color:#c44b55;transform:scale(1.05);box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 7px 20px -7px #f55e6a8c,0 0 0 0 #f55e6ae0}62.44%{transform:scale(1);box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 5px 14px -8px #f55e6a59,0 0 0 15px #f55e6a00}65.89%{box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 5px 14px -8px #f55e6a59,0 0 0 0 #f55e6a00}66.67%{background-color:#8762cc;transform:scale(1.05);box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 7px 20px -7px #a97bff8c,0 0 0 0 #a97bffe0}73.56%{transform:scale(1);box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 5px 14px -8px #a97bff59,0 0 0 15px #a97bff00}77.00%{box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 5px 14px -8px #a97bff59,0 0 0 0 #a97bff00}77.78%{background-color:#b55487;transform:scale(1.05);box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 7px 20px -7px #f472b68c,0 0 0 0 #f472b6e0}84.67%{transform:scale(1);box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 5px 14px -8px #f472b659,0 0 0 15px #f472b600}88.11%{box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 5px 14px -8px #f472b659,0 0 0 0 #f472b600}88.89%{background-color:#926f15;transform:scale(1.05);box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 7px 20px -7px #fbbf248c,0 0 0 0 #fbbf24e0}95.78%{transform:scale(1);box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 5px 14px -8px #fbbf2459,0 0 0 15px #fbbf2400}99.22%{box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 5px 14px -8px #fbbf2459,0 0 0 0 #fbbf2400}100%{background-color:#486fdb;transform:scale(1.05);box-shadow:0 1px 2px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.16),0 7px 20px -7px #5481ff8c,0 0 0 0 #5481ffe0}}
@keyframes reflet{
0%,55%{transform:translateX(-130%) skewX(-18deg)}
88%,100%{transform:translateX(130%) skewX(-18deg)}}
.btn-appel{position:relative;overflow:hidden;animation:appel 27s linear infinite}
.btn-appel::after{content:'';position:absolute;top:0;bottom:0;left:0;width:60%;
background:linear-gradient(90deg,transparent,rgba(255,255,255,.40),transparent);
pointer-events:none;animation:reflet 3s ease-in-out infinite}
.btn-appel>*{position:relative;z-index:1}
.btn-appel:hover,.btn-appel:focus-visible{animation-play-state:paused;
filter:brightness(1.1) saturate(1.12)}
.btn-appel{transition:filter .18s ease}
.btn-appel:hover::after,.btn-appel:focus-visible::after{animation:none;opacity:0}
@media(prefers-reduced-motion:reduce){.btn-appel,.btn-appel::after{animation:none}}
#parrainmodal .pjm-card{width:min(540px,96vw)}
#parrainmodal .pjm-head{padding:.8rem 1.15rem}
#parrainmodal .pjm-body{min-height:0;padding:1.25rem 1.35rem}
.parrainrow{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center;margin:1rem 0 0}
.parrainrow input{flex:1 1 200px;min-width:0;margin:0}
.parrainrow .btn{flex:none}
.lienbox{margin:.2rem 0 .8rem;padding:.7rem .8rem;border-radius:var(--r-1);
background:var(--elev);border:1px solid var(--border);color:var(--text);
font-family:'JetBrains Mono',monospace;font-size:var(--fs-1);line-height:1.5;
word-break:break-all;-webkit-user-select:all;user-select:all}
.parrainacts{display:flex;gap:.6rem}
.btn-icone{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;
padding:0;border-radius:var(--r-1);cursor:pointer;font-family:inherit;color:var(--text-2);
border:1px solid var(--border-l);background:var(--elev);
transition:color .13s,border-color .13s,background .13s}
.btn-icone svg{width:17px;height:17px}
.btn-icone:hover{color:var(--blue-l);border-color:color-mix(in srgb,var(--blue-l) 55%,transparent);
background:color-mix(in srgb,var(--blue-l) 22%,var(--elev))}
.btn-icone:focus-visible{outline:2px solid var(--blue-l);outline-offset:2px}
/* Seule exception a la regle « tout le survol prend la couleur du compte » :
   la deconnexion reste rouge, au repos comme au survol. C'est une sortie. */
.btn-deco{color:var(--red-l);border-color:color-mix(in srgb,var(--red) 45%,transparent);
background:color-mix(in srgb,var(--red) 12%,var(--elev))}
.btn-deco:hover{color:var(--red-l);border-color:var(--red);
background:color-mix(in srgb,var(--red) 26%,var(--elev))}
.btn-deco:focus-visible{outline-color:var(--red)}
summary.phead{display:flex;align-items:center;gap:.95rem;margin:0;cursor:pointer;list-style:none}
summary.phead::-webkit-details-marker{display:none}
summary.phead::marker{content:""}
/* la fleche dit que le bloc s'ouvre, et pivote quand il est ouvert */
summary.phead::after{content:'';width:8px;height:8px;margin-left:.15rem;flex:none;
border-right:2px solid var(--text-2);border-bottom:2px solid var(--text-2);
transform:rotate(45deg) translate(-2px,-2px);transition:transform .18s}
.avpick[open] summary.phead::after{transform:rotate(225deg) translate(-2px,-2px)}
summary.phead:hover .avbig,.avpick[open] .avbig{border-color:var(--pc,var(--blue-l));
background:color-mix(in srgb,var(--pc,var(--blue-l)) 26%,var(--card))}
.avpick .sect{margin-top:1.4rem}
.avpick .appmod{margin-bottom:.2rem}
/* Apparence : l'apercu a gauche, les reglages a droite ; une colonne sur
   telephone. Le module remplace un depliant qui cachait ces reglages. */
.appmod{display:grid;grid-template-columns:auto 1fr;gap:1.6rem;align-items:start}
.appvu{display:flex;flex-direction:column;align-items:center;gap:.55rem;text-align:center;max-width:9.5rem}
.appvu .tiny{line-height:1.4}
.appreg{min-width:0}
.appreg .avlabel{margin-top:1.35rem}
.appreg>.avlabel:first-child{margin-top:0}
/* Interrupteur : la piste prend la couleur du compte quand c'est actif.
   Remplace les boutons « Mode manuel » et « Désactiver le greffon… », qui
   disaient l'action a faire mais pas l'etat courant. */
/* Une ligne de reglage = ce que ca fait a gauche, l'interrupteur a droite.
   Avant, l'etat etait annonce trois fois : pastille, titre, libelle. */
.swrow{display:flex;align-items:flex-start;gap:.75rem;margin:0}
.swrow .dot{margin-top:.5rem}
.swinfo{display:flex;flex-direction:column;align-items:flex-start;gap:.45rem;min-width:0;flex:1;margin-right:.5rem}
.swinfo strong{font-size:var(--fs-4);font-weight:600;color:var(--text);line-height:1.35}
.swrow .sw{flex:none;align-self:center}
.sw{position:relative;flex:none;width:44px;height:25px;padding:0;border-radius:var(--r-pill);
border:1px solid var(--border-l);background:var(--elev);cursor:pointer;
transition:background .16s,border-color .16s}
.sw:hover{border-color:color-mix(in srgb,var(--blue-l) 55%,transparent)}
.sw:focus-visible{outline:2px solid var(--blue-l);outline-offset:2px}
.swk{position:absolute;top:2px;left:2px;width:19px;height:19px;border-radius:50%;
background:var(--text-2);transition:transform .16s,background .16s}
.sw.on{background:var(--blue);border-color:var(--blue)}
.sw.on .swk{transform:translateX(19px);background:var(--sur-accent,#fff)}
.swlab{font-size:var(--fs-3);color:var(--text)}
.segchoix{display:inline-flex;gap:.15rem;padding:3px;border-radius:var(--r-pill);
background:var(--surface);border:1px solid var(--border)}
.segchoix form{display:contents}
.segopt{padding:.34rem .95rem;border:0;border-radius:var(--r-pill);background:transparent;
color:var(--text-2);font-family:inherit;font-size:var(--fs-2);font-weight:500;cursor:pointer;
transition:color .12s,background .12s}
.segopt:hover{color:var(--text);background:color-mix(in srgb,var(--blue-l) 18%,var(--surface))}
.segopt.on{color:var(--text);background:var(--card);
box-shadow:0 1px 2px rgba(0,0,0,.35),inset 0 0 0 1px var(--border-l)}
[data-theme=clair] .segopt.on{box-shadow:0 1px 3px rgba(45,52,72,.16),inset 0 0 0 1px var(--border-l)}
@media(max-width:640px){.appmod{grid-template-columns:1fr;gap:1.15rem}
.appvu{flex-direction:row;text-align:left;max-width:none;align-items:center}}
.avpick{margin-bottom:1.5rem}
.avpick[open] .pmeta{display:flex;flex-direction:column;gap:.12rem}
.avbig{width:56px;height:56px;border-radius:50%;
background:color-mix(in srgb,var(--pc,var(--blue-l)) 16%,var(--card));
border:1px solid color-mix(in srgb,var(--pc,var(--blue-l)) 38%,transparent);
display:flex;align-items:center;justify-content:center;font-size:var(--fs-7);font-weight:700;
color:var(--pc,var(--blue-l));line-height:1;flex:none;transition:border-color .15s,box-shadow .15s,background .15s}
.appvu .avbig{box-shadow:0 0 0 3px color-mix(in srgb,var(--pc,var(--blue-l)) 22%,transparent)}
.avlabel{font-size:var(--fs-1);font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--text-2);margin:0 0 .6rem}
.avgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(46px,1fr));gap:.5rem;justify-items:center;margin:0 0 1.3rem}
.avgrid:last-child{margin-bottom:0}
.avgrid-col{grid-template-columns:repeat(auto-fill,minmax(36px,1fr))}
.avgrid form{display:contents}
.avopt{width:44px;height:44px;border-radius:50%;
background:color-mix(in srgb,var(--pc,var(--blue-l)) 14%,var(--card));
border:1px solid color-mix(in srgb,var(--pc,var(--blue-l)) 30%,transparent);
font-size:var(--fs-6);font-weight:700;color:var(--pc,var(--blue-l));cursor:pointer;display:flex;
align-items:center;justify-content:center;transition:border-color .12s,background .12s,transform .12s}
.avopt:hover{border-color:color-mix(in srgb,var(--pc,var(--blue-l)) 55%,transparent);background:color-mix(in srgb,var(--pc,var(--blue-l)) 26%,var(--card))}
.avopt svg{width:24px;height:24px}
.avopt.on{border-color:var(--pc,var(--blue-l));
background:color-mix(in srgb,var(--pc,var(--blue-l)) 34%,var(--card));
box-shadow:0 0 0 3px color-mix(in srgb,var(--pc,var(--blue-l)) 20%,transparent)}
.avcol{width:32px;height:32px;border-radius:50%;border:2px solid var(--border);cursor:pointer;padding:0;transition:transform .1s,box-shadow .12s}
.avcol{border-color:transparent}
.avcol.on{border-color:var(--card);box-shadow:0 0 0 3px var(--pc,var(--blue-l));transform:scale(1.06)}
.avcol:hover{transform:scale(1.1);box-shadow:0 0 0 2px color-mix(in srgb,var(--blue-l) 45%,transparent)}
.avbig svg{width:30px;height:30px}
/* ---- divers ---- */
.row{display:flex;gap:.6rem;align-items:center;flex-wrap:wrap}.grow{flex:1}
.qr{background:#fff;padding:11px;border-radius:var(--r-2);display:inline-block;margin:.6rem 0;
box-shadow:0 6px 24px rgba(0,0,0,.5)}
.kv{font-family:'JetBrains Mono',monospace;font-size:var(--fs-2);background:var(--surface);
border:1px solid var(--border);padding:.32rem .6rem;border-radius:var(--r-1);user-select:all}
.stepn{display:inline-flex;width:21px;height:21px;border-radius:50%;background:var(--blue-bg);
color:var(--blue-l);align-items:center;justify-content:center;font-size:var(--fs-1);
font-weight:700;margin-right:.5rem;flex:none}
.strike{opacity:.42}.strike strong{text-decoration:line-through}
.empty{text-align:center;padding:1.8rem 1rem;color:var(--muted);font-size:var(--fs-2)}
.empty .big{display:block;opacity:.4;margin-bottom:.7rem}
.empty .big svg{width:34px;height:34px;opacity:.85}
.cardlink{color:var(--text)}.cardlink:hover{color:var(--blue-l)}
.titleline{display:flex;align-items:center;gap:.55rem;flex-wrap:wrap}
.when{font-size:var(--fs-1);color:var(--muted);margin-top:.45rem}
ul{padding-left:1.2rem}
/* ---- Paliers. Le contenu tient dans 880 px : au-dela on ne fait que
   centrer, en dessous on redistribue. ---- */
@media(max-width:1024px){            /* tablette */
body{padding:1.1rem 1rem}
.pjm{padding:2vh 2vw}
.tabpane{padding:1.2rem 1.3rem}
}
@media(max-width:768px){             /* tablette portrait, grand mobile */
.searchbar{gap:.45rem;margin-bottom:1.1rem}
.searchbar .qwrap{flex:1 1 100%;min-width:0}
/* Telephone et tablette portrait : deux puces par ligne, toutes de meme
   largeur. Rien ne deborde, tout est atteignable au pouce (40 px). */
.filterbar{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:.5rem;margin-bottom:1.1rem;position:relative;z-index:40}
.fchip{width:100%;padding:0 .7rem}
.fdrop{padding:0}
.fdrop-b{padding:0 1.75rem 0 .7rem}
.pjgrid{grid-template-columns:repeat(auto-fill,minmax(132px,1fr))}
.pjm-card{width:min(720px,96vw)}
.partage{gap:.5rem}
.destfield{flex:1 1 100%}
}
@media(max-width:480px){
/* Le titre et le compteur ont la priorite : le bouton garde son icone. */
.btn-parrain span{display:none}
.btn-parrain{width:34px;padding:0;justify-content:center}
.ptete summary.phead{padding-right:92px;gap:.7rem}
.ptete .avbig{width:46px;height:46px;flex:none}
.ptete .avbig svg{width:24px;height:24px}
.ptete .pmeta h1{font-size:var(--fs-4)}
.btn-outils span{display:none}
.btn-outils{width:38px;height:38px;padding:0;justify-content:center}
.btn-outils svg{width:18px;height:18px}
}
@media(max-width:400px){
/* Les onglets sont passes en icones a 640 px : la place ainsi rendue permet
   de garder le mot « ancrag » plus longtemps. Il ne cede qu'ici. */
.wm{display:none}
.brand{gap:0}
}
@media(max-width:640px){             /* mobile */
/* Sous 16 px, Safari iOS zoome la page des qu'on touche un champ. */
input,select,textarea,.searchbar input,#qghost{font-size:16px}
body{padding:.85rem .75rem}
.nav{gap:.75rem}
/* Mobile : le libelle disparait, l'icone porte l'onglet. Trois mots de moins,
   c'est la place qu'il faut pour que les onglets et le profil respirent. */
.nav a:not(.avatar) span{display:none}
.nav a:not(.avatar){height:36px;width:36px;padding:0;justify-content:center}
.nav a:not(.avatar) svg{width:18px;height:18px}
:root{--h-nav:47px}
.topbar .top{padding:.5rem .75rem}
.panel,.pjbox{padding:1rem 1.05rem}
.tabpane{padding:1rem 1.05rem}
.pjm{padding:0}
.pjm-card{width:100vw;max-height:100vh;height:100%;border-radius:0;border:0}
.pjm-body{padding-bottom:env(safe-area-inset-bottom)}
.pjm-frame{height:calc(100vh - 52px)}
.dbtns,.inline-form,.noteactions{flex-wrap:wrap}
.inline-form .btn,.noteactions .btn{flex:1 1 auto}
.nh h1{font-size:var(--fs-4)}
.md{font-size:var(--fs-4)}
.pjdrop-lg{padding:1.1rem .9rem}
.itembar{gap:.5rem}
/* les champs poses avec une largeur fixe dans les gabarits */
input[style*="max-width"],select[style*="max-width"]{max-width:100%!important}
}
@media(max-width:340px){
/* tres petits telephones : l'onglet se resserre encore */
.nav a:not(.avatar){height:34px;width:34px}
.nav a:not(.avatar) svg{width:17px;height:17px}
}
@media(max-width:420px){             /* petits telephones */
.pjgrid{grid-template-columns:repeat(auto-fill,minmax(118px,1fr))}
/* Telephone : les compteurs tiennent sur une ligne, l'icone remplace le mot. */
.stats{grid-template-columns:repeat(auto-fit,minmax(0,1fr));gap:.4rem}
.stats-lg{grid-template-columns:1fr;gap:.6rem}
.stat{padding:.7rem .5rem;text-align:center}
.stats-lg .stat{padding:.85rem 1rem;text-align:left}
.statnom{display:none}
.stats-lg .statnom{display:inline}
.statico{display:block;margin:0 auto .3rem}
.stat b{font-size:var(--fs-6)}
.auth-card{padding:1.4rem 1.15rem 1.25rem}
.logo-badge,.logo-badge svg{width:46px;height:46px}
.navseg{gap:.1rem}
.nav{gap:.7rem}
.wm{font-size:var(--fs-3)}
.submeta{gap:.25rem .4rem}
}
