/* Direction combinée (SaaS + Console) : un seul système visuel */
/* Direction Kiosk × Pulse : sombre par défaut, accent corail → rose-rouge */
:root{
  --bg:#0f0f11; --surface:#17171a; --surface-2:#202024; --border:#26262b; --border-strong:#34343b;
  --text:#fff; --muted:#9b9ba4; --faint:#9b9ba4;
  --accent:#ff5a63; --accent-hover:#ff7a59; --accent-soft:rgba(255,90,99,.14); --on-accent:#17171a;
  --grad:linear-gradient(135deg,#ff7a59,#ff3d6e); --glow:0 6px 22px rgba(255,61,110,.38);
  --ok:#34d399; --ok-soft:rgba(52,211,153,.14); --err:#f0475a; --err-soft:rgba(240,71,90,.16); --warn:#fbbf24; --warn-soft:rgba(251,191,36,.14);
  --card-bg:linear-gradient(180deg,#1b1b1f,#151518); --ring-track:rgba(255,255,255,.07);
  --shadow:0 10px 30px rgba(0,0,0,.35); --shadow-lg:0 24px 60px rgba(0,0,0,.65);
  --accent-text:#ff8590; --ok-text:#6ee7b7; --warn-text:#fcd34d; --err-text:#ff8090;
  --on-danger:#17171a; --focus:#ffe3b8; --field-border:#777780;
  --radius:22px; color-scheme:dark;
}
:root[data-theme="light"]{
  --bg:#f6f4f3; --surface:#fff; --surface-2:#f2eeed; --border:#ebe6e4; --border-strong:#d9d2cf;
  --text:#17171a; --muted:#625b59; --faint:#625b59;
  --accent:#f0405a; --accent-hover:#ff5a43; --accent-soft:#fff0ee;
  --ok:#059669; --ok-soft:#d1fae5; --err:#dc2640; --err-soft:#ffe4e8; --warn:#b45309; --warn-soft:#fef3c7;
  --card-bg:linear-gradient(180deg,#fff,#fff); --ring-track:rgba(0,0,0,.07);
  --accent-text:#b42340; --ok-text:#04724f; --warn-text:#92400e; --err-text:#a31530;
  --on-danger:#fff; --focus:#5b174d; --field-border:#827a77;
  --shadow:0 8px 26px rgba(120,60,50,.08); --shadow-lg:0 24px 60px rgba(0,0,0,.25); color-scheme:light;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;background:var(--bg)}
body{min-height:100vh;display:flow-root}
body{margin:0;background:var(--bg);color:var(--text);font:14px/1.5 "Plus Jakarta Sans",system-ui,-apple-system,sans-serif;font-feature-settings:"cv11","ss01";-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
h1,h2,h3{margin:0;letter-spacing:-.02em;line-height:1.2}
h1{font-size:24px;font-weight:650} h2{font-size:16px;font-weight:600} h3{font-size:14px;font-weight:600}
p{margin:0}
code,.mono{font-family:ui-monospace,"SF Mono",Menlo,monospace;font-size:12.5px}
.muted{color:var(--muted)} .small{font-size:12.5px}

.wrap{max-width:1160px;margin:0 auto;padding:0 16px}

/* Topbar */
.topbar{position:sticky;top:0;z-index:30;background:color-mix(in srgb,var(--bg) 82%,transparent);backdrop-filter:saturate(1.4) blur(12px);border-bottom:1px solid var(--border)}
.topbar .wrap{display:flex;align-items:center;gap:8px;height:56px}
.logo{display:flex;align-items:center;gap:8px;font-weight:700;letter-spacing:-.02em;font-size:15px;margin-right:8px}
.logo i{width:22px;height:22px;border-radius:6px;background:linear-gradient(135deg,#6366f1,#a855f7 60%,#ec4899);display:inline-block}
.nav{display:flex;gap:2px;overflow-x:auto;scrollbar-width:none}
.nav a{padding:6px 10px;border-radius:8px;color:var(--muted);white-space:nowrap;font-weight:500;transition:background .15s,color .15s}
.nav a:hover{background:var(--surface-2);color:var(--text)}
.nav a[aria-current]{color:var(--text);background:var(--surface-2)}
.spacer{flex:1}
.kbd-btn{display:flex;align-items:center;gap:8px;height:34px;padding:0 10px;border:1px solid var(--border);background:var(--surface);color:var(--muted);border-radius:8px;font:inherit;cursor:pointer;min-width:34px;justify-content:center}
.kbd-btn:hover{border-color:var(--border-strong);color:var(--text)}
kbd{font:600 12px ui-monospace,Menlo,monospace;background:var(--surface-2);border:1px solid var(--border);border-bottom-width:2px;border-radius:5px;padding:1px 5px;color:var(--muted)}
.avatar{width:30px;height:30px;border-radius:50%;background:linear-gradient(135deg,#f59e0b,#ef4444);color:var(--on-accent);font-weight:600;font-size:12px;display:grid;place-items:center;flex:none}
@media (max-width:720px){.kbd-btn .lbl,.kbd-btn kbd{display:none}.logo span{display:none}}

/* Buttons & fields */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:34px;padding:0 12px;border-radius:8px;border:1px solid var(--border);background:var(--surface);color:var(--text);font:500 13.5px "Plus Jakarta Sans",sans-serif;cursor:pointer;white-space:nowrap;transition:transform .1s,background .15s,border-color .15s}
.btn:hover{border-color:var(--border-strong);background:var(--surface-2)}
.btn:active{transform:scale(.97)}
.btn.primary{background:var(--accent);border-color:var(--accent-text);color:var(--on-accent)}
.btn.primary:hover{background:var(--accent-hover)}
.btn.danger{background:var(--err);border-color:var(--err-text);color:var(--on-danger)}
.btn.danger:hover{filter:brightness(.92)}
.btn.danger-ghost{color:var(--err-text)}
.btn.sm{height:28px;padding:0 9px;font-size:12.5px}
.btn.lg{height:42px;padding:0 18px;font-size:14.5px}
.btn.icon{width:30px;padding:0;height:30px}
.btn[disabled]{opacity:.45;cursor:not-allowed;transform:none}
.field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
.field label{font-weight:500;font-size:13px}
.input{height:38px;width:100%;padding:0 12px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text);font:inherit;transition:border-color .15s,box-shadow .15s}
.input:focus{border-color:var(--focus)}
select.input{padding-right:8px}

/* Page */
main.wrap{padding-top:28px;padding-bottom:64px}
.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:22px}
.page-head p{color:var(--muted);margin-top:4px}
.crumbs{color:var(--muted);font-size:13px;margin-bottom:8px}
.crumbs a:hover{color:var(--text)}
.actions{display:flex;gap:8px;flex-wrap:wrap}
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}
.pad{padding:18px}

/* Badges */
.badge{display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 8px;border-radius:999px;font-size:12px;font-weight:550;background:var(--surface-2);color:var(--muted);white-space:nowrap}
.badge::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
.badge.ok{background:var(--ok-soft);color:var(--ok-text)}
.badge.err{background:var(--err-soft);color:var(--err-text)}
.badge.warn{background:var(--warn-soft);color:var(--warn-text)}
.badge.warn::before{animation:pulse 1s infinite}
.badge.plain::before{display:none}
@keyframes pulse{50%{opacity:.25}}
.tag{font-size:12px;font-weight:700;letter-spacing:.04em;padding:2px 6px;border-radius:5px;background:var(--surface-2);color:var(--muted)}

/* Stats */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:24px}
.stat{padding:16px}
.stat .n{font-size:28px;font-weight:650;letter-spacing:-.03em;margin-top:4px}
.stat .l{color:var(--muted);font-size:13px}
@media (max-width:760px){.stats{grid-template-columns:1fr 1fr}}

/* Thumbnails */
.thumb{aspect-ratio:16/9;border-radius:8px;border:1px solid var(--border);overflow:hidden;position:relative;background:var(--surface-2);display:flex;flex-direction:column}
.thumb .bar{height:12px;background:var(--surface-2);display:flex;gap:3px;align-items:center;padding:0 6px;flex:none;border-bottom:1px solid var(--border)}
.thumb .bar b{width:4px;height:4px;border-radius:50%;background:var(--border-strong)}
.thumb .body{flex:1;padding:8px;display:grid;gap:5px;align-content:start}
.thumb .hero{height:26px;border-radius:4px}
.thumb.wp .hero{background:linear-gradient(120deg,#38bdf8,#6366f1)}
.thumb.ps .hero{background:linear-gradient(120deg,#f472b6,#fb923c)}
.thumb .row{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}
.thumb .row i{height:18px;border-radius:3px;background:var(--border)}
.thumb .ln{height:4px;border-radius:2px;background:var(--border);width:70%}
.thumb.down .hero,.thumb.down .row i{filter:grayscale(1);opacity:.35}
.thumb .over{position:absolute;inset:12px 0 0;display:none;place-items:center;font-size:12px;font-weight:600;background:color-mix(in srgb,var(--surface) 92%,transparent);backdrop-filter:blur(2px)}
.thumb.down .over,.thumb.busy .over{display:grid}
.thumb.down .over{color:var(--err-text)}.thumb.busy .over{color:var(--warn-text)}

/* Overlays */
.overlay{position:fixed;inset:0;z-index:100;background:rgba(9,9,11,.55);backdrop-filter:blur(3px);display:none;align-items:flex-start;justify-content:center;padding:12vh 16px 16px}
.overlay.open{display:flex;animation:fade .15s}
.overlay.center{align-items:center;padding-top:16px}
@keyframes fade{from{opacity:0}}
@keyframes pop{from{opacity:0;transform:translateY(8px) scale(.98)}}
.modal{width:100%;max-width:460px;background:var(--surface);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow-lg);animation:pop .18s;max-height:100%;overflow:auto}
.modal .head{padding:20px 20px 0}.modal .head p{color:var(--muted);margin-top:6px}
.modal .content{padding:16px 20px}
.modal .foot{display:flex;justify-content:flex-end;gap:8px;padding:14px 20px;border-top:1px solid var(--border);background:var(--surface-2);border-radius:0 0 14px 14px}
.warn-box{display:flex;gap:10px;padding:10px 12px;border-radius:8px;background:var(--err-soft);color:var(--err-text);font-size:13px;margin-bottom:14px}
.palette{max-width:580px;padding:0;overflow:hidden}
.palette input{width:100%;height:52px;border:0;border-bottom:1px solid var(--border);background:transparent;color:var(--text);font:inherit;font-size:15px;padding:0 18px;outline:none}
.palette ul{list-style:none;margin:0;padding:6px;max-height:340px;overflow:auto}
.palette [role=option]{width:100%;border:0;background:transparent;color:inherit;font:inherit;text-align:left;display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:8px;cursor:pointer}
.palette [role=option][aria-selected="true"]{background:var(--accent-soft)}
.palette [role=option] .g{margin-left:auto;font-size:12px;color:var(--faint)}
.palette .empty{padding:24px;text-align:center;color:var(--muted)}
.palette .hint{display:flex;gap:14px;padding:8px 14px;border-top:1px solid var(--border);font-size:12px;color:var(--muted)}
.toasts{position:fixed;bottom:16px;left:50%;transform:translateX(-50%);z-index:200;display:grid;gap:8px;width:calc(100% - 32px);max-width:380px}
.toast{background:var(--text);color:var(--bg);padding:10px 14px;border-radius:10px;font-weight:500;box-shadow:var(--shadow-lg);animation:pop .2s}

/* Progress */
.progress{height:8px;background:var(--surface-2);border-radius:99px;overflow:hidden}
.progress>i{display:block;height:100%;width:0;background:linear-gradient(90deg,#6366f1,#a855f7);border-radius:99px;transition:width .25s}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.seg{display:inline-flex;padding:3px;background:var(--surface-2);border:1px solid var(--border);border-radius:9px;gap:2px}
.seg button{border:0;background:transparent;color:var(--muted);font:500 13px "Plus Jakarta Sans",sans-serif;padding:5px 12px;border-radius:6px;cursor:pointer;height:28px}
.seg button[aria-pressed="true"],.seg button[aria-selected="true"]{background:var(--surface);color:var(--text);box-shadow:0 1px 2px rgba(0,0,0,.12)}

/* ===== Extensions issues de la direction Console, dans le même thème ===== */
.badge.info{background:var(--accent-soft);color:var(--accent-text)}
.role-chip{font-size:12px;font-weight:650;letter-spacing:.03em;text-transform:uppercase;padding:2px 8px;border-radius:99px;background:var(--accent-soft);color:var(--accent-text);white-space:nowrap}
@media (max-width:720px){.role-chip{display:none}}
.logo{white-space:nowrap}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px;align-items:start}
.stack{display:grid;gap:16px}
@media (max-width:900px){.grid2{grid-template-columns:1fr}}
.card-h{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;padding:14px 18px;border-bottom:1px solid var(--border)}
.card-b{padding:18px}
.mb{margin-bottom:16px}
.stat .sub{color:var(--muted);font-size:12.5px;margin-top:2px}
.meter{height:6px;background:var(--surface-2);border-radius:99px;overflow:hidden;margin-top:12px}
.meter>i{display:block;height:100%;background:var(--accent);border-radius:99px}
.meter>i.ok{background:var(--ok)}.meter>i.warn{background:var(--warn)}.meter>i.err{background:var(--err)}
.kv{display:grid;grid-template-columns:110px minmax(0,1fr);gap:10px;padding:8px 0;border-top:1px solid var(--border);font-size:13px;align-items:baseline}
.kv:first-child{border-top:0;padding-top:0}
.kv>span:first-child{color:var(--muted)}
.kv code{overflow-wrap:anywhere}
.svc{display:grid;grid-template-columns:84px minmax(0,1fr) auto;gap:12px;align-items:center;padding:11px 18px}
.svc+.svc{border-top:1px solid var(--border)}
.svc small{display:block;color:var(--muted);font-size:12.5px}
@media (max-width:480px){.svc{grid-template-columns:1fr auto}.svc .badge{grid-column:1/-1;justify-self:start}}
.chart{width:100%;height:auto;display:block}
.chart text{fill:var(--muted);font:12px ui-monospace,Menlo,monospace}
.chart .gl{stroke:var(--field-border);stroke-width:1}
.legend-i{display:flex;gap:12px;font-size:12.5px;color:var(--muted)}
.logl{list-style:none;margin:0;padding:0;max-height:340px;overflow:auto}
.logl li{display:grid;grid-template-columns:96px 72px minmax(0,1fr);gap:12px;align-items:center;padding:8px 18px;font-size:13px}
.logl li+li{border-top:1px solid var(--border)}
.logl time{color:var(--muted);font:12px ui-monospace,Menlo,monospace}
@media (max-width:600px){.logl li{grid-template-columns:1fr;gap:4px}}

/* Tableau dense, triable */
.toolbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:16px}
.toolbar .input{width:240px;max-width:100%}
.toolbar .grow{flex:1}
@media (max-width:600px){.toolbar .input{width:100%}.toolbar .grow{display:none}}
.tw{overflow-x:auto;-webkit-overflow-scrolling:touch}
.tbl{width:100%;border-collapse:collapse;font-size:13px;min-width:760px}
.tbl th{text-align:left;color:var(--muted);font-weight:500;font-size:12px;padding:8px 12px;background:var(--surface-2);white-space:nowrap;border-bottom:1px solid var(--border)}
.tbl td{padding:7px 12px;border-top:1px solid var(--border);vertical-align:middle}
.tbl tbody tr:first-child td{border-top:0}
.tbl tbody tr:hover{background:var(--surface-2)}
.tbl tr.sel{background:var(--accent-soft)}
.tbl .num{text-align:right;font-variant-numeric:tabular-nums}
.tbl th[data-k]{cursor:pointer;user-select:none}
.tbl th[data-k]:hover{color:var(--text)}
.tbl th[aria-sort="ascending"]::after{content:" ↑"}
.tbl th[aria-sort="descending"]::after{content:" ↓"}
.tbl .acts{display:flex;gap:4px;justify-content:flex-end}
.tbl .sub{color:var(--muted);font-size:12px}
.tbl-foot{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap;padding:10px 16px;border-top:1px solid var(--border);color:var(--muted);font-size:12.5px}
.chk{width:16px;height:16px;accent-color:var(--accent-text);cursor:pointer;flex:none}
.empty{padding:48px;text-align:center;color:var(--muted)}

/* Barre d'actions groupées */
.bulk{position:fixed;left:50%;bottom:16px;transform:translate(-50%,140%);transition:transform .25s cubic-bezier(.2,.8,.2,1);z-index:40;background:var(--text);color:var(--bg);border-radius:12px;padding:8px 8px 8px 16px;display:flex;align-items:center;gap:8px;box-shadow:var(--shadow-lg);width:calc(100% - 24px);max-width:680px;flex-wrap:wrap}
.bulk.show{transform:translate(-50%,0)}
.bulk .btn{background:transparent;color:var(--bg);border-color:color-mix(in srgb,var(--bg) 30%,transparent)}
.bulk .btn:hover{background:color-mix(in srgb,var(--bg) 14%,transparent)}
.bulk .btn.primary{background:var(--accent);border-color:var(--accent-text);color:var(--on-accent)}
.bulk b{margin-right:auto}

/* Journal façon terminal (reste sombre dans les deux thèmes) */
.term{background:#0b0d12;color:#c9d1d9;font:12.5px/1.65 ui-monospace,"SF Mono",Menlo,monospace;border-radius:10px;padding:14px;height:320px;overflow:auto;white-space:pre-wrap;word-break:break-word;border:1px solid #1f2430}
.term .pr{color:#a5b4fc}.term .ok{color:#4ade80}.term .wr{color:#fbbf24}.term .dim{color:#6b7280}
.term .cur{display:inline-block;width:7px;height:14px;background:#a5b4fc;vertical-align:-2px;animation:pulse 1s infinite}

/* Étapes, dépôt de fichier, récapitulatif */
.steps{display:flex;gap:8px;margin-bottom:22px;font-size:13px;color:var(--muted);flex-wrap:wrap}
.steps span{display:flex;align-items:center;gap:6px}
.steps b{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;background:var(--surface-2);font-size:12px}
.steps .on{color:var(--text)}.steps .on b{background:var(--accent);color:var(--on-accent)}
.steps .done b{background:var(--ok-soft);color:var(--ok-text)}
.steps .sep{width:20px;height:1px;background:var(--border);align-self:center}
.drop{display:block;border:1.5px dashed var(--border-strong);border-radius:12px;padding:36px 16px;text-align:center;cursor:pointer;transition:border-color .15s,background .15s}
.drop:hover,.drop.over{border-color:var(--accent-text);background:var(--accent-soft)}
.drop .ic{font-size:28px;margin-bottom:6px}
.two{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media (max-width:600px){.two{grid-template-columns:1fr}}
.sum{display:flex;gap:12px;flex-wrap:wrap;margin:14px 0}
.sum div{flex:1;min-width:110px;padding:12px;border-radius:10px;background:var(--surface-2)}
.sum b{display:block;font-size:22px;letter-spacing:-.02em}
.hidden{display:none!important}
.warn-box.soft{background:var(--warn-soft);color:var(--warn-text)}
.chkline{display:flex;gap:8px;align-items:center;font-size:13px;margin-top:12px}
@media (max-width:480px){.stat .n{font-size:22px}.stat{padding:14px}}

/* Logo « kiosque » : auvent rayé + comptoir */
.logo i{background:var(--accent) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M3 9.5 5 4h14l2 5.5z' fill='%23fff'/%3E%3Cpath d='M7 4 6 9.5h3L10 4zm5 0-.5 5.5h3L14 4zm5 0 1 5.5h-3L16 4z' fill='%23c7d2fe'/%3E%3Cpath d='M5 11h14v8H5z' fill='%23fff' opacity='.9'/%3E%3Cpath d='M8 14h8v5H8z' fill='%234f46e5' opacity='.55'/%3E%3C/svg%3E") center/78% no-repeat}

/* ===================== Pulse : surcouche ===================== */
body{font-feature-settings:normal;font-size:14.5px;background:radial-gradient(900px 420px at 85% -120px,color-mix(in srgb,#ff3d6e 14%,transparent),transparent),var(--bg);background-attachment:fixed}
h1{font-weight:800;letter-spacing:-.03em}h2{font-weight:700}
.card{background:var(--card-bg);border:1px solid var(--border);box-shadow:var(--shadow)}
.logo i{background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M3 9.5 5 4h14l2 5.5z' fill='%23fff'/%3E%3Cpath d='M7 4 6 9.5h3L10 4zm5 0-.5 5.5h3L14 4zm5 0 1 5.5h-3L16 4z' fill='%23ffd0cc'/%3E%3Cpath d='M5 11h14v8H5z' fill='%23fff' opacity='.92'/%3E%3Cpath d='M8 14h8v5H8z' fill='%23ff3d6e' opacity='.6'/%3E%3C/svg%3E") center/78% no-repeat,var(--grad);box-shadow:var(--glow);border-radius:8px}
.logo{font-weight:800}
.topbar{background:color-mix(in srgb,var(--bg) 78%,transparent)}
.nav a[aria-current]{color:var(--accent-text);background:var(--accent-soft)}
.kbd-btn{border-radius:999px;background:var(--surface)}
.avatar{background:var(--grad);position:relative;overflow:visible}
.avatar::after{content:"";position:absolute;top:-1px;right:-1px;width:10px;height:10px;border-radius:50%;background:var(--accent);border:2px solid var(--bg)}
.role-chip{background:var(--accent-soft);color:var(--accent-text)}
.btn{border-radius:999px;background:var(--surface);font-weight:600}
.btn.primary{background:var(--grad);border-color:transparent;color:var(--on-accent);box-shadow:var(--glow)}
.btn.primary:hover{background:var(--grad);filter:brightness(1.08)}
.btn.danger{background:var(--err);color:var(--on-danger)}
.btn.icon{border-radius:50%}
.input{border-radius:14px;height:42px;background:var(--surface)}
.seg{border-radius:999px;background:var(--surface)}
.seg button{border-radius:999px;font-weight:600}
.seg button[aria-pressed="true"],.seg button[aria-selected="true"]{background:var(--grad);color:var(--on-accent);box-shadow:var(--glow)}
.badge.info{background:var(--accent-soft);color:var(--accent-text)}
.tag{border-radius:999px;padding:2px 8px}
.tag.wp{background:rgba(255,90,99,.15);color:#ff7a82}.tag.ps{background:rgba(251,191,36,.15);color:#fbbf24}
:root[data-theme="light"] .tag.wp{color:#d62c44}:root[data-theme="light"] .tag.ps{color:#a15207}
.progress{height:10px}.progress>i{background:var(--grad);box-shadow:var(--glow)}
.meter>i{background:var(--grad)}.meter>i.ok{background:var(--ok)}.meter>i.warn{background:var(--warn)}.meter>i.err{background:var(--err)}
.stat .n{font-weight:800;letter-spacing:-.04em;font-size:30px}
.stat .l{font-weight:500}
.stat .sub b,.stat .goal{color:var(--accent-text);font-weight:700}
.modal{border-radius:24px}.modal .foot{background:transparent}
.palette [role=option][aria-selected="true"]{background:var(--accent-soft);color:var(--accent-text)}
.toast{background:var(--surface-2);color:var(--text);border:1px solid var(--border-strong);border-radius:16px}
.bulk{background:var(--surface-2);color:var(--text);border:1px solid var(--border-strong);border-radius:24px}
.bulk .btn{color:var(--text);border-color:var(--border-strong)}
.bulk .btn:hover{background:color-mix(in srgb,var(--text) 10%,transparent)}
.bulk .btn.primary{color:var(--on-accent)}
.tbl th{background:var(--surface-2)}
.tbl tr.sel{background:var(--accent-soft)}
.stu.sel{box-shadow:0 0 0 1px var(--accent),var(--glow)}
.thumb{border-radius:14px}
.thumb.wp .hero{background:linear-gradient(120deg,#ff7a59,#ff3d6e)}
.thumb.ps .hero{background:linear-gradient(120deg,#fbbf24,#ff7a59)}
.term{border-radius:18px}.term .pr{color:#ff9d8a}.term .cur{background:#ff7a59}
.steps .on b{background:var(--grad);color:var(--on-accent);box-shadow:var(--glow)}
.drop{border-radius:22px}.drop:hover,.drop.over{border-color:var(--accent-text);background:var(--accent-soft)}
.warn-box{border-radius:14px}
.mail{border-radius:var(--radius)}
.crumbs{font-size:12.5px}

/* En-tête de bienvenue + carte d'accent */
.hello{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:22px}
.hello .hi{color:var(--muted);font-size:18px}
.hello h1{font-size:42px;line-height:1.05;margin:2px 0 6px}
.hello p{color:var(--muted)}
.hero-card{display:flex;align-items:center;justify-content:space-between;gap:14px;min-width:260px;padding:16px 18px;border-radius:22px;background:var(--grad);color:var(--on-accent);box-shadow:var(--glow);border:1px solid rgba(255,255,255,.2)}
.hero-card .k{font-weight:800;font-size:17px;display:block}
.hero-card .s{font-size:13px;opacity:.92;display:flex;align-items:center;gap:6px;margin-top:2px}
.hero-card .mascot{width:52px;height:52px;border-radius:16px;background:rgba(255,255,255,.92);display:grid;place-items:center;font-size:26px;flex:none;box-shadow:0 6px 16px rgba(0,0,0,.22)}
a.hero-card{transition:transform .15s}a.hero-card:hover{transform:translateY(-2px)}
@media (max-width:760px){.hello h1{font-size:34px}.hero-card{width:100%}}

/* Anneau + indicateurs */
.dash{display:grid;grid-template-columns:1.15fr 1fr;gap:16px;margin-bottom:16px;align-items:stretch}
@media (max-width:900px){.dash{grid-template-columns:1fr}}
.ring-card{padding:18px}
.ring-card .rh{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px}
.ring-card .rh h2{font-size:17px}
.pill{white-space:nowrap;display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 12px;border-radius:999px;background:var(--surface-2);border:1px solid var(--border);color:var(--text);font-size:12.5px;font-weight:600}
.pill.hot{color:var(--accent-text);background:var(--accent-soft);border-color:transparent}
.ring{position:relative;width:min(260px,100%);aspect-ratio:1;margin:6px auto 0}
.ring svg{width:100%;height:100%;display:block;overflow:visible}
.ring .arc{filter:drop-shadow(0 0 7px rgba(255,61,110,.55));transition:stroke-dashoffset 1.1s cubic-bezier(.2,.8,.2,1)}
.ring .mid{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}
.ring .mid small{color:var(--muted);font-size:12.5px}
.ring .mid b{font-size:42px;font-weight:800;letter-spacing:-.04em;line-height:1.05}
.ring .mid .pill{margin-top:8px;height:26px;font-size:12px}
.metrics{display:grid;gap:0;align-content:space-between}
.metric{display:flex;align-items:center;gap:14px;padding:14px 4px;border-bottom:1px solid var(--border);cursor:pointer;background:none;border-left:0;border-right:0;border-top:0;color:inherit;font:inherit;text-align:left;width:100%}
.metric:last-child{border-bottom:0}
.metric .tx{flex:1;min-width:0}
.metric .tx small{display:block;color:var(--muted);font-size:13px}
.metric .tx b{display:block;font-size:24px;font-weight:800;color:var(--accent-text);letter-spacing:-.03em;line-height:1.15}
.metric .tx i{font-style:normal;color:var(--muted);font-size:13px;font-weight:500;margin-left:4px}
.past{width:46px;height:46px;border-radius:50%;display:grid;place-items:center;flex:none;background:var(--surface-2);border:1px solid var(--border);color:var(--accent-text);box-shadow:inset 0 0 14px rgba(255,90,99,.07)}
.past svg{width:22px;height:22px}
.chev{width:26px;height:26px;border-radius:50%;background:var(--surface-2);display:grid;place-items:center;color:var(--muted);flex:none}
.chev svg{width:14px;height:14px}

/* Courbe lumineuse */
.live-card{padding:18px;margin-bottom:16px}
.live-card .lh{display:flex;justify-content:space-between;align-items:center;gap:8px}
.live-card .lh h2{display:flex;align-items:center;gap:8px;font-size:16px}
.live-card .lh h2 svg{color:var(--accent-text);width:20px;height:20px}
.live{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 10px;border-radius:999px;background:var(--accent-soft);color:var(--accent-text);font-size:12px;font-weight:700}
.live::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--accent);animation:pulse 1.2s infinite}
.live-card .lb{display:grid;grid-template-columns:150px 1fr;gap:12px;align-items:center;margin-top:6px}
@media (max-width:620px){.live-card .lb{grid-template-columns:1fr}}
.live-card .big{font-size:44px;font-weight:800;letter-spacing:-.04em;line-height:1}
.live-card .big small{font-size:14px;color:var(--accent-text);font-weight:700;margin-left:4px;letter-spacing:0}
.live-card .zone{color:var(--muted);font-size:13px;margin-top:6px}
.gchart{width:100%;height:auto;display:block;touch-action:none;cursor:crosshair}
.gchart text{fill:var(--muted);font:12px "Plus Jakarta Sans",sans-serif}

/* Lignes de liste : vignette • pastille • titre / sous-titre • valeur • chevron */
.rowi{display:flex;align-items:center;gap:12px;width:100%;padding:10px 12px 10px 10px;border-radius:20px;background:var(--card-bg);border:1px solid var(--border);color:inherit;font:inherit;text-align:left;cursor:pointer;transition:border-color .15s,transform .15s}
.rowi:hover{border-color:var(--border-strong)}
.rowi .th{width:84px;flex:none}
.rowi .th .thumb{border-radius:12px}
.rowi .th .thumb .over{font-size:0}
.rowi .tx{flex:1;min-width:0}
.rowi .tx b{display:block;font-size:15px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rowi .tx small{display:flex;gap:6px;align-items:center;color:var(--muted);font-size:12.5px;flex-wrap:wrap}
.rowi .val{color:var(--accent-text);font-weight:700;white-space:nowrap}
.rowi .chev{transition:transform .2s}
.rowi[aria-expanded="true"] .chev{transform:rotate(90deg);background:var(--accent-soft);color:var(--accent-text)}
.rowi[aria-selected="true"]{border-color:var(--accent-text);box-shadow:0 0 0 1px var(--accent)}
@media (max-width:480px){.rowi .th{width:64px}.rowi .past{display:none}}
.list-sec{display:grid;gap:10px}
.sec-h{display:flex;justify-content:space-between;align-items:baseline;margin:26px 0 12px}
.sec-h h2{font-size:19px}.sec-h a{color:var(--accent-text);font-weight:600;font-size:14px}
.panel{margin:8px 4px 0;padding:16px;border-radius:20px;background:var(--surface);border:1px solid var(--border)}
.panel[hidden]{display:none}

/* Barre d'onglets mobile */
.tabbar{display:none}
@media (max-width:767px){
  body{padding-bottom:104px}
  .topbar .nav{display:none}
  .tabbar{display:flex;position:fixed;left:12px;right:12px;bottom:max(12px,env(safe-area-inset-bottom));height:68px;z-index:35;align-items:center;padding:0 8px;border-radius:30px;background:color-mix(in srgb,var(--surface) 90%,transparent);backdrop-filter:blur(16px);border:1px solid var(--border-strong);box-shadow:var(--shadow-lg)}
  .tabbar a{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;font-size:12px;font-weight:600;color:var(--muted);padding:6px 0}
  .tabbar a svg{width:22px;height:22px}
  .tabbar a[aria-current]{color:var(--accent-text)}
  .tabbar .plus{flex:none;width:62px;height:62px;border-radius:50%;margin:-30px 4px 0;padding:0;border:0;background:var(--grad);color:var(--on-accent);display:grid;place-items:center;box-shadow:0 8px 26px rgba(255,61,110,.5),0 0 0 6px var(--bg);cursor:pointer}
  .tabbar .plus svg{width:28px;height:28px}
  .bulk{bottom:104px}
  .toasts{bottom:104px}
}

.hello>div:first-child{flex:1 1 360px;min-width:0}.hello p{max-width:560px}.hero-card{flex:0 1 320px}
.bulk:not(.show){visibility:hidden;pointer-events:none}
.bulk{transition:transform .25s cubic-bezier(.2,.8,.2,1),visibility 0s .25s}.bulk.show{transition:transform .25s cubic-bezier(.2,.8,.2,1)}

/* Accessibilité commune : contraste, clavier et cibles. */
:where(a,button,input,select,textarea,summary,[tabindex]){scroll-margin-block:80px 140px}
:focus-visible,.input:focus-visible,.palette input:focus-visible,
.btn:focus-visible,.rowi:focus-visible,.tabbar .plus:focus-visible,.seg button:focus-visible{
  outline:3px solid var(--focus);outline-offset:3px;box-shadow:0 0 0 3px var(--surface);
}
.input{border-color:var(--field-border)}
.input::placeholder{color:var(--muted);opacity:1}
.input[aria-invalid=true]{border-color:var(--err-text)}
.drop{border-color:var(--field-border)}
.drop:has(input:focus-visible){outline:3px solid var(--focus);outline-offset:3px;box-shadow:0 0 0 3px var(--surface)}
.skip-link{position:fixed;top:8px;left:8px;z-index:300;padding:12px 18px;background:var(--surface);color:var(--text);border-radius:12px;transform:translateY(-160%)}
.skip-link:focus{transform:translateY(0)}
.modal-open{overflow:hidden}
.sr{padding:0;margin:-1px;border:0;white-space:nowrap;clip-path:inset(50%)}
.btn,.kbd-btn,.nav a,.seg button,summary{min-height:24px;min-width:24px}
.btn.primary,.btn.danger,.btn.icon,.kbd-btn,.account-menu>.avatar{min-height:44px;min-width:44px}
.btn.icon{width:44px;height:44px}
/* break-word et non anywhere : un libellé ne se coupe jamais au milieu d’un mot tant qu’il tient sur une ligne. */
.btn{height:auto;padding-block:7px;white-space:normal;text-align:center;overflow-wrap:break-word}
/* L’attribut hidden l’emporte sur les display des composants (.btn, .field…). */
[hidden]{display:none!important}
.btn.primary,.btn.danger{padding-block:10px}
.btn.sm{height:auto}
.avatar{color:var(--on-accent)}
.btn.danger:hover{filter:none}
.hero-card .s{opacity:1}
.badge::before{flex:none}
.tag.wp,:root[data-theme="light"] .tag.wp{color:var(--accent-text)}
.tag.ps,:root[data-theme="light"] .tag.ps{color:var(--warn-text)}
/* Les jauges utiles restent discernables sur leur piste. */
.meter,.progress{border:1px solid var(--field-border);height:10px}
.meter>i,.progress>i{border:1px solid var(--accent-text)}
.meter>i.ok{background:var(--ok);border-color:var(--ok-text)}
.meter>i.warn{background:var(--warn);border-color:var(--warn-text)}
.meter>i.err{background:var(--err);border-color:var(--err-text)}
.term .dim{color:#9ca3af}
.tw{min-width:0;max-width:100%;border-radius:inherit;overscroll-behavior-x:contain}
.tw:focus-visible{outline-offset:-4px;box-shadow:none}
:where(main,section,article,form,.card,.grid,.grid2,.cols,.dash,.stack,.two,.list-sec)>*{min-width:0}
:where(main,.modal,.task-live,.toast){overflow-wrap:anywhere}
:where(.page-head,.actions,.toolbar,.sec-h,.ring-card .rh,.live-card .lh){min-width:0}
.actions>*{max-width:100%}
.actions .seg{flex-wrap:wrap}
.palette .hint{flex-wrap:wrap;align-items:center}
.palette [role=option]{min-height:44px}
.palette [role=option] .g{color:var(--muted);flex:none}
.palette{display:flex;flex-direction:column}
.palette input{flex:none}
.palette ul{min-height:0;overflow:auto}
.palette li{padding:0;list-style:none}
.palette .empty{padding:24px}
.overlay{height:100dvh;overflow:auto}
.modal{max-height:100%;overscroll-behavior:contain}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
}
@media(forced-colors:active){
  :focus-visible,.input:focus-visible{outline:3px solid Highlight}
  .input,.btn,.seg button{border:1px solid ButtonText}
}

.nav{padding:6px;scroll-padding-inline:6px}
.palette input:focus-visible{outline-offset:-5px;box-shadow:none}
#contenu:has(.has-selection){padding-bottom:180px}
