:root{--bg:#f6f8fa;--card:#fff;--fg:#1f2328;--muted:#656d76;--line:#d0d7de;--accent:#1f6feb;--ok:#1a7f37;--warn:#9a6700;--bad:#cf222e}
@media (prefers-color-scheme:dark){:root{--bg:#0f1115;--card:#161b22;--fg:#e6edf3;--muted:#8b949e;--line:#30363d;--accent:#4493f8;--ok:#3fb950;--warn:#d29922;--bad:#f85149}}
*{box-sizing:border-box}body{margin:0;font:15px/1.45 system-ui,sans-serif;background:var(--bg);color:var(--fg)}
a{color:var(--accent)}.muted{color:var(--muted)}.ok{color:var(--ok)}.warn{color:var(--warn)}.bad{color:var(--bad)}
header.top{display:flex;gap:.75rem;align-items:center;padding:.6rem 1rem;background:var(--card);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5;flex-wrap:wrap}
header.top .brand{font-weight:700;color:var(--accent)}header.top .sp{flex:1}
.layout{display:flex;min-height:calc(100vh - 52px)}
nav.side{width:210px;flex:none;padding:.75rem;border-right:1px solid var(--line);background:var(--card)}
nav.side a{display:block;padding:.45rem .6rem;border-radius:6px;color:var(--fg);text-decoration:none;cursor:pointer}
nav.side a.on,nav.side a:hover{background:var(--bg);color:var(--accent)}
main{flex:1;padding:1rem 1.25rem;min-width:0;max-width:1100px}
.card{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:1rem;margin:0 0 1rem}
.cards{display:flex;gap:.75rem;flex-wrap:wrap;margin-bottom:1rem}.cards .card{margin:0;min-width:150px}
.big{font-size:1.7rem;font-weight:700}
h1{font-size:1.35rem;margin:.2rem 0 1rem}h2{font-size:1.05rem;margin:0 0 .6rem}
table{border-collapse:collapse;width:100%}th,td{padding:.4rem .5rem;border-bottom:1px solid var(--line);text-align:left;vertical-align:top;font-size:14px}th{color:var(--muted);font-weight:600}
input,select,textarea,button{font:inherit;color:var(--fg)}
input,select,textarea{background:var(--card);border:1px solid var(--line);border-radius:6px;padding:.4rem .5rem;max-width:100%}
textarea{width:100%;font-family:ui-monospace,monospace;font-size:13px}
button{background:var(--accent);color:#fff;border:0;border-radius:6px;padding:.4rem .8rem;cursor:pointer}
button.sec{background:var(--card);color:var(--fg);border:1px solid var(--line)}button.bad{background:var(--bad)}button.ok{background:var(--ok);color:#fff}button:disabled{opacity:.5}
.row{display:flex;gap:.6rem;flex-wrap:wrap;align-items:end;margin:.4rem 0}.row label{display:flex;flex-direction:column;font-size:13px;color:var(--muted);gap:.15rem}
.tag{display:inline-block;padding:.05rem .45rem;border-radius:99px;border:1px solid var(--line);font-size:12px}
.tag.pending{color:var(--warn);border-color:var(--warn)}.tag.approved,.tag.posted,.tag.done{color:var(--ok);border-color:var(--ok)}.tag.refused,.tag.rejected,.tag.cancelled,.tag.archived{color:var(--bad);border-color:var(--bad)}
.msg{padding:.5rem .75rem;border-radius:6px;margin:.5rem 0}.msg.err{background:color-mix(in srgb,var(--bad) 14%,transparent);color:var(--bad)}.msg.good{background:color-mix(in srgb,var(--ok) 14%,transparent);color:var(--ok)}
#toast{position:fixed;right:1rem;bottom:1rem;z-index:20;max-width:26rem}
.assistant{position:fixed;right:1rem;bottom:1rem;width:min(26rem,calc(100vw - 2rem));max-height:70vh;display:none;flex-direction:column;background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 30px #0004;z-index:10}
.assistant.open{display:flex}.assistant .log{overflow:auto;padding:.6rem;flex:1;min-height:12rem}.assistant .b{margin:.3rem 0;padding:.4rem .6rem;border-radius:8px;white-space:pre-wrap}
.assistant .b.user{background:var(--accent);color:#fff;margin-left:2rem}.assistant .b.bot{background:var(--bg);margin-right:2rem}
.fab{position:fixed;right:1rem;bottom:1rem;border-radius:99px;padding:.6rem 1rem;z-index:9}
.kv{display:grid;grid-template-columns:minmax(120px,200px) 1fr;gap:.3rem .8rem}.kv div:nth-child(odd){color:var(--muted)}
.kanban{display:flex;gap:.6rem;overflow:auto;padding-bottom:.5rem}.kanban .col{min-width:200px;flex:1}.kanban .col .card{padding:.5rem;margin:.4rem 0}
@media (max-width:760px){.layout{flex-direction:column}nav.side{width:auto;display:flex;overflow:auto;border-right:0;border-bottom:1px solid var(--line)}nav.side a{white-space:nowrap}main{padding:.75rem}.kv{grid-template-columns:1fr}}

main,.card{overflow-wrap:anywhere}.kanban{max-width:100%}pre{white-space:pre-wrap}
@media (max-width:760px){header.top{gap:.4rem}.card{padding:.7rem}.row{gap:.4rem}input,select{max-width:100%}.cards .card{min-width:120px;flex:1}}

/* aide « ? » */
.help{position:relative;display:inline-flex;align-items:center;justify-content:center;width:1.05rem;height:1.05rem;border-radius:99px;border:1px solid var(--muted);color:var(--muted);font-size:.7rem;font-weight:700;cursor:help;flex:none;user-select:none}
.help:hover,.help:focus,.help.open{color:var(--accent);border-color:var(--accent)}
.help .tip{display:none;position:absolute;left:50%;top:1.4rem;transform:translateX(-30%);z-index:30;width:min(22rem,80vw);background:var(--card);color:var(--fg);border:1px solid var(--line);border-radius:8px;padding:.55rem .7rem;box-shadow:0 8px 24px #0004;font-size:.8rem;font-weight:400;line-height:1.4;text-align:left;white-space:normal}
.help:hover .tip,.help:focus .tip,.help.open .tip{display:block}
/* fenetres deroulantes */
.popover{position:absolute;z-index:25;top:2.4rem;left:0;background:var(--card);border:1px solid var(--line);border-radius:8px;box-shadow:0 8px 24px #0004;padding:.4rem}
.chk{display:flex;align-items:center;gap:.3rem;padding:.25rem .5rem;cursor:pointer;white-space:nowrap}.chk:hover{background:var(--bg)}
/* vues interactives (liste, kanban, graphique, tableau croise, hierarchie, planning) */
.dv-bar{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap;margin-bottom:.6rem}.dv-bar .sp{flex:1}
.dv-views button{padding:.3rem .5rem;font-size:13px;background:var(--card);color:var(--fg);border:1px solid var(--line)}.dv-views button.on{background:var(--accent);color:#fff;border-color:var(--accent)}
.dv-pop{min-width:min(44rem,92vw);display:none;gap:1rem;flex-wrap:wrap}.dv-pop.open{display:flex}.dv-pop>div{min-width:12rem}.dv-pop h4{margin:.2rem 0;font-size:.8rem;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}
th.sortable{cursor:pointer}th.sortable:hover{color:var(--accent)}tr.grp td{background:var(--bg);font-weight:600;cursor:pointer}
.dv-kanban{display:flex;gap:.6rem;overflow:auto;align-items:flex-start;padding-bottom:.5rem}.dv-kanban .col{min-width:210px;flex:1;background:var(--bg);border-radius:8px;padding:.4rem}.dv-kanban .col h4{margin:.2rem .3rem;font-size:.85rem}.dv-kanban .card{padding:.5rem;margin:.4rem 0;cursor:pointer}
.dv-graph svg{max-width:100%}.dv-graph text{fill:var(--fg);font-size:12px}
.dv-tree ul{list-style:none;margin:0;padding-left:1.3rem;border-left:1px dashed var(--line)}.dv-tree>ul{border-left:0;padding-left:0}.dv-tree li{margin:.2rem 0}.dv-tree .node{display:inline-flex;gap:.4rem;align-items:center;padding:.25rem .5rem;border:1px solid var(--line);border-radius:6px;background:var(--card);cursor:pointer}
.dv-tl{overflow-x:auto}.dv-tl .row-tl{display:flex;align-items:center;border-bottom:1px solid var(--line);min-height:1.9rem}.dv-tl .lbl{width:11rem;flex:none;padding:.2rem .4rem;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dv-tl .track{position:relative;flex:1;min-width:640px;height:1.9rem}.dv-tl .bar{position:absolute;top:.3rem;height:1.3rem;border-radius:4px;opacity:.9;font-size:11px;color:#fff;padding:0 .25rem;overflow:hidden;white-space:nowrap}
.dv-tl .hdr{display:flex;border-bottom:1px solid var(--line);font-size:11px;color:var(--muted)}.dv-tl .hdr .cell{flex:1;text-align:center;min-width:0;border-left:1px solid var(--line)}.dv-tl .hdr .cell.we{background:var(--bg)}.dv-tl .hdr .cell.today{color:var(--accent);font-weight:700}
