/* Racines — feuille de style unique, sans build.
   Tokens nommés comme ceux de shadcn/ui (--background, --card, --primary, --accent, --radius…),
   transposés en CSS pur. Palette « registre ancien » : papier, vert forêt, terre cuite. */

@font-face{font-family:"Fraunces";src:url(/static/fonts/fraunces.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap}
@font-face{font-family:"Source Sans 3";src:url(/static/fonts/source-sans-3.woff2) format("woff2");font-weight:200 900;font-style:normal;font-display:swap}

:root{
  --background:#f7f3ea;--foreground:#1f2a24;
  --card:#fffdf8;--card-foreground:#1f2a24;--popover:#fffdf8;
  --primary:#2f5d50;--primary-hover:#264c42;--primary-foreground:#fbf8f0;
  --secondary:#ece5d3;--secondary-hover:#e3dac3;--secondary-foreground:#1f2a24;
  --muted:#efe9da;--muted-foreground:#5c645d;
  --accent:#b4532a;--accent-hover:#9c4522;--accent-foreground:#ffffff;
  --destructive:#a8321f;--destructive-foreground:#ffffff;--destructive-soft:#f8e4df;
  --success-soft:#e1efe6;
  --border:#ddd4bf;--input:#cbc0a6;--ring:rgba(47,93,80,.32);
  --ochre:#b8862b;--sage:#6e9a7d;--stone:#b3ad9b;
  --sidebar:#21463c;--sidebar-foreground:#f3eedf;--sidebar-muted:#bccabc;--sidebar-active:rgba(255,255,255,.11);
  --radius:.75rem;--radius-sm:.5rem;
  --font-serif:"Fraunces",Georgia,"Times New Roman",serif;
  --font-sans:"Source Sans 3",system-ui,-apple-system,"Segoe UI",sans-serif;
  --shadow-sm:0 1px 2px rgba(31,42,36,.07);
  --shadow-md:0 10px 30px -10px rgba(31,42,36,.28);
  --sidebar-w:16.5rem;--tabbar-h:4rem;--topbar-h:3.75rem;
  color-scheme:light;
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-padding-top:5rem}
body{margin:0;font:1.0625rem/1.55 var(--font-sans);background:var(--background);color:var(--foreground);min-height:100dvh;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
h1,h2,h3{font-family:var(--font-serif);font-weight:600;line-height:1.15;letter-spacing:-.01em;margin:0;font-variation-settings:"opsz" 72}
h1{font-size:clamp(1.9rem,1.4rem + 2vw,2.9rem)}
h2{font-size:1.4rem}
h3{font-size:1.1rem}
p{margin:.4rem 0}
a{color:var(--primary);text-underline-offset:.2em;text-decoration-thickness:1px}
a:hover{color:var(--primary-hover)}
code{font:.9em ui-monospace,SFMono-Regular,Menlo,monospace;background:var(--muted);padding:.05em .35em;border-radius:.3em}
small,.small{font-size:.875rem}
.muted{color:var(--muted-foreground)}
.err{color:var(--destructive)}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
:focus-visible{outline:3px solid var(--ring);outline-offset:2px;border-radius:.35rem}
[hidden]{display:none!important}
.skip{position:absolute;left:-999px;top:.5rem;background:var(--primary);color:var(--primary-foreground);padding:.6rem 1rem;border-radius:var(--radius-sm);z-index:100}
.skip:focus{left:.5rem}
svg.i{width:1.25rem;height:1.25rem;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}

/* ---------- Structure : sidebar + colonne principale + onglets mobiles ---------- */
.app{display:block;min-height:100dvh}
.sidebar{display:none}
.main-col{min-width:0;display:flex;flex-direction:column;min-height:100dvh}
.topbar{position:sticky;top:0;z-index:30;display:flex;align-items:center;gap:.5rem;height:var(--topbar-h);padding:0 .75rem 0 1rem;
  background:color-mix(in srgb,var(--background) 88%,transparent);backdrop-filter:blur(10px);border-bottom:1px solid var(--border)}
.brand{display:flex;align-items:center;gap:.55rem;font:600 1.45rem/1 var(--font-serif);color:var(--primary);text-decoration:none;letter-spacing:-.02em}
.brand svg{width:1.6rem;height:1.6rem;stroke-width:1.6}
.topbar .brand{margin-right:auto}
.content{flex:1;width:100%;max-width:68rem;margin:0 auto;padding:1.5rem 1rem calc(var(--tabbar-h) + 2.5rem + env(safe-area-inset-bottom))}
.content.wide{max-width:none}
.search-trigger{display:none;align-items:center;gap:.6rem;min-width:min(26rem,100%);height:2.75rem;padding:0 .9rem;border:1px solid var(--input);
  border-radius:999px;background:var(--card);color:var(--muted-foreground);font:inherit;cursor:pointer;text-align:left}
.search-trigger:hover{border-color:var(--primary)}
.search-trigger span{flex:1}
kbd{font:600 .78rem/1 var(--font-sans);border:1px solid var(--input);border-bottom-width:2px;border-radius:.35rem;padding:.2rem .4rem;background:var(--muted);color:var(--muted-foreground)}

.tabbar{position:fixed;inset:auto 0 0 0;z-index:40;display:flex;height:calc(var(--tabbar-h) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);
  background:var(--card);border-top:1px solid var(--border);box-shadow:0 -6px 20px -12px rgba(31,42,36,.25)}
.tabbar a,.tabbar button{flex:1;min-width:0;min-height:2.75rem;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.15rem;
  background:none;border:0;border-radius:0;color:var(--muted-foreground);font:600 .75rem/1.1 var(--font-sans);text-decoration:none;position:relative;cursor:pointer;padding:.3rem 0}
.tabbar svg.i{width:1.5rem;height:1.5rem}
.tabbar [aria-current=page]{color:var(--primary)}
.tabbar [aria-current=page]::before{content:"";position:absolute;top:0;left:30%;right:30%;height:3px;border-radius:0 0 3px 3px;background:var(--accent)}

@media (min-width:960px){
  .app{display:grid;grid-template-columns:var(--sidebar-w) minmax(0,1fr)}
  .sidebar{display:flex;flex-direction:column;position:sticky;top:0;height:100dvh;background:var(--sidebar);color:var(--sidebar-foreground);padding:1.4rem 1rem 1rem}
  .sidebar .brand{color:var(--sidebar-foreground);padding:0 .6rem 1.4rem;font-size:1.7rem}
  .nav-label{font:700 .72rem/1 var(--font-sans);letter-spacing:.12em;text-transform:uppercase;color:var(--sidebar-muted);padding:1.2rem .75rem .5rem}
  .sidebar nav{display:flex;flex-direction:column;gap:.15rem;overflow:auto;flex:1}
  .sidebar nav a{display:flex;align-items:center;gap:.75rem;min-height:2.75rem;padding:0 .75rem;border-radius:var(--radius-sm);color:var(--sidebar-foreground);text-decoration:none;font-weight:500;position:relative}
  .sidebar nav a:hover{background:var(--sidebar-active)}
  .sidebar nav a[aria-current=page]{background:var(--sidebar-active);font-weight:700}
  .sidebar nav a[aria-current=page]::before{content:"";position:absolute;left:-1rem;top:.55rem;bottom:.55rem;width:4px;border-radius:0 4px 4px 0;background:#e2895b}
  .sidebar :focus-visible{outline-color:#fff}
  .me{border-top:1px solid rgba(255,255,255,.14);padding-top:1rem;display:flex;align-items:center;gap:.75rem}
  .me .who{min-width:0;flex:1;line-height:1.25}
  .me .who b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .me .who span{font-size:.85rem;color:var(--sidebar-muted)}
  .me .btn.icon{color:var(--sidebar-foreground);background:transparent}
  .me .btn.icon:hover{background:var(--sidebar-active)}
  .topbar{padding:0 2rem;justify-content:flex-end}
  .topbar .brand,.topbar .search-icon{display:none}
  .search-trigger{display:flex;margin-right:auto}
  .content{padding:2rem 2rem 4rem}
  .tabbar{display:none}
  .toasts{bottom:1.5rem!important;right:1.5rem!important;left:auto!important;align-items:flex-end!important}
}

/* ---------- Boutons ---------- */
.btn,button{font:inherit}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:2.6rem;padding:0 1.1rem;border-radius:var(--radius-sm);border:1px solid transparent;
  background:var(--primary);color:var(--primary-foreground);font-weight:600;text-decoration:none;cursor:pointer;line-height:1;white-space:nowrap;
  transition:background-color .15s,border-color .15s,transform .1s,box-shadow .15s}
.btn:hover{background:var(--primary-hover);color:var(--primary-foreground)}
.btn:active{transform:translateY(1px)}
.btn.secondary{background:var(--secondary);color:var(--secondary-foreground);border-color:var(--border)}
.btn.secondary:hover{background:var(--secondary-hover);color:var(--secondary-foreground)}
.btn.outline{background:transparent;color:var(--foreground);border-color:var(--input)}
.btn.outline:hover{background:var(--muted);color:var(--foreground)}
.btn.ghost{background:transparent;color:var(--foreground)}
.btn.ghost:hover{background:var(--muted);color:var(--foreground)}
.btn.accent{background:var(--accent);color:var(--accent-foreground)}
.btn.accent:hover{background:var(--accent-hover);color:var(--accent-foreground)}
.btn.destructive{background:var(--destructive);color:var(--destructive-foreground)}
.btn.destructive:hover{background:#8d2918;color:#fff}
.btn.sm{min-height:2.25rem;padding:0 .8rem;font-size:.95rem}
.btn.lg{min-height:3rem;padding:0 1.5rem;font-size:1.05rem}
.btn.icon{width:2.6rem;padding:0}
.btn.block{width:100%}
.btn[disabled],.btn.is-busy{opacity:.7;pointer-events:none}
.btn.is-busy::after{content:"";width:1em;height:1em;border-radius:50%;border:2px solid currentColor;border-right-color:transparent;animation:spin .7s linear infinite}
button.link{background:none;border:0;padding:0;color:var(--primary);text-decoration:underline;cursor:pointer;font:inherit}
@media (max-width:959px),(pointer:coarse){
  .btn{min-height:2.75rem}.btn.sm{min-height:2.75rem}.btn.icon{width:2.75rem}
}
/* Magic UI : bouton « shimmer » (reflet qui traverse) */
.btn.shimmer{position:relative;overflow:hidden;isolation:isolate}
.btn.shimmer::before{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(100deg,transparent 30%,rgba(255,255,255,.28) 50%,transparent 70%);
  transform:translateX(-120%);animation:shimmer 3.2s ease-in-out infinite}
@keyframes shimmer{0%,55%{transform:translateX(-120%)}100%{transform:translateX(120%)}}
@keyframes spin{to{transform:rotate(360deg)}}

/* ---------- Menus (+ Ajouter) ---------- */
.menu{position:relative}
.menu>summary{list-style:none;cursor:pointer}.menu>summary::-webkit-details-marker{display:none}
.menu-list{position:absolute;right:0;top:calc(100% + .4rem);z-index:50;min-width:14rem;padding:.4rem;background:var(--popover);border:1px solid var(--border);
  border-radius:var(--radius);box-shadow:var(--shadow-md);animation:pop .14s ease-out}
.menu-list a,.menu-list button{display:flex;align-items:center;gap:.7rem;width:100%;min-height:2.85rem;padding:0 .75rem;border:0;border-radius:var(--radius-sm);background:none;color:var(--foreground);
  font:inherit;text-decoration:none;cursor:pointer;text-align:left}
.menu-list a:hover,.menu-list button:hover{background:var(--muted)}
@keyframes pop{from{opacity:0;transform:translateY(-4px) scale(.98)}}
.add-label{display:none}
@media (min-width:640px){.add-label{display:inline}.menu>summary.btn.icon{width:auto;padding:0 1.1rem}}

/* ---------- En-têtes de page, cartes, sections ---------- */
.page-head{display:flex;flex-wrap:wrap;align-items:flex-end;gap:.75rem 1.5rem;margin-bottom:1.5rem}
.page-head .titles{flex:1;min-width:14rem}
.eyebrow{font:700 .78rem/1 var(--font-sans);letter-spacing:.14em;text-transform:uppercase;color:var(--accent);margin-bottom:.5rem}
.page-head .lede{color:var(--muted-foreground);margin-top:.5rem;max-width:42rem}
.count{font:500 1.1rem var(--font-sans);color:var(--muted-foreground);margin-left:.4rem;letter-spacing:0}
.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:1.25rem;box-shadow:var(--shadow-sm)}
.section{margin-top:2.25rem}
.section>.section-head{display:flex;align-items:center;gap:.75rem;margin-bottom:.9rem}
.section>.section-head h2{flex:1}
.stack>*+*{margin-top:1rem}
.actions{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center}
.actions form{margin:0}
.tag{display:inline-flex;align-items:center;gap:.3rem;font:600 .78rem/1.2 var(--font-sans);background:var(--muted);color:var(--muted-foreground);border-radius:999px;padding:.2rem .6rem;border:1px solid var(--border)}
.tag.alive{background:var(--success-soft);color:#1f5a3a;border-color:#b7d8c3}
.tag.accent{background:#f6e3d8;color:#8d3f1b;border-color:#e8c4af}
.alert{display:flex;gap:.7rem;padding:.8rem 1rem;border-radius:var(--radius-sm);border:1px solid #e3b6ac;background:var(--destructive-soft);color:#7d2314;margin-bottom:1.25rem}
.alert.info{border-color:var(--border);background:var(--muted);color:var(--foreground)}
.alert.ok{border-color:#b7d8c3;background:var(--success-soft);color:#1f4d33}
.breadcrumb{font-size:.9rem;color:var(--muted-foreground);margin-bottom:.9rem;display:flex;gap:.4rem;align-items:center;flex-wrap:wrap}
.breadcrumb a{color:var(--muted-foreground)}

/* ---------- Formulaires ---------- */
.field{display:block;margin:0 0 1rem}
.field>label,.field>.label,label.lbl{display:block;font-weight:700;font-size:.92rem;margin-bottom:.35rem}
.field .hint{display:block;font-size:.875rem;color:var(--muted-foreground);margin-top:.3rem}
.field .field-error{display:block;font-size:.875rem;color:var(--destructive);margin-top:.3rem;font-weight:600}
input[type=text],input[type=email],input[type=password],input[type=search],input[type=url],input[type=file],select,textarea{
  width:100%;min-height:2.75rem;padding:.55rem .8rem;border:1px solid var(--input);border-radius:var(--radius-sm);background:var(--card);color:var(--foreground);font:inherit;font-size:1rem;
  transition:border-color .15s,box-shadow .15s}
textarea{min-height:6rem;resize:vertical;line-height:1.5}
select{appearance:none;padding-right:2.4rem;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%235c645d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' viewBox='0 0 24 24'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .8rem center}
input::placeholder,textarea::placeholder{color:#7a8077}
input:hover,select:hover,textarea:hover{border-color:#a89d82}
input:focus,select:focus,textarea:focus{outline:0;border-color:var(--primary);box-shadow:0 0 0 4px var(--ring)}
input:user-invalid,textarea:user-invalid,select:user-invalid,[aria-invalid=true]{border-color:var(--destructive);box-shadow:0 0 0 3px rgba(168,50,31,.14)}
input[type=checkbox]{width:1.25rem;height:1.25rem;accent-color:var(--primary);margin:0;flex:none}
.check{display:flex;gap:.7rem;align-items:flex-start;padding:.7rem .85rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--muted);cursor:pointer;min-height:2.75rem}
.check b{display:block}.check span{font-size:.9rem;color:var(--muted-foreground)}
.grid{display:grid;gap:0 1rem}
@media (min-width:640px){.grid.c2{grid-template-columns:1fr 1fr}.grid.c3{grid-template-columns:repeat(3,1fr)}.grid.c21{grid-template-columns:2fr 1fr}}
fieldset{border:0;margin:0 0 1rem;padding:0}
legend{font:600 1.05rem var(--font-serif);padding:0;margin-bottom:.6rem}
.form-actions{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:1.25rem}
.preview{display:block;min-height:1.3rem;font-size:.9rem;margin-top:.3rem}

/* ---------- Listes (personnes, sources, lieux) ---------- */
.toolbar{display:flex;flex-wrap:wrap;gap:.6rem;margin-bottom:1.1rem}
.searchbox{position:relative;flex:1;min-width:14rem;max-width:30rem}
.searchbox svg{position:absolute;left:.85rem;top:50%;transform:translateY(-50%);color:var(--muted-foreground);pointer-events:none}
.searchbox input{padding-left:2.6rem}
.rows{list-style:none;margin:0;padding:0;background:var(--card);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow-sm)}
.rows>li+li{border-top:1px solid var(--border)}
.row-link{display:grid;grid-template-columns:auto 1fr auto auto;align-items:center;gap:.9rem;padding:.75rem 1rem .75rem 1.1rem;min-height:4rem;text-decoration:none;color:inherit;position:relative;transition:background-color .12s}
.row-link:hover{background:var(--muted);color:inherit}
.row-link::before{content:"";position:absolute;left:0;top:.5rem;bottom:.5rem;width:4px;border-radius:0 4px 4px 0;background:var(--stone)}
.row-link.sex-M::before{background:var(--ochre)}.row-link.sex-F::before{background:var(--sage)}
.row-link .chev{color:var(--muted-foreground)}
.row-title{font:600 1.15rem/1.2 var(--font-serif);overflow-wrap:anywhere}
.row-sub{font-size:.9rem;color:var(--muted-foreground)}
.row-meta{font:500 .98rem var(--font-sans);color:var(--muted-foreground);font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}
.avatar{display:grid;place-items:center;width:2.6rem;height:2.6rem;border-radius:50%;background:var(--muted);color:var(--primary);font:600 1rem var(--font-serif);border:1px solid var(--border);flex:none;letter-spacing:0}
.avatar.sex-M{background:#f4ead2;color:#7a5a14;border-color:#e4d3a6}.avatar.sex-F{background:#e0eee5;color:#2e5a40;border-color:#bcd8c6}
.avatar.xl{width:5rem;height:5rem;font-size:1.8rem}
@media (max-width:639px){
  .row-link{grid-template-columns:auto 1fr auto;padding-right:.75rem}
  .row-link .row-meta{grid-column:2;grid-row:2;text-align:left;margin-top:-.4rem}
  .row-link .chev{grid-row:1/3;grid-column:3}
}
.pager{display:flex;justify-content:space-between;gap:.6rem;margin-top:1.1rem}

/* ---------- États vides ---------- */
.empty{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.4rem;padding:2.5rem 1.25rem;background:var(--card);border:1px dashed var(--input);border-radius:var(--radius)}
.empty.compact{padding:1.4rem 1rem;background:transparent}
.empty .art{width:4.5rem;height:4.5rem;display:grid;place-items:center;border-radius:50%;background:var(--muted);color:var(--primary);margin-bottom:.6rem}
.empty .art svg.i{width:2.2rem;height:2.2rem;stroke-width:1.4}
.empty h3{font-size:1.3rem}
.empty p{color:var(--muted-foreground);max-width:30rem}
.empty .btn{margin-top:.8rem}

/* ---------- Fiche personne ---------- */
.hero{display:grid;grid-template-columns:auto 1fr;gap:1.1rem 1.4rem;align-items:center;padding:1.5rem;background:linear-gradient(180deg,#fffdf8 0%,#f9f4e7 100%);border:1px solid var(--border);border-radius:calc(var(--radius) + .25rem);box-shadow:var(--shadow-sm);position:relative;overflow:hidden}
.hero h1{overflow-wrap:anywhere}
.hero .life{font:500 1.35rem var(--font-serif);color:var(--muted-foreground);margin:.3rem 0 .6rem;font-variant-numeric:oldstyle-nums}
.hero .chips{display:flex;flex-wrap:wrap;gap:.4rem}
.hero .actions{grid-column:1/-1;margin-top:.3rem;position:relative;z-index:1}
@media (max-width:639px){.hero{grid-template-columns:1fr;padding:1.2rem}.avatar.xl{width:4rem;height:4rem;font-size:1.5rem}}
.person-grid{display:grid;gap:2rem;margin-top:1.5rem}
@media (min-width:1000px){.person-grid{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);align-items:start}}
.notes{margin-top:1.25rem;white-space:pre-wrap;background:var(--card);border-left:4px solid var(--accent);border-radius:0 var(--radius-sm) var(--radius-sm) 0;padding:.9rem 1.1rem;border-top:1px solid var(--border);border-right:1px solid var(--border);border-bottom:1px solid var(--border)}
.timeline{list-style:none;margin:0;padding:0;position:relative}
.timeline::before{content:"";position:absolute;left:8rem;top:.6rem;bottom:.6rem;width:2px;background:var(--border)}
.tl-item{display:grid;grid-template-columns:7.2rem 1fr;gap:1.6rem;padding:.55rem 0;position:relative}
.tl-date{font:600 1.05rem/1.3 var(--font-serif);text-align:right;font-variant-numeric:lining-nums;color:var(--primary);padding-top:.55rem}
.tl-date small{display:block;font:500 .78rem var(--font-sans);color:var(--muted-foreground)}
.tl-item::before{content:"";position:absolute;left:7.525rem;top:1.15rem;width:.95rem;height:.95rem;border-radius:50%;background:var(--card);border:3px solid var(--primary)}
.tl-item.type-death::before{border-color:var(--stone)}.tl-item.type-birth::before{border-color:var(--accent)}
.tl-body{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:.8rem 1rem;box-shadow:var(--shadow-sm);min-width:0}
.tl-top{display:flex;gap:.6rem;align-items:flex-start}
.tl-top h3{flex:1;font-size:1.1rem}
.tl-place{color:var(--muted-foreground);font-size:.95rem}
.cite{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem;margin-top:.55rem;font-size:.9rem}
.cite .tag a{color:inherit}
.tl-add summary{cursor:pointer;color:var(--primary);font-weight:600;font-size:.92rem;display:inline-flex;align-items:center;gap:.3rem;min-height:2rem;list-style:none}
.tl-add summary::-webkit-details-marker{display:none}
.tl-add[open]{width:100%;margin-top:.5rem}
.tl-add form{margin-top:.6rem;padding:.8rem;background:var(--muted);border-radius:var(--radius-sm)}
.tl-add .field{margin-bottom:.6rem}
@media (max-width:639px){
  .timeline::before{left:.45rem}
  .tl-item{grid-template-columns:1fr;gap:.2rem;padding-left:1.7rem}
  .tl-item::before{left:0;top:.95rem}
  .tl-date{text-align:left;padding-top:0}
  .tl-date small{display:inline;margin-left:.4rem}
}
.rel{display:flex;flex-direction:column;gap:.5rem}
.rel-card{padding:.9rem 1rem;background:var(--card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm)}
.rel-card .label{font:700 .75rem/1 var(--font-sans);letter-spacing:.1em;text-transform:uppercase;color:var(--muted-foreground);margin-bottom:.5rem;display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}
.mini{list-style:none;margin:.3rem 0 0;padding:0}
.mini li a{display:flex;align-items:center;gap:.7rem;min-height:2.75rem;padding:.2rem .4rem;border-radius:var(--radius-sm);text-decoration:none;color:var(--foreground);font-weight:600}
.mini li a:hover{background:var(--muted)}
.mini .avatar{width:2rem;height:2rem;font-size:.8rem}
.danger-zone{margin-top:2.5rem;padding:1rem 1.2rem;border:1px dashed #d9a79c;border-radius:var(--radius);display:flex;flex-wrap:wrap;gap:1rem;align-items:center;justify-content:space-between}

/* ---------- Dialogues : modale, tiroir, feuille mobile ---------- */
dialog{border:0;padding:0;background:var(--popover);color:var(--foreground);border-radius:calc(var(--radius) + .25rem);box-shadow:var(--shadow-md);max-width:min(32rem,calc(100vw - 2rem));width:100%;max-height:calc(100dvh - 2rem)}
dialog::backdrop{background:rgba(25,38,32,.5);backdrop-filter:blur(2px)}
dialog[open]{animation:dlg .18s ease-out}
dialog[open]::backdrop{animation:fade .18s ease-out}
@keyframes dlg{from{opacity:0;transform:translateY(8px) scale(.98)}}
@keyframes fade{from{opacity:0}}
.dlg-head{display:flex;align-items:center;gap:.75rem;padding:1.1rem 1.25rem .4rem}
.dlg-head h2{flex:1;font-size:1.35rem}
.dlg-body{padding:.6rem 1.25rem 1.25rem;overflow:auto}
dialog.drawer{margin:0 0 0 auto;height:100dvh;max-height:100dvh;max-width:30rem;border-radius:calc(var(--radius) + .25rem) 0 0 calc(var(--radius) + .25rem);display:none;flex-direction:column}
dialog.drawer[open]{display:flex;animation:drawer .24s cubic-bezier(.2,.8,.2,1)}
@keyframes drawer{from{transform:translateX(2rem);opacity:0}}
dialog.drawer .dlg-body{flex:1}
dialog.confirm .dlg-body{padding-top:.2rem}
dialog.confirm .form-actions{justify-content:flex-end}
@media (max-width:639px){
  dialog.drawer,dialog.sheet{margin:auto 0 0 0;max-width:100%;width:100%;height:fit-content;max-height:92dvh;border-radius:calc(var(--radius) + .5rem) calc(var(--radius) + .5rem) 0 0}
  dialog.drawer[open],dialog.sheet[open]{animation:sheet .26s cubic-bezier(.2,.8,.2,1)}
  dialog.confirm{margin:auto 0 0 0;max-width:100%;border-radius:calc(var(--radius) + .5rem) calc(var(--radius) + .5rem) 0 0}
  dialog.palette{margin:0;max-width:100%;height:100dvh;max-height:100dvh;border-radius:0}
}
@keyframes sheet{from{transform:translateY(2.5rem);opacity:0}}
dialog.sheet .menu-list{position:static;box-shadow:none;border:0;padding:0 1rem 1rem;animation:none}

/* Palette de recherche (Ctrl+K) */
dialog.palette{max-width:36rem;margin:6vh auto auto;overflow:hidden}
.pal-input{display:flex;align-items:center;gap:.7rem;padding:.4rem 1rem;border-bottom:1px solid var(--border)}
.pal-input input{border:0;box-shadow:none!important;font-size:1.1rem;min-height:3.25rem;background:transparent;padding-left:0}
.pal-results{max-height:min(26rem,calc(100dvh - 9rem));overflow:auto;padding:.4rem}
.pal-group{font:700 .72rem/1 var(--font-sans);letter-spacing:.12em;text-transform:uppercase;color:var(--muted-foreground);padding:.8rem .75rem .35rem}
.pal-item{display:flex;align-items:center;gap:.75rem;min-height:2.9rem;padding:.3rem .75rem;border-radius:var(--radius-sm);color:var(--foreground);text-decoration:none}
.pal-item:hover,.pal-item[aria-selected=true]{background:var(--muted)}
.pal-item b{font-family:var(--font-serif);font-weight:600}
.pal-item span.muted{margin-left:auto;font-size:.9rem;white-space:nowrap}
.pal-empty{padding:1.6rem 1rem;text-align:center;color:var(--muted-foreground)}
.pal-foot{display:flex;gap:1rem;padding:.55rem 1rem;border-top:1px solid var(--border);font-size:.85rem;color:var(--muted-foreground)}
.htmx-indicator{display:none}.htmx-request .htmx-indicator,.htmx-request.htmx-indicator{display:block}

/* ---------- Skeletons ---------- */
.skeleton{background:linear-gradient(90deg,var(--muted) 25%,#f6f1e4 50%,var(--muted) 75%);background-size:200% 100%;animation:sk 1.3s linear infinite;border-radius:.4rem}
@keyframes sk{to{background-position:-200% 0}}
.sk-row{display:flex;align-items:center;gap:.8rem;padding:.6rem .75rem}
.sk-row .skeleton:first-child{width:2.4rem;height:2.4rem;border-radius:50%}
.sk-row .skeleton:last-child{height:1rem;flex:1}
.progress{position:fixed;left:0;top:0;height:3px;width:0;background:var(--accent);z-index:200;opacity:0;transition:width .4s ease,opacity .2s}
body.is-loading .progress{width:78%;opacity:1;transition:width 8s cubic-bezier(.1,.7,.2,1)}
body.is-loading .content{opacity:.65;transition:opacity .2s .15s}

/* ---------- Toasts ---------- */
.toasts{position:fixed;z-index:300;left:0;right:0;bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + .75rem);display:flex;flex-direction:column;align-items:center;gap:.5rem;padding:0 1rem;pointer-events:none}
.toast{pointer-events:auto;display:flex;align-items:center;gap:.7rem;min-height:3rem;max-width:26rem;width:100%;padding:.55rem .6rem .55rem .9rem;border-radius:var(--radius);background:#1f2a24;color:#f7f3ea;box-shadow:var(--shadow-md);animation:toast-in .26s cubic-bezier(.2,.8,.2,1);font-weight:600}
.toast svg.i{color:#8fd1a8}
.toast.error{background:#7d2314}.toast.error svg.i{color:#ffc7b8}
.toast span{flex:1}
.toast button{background:none;border:0;color:inherit;opacity:.8;width:2.5rem;height:2.5rem;border-radius:50%;cursor:pointer;display:grid;place-items:center}
.toast button:hover{opacity:1;background:rgba(255,255,255,.12)}
.toast.leaving{animation:toast-out .2s ease-in forwards}
@keyframes toast-in{from{opacity:0;transform:translateY(12px) scale(.97)}}
@keyframes toast-out{to{opacity:0;transform:translateY(8px) scale(.97)}}

/* ---------- Magic UI : apparition « blur-fade » étagée et bordure animée ---------- */
.fx>*{animation:blurfade .5s cubic-bezier(.2,.7,.2,1) both;animation-delay:calc(var(--i,0)*45ms)}
@keyframes blurfade{from{opacity:0;filter:blur(6px);transform:translateY(8px)}}
@property --beam{syntax:"<angle>";inherits:false;initial-value:0deg}
.beam{position:relative;border:0;background:linear-gradient(var(--card),var(--card)) padding-box,conic-gradient(from var(--beam),transparent 0 70%,var(--accent) 85%,transparent 100%) border-box;border:1.5px solid transparent;animation:beam 6s linear infinite}
@keyframes beam{to{--beam:360deg}}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
}

/* ---------- Connexion / invitation ---------- */
.auth{min-height:100dvh;display:grid;grid-template-columns:1fr;background:var(--background)}
.auth-art{display:none}
.auth-main{display:grid;place-items:center;padding:1.5rem 1rem}
.auth-card{width:100%;max-width:26rem;padding:2rem 1.6rem;border-radius:calc(var(--radius) + .25rem);box-shadow:var(--shadow-md)}
.auth-card .brand{margin-bottom:1.4rem}
.auth-card h1{font-size:2rem;margin-bottom:.3rem}
@media (min-width:960px){
  .auth{grid-template-columns:1.1fr 1fr}
  .auth-art{display:flex;flex-direction:column;justify-content:flex-end;gap:1rem;padding:3rem;background:var(--sidebar);color:var(--sidebar-foreground);position:relative;overflow:hidden}
  .auth-art blockquote{margin:0;font:500 2.1rem/1.2 var(--font-serif);max-width:26rem;position:relative}
  .auth-art p{color:var(--sidebar-muted);max-width:26rem;position:relative}
  .auth-art svg.roots{position:absolute;inset:0 0 auto 0;width:100%;height:70%;opacity:.35}
}

/* ---------- Page Utilisateurs, GEDCOM, décès ---------- */
.user-row{display:grid;gap:.8rem 1rem;align-items:end;padding:1rem;grid-template-columns:1fr}
@media (min-width:760px){.user-row{grid-template-columns:minmax(10rem,1.2fr) 1fr 10rem 7rem auto}}
.user-row .field{margin:0}
.who-line b{display:block;font-family:var(--font-serif);font-size:1.1rem}
.cards-2{display:grid;gap:1rem}
@media (min-width:760px){.cards-2{grid-template-columns:1fr 1fr}}
.sugg{display:grid;gap:1rem;padding:1.1rem 1.2rem;grid-template-columns:1fr}
@media (min-width:860px){.sugg{grid-template-columns:1fr 1fr auto;align-items:center}}
.sugg .k{font:700 .72rem/1 var(--font-sans);letter-spacing:.1em;text-transform:uppercase;color:var(--muted-foreground);margin-bottom:.3rem}
.sugg.htmx-swapping{opacity:0;transform:translateX(1rem);transition:all .25s}
.report ul{margin:.4rem 0 0 1.2rem;padding:0}

/* ---------- Arbre ---------- */
.tree-bar{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center;margin-bottom:.9rem}
.seg{display:inline-flex;border:1px solid var(--input);border-radius:var(--radius-sm);overflow:hidden;background:var(--card)}
.seg a,.seg button{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;min-height:2.6rem;min-width:2.6rem;padding:0 .9rem;border:0;background:transparent;color:var(--foreground);font:600 .95rem var(--font-sans);text-decoration:none;cursor:pointer}
.seg>*+*{border-left:1px solid var(--border)}
.seg a:hover,.seg button:hover{background:var(--muted)}
.seg [aria-current=true]{background:var(--primary);color:var(--primary-foreground)}
.tree-bar .grow{flex:1}
.tree-bar select{width:auto;min-height:2.6rem}
@media (max-width:959px){.seg a,.seg button{min-height:2.75rem;min-width:2.75rem}.tree-bar select{min-height:2.75rem}}
.tree-wrap{position:relative;overflow:auto;max-height:calc(100dvh - 15rem);min-height:18rem;border:1px solid var(--border);border-radius:var(--radius);
  background-color:#fbf8ef;background-image:radial-gradient(#d9cfb6 1px,transparent 1.2px);background-size:22px 22px;touch-action:pan-x pan-y;cursor:grab;-webkit-overflow-scrolling:touch}
.tree-wrap.grabbing{cursor:grabbing;user-select:none}
.tree-wrap svg{display:block;font-family:var(--font-sans)}
.tree-wrap.loading svg{visibility:hidden}
.tree-skel{position:absolute;inset:0;display:none;gap:1.2rem;padding:2rem;flex-wrap:wrap;align-content:flex-start}
.tree-wrap.loading .tree-skel{display:flex}
.tree-skel .skeleton{width:11rem;height:3.9rem;border-radius:.6rem}
@media (max-width:959px){.tree-wrap{max-height:70dvh}}
.tn .box{fill:var(--card);stroke:var(--input);stroke-width:1;transition:stroke .15s,stroke-width .15s}
.tn:hover .box,.tn:focus-visible .box{stroke:var(--primary);stroke-width:2}
.tn:focus-visible{outline:none}
.tn.focus .box{stroke:var(--primary);stroke-width:2.5;fill:#eef4ef}
.tn.living .box{stroke-dasharray:5 3}
.tn .bar{fill:var(--stone)}.tn .bar.M{fill:var(--ochre)}.tn .bar.F{fill:var(--sage)}
.tn .nm{font:600 13.5px var(--font-serif);fill:var(--foreground)}
.tn .dt{font:500 12px var(--font-sans);fill:var(--muted-foreground)}
.tree-lines{fill:none;stroke:#a89d82;stroke-width:1.4}
.tree-lineage{fill:none;stroke:var(--accent);stroke-width:3;stroke-linecap:round;display:none}
#lineagebtn[aria-pressed=true]{background:var(--accent);border-color:var(--accent);color:var(--accent-foreground)}
#treesvg.lineage-on .tree-lineage{display:inline}
.tree-label{font:600 11.5px var(--font-sans);fill:var(--muted-foreground)}
.legend{margin-top:.9rem;border:1px solid var(--border);border-radius:var(--radius);background:var(--card)}
.legend summary{cursor:pointer;min-height:2.75rem;display:flex;align-items:center;padding:0 1rem;font-weight:700;list-style:none;gap:.5rem}
.legend summary::-webkit-details-marker{display:none}
.legend summary::after{content:"";margin-left:auto;width:.55rem;height:.55rem;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg);transition:transform .15s}
.legend[open] summary::after{transform:rotate(-135deg)}
.legend .lg{display:grid;gap:.5rem 1.5rem;padding:.2rem 1rem 1rem;font-size:.95rem}
@media (min-width:700px){.legend .lg{grid-template-columns:repeat(3,auto);justify-content:start}}
.sw{display:inline-block;vertical-align:middle;width:.5rem;height:1.2rem;border-radius:2px;margin-right:.5rem}
.sw.dash{width:1.6rem;height:1rem;border:2px dashed var(--muted-foreground);background:none;border-radius:.3rem}
ul.desc,ul.desc ul{list-style:none;padding-left:1.4rem;margin:.2rem 0;border-left:2px solid var(--border)}ul.desc{border:0;padding:0}
ul.desc li{padding:.25rem 0}
ul.desc a{font-weight:600}

@media print{
  .sidebar,.topbar,.tabbar,.toasts,.tree-bar,.legend,.page-head .actions,.noprint{display:none!important}
  .app{display:block}.content{padding:0;max-width:none}
  body{background:#fff}.tree-wrap{max-height:none;overflow:visible;border:0;background:#fff}
}
.user-row>form{display:none}.hide-sm{display:none}@media (min-width:760px){.hide-sm{display:block}}
.sh{display:flex;align-items:center;gap:.75rem;min-height:2.6rem;margin-bottom:.9rem}.sh h2{flex:1}
@media (max-width:959px){.topbar .brand{min-height:2.75rem}.breadcrumb a{display:inline-flex;align-items:center;min-height:2.75rem;padding-right:.3rem}.breadcrumb{margin-bottom:.3rem}}
.btn.icon.sm{width:2.6rem}
input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}
@media (max-width:639px){.pal-input kbd,.pal-foot{display:none}}
@media (pointer:coarse){.pal-foot{display:none}}
.btn{min-height:2.75rem}.btn.sm{min-height:2.75rem}.btn.icon,.btn.icon.sm{width:2.75rem}
.rel-card .label a{display:inline-flex;align-items:center;min-height:2.75rem;padding:0 .2rem}
@media (max-width:959px){.tl-add summary{min-height:2.75rem}.breadcrumb a{min-width:2.75rem}}
.assistant-fab{position:fixed;right:1rem;bottom:calc(var(--tabbar-h) + 1rem + env(safe-area-inset-bottom));z-index:45;width:3.25rem;height:3.25rem;display:grid;place-items:center;border:0;border-radius:999px;background:var(--accent);color:var(--accent-foreground);box-shadow:var(--shadow-md);cursor:pointer}
.assistant-fab:hover{background:var(--accent-hover)}
.assistant-fab svg.i{width:1.4rem;height:1.4rem}
@media (min-width:960px){.assistant-fab{bottom:1.5rem;right:1.5rem}}
dialog.assistant{width:min(36rem,calc(100% - 2rem));max-height:88dvh;padding:0;border:0;border-radius:var(--radius);background:var(--card);color:var(--foreground);box-shadow:var(--shadow-md)}
dialog.assistant::backdrop{background:rgba(31,42,36,.35)}
dialog.assistant .dlg-body{display:flex;flex-direction:column;gap:.75rem;padding:1rem 1.25rem 1.25rem}
.assistant-log{display:flex;flex-direction:column;gap:.75rem;min-height:12rem;max-height:52dvh;overflow:auto;padding-right:.25rem}
.assistant-log>p.muted{margin:0}
.msg{max-width:88%;padding:.6rem .85rem;border-radius:var(--radius)}
.msg p{margin:0;white-space:pre-wrap;line-height:1.5}
.msg.me{align-self:flex-end;background:var(--primary);color:var(--primary-foreground)}
.msg.bot{align-self:flex-start;background:var(--secondary);color:var(--secondary-foreground)}
.msg.bot.err{background:var(--destructive-soft);color:var(--destructive)}
.assistant-form{display:flex;gap:.5rem}
.assistant-form input{flex:1;min-width:0}
#assistant-busy{margin:0}
dialog.assistant[data-mode=voice] .at,dialog.assistant[data-mode=text] .av{display:none}
dialog.assistant.no-voice #at-speak{display:none}
.av{display:flex;flex-direction:column;gap:.9rem}
.wave{display:flex;align-items:center;gap:.3rem;height:2.75rem}
.wave span{width:.35rem;height:100%;border-radius:999px;background:var(--accent);transform:scaleY(.3)}
.wave span:nth-child(3n+1){transform:scaleY(.2)}.wave span:nth-child(4n+2){transform:scaleY(.65)}.wave span:nth-child(5n){transform:scaleY(1)}
.wave.on span{animation:wave 1s ease-in-out infinite}
.wave.on span:nth-child(2n){animation-delay:-.35s}.wave.on span:nth-child(3n){animation-delay:-.7s}.wave.on span:nth-child(5n){animation-delay:-.15s}
@keyframes wave{0%,100%{transform:scaleY(.2)}50%{transform:scaleY(1)}}
.av-q{margin:0;min-height:1.5em;color:var(--muted-foreground)}
.av-a{margin:0;font-size:clamp(1.25rem,5vw,1.6rem);font-weight:600;line-height:1.35;max-height:34dvh;overflow:auto;white-space:pre-wrap}
.av-a.err{color:var(--destructive)}
.av-note{margin:0;font-size:.85rem}
.av-listen{width:100%;justify-content:center}
.av-actions{display:grid;grid-template-columns:1fr auto 1fr;gap:1rem;align-items:center;margin-top:.5rem}
.av-mic{width:4.5rem;height:4.5rem;display:grid;place-items:center;border:0;border-radius:999px;background:var(--accent);color:var(--accent-foreground);box-shadow:var(--shadow-md);cursor:pointer}
.av-mic svg.i{width:1.9rem;height:1.9rem}
.av-mic:hover{background:var(--accent-hover)}
.av-mic[aria-pressed=true]{animation:micpulse 1.4s ease-out infinite}
@keyframes micpulse{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--accent) 45%,transparent)}100%{box-shadow:0 0 0 1.1rem transparent}}
@media (max-width:640px){dialog.assistant{width:100%;max-width:none;margin:auto 0 0;border-radius:1.25rem 1.25rem 0 0;padding-bottom:env(safe-area-inset-bottom)}}
@media (prefers-reduced-motion:reduce){.wave.on span,.av-mic[aria-pressed=true]{animation:none}}
.anc-card{margin-top:1rem}
.anc-title{font:600 1.25rem var(--font-serif);margin-bottom:.5rem}
.anc-map{display:block;width:100%;max-width:56rem;height:auto;margin:.75rem auto 0}
.anc-bg{fill:#dfe8e4}
.anc-land{fill:var(--card);stroke:var(--border);stroke-width:1;stroke-linejoin:round;fill-rule:evenodd}
.anc-dot{fill:var(--primary);stroke:var(--card);stroke-width:2}
.anc-label{fill:var(--foreground);font:600 13px var(--font-sans);paint-order:stroke;stroke:var(--card);stroke-opacity:.9;stroke-width:4px;stroke-linejoin:round}
.anc-table-wrap{overflow-x:auto}
.anc-table{width:100%;border-collapse:collapse;font-size:.95rem}
.anc-table th,.anc-table td{text-align:left;padding:.55rem .6rem;border-top:1px solid var(--border);vertical-align:top}
.anc-table thead th{border-top:0;color:var(--muted-foreground);font-weight:600}
.anc-who{margin:0;padding:0;list-style:none;display:grid;gap:.2rem}
@media (max-width:640px){
.anc-table,.anc-table tbody{display:block}
.anc-table thead{display:none}
.anc-table tr{display:grid;grid-template-columns:1fr auto;align-items:baseline;gap:.35rem .75rem;padding:.85rem 0;border-top:1px solid var(--border)}
.anc-table th,.anc-table td{border:0;padding:0}
.anc-table td:nth-of-type(1){font-variant-numeric:tabular-nums;font-weight:600;color:var(--accent)}
.anc-table td:nth-of-type(1)::after{content:" pers."}
.anc-table td:nth-of-type(2){grid-column:1/-1;font-size:.95rem}
}
.anc-bars{list-style:none;margin:1rem 0 0;padding:0;display:grid;gap:.6rem}
.anc-bars li{display:grid;grid-template-columns:minmax(8rem,14rem) 1fr 2.5rem;align-items:center;gap:.75rem}
.anc-bar-track{display:block;height:14px;background:var(--muted);border-radius:0 4px 4px 0}
.anc-bar-fill{display:block;height:100%;background:var(--primary);border-radius:0 4px 4px 0;min-width:4px}
.anc-bar-value{font-variant-numeric:tabular-nums;font-weight:600;text-align:right}
.anc-details{margin-top:1rem;display:grid;gap:.4rem}
.anc-details details{border-top:1px solid var(--border);padding:.5rem 0}
.anc-details summary{cursor:pointer;font-weight:600}
.anc-details ul{margin:.5rem 0 0 1.1rem;padding:0}
@media (max-width:640px){.anc-bars li{grid-template-columns:1fr 2rem;row-gap:.25rem}.anc-bar-label{grid-column:1/-1}}
