:root{--bg:#f4f4f5;--panel:#fff;--ink:#18181b;--muted:#71717a;--line:#e4e4e7;--soft:#f4f4f5;--side:#fafafa;--side-ink:#3f3f46;--accent:#18181b;--accent-ink:#fff;--brand:#0f766e;--brand-soft:#e6f4f1;--ok:#15803d;--ok-bg:#e8f6ec;--warn:#a16207;--warn-bg:#fdf4d8;--bad:#b91c1c;--bad-bg:#fdeaea;--info:#1d4ed8;--info-bg:#e8effd;--grey-bg:#f0f0f2;--radius:12px;--radius-sm:8px;--shadow:0 1px 2px #18181b0d;--mono:ui-monospace, "SF Mono", "JetBrains Mono", Menlo, monospace;color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:Inter,ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.45}*{box-sizing:border-box}body{background:var(--bg);overflow-wrap:break-word;margin:0}html{-webkit-text-size-adjust:100%}a{color:var(--brand);text-decoration:none}a:hover{text-decoration:underline}.shell{grid-template-columns:248px 1fr;min-height:100vh;display:grid}.side{background:var(--side);color:var(--side-ink);flex-direction:column;gap:2px;height:100vh;padding:16px 12px;display:flex;position:sticky;top:0;overflow-y:auto}.brand{color:var(--ink);letter-spacing:-.01em;align-items:center;gap:10px;padding:6px 8px 18px;font-size:15px;font-weight:650;display:flex}.brand .logo{background:var(--ink);color:#fff;letter-spacing:0;border-radius:9px;flex:none;place-items:center;width:30px;height:30px;font-size:12px;font-weight:700;display:grid}.brand small{color:var(--muted);letter-spacing:0;font-size:11px;font-weight:400;display:block}.side a{color:var(--side-ink);border-radius:var(--radius-sm);align-items:center;gap:10px;padding:8px 10px;font-weight:500;display:flex}.side a .icon{color:#71717a;flex:none}.side a:hover{color:var(--ink);background:#efeff1;text-decoration:none}.side .sep{color:var(--muted);margin:18px 10px 6px;font-size:12px}.side .me{border-top:1px solid var(--line);margin-top:auto;padding:12px 4px 0;font-size:12px}.who{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);box-shadow:var(--shadow);align-items:center;gap:10px;padding:8px;display:flex}.who .avatar{background:var(--soft);border:1px solid var(--line);width:32px;height:32px;color:var(--side-ink);border-radius:50%;flex:none;place-items:center;font-size:11px;font-weight:600;display:grid}.who .id{min-width:0;color:var(--muted);flex-direction:column;flex:1;display:flex}.who .id b{color:var(--ink);white-space:nowrap;text-overflow:ellipsis;font-size:13px;overflow:hidden}.who form{margin:0}button.ghost{color:var(--muted);background:0 0;border:0;border-radius:6px;place-items:center;padding:6px;display:grid}button.ghost:hover{background:var(--soft);color:var(--ink)}.main{background:var(--panel);border:1px solid var(--line);min-width:0;box-shadow:var(--shadow);border-radius:16px;margin:10px 10px 10px 0;padding:28px 32px 56px}h1{letter-spacing:-.02em;margin:0 0 4px;font-size:22px;font-weight:650}h2{letter-spacing:-.01em;margin:0 0 12px;font-size:15px;font-weight:600}.sub{color:var(--muted);margin:0 0 20px}.row{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.spread{justify-content:space-between}.grid{gap:14px;display:grid}.g4{grid-template-columns:repeat(auto-fit,minmax(min(190px,100%),1fr))}.g2{grid-template-columns:repeat(auto-fit,minmax(min(380px,100%),1fr))}.grid>*{min-width:0}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);min-width:0;padding:18px}.card:has(>table){overflow-x:auto}.kpi .label{color:var(--muted);font-size:13px;font-weight:500}.kpi .value{font-variant-numeric:tabular-nums;letter-spacing:-.02em;margin-top:6px;font-size:26px;font-weight:650}.kpi .hint{color:var(--muted);margin-top:2px;font-size:12px}table{border-collapse:collapse;background:var(--panel);width:100%}:is(.tablewrap,.card:has(>table)){background-image:linear-gradient(to right, var(--panel) 30%, transparent), linear-gradient(to left, var(--panel) 30%, transparent), linear-gradient(to right, #00000024, transparent), linear-gradient(to left, #00000024, transparent);background-position:0,100%,0,100%;background-repeat:no-repeat;background-size:40px 100%,40px 100%,12px 100%,12px 100%;background-attachment:local,local,scroll,scroll}:is(.tablewrap table,.card:has(>table)>table){background:0 0}.tablewrap{background-color:var(--panel);border:1px solid var(--line);border-radius:var(--radius);-webkit-overflow-scrolling:touch;max-width:100%;overflow-x:auto}th,td{text-align:left;border-bottom:1px solid var(--line);white-space:nowrap;padding:11px 14px}th{color:var(--muted);background:#fafafab3;font-size:12.5px;font-weight:500;position:sticky;top:0}tr:last-child td{border-bottom:0}tbody tr:hover{background:#00000004}.num{text-align:right;font-variant-numeric:tabular-nums}.mono{font-family:var(--mono);font-size:12.5px}.muted{color:var(--muted)}.small{font-size:12px}.pill{border-radius:999px;align-items:center;gap:6px;padding:2px 10px;font-size:12px;font-weight:550;display:inline-flex}.pill:before{content:"";opacity:.85;background:currentColor;border-radius:50%;width:6px;height:6px}.s-PENDING{background:var(--warn-bg);color:var(--warn)}.s-IN_BATCH{background:var(--info-bg);color:var(--info)}.s-SUCCESS{background:var(--ok-bg);color:var(--ok)}.s-FAILED{background:var(--bad-bg);color:var(--bad)}.s-CANCELLED{background:var(--grey-bg);color:var(--muted)}.s-OPEN{background:var(--info-bg);color:var(--info)}.s-CLOSED{background:var(--grey-bg);color:var(--muted)}.s-DEAD{background:var(--bad-bg);color:var(--bad)}button,.btn{font:inherit;border:1px solid var(--line);color:var(--ink);border-radius:var(--radius-sm);cursor:pointer;box-shadow:var(--shadow);background:#fff;padding:8px 14px;font-weight:500;line-height:1.4;display:inline-block}button:hover,.btn:hover{background:#fafafa;border-color:#d4d4d8;text-decoration:none}.primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent);font-weight:600}.primary:hover{background:#2f2f35;border-color:#2f2f35}.danger{color:var(--bad)}.okbtn{color:var(--ok)}button:disabled{opacity:.5;cursor:not-allowed}input,select,textarea{font:inherit;border:1px solid var(--line);border-radius:var(--radius-sm);max-width:100%;color:var(--ink);box-shadow:var(--shadow);background:#fff;padding:8px 12px}input::placeholder{color:#a1a1aa}input[type=checkbox]{box-shadow:none;accent-color:var(--ink);width:16px;height:16px}input:focus,select:focus,textarea:focus{outline-offset:1px;border-color:#a1a1aa;outline:2px solid #d4d4d8}label{color:var(--side-ink);flex-direction:column;gap:5px;font-size:12.5px;font-weight:500;display:flex}form.inline{flex-wrap:wrap;align-items:flex-end;gap:10px;display:flex}.alert{border-radius:6px;margin-bottom:16px;padding:10px 14px}.alert.ok{background:var(--ok-bg);color:var(--ok)}.alert.err{background:var(--bad-bg);color:var(--bad)}.alert.warn{background:var(--warn-bg);color:var(--warn)}h1{overflow-wrap:anywhere}.secret{font-family:var(--mono);color:#b7f5c9;word-break:break-all;background:#18181b;border-radius:6px;padding:12px}.chart{gap:10px;margin-top:14px;display:flex}.chart-y{height:240px;color:var(--muted);text-align:right;font-variant-numeric:tabular-nums;flex-direction:column;justify-content:space-between;min-width:38px;font-size:11.5px;display:flex}.chart-y span{line-height:1;transform:translateY(-50%)}.chart-y span:last-child{transform:translateY(0)}.chart-plot{flex:1;min-width:0}.chart-plot svg{width:100%;height:240px;display:block;overflow:visible}.chart-grid{stroke:var(--line);stroke-width:1px}.chart-area{fill:var(--brand);opacity:.28}.chart-line{fill:none;stroke:var(--brand);stroke-width:1.6px}.chart-hit{fill:#0000}.chart-hit:hover{fill:#0f766e14}.chart-x{height:22px;color:var(--muted);margin-top:8px;font-size:11.5px;position:relative}.chart-x span{white-space:nowrap;position:absolute;transform:translate(-50%)}.chart-x span:first-child{transform:none}.chart-x span:last-child{transform:translate(-100%)}.timeline{margin:0;padding:0;list-style:none}.timeline li{border-bottom:1px dashed var(--line);padding:8px 0}.timeline li:last-child{border:0}.pager{align-items:center;gap:8px;margin-top:12px;display:flex}.login{max-width:380px;margin:14vh auto;padding:28px;box-shadow:0 8px 30px #18181b0f}.login .brand{padding:0 0 20px}.login button{width:100%;padding:10px}.login form{flex-direction:column;gap:12px;display:flex}dl.kv{grid-template-columns:160px 1fr;gap:8px 16px;margin:0;display:grid}dl.kv dt{color:var(--muted)}dl.kv dd{margin:0}.hero{background:var(--ink);border-color:var(--ink);color:#fff;grid-column:span 2;padding:20px 22px}.hero .label{color:#a1a1aa;align-items:center;gap:8px;font-size:13px;font-weight:500;display:flex}.hero .label:before{content:"";background:#fbbf24;border-radius:50%;width:8px;height:8px;box-shadow:0 0 0 4px #fbbf2433}.hero-row{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:12px 24px;margin-top:10px;display:flex}.hero .amount{letter-spacing:-.03em;font-variant-numeric:tabular-nums;white-space:nowrap;font-size:40px;font-weight:700;line-height:1.05}.hero .count{white-space:nowrap;background:#ffffff1a;border-radius:999px;align-items:baseline;gap:8px;padding:6px 14px;display:flex}.hero .count b{font-variant-numeric:tabular-nums;font-size:24px;font-weight:700}.hero .count span{color:#d4d4d8;font-size:13px}.hero .hint{color:#a1a1aa;margin-top:12px;font-size:12.5px}.hero.idle{background:var(--panel);border-color:var(--line);color:var(--ink)}.hero.idle .label,.hero.idle .hint{color:var(--muted)}.hero.idle .label:before{background:var(--ok);box-shadow:0 0 0 4px #15803d26}.hero.idle .count{background:var(--soft)}.hero.idle .count span{color:var(--muted)}.side a.active{color:var(--ink);background:#e9e9ec}.side a.active .icon{color:var(--ink)}.live{color:var(--muted);font-variant-numeric:tabular-nums;align-items:center;gap:7px;margin:0 6px 10px;font-size:11.5px;display:flex}.live .dot{background:#35c37a;border-radius:50%;width:7px;height:7px;animation:2s infinite pulse;box-shadow:0 0 #35c37a99}@keyframes pulse{70%{box-shadow:0 0 0 6px #35c37a00}to{box-shadow:0 0 #35c37a00}}.steps{grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:14px;margin-bottom:18px;display:grid}.step{border-top:3px solid var(--line);padding-top:20px;position:relative}.step.current{border-top-color:var(--brand)}.step.done{border-top-color:var(--ok)}.step .n{background:var(--grey-bg);width:26px;height:26px;color:var(--muted);border-radius:50%;place-items:center;margin-bottom:10px;font-weight:700;display:grid}.step.current .n{background:var(--brand);color:#fff}.step.done .n{background:var(--ok);color:#fff}.step h2{margin-bottom:6px}.step p{margin:0 0 12px}.step .btn,.step button{text-align:center;width:100%}.okfill{background:var(--ok);border-color:var(--ok)}.okfill:hover{background:#10633b}.progress{background:var(--grey-bg);border-radius:999px;height:8px;display:flex;overflow:hidden}.progress .ok{background:var(--ok)}.progress .ko{background:var(--bad)}.drop{text-align:center;border-radius:var(--radius);color:var(--muted);cursor:pointer;background:#fafafa;border:1.5px dashed #d4d4d8;flex-direction:column;align-items:center;gap:4px;padding:16px 12px;font-weight:400;transition:border-color .15s,background .15s;display:flex;position:relative}.drop strong{color:var(--ink);font-size:13px}.drop:hover,.drop.over{border-color:var(--brand);background:var(--brand-soft)}.drop.busy{opacity:.7;cursor:progress}.drop input{opacity:0;cursor:pointer;height:100%;padding:0;position:absolute;inset:0;width:100%!important}button,.btn{white-space:nowrap;transition:background .12s,border-color .12s}.btn.small,button.small{padding:4px 10px;font-size:12px}.card{box-shadow:var(--shadow)}.mono{color:inherit}td a.mono,td a{font-weight:500}button:focus-visible,.btn:focus-visible,a:focus-visible{outline-offset:2px;outline:2px solid #a1a1aa}.alert{border:1px solid #0000}.alert.ok{border-color:#bfe5cf}.alert.err{border-color:#f6c6c1}.alert.warn{border-color:#f2dba8}@media (max-width:1100px){.shell{grid-template-columns:208px 1fr}.main{padding:22px 20px 50px}}@media (max-width:800px){.shell{grid-template-columns:1fr;display:block}.side{z-index:10;-webkit-overflow-scrolling:touch;scrollbar-width:none;border-bottom:1px solid var(--line);flex-flow:row;align-items:center;gap:2px;height:auto;padding:8px 10px;position:sticky;top:0;overflow:auto hidden}.side::-webkit-scrollbar{display:none}.side a{white-space:nowrap;flex:none;padding:8px 10px}.side .sep,.brand small,.brand>span:last-child{display:none}.brand{flex:none;padding:0 6px 0 2px}.side .me{border:0;flex:none;margin:0 0 0 auto;padding:0 0 0 8px}.side .me .live,.who .avatar,.who .id{display:none}.who{border-radius:var(--radius-sm);padding:2px}.main{border-radius:14px;margin:8px;padding:18px 14px 40px}h1{font-size:19px}.card{padding:14px}.kpi .value{font-size:20px}.g2{grid-template-columns:1fr}th,td{padding:8px 10px}dl.kv{grid-template-columns:110px 1fr;gap:6px 10px}.pager{flex-wrap:wrap}.chart-y{min-width:30px;height:180px}.chart-plot svg{height:180px}}@media (max-width:600px){.g4{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}form.inline,.card.row{flex-direction:column;align-items:stretch}form.inline>*,.card.row>*{width:100%!important}form.inline label,.row>label{width:100%}input:not([type=checkbox]):not([type=radio]),select,textarea{padding:10px;font-size:16px;width:100%!important}input[type=checkbox]{width:18px;height:18px}button,.btn{text-align:center;padding:10px 14px}button.small,.btn.small{padding:8px 12px}.row.spread{align-items:stretch;margin-bottom:12px}.row.spread>.btn,.card .row>.btn,form .row>select,form .row>input,form .row>button{flex:100%}td form.row{flex-wrap:nowrap;min-width:200px}td form.row>*{flex:auto!important;width:auto!important}.login{max-width:none;margin:8vh 12px;padding:22px}.alert{padding:10px 12px}:is(.tablewrap,.card:has(>table)){background-image:none;overflow-x:visible}.tablewrap:has(thead){background:0 0;border:0;border-radius:0}table:has(thead){width:100%;display:block}table:has(thead)>tbody{width:100%;display:block}table:has(thead)>tbody>tr{width:100%;display:block}table:has(thead)>tbody>tr>td{width:100%;display:block}table:has(thead)>thead{display:block}table:has(thead)>thead>tr{display:block}table:has(thead)>thead th{display:none}table:has(thead)>thead th:has(input){background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);justify-content:space-between;align-items:center;margin-bottom:8px;padding:10px 12px;display:flex;position:static}table:has(thead)>thead th:has(input):before{content:"Tout sélectionner"}table:has(thead)>tbody>tr{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:8px;padding:8px 12px}table:has(thead)>tbody>tr:hover{background:var(--panel)}table:has(thead)>tbody>tr>td{white-space:normal;text-align:right;overflow-wrap:anywhere;border:0;justify-content:space-between;align-items:flex-start;gap:14px;padding:5px 0;display:flex}table:has(thead)>tbody>tr>td:before{content:attr(data-label);max-width:45%;color:var(--muted);text-align:left;flex:none;padding-top:1px;font-size:12px}:is(table:has(thead)>tbody>tr>td:empty,table:has(thead)>tbody>tr>td[data-label=""]:not(:has(*))){display:none}table:has(thead)>tbody>tr>td[colspan]{text-align:left;justify-content:flex-start}table:has(thead)>tbody>tr>td>div{text-align:right}table:has(thead)>tbody>tr>td form.row{flex:auto;justify-content:flex-end;min-width:0}.card table:has(thead)>tbody>tr{border-width:0 0 1px;border-radius:0;margin:0;padding:8px 0}.card table:has(thead)>tbody>tr:last-child{border:0}table:not(:has(thead)){display:block}table:not(:has(thead))>tbody{display:block}table:not(:has(thead))>tbody>tr{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:2px 12px;padding:8px 0;display:flex}table:not(:has(thead))>tbody>tr:last-child{border-bottom:0}table:not(:has(thead)) td{white-space:normal;overflow-wrap:anywhere;border:0;padding:0}.hero{padding:16px}.hero .amount{font-size:30px}.hero .count b{font-size:20px}}@media (max-width:360px){.g4{grid-template-columns:1fr}.hero{grid-column:span 1}.hero .amount{font-size:26px}}
