:root{--bg:#07090c;--surface:#10141a;--surface2:#151a21;--line:#2a313b;--text:#f2f4f7;--muted:#8993a1;--red:#e34242;--blue:#3b82f6;--amber:#eab84b;--green:#42d392}*{box-sizing:border-box}body{margin:0;min-height:100vh;background:radial-gradient(circle at 50% 30%,#151a21 0,#090c10 40%,var(--bg) 75%);color:var(--text);font-family:Inter,Segoe UI,Arial,sans-serif}.topbar{height:62px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 28px;background:#090c10dd}.brand{font-weight:900;letter-spacing:.22em;font-size:20px}.brand span{font-size:10px;color:var(--amber);border:1px solid #6e5725;padding:3px 6px;margin-left:8px}.server{font-size:12px;color:var(--muted);letter-spacing:.12em}.server i{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--green);margin-right:8px;box-shadow:0 0 10px var(--green)}.toptabs{display:flex;height:44px;border-bottom:1px solid var(--line);background:#0b0e12;overflow-x:auto}.toptabs button{border:0;background:transparent;color:var(--muted);padding:0 22px;font-size:12px;font-weight:800;letter-spacing:.1em;cursor:pointer;white-space:nowrap}.toptabs button.active{color:var(--text);box-shadow:inset 0 -2px var(--amber)}.toptabs button:hover{color:var(--text)}.toptabs button em{font-style:normal;background:var(--red);color:#fff;border-radius:12px;padding:2px 6px;margin-left:4px;font-size:10px;font-weight:800}.page{display:none}.page.active{display:block}.page-wrap{max-width:1100px;margin:0 auto;padding:28px 24px 60px}.page-wrap-narrow{max-width:640px}.page-title{font-size:26px;margin:0 0 6px}.app-body{display:flex;gap:16px;padding:16px;height:calc(100vh - 62px - 44px)}.page-area{flex:1;min-width:0;height:100%;overflow-y:auto}#page-map{height:100%}.player-panel{flex:0 0 250px}.game-shell{display:grid;grid-template-columns:minmax(320px,1fr) 300px;grid-template-rows:minmax(0,1fr);gap:16px;height:100%}.panel,.map-panel{border:1px solid var(--line);background:linear-gradient(180deg,#12161c,#0d1116);box-shadow:0 16px 50px #0005}.panel{padding:22px;overflow-y:auto;min-height:0}.eyebrow{font-size:11px;letter-spacing:.18em;color:var(--muted);margin:0 0 14px}.avatar{width:68px;height:68px;display:grid;place-items:center;font-size:28px;font-weight:900;border:3px solid;overflow:hidden;position:relative}.avatar img{width:100%;height:100%;object-fit:cover}.avatar-upload-label{display:block;margin-top:8px;font-size:11px;color:var(--muted);text-align:center;cursor:pointer;text-decoration:underline}.red{background:#2b1115;color:#ff6666;border-color:#6d252c}.blue{background:#0f203e;color:#6fa7ff;border-color:#244d8c}.police{background:#1c1f24;color:#c4ccd6;border-color:#4a5568}.player-panel h1{margin:16px 0 2px;font-size:28px}.faction{font-size:12px;font-weight:800;letter-spacing:.14em;margin:0 0 28px}
/* v0.18.0 — "centrer Active player et l'avatar avec le menu": the identity
   block at the top of the left player panel (the ACTIVE PLAYER eyebrow, the
   avatar square, the name and the faction line) used to sit flush left like
   a data row, while the panel itself lives beside a centered top nav — now
   centered as a block to match. Stats/dl/movement further down stay
   left-aligned (they're label/value rows, centering those would hurt
   readability, not requested anyway). */
.player-panel .eyebrow,.player-panel h1,.player-panel .faction{text-align:center}
.player-panel .avatar{margin:0 auto}.red-text{color:#ff5c5c}.blue-text{color:#6fa7ff}.police-text{color:#9aa5b1}.stat{display:flex;justify-content:space-between;font-size:13px}.meter{height:6px;background:#282e36;margin:8px 0 22px}.meter b{display:block;height:100%;background:var(--red)}dl{margin:0}dl div{display:flex;justify-content:space-between;border-top:1px solid #252b33;padding:13px 0}dt{color:var(--muted);font-size:13px}dd{margin:0;font-weight:700}.movement{border-top:1px solid var(--line);margin-top:20px;padding-top:18px;display:grid;gap:7px}.movement span{font-size:11px;color:var(--muted)}.movement strong{font-size:12px;color:var(--green)}.map-panel{padding:22px;display:flex;flex-direction:column;min-height:0}.section-head{display:flex;justify-content:space-between;align-items:end}.section-head h2{font-size:25px;margin:0}.section-head>p{font-size:12px;color:var(--muted)}.map-viewport{flex:1;min-height:0;min-width:0;overflow:hidden;margin:14px 0 0;background:#090c10;border:1px solid #252c35}.map{position:relative;display:grid;gap:2px;padding:8px;width:max-content;height:max-content}.cell{position:relative;border:1px solid #303945;background:linear-gradient(135deg,#171d24,#11161c);color:#697482;cursor:pointer;transition:.15s}.cell:hover{border-color:#667383;transform:translateY(-1px)}.cell span{position:absolute;left:8%;top:6%;font-size:.85em}.cell.current{border:2px solid var(--red);box-shadow:inset 0 0 30px #e3424220}.cell.current:before{content:"YOU";position:absolute;right:8%;top:6%;font-size:.7em;color:#ff6d6d;font-weight:800}.legend{display:flex;justify-content:center;gap:24px;color:var(--muted);font-size:11px;margin-top:16px}.legend i{display:inline-block;width:9px;height:9px;margin-right:7px}.legend .you{background:var(--red)}.legend .empty{border:1px solid #59636f}.activity-panel{padding:0}.tabs{display:flex;border-bottom:1px solid var(--line)}.tabs button{flex:1;border:0;background:transparent;color:var(--muted);padding:18px 8px;font-size:11px;font-weight:800;letter-spacing:.08em;cursor:pointer}.tabs button.active{color:var(--text);box-shadow:inset 0 -2px var(--amber)}.tabs em{font-style:normal;background:var(--red);color:white;border-radius:12px;padding:2px 6px;margin-left:4px}.tab-content{display:none;padding:20px}.tab-content.active{display:block}.block-name{font-size:11px;color:var(--muted);letter-spacing:.15em}.person{display:flex;align-items:center;gap:11px;padding:13px 0;border-bottom:1px solid #252b33}.mini-avatar{width:38px;height:38px;display:grid;place-items:center;font-weight:900;border:2px solid;overflow:hidden;flex-shrink:0}.mini-avatar img{width:100%;height:100%;object-fit:cover}.person div:nth-child(2){display:grid;gap:4px}.person span{color:var(--muted);font-size:11px}.person button,.hit-card button,.combat-ready button{margin-left:auto;border:1px solid #803038;background:#3a151a;color:#ff7a7a;font-size:10px;font-weight:900;padding:9px 11px;cursor:pointer}.quiet,.empty-state{color:var(--muted);font-size:12px;line-height:1.6;margin-top:18px}.hit-card{display:grid;gap:12px;border:1px solid #5d292e;background:#211215;padding:16px}.hit-card p{font-size:10px;color:#ff7777;margin:0;letter-spacing:.12em}.hit-card strong b{color:var(--muted);font-size:11px;margin:0 6px}.hit-card>span{font-size:11px;color:var(--muted)}.hit-card button{margin:2px 0 0}.pulse{display:inline-block;width:7px;height:7px;background:var(--red);border-radius:50%}.modal{position:fixed;inset:0;background:#000c;display:grid;place-items:center;padding:20px;z-index:10}.combat-card{width:min(720px,95vw);border:1px solid #3d4652;background:#10151b;padding:28px;position:relative;box-shadow:0 30px 100px #000}.combat-card h2{font-size:28px;margin:0 0 8px}.combat-card>p:not(.eyebrow){color:var(--muted);font-size:14px}.close{position:absolute;right:16px;top:13px;background:none;border:0;color:var(--muted);font-size:28px;cursor:pointer}.target-stage{height:340px;position:relative;margin-top:24px;overflow:hidden;border:1px solid #343d48;background:radial-gradient(circle,#25303c,#11161d 65%)}.enemy-portrait{position:absolute;inset:30px 90px;display:grid;place-content:center;text-align:center;border:1px solid #2d568d;background:linear-gradient(135deg,#111b29,#172d4e);color:#8bb9ff;font-size:56px;font-weight:900;letter-spacing:.2em}.enemy-portrait small{font-size:11px;letter-spacing:.2em;margin-top:10px}.random-target{position:absolute;width:42px;height:42px;border:2px solid #ff4949;border-radius:50%;background:#250b0bbf;cursor:crosshair;z-index:2;box-shadow:0 0 16px #ff303080}.random-target:before,.random-target:after{content:"";position:absolute;background:#ff4949}.random-target:before{height:2px;width:52px;left:-7px;top:18px}.random-target:after{width:2px;height:52px;left:18px;top:-7px}.random-target i{position:absolute;inset:11px;border:1px solid #ff4949;border-radius:50%}.combat-ready{padding:20px;margin-top:18px;border:1px solid #245b47;background:#0d241c;align-items:center;gap:12px}.combat-ready strong{color:var(--green)}.combat-ready span{color:var(--muted);font-size:12px}.combat-ready button{margin-left:auto;border-color:#287151;background:#123d2d;color:#72e3ae;padding:12px 24px}.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%) translateY(30px);opacity:0;background:#1a2028;border:1px solid #3b4653;padding:12px 18px;font-size:12px;transition:.2s;z-index:20}.toast.show{transform:translateX(-50%) translateY(0);opacity:1}.hidden{display:none!important}
/* v0.9.0 : le panneau d'activité (occupants/coups de gang) est de retour à
   côté de la carte (3e colonne) plutôt que dans son propre onglet — sous
   1200px il passe en pleine largeur, sous la carte plutôt qu'à sa droite. */
@media(max-width:1200px){.game-shell{grid-template-columns:minmax(280px,1fr);grid-template-rows:minmax(0,1fr) minmax(240px,320px)}.activity-panel{grid-column:1/-1}.player-panel{flex-basis:220px}}
@media(max-width:700px){.topbar{padding:0 14px}.server{display:none}.toptabs button{padding:0 14px;font-size:10px}.app-body{display:block;height:auto;padding:10px}.page-area{height:auto;overflow-y:visible}#page-map{height:auto}.game-shell{display:block;height:auto;padding:10px 0}.panel,.map-panel{margin-bottom:10px}.map-viewport{height:70vh}.section-head>p{display:none}.player-panel{display:grid;grid-template-columns:auto 1fr;gap:4px 14px}.player-panel .avatar{grid-row:1/4}.player-panel .avatar-upload-label{grid-column:1/-1}.player-panel .eyebrow,.player-panel .stat,.player-panel .meter,.player-panel dl,.player-panel .movement{grid-column:1/-1}.legend{gap:10px;flex-wrap:wrap}.enemy-portrait{inset:30px}.combat-card{padding:20px}.target-stage{height:290px}.page-wrap{padding:20px 14px 40px}}
/* v0.13.0 — "Next move in Xs" moved from the player panel to a centered
   banner above the map itself (was inside .movement in the player panel). */
.move-countdown-wrap{display:flex;justify-content:center;margin:14px 0 0}
.move-countdown-wrap strong{font-size:11px;font-weight:800;letter-spacing:.08em;color:var(--green);background:#0d1a14;border:1px solid #1e3b2c;padding:8px 18px;border-radius:3px}
