/* ============================================================
   E'potto Studio SEO — design system « minimal premium »
   ============================================================ */

:root{
  --bg:#F7F7F5;
  --surface:#FFFFFF;
  --surface-2:#FBFBFA;
  --hover:#F2F1EE;
  --line:#E8E6E1;
  --line-soft:#EFEDE9;
  --ink:#1B1A18;
  --ink-2:#6F6B64;
  --ink-3:#A6A19A;
  --accent:#2E4EEB;
  --accent-ink:#2440C7;
  --accent-soft:#EEF1FE;
  --accent-line:#D8DEFC;
  --ok:#177E5B;
  --ok-soft:#E7F4EE;
  --warn:#B4540A;
  --warn-soft:#FBF0E4;
  --danger:#C7314C;
  --danger-soft:#FBEAEE;
  --shadow-1:0 1px 2px rgba(24,20,12,.05);
  --shadow-2:0 1px 2px rgba(24,20,12,.04),0 6px 20px rgba(24,20,12,.05);
  --shadow-3:0 2px 6px rgba(24,20,12,.06),0 20px 60px rgba(24,20,12,.12);
  --shadow-pop:0 24px 80px rgba(15,13,10,.28);

  --p1-tx:#0E7167;--p1-bg:#E2F1EF;--p1-dot:#14A08F;
  --p2-tx:#6B2BD3;--p2-bg:#EFEAFB;--p2-dot:#8B5CF6;
  --p3-tx:#08659B;--p3-bg:#E2EFF8;--p3-dot:#2596D1;
  --p4-tx:#96600B;--p4-bg:#F7EFDC;--p4-dot:#D19A2F;
  --p5-tx:#74583C;--p5-bg:#F1EBE2;--p5-dot:#A98861;
  --p6-tx:#B32552;--p6-bg:#FAE8EE;--p6-dot:#E1487C;

  --font:'Inter',ui-sans-serif,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --mono:ui-monospace,"SF Mono","Cascadia Code",Consolas,monospace;
  --ease:cubic-bezier(.25,.6,.3,1);
  --r-s:8px;--r-m:12px;--r-l:16px;
}
:root[data-theme="dark"]{
  --bg:#121214;
  --surface:#1A1A1E;
  --surface-2:#1F1F24;
  --hover:#26262C;
  --line:#2B2B31;
  --line-soft:#242429;
  --ink:#ECECEE;
  --ink-2:#9C9CA5;
  --ink-3:#616169;
  --accent:#8296FF;
  --accent-ink:#9DACFF;
  --accent-soft:#20253C;
  --accent-line:#323C63;
  --ok:#4CC194;
  --ok-soft:#172E26;
  --warn:#E0A257;
  --warn-soft:#332714;
  --danger:#EF7A93;
  --danger-soft:#381B22;
  --shadow-1:0 1px 2px rgba(0,0,0,.25);
  --shadow-2:0 1px 2px rgba(0,0,0,.3),0 6px 20px rgba(0,0,0,.25);
  --shadow-3:0 2px 6px rgba(0,0,0,.3),0 20px 60px rgba(0,0,0,.45);
  --shadow-pop:0 24px 80px rgba(0,0,0,.6);

  --p1-tx:#5FD6C8;--p1-bg:#152E2B;--p1-dot:#2FB3A2;
  --p2-tx:#BCA3F8;--p2-bg:#261F3C;--p2-dot:#9B76F5;
  --p3-tx:#72C2EF;--p3-bg:#132A3A;--p3-dot:#3FA5DC;
  --p4-tx:#E4BC66;--p4-bg:#302712;--p4-dot:#D3A445;
  --p5-tx:#CFB292;--p5-bg:#2C2620;--p5-dot:#B29372;
  --p6-tx:#F28FB4;--p6-bg:#351723;--p6-dot:#E76794;
}

*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{margin:0}
html{color-scheme:light}
html[data-theme="dark"]{color-scheme:dark}
body{
  background:var(--bg);color:var(--ink);font-family:var(--font);
  font-size:14.5px;line-height:1.55;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  font-feature-settings:"cv05","cv11";
}
button{font-family:inherit;cursor:pointer;color:inherit;background:none;border:none;padding:0;font-size:inherit}
input,select,textarea{font-family:inherit;color:inherit;font-size:inherit}
a{color:var(--accent-ink);text-decoration:none}
a:hover{text-decoration:underline}
svg.ic{width:16px;height:16px;flex:0 0 auto;stroke:currentColor;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;vertical-align:-3px}
::selection{background:var(--accent-soft)}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}

.num{font-variant-numeric:tabular-nums}
.wrap{max-width:1180px;margin:0 auto;padding:0 28px}
@media(max-width:720px){.wrap{padding:0 16px}}

/* ============ Topbar ============ */
.topbar{
  position:sticky;top:0;z-index:40;
  background:color-mix(in srgb,var(--bg) 82%,transparent);
  -webkit-backdrop-filter:blur(14px) saturate(1.4);backdrop-filter:blur(14px) saturate(1.4);
  border-bottom:1px solid var(--line-soft);
}
.tb-in{display:flex;align-items:center;gap:16px;height:58px}
.brand{display:flex;align-items:center;gap:10px;min-width:0}
.brand .mark{
  width:28px;height:28px;border-radius:9px;flex:0 0 auto;
  background:linear-gradient(135deg,var(--accent),#7C4DFF);
  color:#fff;display:grid;place-items:center;font-weight:700;font-size:14px;
  box-shadow:0 2px 8px color-mix(in srgb,var(--accent) 35%,transparent);
}
.brand .bt-col{display:flex;flex-direction:column;line-height:1.15}
.brand .bn{font-weight:650;font-size:15px;letter-spacing:-.01em;white-space:nowrap}
.brand .bs{font-size:11px;color:var(--ink-3);font-weight:500;white-space:nowrap}
.tb-actions{display:flex;align-items:center;gap:8px;margin-left:auto}

.btn{
  display:inline-flex;align-items:center;gap:7px;height:32px;padding:0 12px;
  border-radius:var(--r-s);border:1px solid var(--line);background:var(--surface);
  font-size:13px;font-weight:500;color:var(--ink);
  transition:background .16s var(--ease),border-color .16s var(--ease),transform .16s var(--ease),box-shadow .16s var(--ease);
  box-shadow:var(--shadow-1);white-space:nowrap;
}
.btn:hover{background:var(--surface-2);border-color:color-mix(in srgb,var(--line) 60%,var(--ink-3))}
.btn:active{transform:scale(.985)}
.btn.primary{
  background:var(--accent);border-color:var(--accent);color:#fff;
  box-shadow:0 1px 2px rgba(0,0,0,.08),0 4px 14px color-mix(in srgb,var(--accent) 30%,transparent);
}
.btn.primary:hover{background:color-mix(in srgb,var(--accent) 88%,#000);border-color:transparent}
.btn.ghost{border-color:transparent;background:transparent;box-shadow:none;color:var(--ink-2)}
.btn.ghost:hover{background:var(--hover);color:var(--ink)}
.btn.icon{width:32px;padding:0;justify-content:center}
.btn.danger-ghost{border-color:transparent;background:transparent;box-shadow:none;color:var(--danger)}
.btn.danger-ghost:hover{background:var(--danger-soft)}

/* menu déroulant */
.menu-wrap{position:relative}
.menu{
  position:absolute;right:0;top:calc(100% + 6px);min-width:215px;z-index:60;
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-m);
  box-shadow:var(--shadow-3);padding:5px;
  animation:pop .16s var(--ease);
}
@keyframes pop{from{opacity:0;transform:translateY(-4px) scale(.98)}to{opacity:1;transform:none}}
.menu button{
  display:flex;align-items:center;gap:9px;width:100%;text-align:left;
  padding:7px 10px;border-radius:7px;font-size:13px;color:var(--ink);
}
.menu button:hover{background:var(--hover)}
.menu button .ic{color:var(--ink-2)}
.menu hr{border:none;border-top:1px solid var(--line-soft);margin:5px 4px}
.menu .mlabel{font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-3);font-weight:600;padding:6px 10px 3px}

/* ============ Nav ============ */
.nav{display:flex;gap:2px;padding:10px 0 0;overflow-x:auto;scrollbar-width:none}
.nav::-webkit-scrollbar{display:none}
.nav button{
  display:inline-flex;align-items:center;gap:7px;height:34px;padding:0 13px;
  border-radius:9px;font-size:13.5px;font-weight:500;color:var(--ink-2);
  transition:background .15s var(--ease),color .15s var(--ease);position:relative;white-space:nowrap;
  border:1px solid transparent;
}
.nav button:hover{background:var(--hover);color:var(--ink)}
.nav button.on{background:var(--surface);color:var(--ink);font-weight:550;box-shadow:var(--shadow-1);border-color:var(--line-soft)}
.nav .badge{
  min-width:17px;height:17px;padding:0 5px;border-radius:99px;background:var(--accent);color:#fff;
  font-size:10.5px;font-weight:650;display:grid;place-items:center;line-height:1;
}

/* ============ Toolbar ============ */
.toolbar{display:flex;align-items:center;gap:10px;padding:16px 0 14px;flex-wrap:wrap}
.mnav{display:flex;align-items:center;gap:2px}
.mbtn{width:30px;height:30px;border-radius:8px;color:var(--ink-2);display:grid;place-items:center;transition:background .15s}
.mbtn:hover{background:var(--hover);color:var(--ink)}
.mbtn:disabled{opacity:.3;cursor:default}
.mtitle{font-size:15px;font-weight:650;min-width:150px;text-align:center;letter-spacing:-.01em}
.seg{display:inline-flex;background:var(--hover);border-radius:9px;padding:2px;gap:1px}
.seg button{height:26px;padding:0 11px;border-radius:7px;font-size:12.5px;font-weight:500;color:var(--ink-2);transition:all .15s var(--ease)}
.seg button.on{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-1);font-weight:550}
.searchbox{position:relative;display:flex;align-items:center}
.searchbox .ic{position:absolute;left:9px;color:var(--ink-3);width:14px;height:14px}
.search{
  height:32px;border:1px solid var(--line);border-radius:var(--r-s);padding:0 10px 0 29px;
  font-size:13px;background:var(--surface);min-width:170px;box-shadow:var(--shadow-1);
  transition:border-color .15s,box-shadow .15s;
}
.search:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 14%,transparent)}
.chips{display:flex;gap:5px;flex-wrap:wrap;margin-left:auto}
.chip{
  height:24px;padding:0 10px;border-radius:99px;font-size:11.5px;font-weight:600;
  opacity:.38;transition:opacity .13s,transform .13s;display:inline-flex;align-items:center;gap:5px;
}
.chip.on{opacity:1}
.chip:hover{opacity:.85}
.chip:active{transform:scale(.96)}
.chip .cdot{width:6px;height:6px;border-radius:99px;background:currentColor}

.p1{background:var(--p1-bg);color:var(--p1-tx)}.p2{background:var(--p2-bg);color:var(--p2-tx)}
.p3{background:var(--p3-bg);color:var(--p3-tx)}.p4{background:var(--p4-bg);color:var(--p4-tx)}
.p5{background:var(--p5-bg);color:var(--p5-tx)}.p6{background:var(--p6-bg);color:var(--p6-tx)}
.dot1{background:var(--p1-dot)}.dot2{background:var(--p2-dot)}.dot3{background:var(--p3-dot)}
.dot4{background:var(--p4-dot)}.dot5{background:var(--p5-dot)}.dot6{background:var(--p6-dot)}

main{padding:4px 0 90px;min-height:60vh}

/* ============ Cards génériques ============ */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-m);box-shadow:var(--shadow-1)}
.empty{
  padding:34px 20px;text-align:center;color:var(--ink-3);font-size:13.5px;
  display:flex;flex-direction:column;align-items:center;gap:8px;
}
.empty .ic{width:22px;height:22px;color:var(--ink-3)}

/* ============ Dashboard ============ */
.dash{display:flex;flex-direction:column;gap:16px;padding-top:16px}
.statrow{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px}
.scard{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-m);padding:14px 16px 13px;box-shadow:var(--shadow-1)}
.scard .k{font-size:11px;color:var(--ink-3);text-transform:uppercase;letter-spacing:.07em;font-weight:600}
.scard .v{font-size:24px;font-weight:650;margin-top:3px;letter-spacing:-.02em;line-height:1.15}
.scard .v small{font-size:13px;color:var(--ink-3);font-weight:500}
.scard .s{font-size:12.5px;color:var(--ink-2);margin-top:2px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.scard .s.warn{color:var(--warn)}
.pbar{height:4px;border-radius:99px;background:var(--hover);margin-top:10px;overflow:hidden}
.pbar i{display:block;height:100%;border-radius:99px;background:var(--accent);transition:width .5s var(--ease)}

.alertband{
  display:flex;align-items:center;gap:12px;padding:12px 16px;
  background:var(--accent-soft);border:1px solid var(--accent-line);border-radius:var(--r-m);
  color:var(--accent-ink);font-size:13.5px;font-weight:500;
}
.alertband .ic{color:var(--accent-ink)}
.alertband button{margin-left:auto;font-weight:600;color:var(--accent-ink);display:inline-flex;align-items:center;gap:5px}
.alertband button:hover{text-decoration:underline}

.dcols{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media(max-width:860px){.dcols{grid-template-columns:1fr}}
.dcol{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-m);overflow:hidden;box-shadow:var(--shadow-1)}
.dh{padding:11px 15px;border-bottom:1px solid var(--line-soft);font-weight:600;font-size:13.5px;display:flex;align-items:center;gap:8px}
.dh .ic{color:var(--ink-2)}
.dh .more{margin-left:auto;font-size:12px;font-weight:550;color:var(--accent-ink);padding:3px 8px;border-radius:6px;display:inline-flex;align-items:center;gap:4px}
.dh .more:hover{background:var(--accent-soft)}
.drow{
  display:flex;align-items:center;gap:10px;width:100%;text-align:left;
  padding:8px 15px;font-size:13px;border-bottom:1px solid var(--line-soft);
  transition:background .13s;
}
.drow:last-child{border-bottom:none}
.drow:hover{background:var(--surface-2)}
.drow .dd{flex:0 0 auto;font-size:11.5px;color:var(--ink-3);width:52px;font-weight:500}
.drow .pdot{flex:0 0 auto;width:7px;height:7px;border-radius:99px}
.drow .dt{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;flex:1;font-weight:480}
.drow .mini{flex:0 0 auto;font-size:11px;color:var(--ink-3)}
.mline{display:flex;align-items:center;gap:10px;padding:8px 15px;border-bottom:1px solid var(--line-soft);font-size:12.8px}
.mline:last-child{border-bottom:none}
.mline .dd{font-size:11.5px;color:var(--ink-3);width:52px;flex:0 0 auto;font-weight:500}
.mline .tx{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--ink-2)}
.mline b{color:var(--ink);font-weight:550}
.crawlinfo{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink-3);padding:2px 4px}
.crawlinfo .ic{width:13px;height:13px}

/* ============ Calendrier ============ */
.calscroll{overflow-x:auto;border-radius:var(--r-m)}
.cal{min-width:920px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-m);overflow:hidden;box-shadow:var(--shadow-1)}
.dow{display:grid;grid-template-columns:repeat(7,1fr);border-bottom:1px solid var(--line)}
.dow div{padding:8px 12px;font-size:11px;color:var(--ink-3);font-weight:600;text-align:right;text-transform:uppercase;letter-spacing:.05em}
.grid{display:grid;grid-template-columns:repeat(7,1fr)}
.day{min-height:118px;border-right:1px solid var(--line-soft);border-bottom:1px solid var(--line-soft);padding:6px 7px;position:relative;background:var(--surface)}
.day:nth-child(7n){border-right:none}
.day.we{background:var(--surface-2)}
.day.out{background:var(--surface-2)}
.day.out .dnum{opacity:.35}
.dnum{font-size:11.5px;color:var(--ink-3);text-align:right;padding:1px 2px 4px;font-variant-numeric:tabular-nums;font-weight:500}
.dnum .td{
  background:var(--accent);color:#fff;border-radius:99px;padding:2.5px 7px;font-weight:650;
  box-shadow:0 2px 6px color-mix(in srgb,var(--accent) 40%,transparent);
}
.addday{
  position:absolute;top:5px;left:6px;color:var(--ink-3);border-radius:6px;
  width:20px;height:20px;line-height:1;opacity:0;display:grid;place-items:center;
  transition:opacity .13s,background .13s;
}
.day:hover .addday{opacity:1}
.addday:hover{background:var(--hover);color:var(--ink)}
.ev{
  display:flex;align-items:flex-start;gap:6px;width:100%;text-align:left;
  border-radius:7px;padding:4px 8px 4px 7px;font-size:11.8px;line-height:1.35;margin-top:3px;font-weight:500;
  background:var(--surface);border:1px solid var(--line-soft);border-left:3px solid transparent;
  box-shadow:var(--shadow-1);
  transition:transform .14s var(--ease),box-shadow .14s var(--ease),background .14s;
}
.ev:hover{transform:translateY(-1px);box-shadow:var(--shadow-2);background:var(--surface-2)}
.ev .evt{overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.ev .zap{flex:0 0 auto;width:11px;height:11px;margin-top:2px}
.ev.b1{border-left-color:var(--p1-dot)}.ev.b2{border-left-color:var(--p2-dot)}
.ev.b3{border-left-color:var(--p3-dot)}.ev.b4{border-left-color:var(--p4-dot)}
.ev.b5{border-left-color:var(--p5-dot)}.ev.b6{border-left-color:var(--p6-dot)}
.ev.past{opacity:.55}

/* ============ Maillage ============ */
.mwrap{max-width:780px;display:flex;flex-direction:column;gap:12px}
.mcardx{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-m);overflow:hidden;box-shadow:var(--shadow-1)}
.mch{display:flex;gap:10px;align-items:center;padding:10px 14px;border-bottom:1px solid var(--line-soft);flex-wrap:wrap}
.mch .d{font-size:11.5px;color:var(--ink-3);flex:0 0 auto;font-weight:550;text-transform:capitalize}
.mch .lbl{font-size:12.5px;color:var(--ink-2)}
.mbody{padding:8px 14px 10px}
.mlbl{font-size:10.5px;font-weight:650;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-3);margin:3px 0 6px}
.ckrow{display:flex;align-items:center;gap:10px;padding:5px 8px;border-radius:8px;font-size:13px;transition:background .13s}
.ckrow:hover{background:var(--hover)}
.ckrow input{width:15px;height:15px;accent-color:var(--ok);flex:0 0 auto;cursor:pointer}
.ckrow .nm{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.ckrow .when{margin-left:auto;font-size:11px;color:var(--ink-3);flex:0 0 auto}
.ckrow.done{opacity:.42}
.ckrow.done .nm{text-decoration:line-through}
.chipA{
  border-radius:7px;padding:2.5px 9px;font-size:12.5px;font-weight:550;cursor:pointer;
  max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  transition:filter .13s,transform .13s;
}
.chipA:hover{filter:brightness(.94)}
.chipA:active{transform:scale(.97)}

/* ============ Vue d'ensemble ============ */
.board{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:14px}
.bcol{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-m);overflow:hidden;align-self:start;box-shadow:var(--shadow-1)}
.bhead{display:flex;align-items:center;gap:8px;padding:10px 14px;border-bottom:1px solid var(--line-soft)}
.bhead .tag{border-radius:7px;padding:2px 9px;font-size:12px;font-weight:600}
.bhead .cnt{margin-left:auto;font-size:11.5px;color:var(--ink-3);font-weight:500}
.bitem{
  display:flex;align-items:baseline;gap:9px;width:100%;text-align:left;
  padding:5.5px 14px;font-size:12.8px;border-bottom:1px solid var(--line-soft);
  transition:background .13s;
}
.bitem:last-child{border-bottom:none}
.bitem:hover{background:var(--surface-2)}
.bitem .st{flex:0 0 auto;font-size:11px;width:13px}
.bitem .bd{flex:0 0 auto;font-size:11px;color:var(--ink-3);width:48px;font-weight:500}
.bitem .bt{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.bitem.pub .st{color:var(--ok)}
.bitem.fut{color:var(--ink-2)}
.bitem.fut .bt{font-weight:450}

/* ============ Actus ============ */
.alist{max-width:820px;display:flex;flex-direction:column;gap:14px}
.acard{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-m);box-shadow:var(--shadow-1);overflow:hidden;transition:box-shadow .18s var(--ease)}
.acard:hover{box-shadow:var(--shadow-2)}
.acard .ahead{display:flex;align-items:center;gap:9px;padding:11px 16px 0;font-size:11.5px;color:var(--ink-3);font-weight:500}
.acard .ahead .src{color:var(--ink-2);font-weight:550}
.acard .abody{padding:6px 16px 13px}
.acard h3{margin:2px 0 4px;font-size:15.5px;font-weight:630;letter-spacing:-.012em;line-height:1.35}
.acard .asum{font-size:13px;color:var(--ink-2);margin:0 0 10px}
.awhy{
  display:flex;gap:9px;background:var(--warn-soft);border-radius:9px;padding:9px 12px;
  font-size:12.5px;color:var(--ink);margin-bottom:11px;
}
.awhy .ic{color:var(--warn);flex:0 0 auto;margin-top:1px}
.aprop{border:1px solid var(--line-soft);border-radius:10px;padding:10px 12px;background:var(--surface-2);margin-bottom:12px}
.aprop .aplabel{font-size:10.5px;font-weight:650;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-3);margin-bottom:5px}
.aprop .apt{font-size:13.5px;font-weight:570}
.aprop .apmeta{display:flex;gap:6px;flex-wrap:wrap;margin-top:7px;align-items:center}
.tagmini{border-radius:6px;padding:1.5px 8px;font-size:11.5px;font-weight:570}
.tagkw{background:var(--hover);color:var(--ink-2);border-radius:6px;padding:1.5px 8px;font-size:11.5px;font-weight:500}
.afoot{display:flex;gap:8px;align-items:center;padding:0 16px 14px}
.afoot .spacer{flex:1}
.aold{max-width:820px;margin-top:22px}
.aold summary{cursor:pointer;font-size:12.5px;color:var(--ink-3);font-weight:550;padding:6px 2px;list-style:none;display:inline-flex;align-items:center;gap:6px}
.aold summary::-webkit-details-marker{display:none}
.aold .oldrow{display:flex;align-items:center;gap:10px;padding:7px 4px;font-size:12.8px;color:var(--ink-2);border-bottom:1px solid var(--line-soft)}
.aold .oldrow .st-acc{color:var(--ok);font-size:11px;font-weight:600}
.aold .oldrow .st-dis{color:var(--ink-3);font-size:11px;font-weight:500}

/* ============ Mots-clés ============ */
.klist{display:flex;flex-direction:column;gap:12px;max-width:860px}
.kcard{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-m);box-shadow:var(--shadow-1);padding:13px 16px;transition:box-shadow .18s var(--ease)}
.kcard:hover{box-shadow:var(--shadow-2)}
.khead{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.khead .kw{font-size:14.5px;font-weight:620;letter-spacing:-.01em}
.khead .kvol{font-size:12px;color:var(--ink-2);font-weight:550;background:var(--hover);border-radius:6px;padding:2px 8px}
.khead .kclu{font-size:11.5px;color:var(--ink-3)}
.prio{display:inline-flex;gap:2.5px;margin-left:auto}
.prio i{width:5px;height:12px;border-radius:2px;background:var(--hover)}
.prio i.on{background:var(--accent)}
.krat{font-size:12.8px;color:var(--ink-2);margin:7px 0 4px}
.kangles{display:flex;flex-direction:column;gap:6px;margin-top:9px}
.kangle{
  display:flex;align-items:center;gap:10px;border:1px solid var(--line-soft);
  border-radius:9px;padding:7px 8px 7px 12px;background:var(--surface-2);font-size:13px;
}
.kangle .at{flex:1;min-width:0}
.kangle .att{font-weight:540;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.kangle .ata{font-size:11.8px;color:var(--ink-3);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.kangle .btn{height:27px;font-size:12px;padding:0 10px;flex:0 0 auto}
.kfoot{display:flex;gap:8px;margin-top:10px;align-items:center}
.kcov{font-size:11.8px;color:var(--ok);display:inline-flex;align-items:center;gap:5px;font-weight:550}

/* ============ Sheet / modal ============ */
.ov{
  position:fixed;inset:0;background:rgba(20,18,15,.42);
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  display:none;align-items:flex-start;justify-content:center;
  padding:48px 16px;z-index:70;overflow:auto;
}
.ov.on{display:flex;animation:fade .18s var(--ease)}
@keyframes fade{from{opacity:0}to{opacity:1}}
.sheet{
  background:var(--surface);border-radius:var(--r-l);max-width:600px;width:100%;
  box-shadow:var(--shadow-pop);padding:28px 32px 20px;position:relative;
  border:1px solid var(--line-soft);
  animation:rise .22s var(--ease);
}
@keyframes rise{from{opacity:0;transform:translateY(10px) scale(.985)}to{opacity:1;transform:none}}
@media(max-width:620px){.sheet{padding:22px 18px}}
.x{position:absolute;top:14px;right:14px;color:var(--ink-3);width:30px;height:30px;border-radius:8px;display:grid;place-items:center;transition:background .13s}
.x:hover{background:var(--hover);color:var(--ink)}
.ttl{
  width:100%;border:none;background:transparent;font-size:19px;font-weight:650;
  letter-spacing:-.015em;padding:2px 0;line-height:1.35;border-bottom:2px solid transparent;
}
.ttl:focus{outline:none;border-bottom-color:var(--accent)}
.ttl::placeholder{color:var(--ink-3)}
.metarow{display:flex;gap:8px;flex-wrap:wrap;margin:13px 0 2px}
.metarow input,.metarow select{
  border:1px solid var(--line);background:var(--surface);border-radius:var(--r-s);
  padding:6px 10px;font-size:13px;height:33px;box-shadow:var(--shadow-1);
}
.metarow input:focus,.metarow select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 14%,transparent)}
#f_kw{flex:1;min-width:130px}
.callout{
  display:flex;gap:9px;background:var(--warn-soft);border-radius:9px;padding:9px 12px;
  margin:12px 0 0;font-size:12.8px;
}
.callout .ic{color:var(--warn);flex:0 0 auto;margin-top:2px}
.callout a{font-size:12px;word-break:break-all}
.lsec{margin-top:17px}
.lst{font-size:10.5px;font-weight:650;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-3);margin-bottom:6px;display:flex;align-items:center;gap:6px}
.none{font-size:12.8px;color:var(--ink-3);padding:2px 6px}

/* suggestions de maillage */
.sugg{margin-top:17px;border:1px solid var(--accent-line);background:var(--accent-soft);border-radius:10px;padding:10px 12px}
.sugg .lst{color:var(--accent-ink);margin-bottom:7px}
.suggrow{display:flex;align-items:center;gap:8px;padding:4px 2px;font-size:12.8px;min-width:0}
.suggrow .sn{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:520}
.suggrow .swhy{font-size:11px;color:var(--ink-3);flex:0 0 auto}
.suggrow .sadd{
  margin-left:auto;flex:0 0 auto;height:24px;padding:0 9px;border-radius:7px;font-size:11.5px;font-weight:600;
  background:var(--surface);border:1px solid var(--accent-line);color:var(--accent-ink);
  transition:background .13s;display:inline-flex;align-items:center;gap:4px;
}
.suggrow .sadd:hover{background:var(--accent-line)}
.suggrow .sdir{flex:0 0 auto;font-size:10px;font-weight:700;border-radius:5px;padding:1px 5px;background:var(--surface);color:var(--ink-3);border:1px solid var(--line-soft)}

details.opts{margin-top:19px;border-top:1px solid var(--line-soft);padding-top:10px}
details.opts summary{cursor:pointer;font-size:13px;color:var(--ink-2);padding:5px 8px;border-radius:7px;list-style:none;display:inline-flex;align-items:center;gap:6px;font-weight:500}
details.opts summary::-webkit-details-marker{display:none}
details.opts summary:hover{background:var(--hover)}
details.opts summary .ic{transition:transform .18s var(--ease)}
details.opts[open] summary .ic{transform:rotate(90deg)}
.orow{display:grid;grid-template-columns:150px minmax(0,1fr);gap:10px;align-items:center;min-height:32px;margin-top:5px}
.orow > *{min-width:0}
.olabel{color:var(--ink-3);font-size:12.8px;font-weight:500}
.orow input[type=text],.orow select,.orow textarea{
  width:100%;border:1px solid var(--line);background:var(--surface);border-radius:var(--r-s);
  padding:6px 10px;font-size:13px;box-shadow:var(--shadow-1);
}
.orow input[type=text]:focus,.orow select:focus,.orow textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 14%,transparent)}
.orow textarea{resize:vertical;min-height:52px}
.orow label.ck{display:inline-flex;gap:8px;align-items:center;font-size:13px;color:var(--ink-2);cursor:pointer}
.orow label.ck input{accent-color:var(--accent)}
.lbox{border:1px solid var(--line);border-radius:9px;max-height:172px;overflow:auto;margin-top:4px;padding:4px;background:var(--surface)}
.lgrp{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);padding:7px 8px 2px;font-weight:650}
.lopt{display:flex;align-items:center;gap:8px;padding:3.5px 8px;border-radius:7px;font-size:12.8px;color:var(--ink-2);cursor:pointer}
.lopt:hover{background:var(--hover)}
.lopt input{accent-color:var(--accent)}
.lopt .dd{margin-left:auto;font-size:10.5px;color:var(--ink-3)}
.ohint{font-size:11.5px;color:var(--ink-3);margin-top:4px}
.foot{display:flex;justify-content:space-between;align-items:center;margin-top:20px;padding-top:14px;border-top:1px solid var(--line-soft)}

/* ============ Toast ============ */
.toast{
  position:fixed;bottom:26px;left:50%;transform:translateX(-50%) translateY(16px);
  background:var(--ink);color:var(--bg);padding:10px 18px;border-radius:10px;
  font-size:13px;font-weight:550;opacity:0;pointer-events:none;
  transition:all .24s var(--ease);z-index:100;box-shadow:var(--shadow-3);
  display:flex;align-items:center;gap:8px;max-width:calc(100vw - 40px);
}
.toast.on{opacity:1;transform:translateX(-50%) translateY(0)}
.toast.err{background:var(--danger);color:#fff}

/* ============ Login ============ */
.login{
  min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:24px;
  background:
    radial-gradient(1200px 500px at 20% -10%,color-mix(in srgb,var(--accent) 7%,transparent),transparent 60%),
    radial-gradient(900px 400px at 90% 110%,color-mix(in srgb,#7C4DFF 6%,transparent),transparent 60%),
    var(--bg);
}
.lcard{
  width:100%;max-width:392px;background:var(--surface);border:1px solid var(--line);
  border-radius:18px;box-shadow:var(--shadow-3);padding:36px 34px 30px;text-align:center;
  animation:rise .3s var(--ease);
}
.lcard .mark{
  width:44px;height:44px;border-radius:13px;margin:0 auto 14px;
  background:linear-gradient(135deg,var(--accent),#7C4DFF);color:#fff;
  display:grid;place-items:center;font-weight:700;font-size:21px;
  box-shadow:0 6px 20px color-mix(in srgb,var(--accent) 35%,transparent);
}
.lcard h1{font-size:19px;font-weight:680;letter-spacing:-.015em;margin:0 0 4px}
.lcard .lsub{font-size:13px;color:var(--ink-2);margin:0 0 22px}
.lcard input{
  width:100%;height:40px;border:1px solid var(--line);border-radius:10px;padding:0 13px;
  font-size:14px;background:var(--surface);box-shadow:var(--shadow-1);margin-bottom:10px;
}
.lcard input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 14%,transparent)}
.lcard .btn{width:100%;height:40px;justify-content:center;font-size:13.5px;border-radius:10px}
.lcard .lhint{font-size:11.8px;color:var(--ink-3);margin-top:16px;line-height:1.5}
.lsent{display:flex;flex-direction:column;align-items:center;gap:10px;padding:8px 0 2px}
.lsent .ic{width:30px;height:30px;color:var(--ok)}
.lsent p{font-size:13.5px;color:var(--ink-2);margin:0;line-height:1.55}
.lsent b{color:var(--ink)}

/* ============ Skeleton ============ */
.skel{position:relative;overflow:hidden;background:var(--hover);border-radius:8px}
.skel::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--surface) 60%,transparent),transparent);
  animation:shimmer 1.4s infinite;
}
@keyframes shimmer{from{transform:translateX(-100%)}to{transform:translateX(100%)}}
.loadwrap{display:flex;flex-direction:column;gap:14px;padding-top:16px}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}
}

/* ===== EN LIGNE (tableau temps réel) ===== */
.onhead{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;flex-wrap:wrap}
.ontitle-h{font-size:15px;font-weight:600}
.dim{color:var(--ink-3);font-weight:400}
.ontable-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--r-m);background:var(--surface)}
.ontable{width:100%;border-collapse:collapse;font-size:13.5px}
.ontable th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-3);font-weight:600;padding:9px 14px;border-bottom:1px solid var(--line);background:var(--surface-2)}
.ontable td{padding:9px 14px;border-bottom:1px solid var(--line-soft);vertical-align:middle}
.ontable tbody tr:last-child td{border-bottom:none}
.ontable tbody tr:hover td{background:var(--hover)}
.ontable .ondate{white-space:nowrap;color:var(--ink-2);width:74px}
.ontable .oncell a{color:var(--ink);text-decoration:none;font-weight:500}
.ontable .oncell a:hover{color:var(--accent);text-decoration:underline}
.ontable .onlinks{white-space:nowrap;color:var(--ink-2);width:120px}
.onplan{font-size:11px;color:var(--ok);background:var(--ok-soft);border-radius:5px;padding:1px 6px;margin-left:4px;white-space:nowrap}
.onorph{font-size:11px;color:var(--danger);background:var(--danger-soft);border-radius:5px;padding:1px 6px;margin-left:4px}

/* ===== Calendrier : événements EN LIGNE (déjà publié) ===== */
.ev.online{background:var(--ok-soft);border-color:transparent}
.ev.online:hover{background:var(--ok-soft)}
.ev.online .evchk{flex:0 0 auto;width:13px;height:13px;margin-top:1px;color:var(--ok)}
.ev.online .evt{color:var(--ink-2)}
.ev .evorph{flex:0 0 auto;color:var(--danger);font-weight:800;margin-left:auto}
.callegend{display:flex;gap:16px;align-items:center;flex-wrap:wrap;margin:0 0 12px;font-size:12px;color:var(--ink-2)}
.callegend .lg{display:inline-flex;align-items:center;gap:5px}
.callegend .lg .ic{width:14px;height:14px}
.callegend .lg-on{color:var(--ok)}
.callegend .lg-todo .lgdot{width:9px;height:9px;border-radius:2px;background:var(--p1-dot);display:inline-block}
.callegend .lg-orph{color:var(--danger);font-weight:700}

/* ===== Suggestions de maillage ===== */
.sggrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}
.sgcard{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-m);padding:13px 15px;display:flex;flex-direction:column;gap:8px}
.sgcard.orphan{border-color:var(--danger)}
.sghead .sgt{font-size:14px;font-weight:600;line-height:1.3}
.sgtags{display:flex;gap:6px;flex-wrap:wrap;align-items:center;font-size:11.5px}
.sgkw{color:var(--ink-2)}
.sglink{font-size:12px;color:var(--ink-2);display:flex;gap:5px;align-items:baseline;line-height:1.4}
.sglink .ic{width:13px;height:13px;flex:0 0 auto}
.sgfoot{margin-top:2px}
