:root{--fond:#0d1117;--carte:#161b22;--bord:#30363d;--texte:#e6edf3;--gris:#8b949e;--vert:#3fb950;--rouge:#f85149;--bleu:#58a6ff;--jaune:#d29922;--violet:#bc8cff}
*{box-sizing:border-box}
body{margin:0;background:var(--fond);color:var(--texte);font:14px/1.45 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}
header{display:flex;align-items:center;gap:16px;padding:12px 20px;border-bottom:1px solid var(--bord);background:#010409;position:sticky;top:0;z-index:5}
header .titre{font-size:18px}.sous{color:var(--gris);font-size:13px}.droite{margin-left:auto;color:var(--gris)}
.lien{color:var(--bleu);margin-left:12px;text-decoration:none}
.badge{padding:4px 10px;border-radius:999px;background:#21262d;font-size:13px}
.badge.vivant{background:#0f3d1e;color:var(--vert);animation:pulse 1.6s infinite}.badge.pause{background:#3d2e00;color:var(--jaune)}
@keyframes pulse{50%{opacity:.6}}
nav{display:flex;gap:4px;padding:8px 20px;border-bottom:1px solid var(--bord);overflow-x:auto}
nav button,.boutons button{background:transparent;color:var(--gris);border:1px solid transparent;padding:6px 12px;border-radius:6px;cursor:pointer;font:inherit;white-space:nowrap}
nav button.actif,.boutons button.actif{color:var(--texte);background:#21262d;border-color:var(--bord)}
main{padding:16px 20px;max-width:1500px;margin:auto}
.onglet{display:none}.onglet.actif{display:block}
.carte{background:var(--carte);border:1px solid var(--bord);border-radius:10px;padding:14px 16px;margin-bottom:16px;min-width:0}
.carte h2{font-size:15px;margin:0 0 10px}.carte h3{font-size:14px;margin:16px 0 8px}
.entete{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:8px}.entete h2{margin:0}
.grille4{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:16px}
.grille2{display:grid;grid-template-columns:repeat(auto-fit,minmax(420px,1fr));gap:16px}
.grille-direct{display:grid;grid-template-columns:320px 1fr;gap:16px}
@media(max-width:900px){.grille-direct,.grille2{grid-template-columns:1fr}}
.pf .nom{color:var(--gris);font-size:13px}.pf .valeur{font-size:26px;font-weight:600}.pf .ligne{display:flex;justify-content:space-between;color:var(--gris);font-size:13px}
.pos{color:var(--vert)}.neg{color:var(--rouge)}
.graph{height:320px}.graph.haut{height:460px}
.liste{max-height:560px;overflow:auto}
.item{border-bottom:1px solid var(--bord);padding:8px 2px}.item:last-child{border:0}
.item .meta{color:var(--gris);font-size:12px}.item .raison{margin-top:4px;white-space:pre-wrap}
.tag{display:inline-block;font-size:11px;padding:1px 7px;border-radius:999px;background:#21262d;color:var(--gris);margin-right:4px}
.tag.achat{background:#0f3d1e;color:var(--vert)}.tag.vente{background:#3d1212;color:var(--rouge)}.tag.lecon{background:#2b1d4a;color:var(--violet)}
.tag.plan{background:#0c2d6b;color:var(--bleu)}.tag.consigne{background:#3d2e00;color:var(--jaune)}.tag.systeme{background:#30363d}
table{width:100%;border-collapse:collapse;font-size:13px}th,td{text-align:left;padding:6px 8px;border-bottom:1px solid var(--bord);vertical-align:top}
th{color:var(--gris);font-weight:500}td.n{text-align:right;font-variant-numeric:tabular-nums}
.bandeau{display:flex;flex-wrap:wrap;gap:8px}.bandeau div{background:#0d1117;border:1px solid var(--bord);border-radius:8px;padding:6px 10px;font-size:13px;cursor:pointer}
.fil{max-height:72vh;overflow:auto;font-size:13px}
.ev{margin:6px 0;padding:8px 10px;border-radius:8px;background:#0d1117;border-left:3px solid var(--bord);white-space:pre-wrap;word-break:break-word}
.ev.texte{border-color:var(--bleu)}.ev.outil{border-color:var(--jaune);font-family:ui-monospace,Menlo,monospace;font-size:12px}
.ev.resultat{border-color:#30363d;font-family:ui-monospace,Menlo,monospace;font-size:12px;color:var(--gris);max-height:260px;overflow:auto}
.ev.fin{border-color:var(--vert)}.ev.erreur{border-color:var(--rouge)}.ev.debut{border-color:var(--violet)}
.ev .h{font-size:11px;color:var(--gris);display:block;margin-bottom:2px;font-family:system-ui}
textarea,input{width:100%;background:#0d1117;color:var(--texte);border:1px solid var(--bord);border-radius:6px;padding:8px;font:inherit}
.boutons input{width:260px}
button{background:#238636;color:#fff;border:0;border-radius:6px;padding:8px 14px;font:inherit;cursor:pointer}
button.danger{background:#da3633}.boutons button{background:transparent}
.boutons.col{display:flex;flex-direction:column;gap:8px}.boutons.col button{background:#21262d;color:var(--texte);border:1px solid var(--bord);text-align:left}
.boutons.col button.danger{background:#3d1212;color:#ffb1ab}
.boutons.gros button{font-size:15px;padding:8px 16px}
.petit{color:var(--gris);font-size:12.5px}label{display:block;margin:8px 0}
.barre{height:8px;background:#21262d;border-radius:4px;position:relative;margin:3px 0 8px}.barre i{position:absolute;top:0;bottom:0;border-radius:4px}
pre{white-space:pre-wrap;background:#0d1117;padding:10px;border-radius:8px;border:1px solid var(--bord);font-size:12.5px;max-height:420px;overflow:auto}
.modale{position:fixed;inset:0;background:#000a;display:flex;align-items:center;justify-content:center;z-index:9}
.modale .carte{max-width:820px;width:92%;max-height:86vh;overflow:auto;position:relative}.modale .fermer{position:absolute;right:10px;top:10px;background:#21262d}
.connexion{display:flex;min-height:100vh;align-items:center;justify-content:center}
.boite-connexion{width:340px}.boite-connexion h1{margin:0}.boite-connexion button{width:100%;margin-top:10px}
.erreur{color:var(--rouge)}.cliquable{cursor:pointer}.cliquable:hover{background:#1c2129}
.modale[hidden]{display:none}
