SPB Git forge

spb/admin-ka

Public
41commits 1branches 0releases
172.9 MBsize
maindefault branch
19 days agolast push
JavaScript 65.5% Python 17.8% CSS 13% HTML 3.7%

v3.1 — modernisation du style : hairlines + ombres douces (fin des bordures 2px/ombres décalées), rayons contenus, typo sobre, segmented controls et tags nets — Linear/Vercel-like, identité crème+orange conservée

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Simon-Pierre Boucher committed 28 days ago (Aug 26, 2026) parent bb0eef5

1 changed file +232 −92

modified public/style.css +232 −92
@@ -47,7 +47,7 @@ button { font-family: inherit; color: inherit; }
47 47 display: inline-flex; align-items: center; justify-content: center;
48 48 width: 34px; height: 34px; border-radius: 11px;
49 49 background: var(--orange); color: var(--ink);
50 border: 2px solid var(--edge); box-shadow: var(--bshadow-sm);
50 + border: 1px solid var(--edge); box-shadow: var(--bshadow-sm);
51 51 font-weight: 800; font-size: 15px; letter-spacing: -0.2px;
52 52 flex-shrink: 0;
53 53 }
@@ -56,20 +56,20 @@ button { font-family: inherit; color: inherit; }
56 56
57 57 .btn-cta {
58 58 background: var(--orange); color: var(--ink);
59 border: 2px solid var(--edge); border-radius: 999px;
59 + border: 1px solid var(--edge); border-radius: 999px;
60 60 box-shadow: var(--bshadow);
61 61 font-weight: 800; font-size: 16px; padding: 13px 22px; cursor: pointer;
62 62 transition: transform 0.08s, box-shadow 0.08s;
63 63 }
64 .btn-cta:active { transform: translate(2px, 2px); box-shadow: 1px 1px 0 var(--shadow); }
64 +.btn-cta:active { transform: translate(2px, 2px); box-shadow: none; }
65 65 .btn-cta.small { font-size: 13.5px; padding: 8px 16px; box-shadow: var(--bshadow-sm); }
66 66 .btn-ghost {
67 background: var(--card); border: 1.5px solid var(--edge); border-radius: 999px;
67 + background: var(--card); border: 1px solid var(--edge); border-radius: 999px;
68 68 font-weight: 700; font-size: 13.5px; padding: 10px 16px; cursor: pointer;
69 69 }
70 70 .btn-danger {
71 71 display: block; margin: 18px auto calc(20px);
72 background: var(--card); border: 2px solid var(--bad); color: var(--bad);
72 + background: var(--card); border: 1px solid var(--bad); color: var(--bad);
73 73 border-radius: 999px; font-weight: 800; font-size: 14.5px; padding: 12px 26px; cursor: pointer;
74 74 }
75 75
@@ -82,15 +82,15 @@ button { font-family: inherit; color: inherit; }
82 82 }
83 83 .login-box {
84 84 width: 100%; max-width: 360px;
85 background: var(--card); border: 2px solid var(--edge); border-radius: var(--r-xl);
86 box-shadow: 6px 6px 0 var(--shadow);
85 + background: var(--card); border: 1px solid var(--edge); border-radius: var(--r-xl);
86 + box-shadow: var(--bshadow);
87 87 padding: 34px 26px 26px;
88 88 display: flex; flex-direction: column; gap: 13px; text-align: center;
89 89 }
90 90 .login-title { margin: 6px 0 0; font-size: 27px; font-weight: 800; letter-spacing: -0.5px; }
91 91 .login-sub { margin: 0 0 8px; color: var(--muted); font-size: 13.5px; font-weight: 600; }
92 92 .login input {
93 background: var(--bg); border: 2px solid var(--edge); color: var(--ink);
93 + background: var(--bg); border: 1px solid var(--edge); color: var(--ink);
94 94 border-radius: var(--r-md); padding: 14px 16px; font-size: 16px; outline: none;
95 95 font-family: inherit;
96 96 }
@@ -105,14 +105,14 @@ button { font-family: inherit; color: inherit; }
105 105 position: sticky; top: 0; z-index: var(--z-header);
106 106 display: flex; align-items: center; justify-content: space-between; gap: 10px;
107 107 background: var(--bg);
108 border-bottom: 2px solid var(--edge);
108 + border-bottom: 1px solid var(--edge);
109 109 padding: 8px 14px;
110 110 padding-top: calc(8px + env(safe-area-inset-top));
111 111 }
112 112 .brand { display: flex; align-items: center; gap: 10px; font-weight: 800; font-size: 19px; letter-spacing: -0.4px; }
113 113 .conn-pill {
114 114 display: flex; align-items: center; gap: 6px;
115 border: 1.5px solid var(--edge); border-radius: 999px;
115 + border: 1px solid var(--edge); border-radius: 999px;
116 116 background: var(--card); font-size: 11.5px; font-weight: 700;
117 117 padding: 4px 10px;
118 118 }
@@ -125,7 +125,7 @@ button { font-family: inherit; color: inherit; }
125 125 .banners { position: fixed; top: calc(52px + env(safe-area-inset-top)); left: 0; right: 0; z-index: var(--z-banner); display: flex; flex-direction: column; gap: 8px; padding: 8px 14px; pointer-events: none; }
126 126 .banner {
127 127 pointer-events: auto; cursor: pointer;
128 border: 2px solid var(--edge); border-radius: var(--r-md);
128 + border: 1px solid var(--edge); border-radius: var(--r-md);
129 129 box-shadow: var(--bshadow); padding: 11px 14px;
130 130 font-weight: 700; font-size: 13.5px;
131 131 display: flex; gap: 10px; align-items: center;
@@ -148,7 +148,7 @@ button { font-family: inherit; color: inherit; }
148 148 position: fixed; bottom: 0; left: 0; right: 0; z-index: var(--z-nav);
149 149 display: flex;
150 150 background: var(--card);
151 border-top: 2px solid var(--edge);
151 + border-top: 1px solid var(--edge);
152 152 padding: 6px 8px calc(6px + env(safe-area-inset-bottom));
153 153 }
154 154 .nav-btn {
@@ -164,21 +164,21 @@ button { font-family: inherit; color: inherit; }
164 164 .nav-btn .badge {
165 165 position: absolute; top: 3px; right: calc(50% - 17px);
166 166 width: 9px; height: 9px; border-radius: 50%;
167 background: var(--orange); border: 1.5px solid var(--edge);
167 + background: var(--orange); border: 1px solid var(--edge);
168 168 }
169 169
170 170 /* ================= Vue chat ================= */
171 171 .chatbar {
172 172 display: flex; gap: 7px; align-items: center;
173 173 padding: 9px 12px; overflow-x: auto; scrollbar-width: none;
174 border-bottom: 1.5px solid var(--line);
174 + border-bottom: 1px solid var(--line);
175 175 background: var(--bg);
176 176 }
177 177 .chatbar::-webkit-scrollbar { display: none; }
178 178 .pill-select {
179 179 appearance: none; -webkit-appearance: none;
180 180 background: var(--card); color: var(--ink);
181 border: 2px solid var(--edge); border-radius: 999px;
181 + border: 1px solid var(--edge); border-radius: 999px;
182 182 font-weight: 800; font-size: 13.5px; font-family: inherit;
183 183 padding: 7px 26px 7px 13px;
184 184 box-shadow: var(--bshadow-sm);
@@ -187,7 +187,7 @@ button { font-family: inherit; color: inherit; }
187 187 background-repeat: no-repeat; background-position: right 9px center; background-size: 12px;
188 188 }
189 189 .chip {
190 border: 1.5px solid var(--edge); border-radius: 999px;
190 + border: 1px solid var(--edge); border-radius: 999px;
191 191 background: var(--card2); font-weight: 700; font-size: 12.5px;
192 192 padding: 7px 12px; cursor: pointer; white-space: nowrap; flex-shrink: 0;
193 193 }
@@ -197,7 +197,7 @@ button { font-family: inherit; color: inherit; }
197 197 .sess-meta {
198 198 display: flex; gap: 12px; flex-wrap: wrap;
199 199 padding: 6px 14px; font-size: 11px; font-family: var(--mono); color: var(--muted);
200 border-bottom: 1.5px solid var(--line); background: var(--card2);
200 + border-bottom: 1px solid var(--line); background: var(--card2);
201 201 }
202 202
203 203 .messages {
@@ -212,14 +212,14 @@ button { font-family: inherit; color: inherit; }
212 212 .msg-user {
213 213 align-self: flex-end; max-width: 86%;
214 214 background: var(--orange); color: var(--ink);
215 border: 2px solid var(--edge); border-radius: var(--r-lg) var(--r-lg) 6px var(--r-lg);
215 + border: 1px solid var(--edge); border-radius: var(--r-lg) var(--r-lg) 6px var(--r-lg);
216 216 box-shadow: var(--bshadow-sm);
217 217 padding: 10px 15px; font-weight: 600;
218 218 white-space: pre-wrap; word-break: break-word;
219 219 }
220 220 .msg-claude {
221 221 align-self: stretch;
222 background: var(--card); border: 2px solid var(--edge); border-radius: var(--r-lg);
222 + background: var(--card); border: 1px solid var(--edge); border-radius: var(--r-lg);
223 223 box-shadow: var(--bshadow-sm);
224 224 padding: 13px 16px; word-break: break-word;
225 225 }
@@ -227,14 +227,14 @@ button { font-family: inherit; color: inherit; }
227 227 .msg-claude .md > :last-child { margin-bottom: 0; }
228 228 .md p { margin: 0.55em 0; }
229 229 .md pre {
230 background: var(--code-bg); border: 1.5px solid var(--line); border-radius: var(--r-sm);
230 + background: var(--code-bg); border: 1px solid var(--line); border-radius: var(--r-sm);
231 231 padding: 11px; overflow-x: auto; font-size: 12.5px; line-height: 1.5;
232 232 }
233 233 .md code { font-family: var(--mono); font-size: 0.88em; }
234 234 .md :not(pre) > code { background: var(--orange-soft); padding: 1px 6px; border-radius: 6px; }
235 235 .md h1, .md h2, .md h3, .md h4 { font-size: 1.03em; margin: 0.9em 0 0.35em; }
236 236 .md table { border-collapse: collapse; display: block; overflow-x: auto; font-size: 13px; }
237 .md th, .md td { border: 1.5px solid var(--line); padding: 5px 9px; }
237 +.md th, .md td { border: 1px solid var(--line); padding: 5px 9px; }
238 238 .md th { background: var(--card2); }
239 239 .md a { color: var(--orange-deep); font-weight: 700; }
240 240 .md ul, .md ol { padding-left: 1.35em; margin: 0.5em 0; }
@@ -249,19 +249,19 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
249 249 .meta-line {
250 250 align-self: center; text-align: center;
251 251 color: var(--muted); font-size: 11px; font-family: var(--mono);
252 background: var(--card2); border: 1.5px solid var(--line); border-radius: 999px; padding: 3px 12px;
252 + background: var(--card2); border: 1px solid var(--line); border-radius: 999px; padding: 3px 12px;
253 253 max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
254 254 }
255 255 .notice-line { align-self: center; color: var(--warn); font-size: 12px; font-weight: 700; }
256 256 .error-box {
257 background: var(--bad-soft); border: 2px solid var(--bad);
257 + background: var(--bad-soft); border: 1px solid var(--bad);
258 258 color: var(--bad); border-radius: var(--r-md); padding: 11px 14px;
259 259 font-size: 13px; white-space: pre-wrap; word-break: break-word; font-weight: 600;
260 260 }
261 261
262 262 /* --- cartes outils --- */
263 263 .tool {
264 background: var(--card); border: 2px solid var(--edge); border-radius: var(--r-md);
264 + background: var(--card); border: 1px solid var(--edge); border-radius: var(--r-md);
265 265 overflow: hidden; font-size: 13px; box-shadow: var(--bshadow-sm);
266 266 }
267 267 .tool summary {
@@ -271,7 +271,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
271 271 .tool summary::-webkit-details-marker { display: none; }
272 272 .tool .t-icon {
273 273 flex-shrink: 0; width: 28px; height: 28px; border-radius: 9px;
274 border: 1.5px solid var(--edge);
274 + border: 1px solid var(--edge);
275 275 display: flex; align-items: center; justify-content: center;
276 276 font-size: 13px; background: var(--card2);
277 277 }
@@ -288,9 +288,9 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
288 288 .tool .t-state.pending { color: var(--warn); background: var(--warn-soft); }
289 289 .tool .t-state.ok { color: var(--good); background: var(--good-soft); }
290 290 .tool .t-state.err { color: var(--bad); background: var(--bad-soft); }
291 .tool-body { border-top: 2px solid var(--edge); padding: 9px 13px 11px; background: var(--card2); }
291 +.tool-body { border-top: 1px solid var(--edge); padding: 9px 13px 11px; background: var(--card2); }
292 292 .tool-body pre {
293 margin: 6px 0; background: var(--card); border: 1.5px solid var(--line);
293 + margin: 6px 0; background: var(--card); border: 1px solid var(--line);
294 294 border-radius: var(--r-sm); padding: 9px;
295 295 overflow-x: auto; font-size: 12px; font-family: var(--mono);
296 296 white-space: pre-wrap; word-break: break-word;
@@ -298,7 +298,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
298 298 .tool-body .label { color: var(--muted); font-size: 10.5px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.7px; margin-top: 6px; }
299 299 .see-more { background: none; border: none; color: var(--orange-deep); font-size: 12.5px; font-weight: 800; cursor: pointer; padding: 4px 0; }
300 300
301 .diff { font-family: var(--mono); font-size: 12px; margin: 6px 0; border: 1.5px solid var(--line); border-radius: var(--r-sm); overflow: hidden; background: var(--card); }
301 +.diff { font-family: var(--mono); font-size: 12px; margin: 6px 0; border: 1px solid var(--line); border-radius: var(--r-sm); overflow: hidden; background: var(--card); }
302 302 .diff .dl { padding: 2px 10px; white-space: pre-wrap; word-break: break-word; }
303 303 .diff .del { background: var(--del-bg); color: var(--del-ink); }
304 304 .diff .add { background: var(--add-bg); color: var(--add-ink); }
@@ -310,13 +310,13 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
310 310
311 311 /* --- permission --- */
312 312 .perm {
313 background: var(--warn-soft); border: 2px solid var(--edge);
313 + background: var(--warn-soft); border: 1px solid var(--edge);
314 314 border-radius: var(--r-lg); padding: 14px; font-size: 13.5px;
315 box-shadow: 4px 4px 0 var(--shadow);
315 + box-shadow: var(--bshadow);
316 316 }
317 317 .perm-title { font-weight: 800; margin-bottom: 8px; font-size: 14.5px; }
318 318 .perm pre {
319 background: var(--card); border: 1.5px solid var(--line); border-radius: var(--r-sm); padding: 9px;
319 + background: var(--card); border: 1px solid var(--line); border-radius: var(--r-sm); padding: 9px;
320 320 overflow-x: auto; font-size: 12px; font-family: var(--mono);
321 321 white-space: pre-wrap; word-break: break-word;
322 322 max-height: 200px; overflow-y: auto; margin: 0;
@@ -325,7 +325,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
325 325 .perm-actions button {
326 326 flex: 1; padding: 11px 6px; border-radius: 999px;
327 327 font-size: 13.5px; font-weight: 800; cursor: pointer; min-height: 46px;
328 border: 2px solid var(--edge);
328 + border: 1px solid var(--edge);
329 329 }
330 330 .perm-allow { background: var(--good); color: #fff; box-shadow: var(--bshadow-sm); }
331 331 .perm-always { background: var(--good-soft); color: var(--good); line-height: 1.05; }
@@ -333,7 +333,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
333 333 .perm-deny { background: var(--card); color: var(--bad); }
334 334 .perm-allall {
335 335 width: 100%; margin-top: 8px; padding: 12px; border-radius: 999px;
336 border: 2px solid var(--edge); background: var(--ink); color: var(--orange);
336 + border: 1px solid var(--edge); background: var(--ink); color: var(--orange);
337 337 font-weight: 800; font-size: 13.5px; cursor: pointer; box-shadow: var(--bshadow-sm);
338 338 }
339 339 .perm-allall:active { transform: translate(1px,1px); box-shadow: none; }
@@ -348,7 +348,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
348 348 }
349 349
350 350 /* file d'attente */
351 .queued-notice { align-self: center; background: var(--warn-soft); border: 1.5px solid var(--warn); border-radius: 999px; padding: 5px 14px; }
351 +.queued-notice { align-self: center; background: var(--warn-soft); border: 1px solid var(--warn); border-radius: 999px; padding: 5px 14px; }
352 352 .working .work-time { margin-left: 2px; color: var(--orange-deep); font-family: var(--mono); font-size: 12px; }
353 353
354 354 .head-actions { display: flex; align-items: center; gap: 10px; }
@@ -357,7 +357,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
357 357 align-self: flex-start;
358 358 display: flex; align-items: center; gap: 10px;
359 359 font-size: 13.5px; font-weight: 700;
360 background: var(--card); border: 2px solid var(--edge);
360 + background: var(--card); border: 1px solid var(--edge);
361 361 border-radius: 999px; padding: 8px 16px; box-shadow: var(--bshadow-sm);
362 362 }
363 363 .dots { display: flex; gap: 4px; }
@@ -377,7 +377,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
377 377 .welcome p { margin: 0; color: var(--muted); font-size: 14px; max-width: 300px; font-weight: 600; }
378 378 .hints { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; margin-top: 14px; }
379 379 .hint {
380 background: var(--card); border: 1.5px solid var(--edge);
380 + background: var(--card); border: 1px solid var(--edge);
381 381 font-size: 13px; font-weight: 700;
382 382 border-radius: 999px; padding: 9px 14px; cursor: pointer;
383 383 box-shadow: var(--bshadow-sm);
@@ -393,7 +393,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
393 393 display: flex; align-items: flex-end; gap: 8px;
394 394 max-width: 780px; margin: 0 auto;
395 395 background: var(--card);
396 border: 2px solid var(--edge); border-radius: var(--r-xl);
396 + border: 1px solid var(--edge); border-radius: var(--r-xl);
397 397 box-shadow: var(--bshadow);
398 398 padding: 6px 6px 6px 6px; gap: 4px;
399 399 }
@@ -406,7 +406,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
406 406 #input::placeholder { color: var(--muted); font-weight: 600; }
407 407 .send-btn {
408 408 width: 42px; height: 42px; border-radius: 50%;
409 border: 2px solid var(--edge);
409 + border: 1px solid var(--edge);
410 410 background: var(--orange); color: var(--ink);
411 411 cursor: pointer; flex-shrink: 0;
412 412 display: flex; align-items: center; justify-content: center;
@@ -419,7 +419,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
419 419 .send-btn.stop { background: var(--bad); color: #fff; }
420 420 .wand-btn {
421 421 width: 38px; height: 38px; border-radius: 50%; flex-shrink: 0;
422 border: 2px solid var(--edge); background: var(--card2); color: var(--orange-deep);
422 + border: 1px solid var(--edge); background: var(--card2); color: var(--orange-deep);
423 423 cursor: pointer; display: flex; align-items: center; justify-content: center;
424 424 align-self: flex-end; margin-bottom: 2px;
425 425 }
@@ -431,20 +431,20 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
431 431 max-width: 780px; margin: 6px auto 0; display: flex; gap: 6px; flex-wrap: wrap;
432 432 }
433 433 .slash-hint button {
434 border: 1.5px solid var(--edge); background: var(--card2); border-radius: 999px;
434 + border: 1px solid var(--edge); background: var(--card2); border-radius: 999px;
435 435 font-size: 12px; font-weight: 700; padding: 5px 11px; cursor: pointer;
436 436 }
437 437
438 438 /* ================= Sessions ================= */
439 439 .sess-list { display: flex; flex-direction: column; gap: 12px; max-width: 780px; margin: 0 auto; width: 100%; }
440 440 .sess-card {
441 background: var(--card); border: 2px solid var(--edge); border-radius: var(--r-lg);
441 + background: var(--card); border: 1px solid var(--edge); border-radius: var(--r-lg);
442 442 box-shadow: var(--bshadow-sm); padding: 13px 15px; cursor: pointer;
443 443 display: flex; flex-direction: column; gap: 6px;
444 444 }
445 445 .sess-top { display: flex; align-items: center; gap: 8px; }
446 446 .sess-title { flex: 1; min-width: 0; font-weight: 800; font-size: 15px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
447 .sess-badge { font-size: 11px; font-weight: 800; border-radius: 999px; padding: 3px 10px; border: 1.5px solid var(--edge); flex-shrink: 0; }
447 +.sess-badge { font-size: 11px; font-weight: 800; border-radius: 999px; padding: 3px 10px; border: 1px solid var(--edge); flex-shrink: 0; }
448 448 .sess-badge.running { background: var(--orange); animation: pulse 1.4s infinite; }
449 449 .sess-badge.waiting_perm { background: var(--warn-soft); color: var(--warn); }
450 450 .sess-badge.idle { background: var(--card2); color: var(--muted); }
@@ -453,7 +453,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
453 453 .sess-info { display: flex; gap: 10px; flex-wrap: wrap; font-size: 11.5px; color: var(--muted); font-family: var(--mono); }
454 454 .sess-actions { display: flex; gap: 8px; margin-top: 4px; }
455 455 .sess-actions button {
456 border: 1.5px solid var(--edge); border-radius: 999px; background: var(--card2);
456 + border: 1px solid var(--edge); border-radius: 999px; background: var(--card2);
457 457 font-size: 12px; font-weight: 800; padding: 6px 13px; cursor: pointer;
458 458 }
459 459 .sess-actions .del { color: var(--bad); }
@@ -462,18 +462,18 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
462 462 /* Prompt Bank */
463 463 .prompt-preview {
464 464 font-family: var(--mono); font-size: 12px; color: var(--ink);
465 background: var(--card2); border: 1.5px solid var(--line); border-radius: var(--r-sm);
465 + background: var(--card2); border: 1px solid var(--line); border-radius: var(--r-sm);
466 466 padding: 8px 10px; white-space: pre-wrap; word-break: break-word; line-height: 1.45;
467 467 }
468 468 .sess-actions .p-send { background: var(--orange); color: var(--ink); border-color: var(--ink); box-shadow: var(--bshadow-sm); }
469 469 .pe-input {
470 width: 100%; background: var(--bg); border: 2px solid var(--edge); color: var(--ink);
470 + width: 100%; background: var(--bg); border: 1px solid var(--edge); color: var(--ink);
471 471 border-radius: var(--r-md); padding: 11px 13px; font-size: 15px; font-family: inherit; font-weight: 600; outline: none;
472 472 }
473 473 .pe-input:focus { border-color: var(--orange); }
474 474 .pe-textarea {
475 475 width: 100%; margin-top: 10px; min-height: 180px; resize: vertical;
476 background: var(--bg); border: 2px solid var(--edge); color: var(--ink);
476 + background: var(--bg); border: 1px solid var(--edge); color: var(--ink);
477 477 border-radius: var(--r-md); padding: 12px 13px; font-size: 14px; line-height: 1.5;
478 478 font-family: var(--mono); outline: none;
479 479 }
@@ -490,7 +490,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
490 490 max-width: 780px; margin-left: auto; margin-right: auto;
491 491 }
492 492 .eco-stat {
493 flex: 1; background: var(--card); border: 2px solid var(--edge); border-radius: var(--r-lg);
493 + flex: 1; background: var(--card); border: 1px solid var(--edge); border-radius: var(--r-lg);
494 494 box-shadow: var(--bshadow-sm); padding: 10px 12px; text-align: center;
495 495 }
496 496 .eco-stat .v { font-size: 22px; font-weight: 800; letter-spacing: -0.5px; }
@@ -504,16 +504,16 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
504 504 @media (min-width: 560px) { .eco-grid { grid-template-columns: 1fr 1fr; } }
505 505 .eco-loading { color: var(--muted); text-align: center; padding: 40px; font-weight: 700; }
506 506 .site-card {
507 background: var(--card); border: 2px solid var(--edge); border-radius: var(--r-lg);
507 + background: var(--card); border: 1px solid var(--edge); border-radius: var(--r-lg);
508 508 box-shadow: var(--bshadow-sm); padding: 12px 14px; cursor: pointer;
509 509 display: flex; flex-direction: column; gap: 8px;
510 510 transition: transform 0.08s;
511 511 }
512 512 .site-card:active { transform: translate(2px, 2px); box-shadow: none; }
513 .site-card.down { border-color: var(--bad); box-shadow: 3px 3px 0 var(--bad); }
513 +.site-card.down { border-color: var(--bad); box-shadow: 0 0 0 1px var(--bad); }
514 514 .site-top { display: flex; align-items: center; gap: 8px; }
515 515 .site-name { font-weight: 800; font-size: 16px; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
516 .st-pill { font-size: 10.5px; font-weight: 800; border-radius: 999px; padding: 3px 10px; border: 1.5px solid var(--edge); flex-shrink: 0; display: flex; gap: 4px; align-items: center; }
516 +.st-pill { font-size: 10.5px; font-weight: 800; border-radius: 999px; padding: 3px 10px; border: 1px solid var(--edge); flex-shrink: 0; display: flex; gap: 4px; align-items: center; }
517 517 .st-pill.up { background: var(--good-soft); color: var(--good); }
518 518 .st-pill.slow { background: var(--warn-soft); color: var(--warn); }
519 519 .st-pill.down { background: var(--bad); color: #fff; }
@@ -530,16 +530,16 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
530 530 .eco-subhead { max-width: 780px; margin: 20px auto 10px; width: 100%; font-size: 15px; font-weight: 800; letter-spacing: -0.3px; }
531 531 .node-grid { display: grid; grid-template-columns: 1fr; gap: 10px; max-width: 780px; margin: 0 auto; width: 100%; }
532 532 @media (min-width: 560px) { .node-grid { grid-template-columns: 1fr 1fr; } }
533 .node-card { background: var(--card); border: 2px solid var(--edge); border-radius: var(--r-lg); box-shadow: var(--bshadow-sm); padding: 12px 14px; }
533 +.node-card { background: var(--card); border: 1px solid var(--edge); border-radius: var(--r-lg); box-shadow: var(--bshadow-sm); padding: 12px 14px; }
534 534 .node-card.warn { border-color: var(--warn); }
535 535 .node-top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 9px; }
536 536 .node-name { font-weight: 800; font-size: 15px; font-family: var(--mono); }
537 .node-apps { font-size: 11px; font-weight: 800; border: 1.5px solid var(--edge); border-radius: 999px; padding: 2px 9px; background: var(--good-soft); color: var(--good); }
537 +.node-apps { font-size: 11px; font-weight: 800; border: 1px solid var(--edge); border-radius: 999px; padding: 2px 9px; background: var(--good-soft); color: var(--good); }
538 538 .node-apps.bad { background: var(--warn-soft); color: var(--warn); }
539 539 .nbar { margin: 5px 0; }
540 540 .nbar-l { display: flex; justify-content: space-between; font-size: 11px; font-weight: 700; color: var(--muted); margin-bottom: 2px; }
541 541 .nbar-l b { color: var(--ink); font-family: var(--mono); }
542 .nbar-track { height: 7px; background: var(--card2); border: 1.5px solid var(--line); border-radius: 999px; overflow: hidden; }
542 +.nbar-track { height: 7px; background: var(--card2); border: 1px solid var(--line); border-radius: 999px; overflow: hidden; }
543 543 .nbar-fill { height: 100%; border-radius: 999px; transition: width 0.4s; }
544 544
545 545 /* actions d'admin dans la feuille */
@@ -558,7 +558,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
558 558 }
559 559 @media (min-width: 560px) { .eco-overview { grid-template-columns: repeat(6, 1fr); } }
560 560 .kpi {
561 background: var(--card); border: 2px solid var(--edge); border-radius: var(--r-md);
561 + background: var(--card); border: 1px solid var(--edge); border-radius: var(--r-md);
562 562 box-shadow: var(--bshadow-sm); padding: 9px 8px; text-align: center;
563 563 }
564 564 .kpi .v { font-size: 21px; font-weight: 800; letter-spacing: -0.5px; line-height: 1; }
@@ -569,20 +569,20 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
569 569 .eco-grid { max-width: 900px; }
570 570 @media (min-width: 900px) { .eco-grid { grid-template-columns: 1fr 1fr 1fr; } }
571 571
572 .site-logo { width: 22px; height: 22px; border-radius: 6px; flex-shrink: 0; object-fit: cover; background: var(--card2); border: 1.5px solid var(--line); }
572 +.site-logo { width: 22px; height: 22px; border-radius: 6px; flex-shrink: 0; object-fit: cover; background: var(--card2); border: 1px solid var(--line); }
573 573 .site-logo.big { width: 34px; height: 34px; border-radius: 9px; }
574 574 .trend { font-size: 11px; font-weight: 800; font-family: var(--round); margin-left: 4px; }
575 575 .trend.up { color: var(--bad); } .trend.down { color: var(--good); } .trend.flat { color: var(--muted); }
576 .statusbar { display: flex; height: 6px; border-radius: 999px; overflow: hidden; background: var(--card2); border: 1.5px solid var(--line); margin: 4px 0 2px; }
576 +.statusbar { display: flex; height: 6px; border-radius: 999px; overflow: hidden; background: var(--card2); border: 1px solid var(--line); margin: 4px 0 2px; }
577 577 .statusbar i { display: block; height: 100%; }
578 578 .statusbar .s2 { background: var(--good); } .statusbar .s3 { background: #6a9fd8; }
579 579 .statusbar .s4 { background: var(--warn); } .statusbar .s5, .statusbar .se { background: var(--bad); }
580 580 .site-metrics { display: flex; gap: 6px; margin: 4px 0 2px; }
581 .site-metrics .m { flex: 1; text-align: center; background: var(--card2); border: 1.5px solid var(--line); border-radius: 8px; padding: 5px 2px; }
581 +.site-metrics .m { flex: 1; text-align: center; background: var(--card2); border: 1px solid var(--line); border-radius: 8px; padding: 5px 2px; }
582 582 .site-metrics .m b { display: block; font-size: 14px; font-weight: 800; letter-spacing: -0.3px; }
583 583 .site-metrics .m span { font-size: 9px; color: var(--muted); font-weight: 700; text-transform: uppercase; }
584 584 .pgrid { display: grid; grid-template-columns: repeat(6, 1fr); gap: 6px; margin-top: 10px; }
585 .pc { text-align: center; background: var(--card2); border: 1.5px solid var(--line); border-radius: 9px; padding: 7px 2px; }
585 +.pc { text-align: center; background: var(--card2); border: 1px solid var(--line); border-radius: 9px; padding: 7px 2px; }
586 586 .pc b { display: block; font-size: 15px; font-weight: 800; letter-spacing: -0.4px; }
587 587 .pc span { font-size: 9.5px; color: var(--muted); font-weight: 800; text-transform: uppercase; }
588 588 .pc.hot { background: var(--warn-soft); border-color: #f0c36b; }
@@ -599,7 +599,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
599 599 .sheet-panel {
600 600 position: absolute; left: 0; right: 0; bottom: 0;
601 601 max-height: 88dvh; overflow-y: auto; -webkit-overflow-scrolling: touch;
602 background: var(--bg); border: 2px solid var(--edge); border-bottom: none;
602 + background: var(--bg); border: 1px solid var(--edge); border-bottom: none;
603 603 border-radius: var(--r-xl) var(--r-xl) 0 0;
604 604 padding: 8px 16px calc(20px + env(safe-area-inset-bottom));
605 605 animation: sheet-up 0.22s ease-out;
@@ -607,12 +607,12 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
607 607 .sheet-grip { width: 42px; height: 5px; border-radius: 3px; background: var(--line); margin: 6px auto 12px; }
608 608 .sheet-h { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; }
609 609 .sheet-h h3 { margin: 0; font-size: 21px; font-weight: 800; flex: 1; }
610 .sheet-sec { background: var(--card); border: 2px solid var(--edge); border-radius: var(--r-lg); box-shadow: var(--bshadow-sm); padding: 13px 15px; margin-bottom: 12px; }
610 +.sheet-sec { background: var(--card); border: 1px solid var(--edge); border-radius: var(--r-lg); box-shadow: var(--bshadow-sm); padding: 13px 15px; margin-bottom: 12px; }
611 611 .sheet-sec h4 { margin: 0 0 9px; font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.7px; color: var(--muted); }
612 612 .kv { display: flex; justify-content: space-between; gap: 10px; padding: 4px 0; font-size: 13.5px; }
613 613 .kv b { font-family: var(--mono); font-weight: 700; }
614 614 .tile-row { display: flex; gap: 9px; }
615 .tile { flex: 1; background: var(--card2); border: 1.5px solid var(--line); border-radius: var(--r-md); padding: 8px 6px; text-align: center; }
615 +.tile { flex: 1; background: var(--card2); border: 1px solid var(--line); border-radius: var(--r-md); padding: 8px 6px; text-align: center; }
616 616 .tile .v { font-size: 17px; font-weight: 800; }
617 617 .tile .l { font-size: 10px; color: var(--muted); font-weight: 800; text-transform: uppercase; }
618 618 .chart { width: 100%; }
@@ -621,7 +621,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
621 621 background: var(--ink); color: var(--bg); border-radius: 8px;
622 622 font-size: 11px; font-family: var(--mono); padding: 4px 8px; white-space: nowrap;
623 623 }
624 .inc-item { display: flex; gap: 8px; padding: 7px 0; border-bottom: 1.5px solid var(--line); font-size: 12.5px; align-items: baseline; }
624 +.inc-item { display: flex; gap: 8px; padding: 7px 0; border-bottom: 1px solid var(--line); font-size: 12.5px; align-items: baseline; }
625 625 .inc-item:last-child { border-bottom: none; }
626 626 .inc-dot { color: var(--bad); font-weight: 800; }
627 627 .inc-ok { color: var(--good); font-weight: 800; }
@@ -629,14 +629,14 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
629 629 /* ================= Réglages ================= */
630 630 .set-card {
631 631 max-width: 780px; margin: 0 auto 12px; width: 100%;
632 background: var(--card); border: 2px solid var(--edge); border-radius: var(--r-lg);
632 + background: var(--card); border: 1px solid var(--edge); border-radius: var(--r-lg);
633 633 box-shadow: var(--bshadow-sm); padding: 14px 16px;
634 634 }
635 635 .set-label { font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.7px; color: var(--muted); margin-bottom: 10px; }
636 636 .seg { display: flex; gap: 7px; }
637 637 .seg.vert { flex-direction: column; }
638 638 .seg button {
639 flex: 1; border: 1.5px solid var(--edge); border-radius: 999px;
639 + flex: 1; border: 1px solid var(--edge); border-radius: 999px;
640 640 background: var(--card2); font-weight: 700; font-size: 13.5px;
641 641 padding: 10px 12px; cursor: pointer; text-align: center;
642 642 }
@@ -647,16 +647,16 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
647 647
648 648
649 649 /* ---- Social ---- */
650 .soc-card{background:var(--card,#fff);border:2px solid var(--edge);border-radius:16px;padding:14px 16px;margin:0 0 14px;box-shadow:3px 3px 0 var(--shadow);}
650 +.soc-card{background:var(--card,#fff);border:1px solid var(--edge);border-radius:16px;padding:14px 16px;margin:0 0 14px;box-shadow:3px 3px 0 var(--shadow);}
651 651 .soc-card h3{margin:0 0 10px;font-size:15px;}
652 652 .soc-switch{display:flex;align-items:center;gap:10px;font-weight:700;cursor:pointer;}
653 653 .soc-switch input{width:20px;height:20px;accent-color:var(--accent,#f97316);}
654 654 .soc-sub{color:var(--muted,#6b7280);font-size:13px;margin-top:8px;}
655 655 .soc-actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-top:12px;}
656 .soc-select{padding:9px 12px;border:2px solid var(--edge);border-radius:10px;font:inherit;background:#fff;}
656 +.soc-select{padding:9px 12px;border:1px solid var(--edge);border-radius:10px;font:inherit;background:#fff;}
657 657 .soc-draft{margin-top:14px;display:flex;flex-direction:column;gap:10px;}
658 .soc-draft img{width:100%;max-width:340px;border-radius:12px;border:2px solid var(--edge);align-self:center;}
659 #view-social textarea{width:100%;padding:10px 12px;border:2px solid var(--edge);border-radius:10px;font:inherit;resize:vertical;}
658 +.soc-draft img{width:100%;max-width:340px;border-radius:12px;border:1px solid var(--edge);align-self:center;}
659 +#view-social textarea{width:100%;padding:10px 12px;border:1px solid var(--edge);border-radius:10px;font:inherit;resize:vertical;}
660 660 .soc-log{display:flex;flex-direction:column;gap:6px;max-height:340px;overflow-y:auto;}
661 661 .soc-logrow{font-size:13px;padding:6px 8px;border-radius:8px;background:rgba(0,0,0,.04);}
662 662 .soc-logt{color:var(--muted,#6b7280);font-variant-numeric:tabular-nums;margin-right:6px;}
@@ -669,7 +669,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
669 669 @media(max-width:640px){.st-grid{grid-template-columns:1fr}}
670 670 .st-gen h3{margin:0 0 8px}
671 671 .st-gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:14px;margin-top:8px}
672 .st-item{background:var(--card,#fff);border:2px solid var(--edge);border-radius:14px;overflow:hidden;box-shadow:3px 3px 0 var(--shadow);display:flex;flex-direction:column}
672 +.st-item{background:var(--card,#fff);border:1px solid var(--edge);border-radius:14px;overflow:hidden;box-shadow:3px 3px 0 var(--shadow);display:flex;flex-direction:column}
673 673 .st-media{position:relative;aspect-ratio:4/5;background:#0d0d0d;overflow:hidden}
674 674 .st-media img,.st-media video{width:100%;height:100%;object-fit:cover;display:block}
675 675 .st-badge{position:absolute;left:8px;top:8px;background:rgba(13,13,13,.82);color:#fff;font-size:11px;font-weight:800;padding:4px 9px;border-radius:999px;letter-spacing:.02em}
@@ -681,7 +681,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
681 681 /* ---- Studio loading ---- */
682 682 #stLoad{position:fixed;inset:0;z-index:9999;display:none;align-items:center;justify-content:center;background:rgba(8,8,10,.72);backdrop-filter:blur(4px)}
683 683 #stLoad.on{display:flex}
684 .stload-box{background:var(--card,#141414);border:2px solid var(--edge);border-radius:18px;padding:26px 30px;text-align:center;box-shadow:4px 4px 0 var(--shadow);max-width:80vw}
684 +.stload-box{background:var(--card,#141414);border:1px solid var(--edge);border-radius:18px;padding:26px 30px;text-align:center;box-shadow:var(--bshadow);max-width:80vw}
685 685 .stload-spin{width:44px;height:44px;margin:0 auto 14px;border:5px solid rgba(127,127,127,.25);border-top-color:var(--accent,#f97316);border-radius:50%;animation:stspin .8s linear infinite}
686 686 @keyframes stspin{to{transform:rotate(360deg)}}
687 687 .stload-msg{font-weight:800;font-size:15px}
@@ -693,11 +693,11 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
693 693 /* ---- Visiteurs ---- */
694 694 #view-visitors{overflow-y:auto;-webkit-overflow-scrolling:touch;padding:14px 14px calc(86px + env(safe-area-inset-bottom))}
695 695 .vis-global{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:14px}
696 .vg-item{background:var(--card,#fff);border:2px solid var(--edge);border-radius:14px;padding:14px;text-align:center;box-shadow:3px 3px 0 var(--shadow)}
696 +.vg-item{background:var(--card,#fff);border:1px solid var(--edge);border-radius:14px;padding:14px;text-align:center;box-shadow:3px 3px 0 var(--shadow)}
697 697 .vg-n{font-size:26px;font-weight:900;color:var(--accent,#f97316)}
698 698 .vg-l{font-size:11px;font-weight:700;color:var(--muted,#777);text-transform:uppercase;letter-spacing:.05em;margin-top:2px}
699 699 .vis-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px}
700 .vis-card{background:var(--card,#fff);border:2px solid var(--edge);border-radius:16px;padding:16px;box-shadow:3px 3px 0 var(--shadow)}
700 +.vis-card{background:var(--card,#fff);border:1px solid var(--edge);border-radius:16px;padding:16px;box-shadow:3px 3px 0 var(--shadow)}
701 701 .vis-h{display:flex;align-items:center;gap:10px}
702 702 .vis-h img{width:26px;height:26px;border-radius:6px}
703 703 .vis-name{font-weight:800;font-size:15px;flex:1}
@@ -718,7 +718,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
718 718 .vis-card:active{transform:scale(.98)}
719 719 #visDetail{position:fixed;inset:0;z-index:9998;display:none;align-items:flex-start;justify-content:center;background:rgba(8,8,10,.72);backdrop-filter:blur(4px);overflow-y:auto;padding:40px 14px}
720 720 #visDetail.on{display:flex}
721 .vd-box{background:var(--card,#141414);border:2px solid var(--edge);border-radius:18px;width:100%;max-width:720px;box-shadow:5px 5px 0 var(--shadow)}
721 +.vd-box{background:var(--card,#141414);border:1px solid var(--edge);border-radius:18px;width:100%;max-width:720px;box-shadow:var(--bshadow)}
722 722 .vd-head{display:flex;align-items:center;gap:12px;padding:16px 18px;border-bottom:1px solid rgba(127,127,127,.2)}
723 723 .vd-head img{width:30px;height:30px;border-radius:8px}
724 724 .vd-head h3{flex:1;font-size:18px}
@@ -785,11 +785,11 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
785 785 .head-right { display: flex; align-items: center; gap: 8px; }
786 786 .icon-btn {
787 787 position: relative; width: 34px; height: 34px; border-radius: 10px;
788 border: 1.5px solid var(--edge); background: var(--card); cursor: pointer;
788 + border: 1px solid var(--edge); background: var(--card); cursor: pointer;
789 789 display: flex; align-items: center; justify-content: center; color: var(--ink);
790 790 }
791 791 .icon-btn svg { width: 17px; height: 17px; }
792 .icon-btn .badge { position: absolute; top: -4px; right: -4px; width: 10px; height: 10px; border-radius: 50%; background: var(--bad); border: 1.5px solid var(--edge); }
792 +.icon-btn .badge { position: absolute; top: -4px; right: -4px; width: 10px; height: 10px; border-radius: 50%; background: var(--bad); border: 1px solid var(--edge); }
793 793 .top-stamp { font-size: 11px; color: var(--muted); font-family: var(--mono); }
794 794 .view.scroll { overflow-y: auto; -webkit-overflow-scrolling: touch; padding: 14px 14px calc(86px + env(safe-area-inset-bottom)); }
795 795
@@ -799,7 +799,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
799 799 .bottomnav { display: none; }
800 800 .sidebar {
801 801 display: flex; flex-direction: column; width: 224px; flex-shrink: 0;
802 background: var(--card); border-right: 2px solid var(--edge);
802 + background: var(--card); border-right: 1px solid var(--edge);
803 803 padding: 14px 10px 12px;
804 804 }
805 805 .side-brand { display: flex; align-items: center; gap: 10px; font-weight: 800; font-size: 18px; letter-spacing: -0.4px; padding: 2px 8px 14px; }
@@ -810,10 +810,10 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
810 810 padding: 9px 12px; border-radius: 10px; text-align: left;
811 811 }
812 812 .side-nav .nav-btn svg { width: 18px; height: 18px; flex-shrink: 0; }
813 .side-nav .nav-btn.active { background: var(--orange-soft); color: var(--ink); border: 1.5px solid var(--edge); padding: 7.5px 10.5px; }
813 + .side-nav .nav-btn.active { background: var(--orange-soft); color: var(--ink); border: 1px solid var(--edge); padding: 7.5px 10.5px; }
814 814 .side-nav .nav-btn.active svg { color: var(--orange-deep); }
815 815 .side-nav .nav-btn .badge { position: absolute; top: 8px; right: 10px; left: auto; }
816 .side-foot { display: flex; flex-direction: column; gap: 8px; padding: 10px 8px 0; border-top: 1.5px solid var(--line); }
816 + .side-foot { display: flex; flex-direction: column; gap: 8px; padding: 10px 8px 0; border-top: 1px solid var(--line); }
817 817 .side-node { font-size: 11px; color: var(--muted); }
818 818 .header { padding: 10px 20px; }
819 819 .head-right #connPill { display: none; }
@@ -833,7 +833,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
833 833 }
834 834 .ov-kpis.compact { grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); }
835 835 .kpi2 {
836 background: var(--card); border: 1.5px solid var(--edge); border-radius: var(--r-md);
836 + background: var(--card); border: 1px solid var(--edge); border-radius: var(--r-md);
837 837 padding: 10px 12px; box-shadow: var(--bshadow-sm);
838 838 }
839 839 .kpi2 .kv2 { font-size: 24px; font-weight: 800; letter-spacing: -0.6px; line-height: 1.1; font-variant-numeric: tabular-nums; }
@@ -851,7 +851,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
851 851 .ov-cols { display: grid; grid-template-columns: 1fr; gap: var(--panel-gap); margin-bottom: var(--panel-gap); max-width: 1180px; }
852 852 @media (min-width: 900px) { .ov-cols { grid-template-columns: 3fr 2fr; } .ov-cols + .ov-cols { grid-template-columns: 1fr 1fr; } }
853 853 .panel {
854 background: var(--card); border: 2px solid var(--edge); border-radius: var(--r-lg);
854 + background: var(--card); border: 1px solid var(--edge); border-radius: var(--r-lg);
855 855 box-shadow: var(--bshadow-sm); padding: 14px 16px; min-width: 0;
856 856 }
857 857 .panel.slim { padding: 10px 14px; margin-bottom: var(--panel-gap); max-width: 1180px; }
@@ -866,7 +866,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
866 866 .ov-eco-chips { display: flex; flex-wrap: wrap; gap: 6px; }
867 867 .eco-chip {
868 868 display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
869 border: 1.5px solid var(--edge); border-radius: 999px; padding: 4px 10px;
869 + border: 1px solid var(--edge); border-radius: 999px; padding: 4px 10px;
870 870 font-size: 11.5px; font-weight: 700; background: var(--card2);
871 871 }
872 872 .eco-chip b { font-family: var(--mono); font-weight: 700; color: var(--muted); }
@@ -874,23 +874,23 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
874 874 .eco-chip.slow { color: var(--warn); background: var(--warn-soft); }
875 875 .eco-chip.down { color: #fff; background: var(--bad); border-color: var(--bad); }
876 876 .eco-chip.down b { color: #fff; }
877 .ov-sess { display: flex; align-items: center; gap: 9px; padding: 7px 0; border-bottom: 1.5px solid var(--line); cursor: pointer; }
877 +.ov-sess { display: flex; align-items: center; gap: 9px; padding: 7px 0; border-bottom: 1px solid var(--line); cursor: pointer; }
878 878 .ov-sess:last-child { border-bottom: none; }
879 879 .ov-sess-t { flex: 1; min-width: 0; font-weight: 700; font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
880 880 .ov-sess-m { font-size: 11px; color: var(--muted); flex-shrink: 0; }
881 .anom { font-size: 12.5px; padding: 7px 0; border-bottom: 1.5px solid var(--line); font-weight: 600; }
881 +.anom { font-size: 12.5px; padding: 7px 0; border-bottom: 1px solid var(--line); font-weight: 600; }
882 882 .anom:last-child { border-bottom: none; }
883 883 .anom.warn { color: var(--warn); font-weight: 800; }
884 884
885 885 /* répartition humains / bots / datacenter */
886 .break-bar { display: flex; height: 12px; border-radius: 999px; overflow: hidden; background: var(--card2); border: 1.5px solid var(--line); }
886 +.break-bar { display: flex; height: 12px; border-radius: 999px; overflow: hidden; background: var(--card2); border: 1px solid var(--line); }
887 887 .break-bar i { display: block; height: 100%; }
888 888
889 889 /* temps réel */
890 890 .rt-list { display: flex; flex-direction: column; max-height: 420px; overflow-y: auto; }
891 891 .rt-row {
892 892 display: flex; align-items: center; gap: 8px;
893 padding: 6px 0; border-bottom: 1.5px solid var(--line); font-size: 12.5px;
893 + padding: 6px 0; border-bottom: 1px solid var(--line); font-size: 12.5px;
894 894 }
895 895 .rt-row:last-child { border-bottom: none; }
896 896 .rt-row img { width: 18px; height: 18px; border-radius: 5px; flex-shrink: 0; }
@@ -905,11 +905,11 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
905 905 .vis-card { padding: 12px 14px; box-shadow: var(--bshadow-sm); border-width: 2px; }
906 906 .vis-on-pill {
907 907 font-size: 11px; font-weight: 800; border-radius: 999px; padding: 3px 10px;
908 border: 1.5px solid var(--line); color: var(--muted); background: var(--card2); flex-shrink: 0;
908 + border: 1px solid var(--line); color: var(--muted); background: var(--card2); flex-shrink: 0;
909 909 }
910 910 .vis-on-pill.on { background: var(--good-soft); color: var(--good); border-color: var(--good); }
911 911 .vis-row { margin-top: 10px; }
912 .vis-m { background: var(--card2); border: 1.5px solid var(--line); }
912 +.vis-m { background: var(--card2); border: 1px solid var(--line); }
913 913 .vm-n { font-size: 17px; font-variant-numeric: tabular-nums; }
914 914 .vis-pv { display: flex; justify-content: space-between; align-items: center; margin-top: 8px; font-size: 11.5px; }
915 915 .vis-more { color: var(--orange-deep); font-weight: 800; }
@@ -919,7 +919,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
919 919 /* filtres listes */
920 920 .filterbar { display: flex; gap: 8px; flex-wrap: wrap; margin: 0 0 12px; max-width: 1180px; }
921 921 .f-input, .f-select {
922 background: var(--card); border: 1.5px solid var(--edge); color: var(--ink);
922 + background: var(--card); border: 1px solid var(--edge); color: var(--ink);
923 923 border-radius: 999px; padding: 8px 14px; font-size: 13px; font-weight: 600; font-family: inherit; outline: none;
924 924 }
925 925 .f-input { flex: 1; min-width: 140px; }
@@ -934,7 +934,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
934 934 .sess-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
935 935 .sess-cost, .sess-when { flex-shrink: 0; font-size: 11.5px; color: var(--muted); }
936 936 .sess-btns { display: flex; gap: 6px; flex-shrink: 0; }
937 .sess-btns button { border: 1.5px solid var(--edge); border-radius: 999px; background: var(--card2); font-size: 11.5px; font-weight: 800; padding: 5px 12px; cursor: pointer; }
937 +.sess-btns button { border: 1px solid var(--edge); border-radius: 999px; background: var(--card2); font-size: 11.5px; font-weight: 800; padding: 5px 12px; cursor: pointer; }
938 938 .sess-btns .del { color: var(--bad); padding: 5px 9px; }
939 939 @media (max-width: 640px) { .sess-when { display: none; } }
940 940
@@ -949,7 +949,7 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
949 949 .more-nav { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; padding-bottom: 8px; }
950 950 .more-btn {
951 951 display: flex; align-items: center; gap: 10px;
952 background: var(--card); border: 2px solid var(--edge); border-radius: var(--r-md);
952 + background: var(--card); border: 1px solid var(--edge); border-radius: var(--r-md);
953 953 box-shadow: var(--bshadow-sm); padding: 13px 14px; font-weight: 800; font-size: 14px; cursor: pointer;
954 954 }
955 955 .more-btn svg { width: 20px; height: 20px; color: var(--orange-deep); }
@@ -961,14 +961,14 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
961 961 .wr-title { font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.6px; color: var(--muted); text-align: left; }
962 962 .wr-item {
963 963 display: flex; align-items: center; gap: 9px; text-align: left;
964 background: var(--card); border: 1.5px solid var(--edge); border-radius: var(--r-md);
964 + background: var(--card); border: 1px solid var(--edge); border-radius: var(--r-md);
965 965 padding: 9px 12px; cursor: pointer; font-family: inherit;
966 966 }
967 967 .wr-t { flex: 1; min-width: 0; font-weight: 700; font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--ink); }
968 968 .wr-m { font-size: 11px; color: var(--muted); flex-shrink: 0; }
969 969
970 970 /* réglages analytics */
971 .an-cfg .ac-num { width: 74px; background: var(--bg); border: 1.5px solid var(--edge); color: var(--ink); border-radius: 8px; padding: 5px 8px; font-family: var(--mono); font-size: 13px; }
971 +.an-cfg .ac-num { width: 74px; background: var(--bg); border: 1px solid var(--edge); color: var(--ink); border-radius: 8px; padding: 5px 8px; font-family: var(--mono); font-size: 13px; }
972 972 .an-cfg .pe-textarea { font-size: 12px; }
973 973
974 974 /* studio / vieux composants : bascule douce vers les variables */
@@ -977,3 +977,143 @@ details.thinking-box summary { color: var(--muted); font-size: 12.5px; cursor: p
977 977 .vd-head h3 { color: var(--ink); }
978 978 .st-cap { color: var(--muted); }
979 979 .vis-chart { background: var(--card2); border-radius: 12px; }
980 +
981 +/* ====================================================================
982 + v3.1 — Modernisation : fini le look jouet.
983 + Hairlines, ombres douces, rayons contenus, typo sobre, contrôles fins.
984 + ==================================================================== */
985 +:root {
986 + --r-xl: 16px; --r-lg: 12px; --r-md: 10px; --r-sm: 8px;
987 + --bshadow: 0 1px 2px rgba(24, 18, 10, 0.05), 0 8px 24px rgba(24, 18, 10, 0.06);
988 + --bshadow-sm: 0 1px 2px rgba(24, 18, 10, 0.05);
989 + --edge: #ddd8cb;
990 + --round: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, sans-serif;
991 + --bg: #F4F3EE;
992 + --card: #FFFFFE;
993 + --card2: #F7F5EF;
994 +}
995 +:root[data-theme="dark"] {
996 + --edge: #353026;
997 + --bshadow: 0 1px 2px rgba(0, 0, 0, 0.35), 0 8px 24px rgba(0, 0, 0, 0.35);
998 + --bshadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
999 + --bg: #131109;
1000 + --bg: #14110c;
1001 + --card: #1c1913;
1002 + --card2: #242019;
1003 +}
1004 +html, body { font: 14.5px/1.5 var(--round); letter-spacing: -0.01em; }
1005 +
1006 +/* boutons : sobres, nets */
1007 +.btn-cta {
1008 + border: none; border-radius: 9px; padding: 9px 16px;
1009 + font-size: 13.5px; font-weight: 700; box-shadow: var(--bshadow-sm);
1010 +}
1011 +.btn-cta:active { transform: translateY(1px); box-shadow: none; }
1012 +.btn-cta.small { font-size: 12.5px; padding: 7px 13px; }
1013 +.btn-ghost { border: 1px solid var(--edge); background: var(--card); border-radius: 9px; padding: 8px 14px; font-weight: 600; }
1014 +.btn-danger { border: 1px solid var(--bad); border-radius: 9px; font-weight: 700; padding: 10px 20px; }
1015 +.icon-btn { border-radius: 9px; }
1016 +.chip { border-radius: 8px; background: var(--card); font-weight: 600; border-color: var(--edge); }
1017 +.chip.orange { background: var(--orange-soft); border-color: transparent; color: var(--orange-deep); font-weight: 700; }
1018 +.pill-select {
1019 + border-radius: 9px; border: 1px solid var(--edge); box-shadow: none;
1020 + font-weight: 700; font-size: 13px;
1021 +}
1022 +.pill-select.all-mode { box-shadow: none; }
1023 +
1024 +/* marque : carré arrondi net, sans cerne */
1025 +.ka-mark { border: none; box-shadow: none; border-radius: 9px; width: 30px; height: 30px; font-size: 14px; }
1026 +.ka-mark.big { border-radius: 18px; box-shadow: var(--bshadow); }
1027 +.brand, .side-brand { font-size: 16.5px; }
1028 +
1029 +/* header + nav */
1030 +.header { border-bottom: 1px solid var(--edge); background: var(--bg); }
1031 +.bottomnav { border-top: 1px solid var(--edge); }
1032 +.conn-pill { border: 1px solid var(--edge); font-weight: 600; }
1033 +@media (min-width: 1020px) {
1034 + .sidebar { border-right: 1px solid var(--edge); background: var(--bg); }
1035 + .side-nav .nav-btn { font-weight: 600; border-radius: 8px; }
1036 + .side-nav .nav-btn:hover { background: var(--card2); color: var(--ink); }
1037 + .side-nav .nav-btn.active { background: var(--orange-soft); border: none; padding: 9px 12px; color: var(--ink); font-weight: 700; }
1038 +}
1039 +
1040 +/* cartes & panneaux : hairline + ombre douce */
1041 +.panel, .kpi2, .site-card, .node-card, .sess-card, .set-card, .soc-card, .st-item,
1042 +.vis-card, .vg-item, .sheet-sec, .login-box, .tool, .msg-claude, .perm, .more-btn, .wr-item, .eco-stat, .kpi {
1043 + border-width: 1px; border-color: var(--edge); box-shadow: var(--bshadow-sm);
1044 +}
1045 +.panel, .login-box, .sheet-panel { box-shadow: var(--bshadow); }
1046 +.site-card.down { border-color: var(--bad); box-shadow: 0 0 0 1px var(--bad); }
1047 +.node-card.warn { border-color: var(--warn); }
1048 +.sess-card.row, .sess-card.prow { box-shadow: none; }
1049 +.tile, .vis-m, .site-metrics .m, .pc { border-radius: 8px; }
1050 +
1051 +/* segmented controls modernes */
1052 +.seg { background: var(--card2); border: 1px solid var(--edge); border-radius: 10px; padding: 3px; gap: 3px; }
1053 +.seg button { border: none; background: none; border-radius: 7px; font-weight: 600; padding: 8px 12px; color: var(--muted); }
1054 +.seg button.on { background: var(--card); color: var(--ink); font-weight: 700; box-shadow: var(--bshadow-sm); }
1055 +.seg.vert { padding: 4px; }
1056 +.seg.mini button { padding: 5px 11px; }
1057 +:root[data-theme="dark"] .seg button.on { background: #38321f; color: var(--ink); }
1058 +.seg button.on[data-v="bypass"] { color: var(--bad); }
1059 +
1060 +/* chat */
1061 +.chatbar { border-bottom: 1px solid var(--edge); }
1062 +.msg-user { border: none; border-radius: 14px 14px 5px 14px; box-shadow: var(--bshadow-sm); font-weight: 500; }
1063 +.msg-claude { border-radius: 12px; }
1064 +.composer-inner { border: 1px solid var(--edge); border-radius: 14px; box-shadow: var(--bshadow); background: var(--card); }
1065 +.send-btn { border: none; width: 38px; height: 38px; box-shadow: none; }
1066 +.wand-btn { border: 1px solid var(--edge); background: var(--card); }
1067 +.hint { border: 1px solid var(--edge); box-shadow: none; border-radius: 9px; font-weight: 600; }
1068 +.working { border: 1px solid var(--edge); box-shadow: var(--bshadow-sm); border-radius: 10px; font-weight: 600; }
1069 +.dots i { border: none; }
1070 +.tool { box-shadow: var(--bshadow-sm); }
1071 +.tool .t-icon { border: none; background: var(--card2); border-radius: 7px; }
1072 +.tool-body { border-top: 1px solid var(--edge); }
1073 +.perm { box-shadow: var(--bshadow); border-radius: 12px; }
1074 +.perm-actions button { border-radius: 9px; border: 1px solid var(--edge); }
1075 +.perm-allow { border: none; box-shadow: var(--bshadow-sm); }
1076 +.perm-allall { border: none; border-radius: 9px; box-shadow: var(--bshadow-sm); }
1077 +.meta-line { border-radius: 7px; }
1078 +.banner { border: 1px solid var(--edge); box-shadow: var(--bshadow); border-radius: 10px; font-weight: 600; }
1079 +
1080 +/* KPI : chiffres droits, hiérarchie fine */
1081 +.kpi2 { padding: 12px 14px; border-radius: 12px; }
1082 +.kpi2 .kv2 { font-size: 22px; font-weight: 700; letter-spacing: -0.4px; }
1083 +.kpi2 .kl2 { font-weight: 600; letter-spacing: 0.4px; }
1084 +.kpi .v, .eco-stat .v { font-weight: 700; }
1085 +.panel-h h3 { font-weight: 700; letter-spacing: 0.5px; }
1086 +.view-head h2 { font-weight: 700; font-size: 21px; letter-spacing: -0.4px; }
1087 +.login-title, .welcome h2 { font-weight: 700; }
1088 +.page-title { font-weight: 700; }
1089 +.vm-n, .vd-kn, .tile .v, .pc b, .site-ms { font-weight: 700; }
1090 +.vg-n { font-weight: 700; }
1091 +
1092 +/* pills de statut : tags nets */
1093 +.st-pill, .sess-badge, .vis-on-pill, .node-apps, .eco-chip { border-radius: 6px; border-width: 1px; font-weight: 700; }
1094 +.st-pill { border-color: transparent; }
1095 +.st-pill.up { background: var(--good-soft); }
1096 +.st-pill.slow { background: var(--warn-soft); }
1097 +.sess-badge { border-color: transparent; }
1098 +.sess-badge.idle { background: var(--card2); }
1099 +.batch-tag { border-radius: 5px; }
1100 +.kdelta { border-radius: 5px; font-weight: 700; }
1101 +
1102 +/* filtres & inputs */
1103 +.f-input, .f-select { border-radius: 9px; border: 1px solid var(--edge); font-weight: 500; }
1104 +.login input, .pe-input, .pe-textarea, .soc-select, #view-social textarea { border: 1px solid var(--edge); border-radius: 9px; }
1105 +.login input:focus, .pe-input:focus, .pe-textarea:focus, .f-input:focus { border-color: var(--orange); outline: 2px solid var(--orange-soft); }
1106 +.an-cfg .ac-num { border: 1px solid var(--edge); border-radius: 7px; }
1107 +.slash-hint button, .sess-actions button, .sess-btns button { border: 1px solid var(--edge); border-radius: 7px; font-weight: 600; }
1108 +.sess-actions .p-send { border: none; box-shadow: var(--bshadow-sm); font-weight: 700; }
1109 +.see-more { font-weight: 700; }
1110 +
1111 +/* divers */
1112 +.sheet-panel { border: 1px solid var(--edge); border-bottom: none; border-radius: 16px 16px 0 0; }
1113 +.nbar-track, .break-bar, .statusbar { border: none; background: var(--card2); }
1114 +.vis-chart { background: transparent; }
1115 +.md pre, .tool-body pre, .perm pre, .diff, .prompt-preview { border-radius: 8px; border: 1px solid var(--line); }
1116 +.eco-chip b { font-weight: 600; }
1117 +.welcome p, .login-sub { font-weight: 500; }
1118 +.nav-btn { font-weight: 600; }
1119 +.md :not(pre) > code { border-radius: 4px; }
980 1120