:root{--ink:#111;--paper:#f7f7f4;--panel:#fff;--muted:#6b6b67;--line:#c9c9c3;--red:#e63737;--blue:#3d61df;--gold:#d6812a;--ok:#25854b;--warn:#a56500;--danger:#b52222;--hex:#fbfbf8;--fog:#d8d8d4}
*{box-sizing:border-box}html,body{margin:0;height:100%;font-family:Arial,Helvetica,sans-serif;color:var(--ink);background:#ecece8}button,input,select{font:inherit}button{cursor:pointer}.app{height:100%;display:grid;grid-template-rows:58px 1fr;overflow:hidden}.topbar{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:14px;padding:0 14px;background:#fff;border-bottom:2px solid #111;z-index:20}.brand{font-family:Impact,'Arial Narrow',sans-serif;font-size:23px;letter-spacing:.5px;white-space:nowrap}.status{display:flex;align-items:center;justify-content:center;gap:11px;font-size:12px;min-width:0;overflow:auto}.status .pill{border-left:1px solid #aaa;padding-left:11px;white-space:nowrap}.status strong{font-size:13px}.status .resource strong{font-size:14px}.toolbar{display:flex;align-items:center;gap:5px}.iconbtn,.primary,.secondary,.dangerbtn{border:1px solid #111;background:#fff;min-height:36px;padding:8px 10px;font-weight:700}.primary{background:#111;color:#fff}.primary:hover:not(:disabled){background:#333}.secondary:hover,.iconbtn:hover{background:#eee}.primary:disabled,.secondary:disabled{background:#ddd;color:#888;border-color:#aaa;cursor:not-allowed}.dangerbtn{border-color:var(--danger);color:var(--danger)}.toolbar .iconbtn{font-size:11px}.layout{display:grid;grid-template-columns:minmax(620px,1fr) 410px;min-height:0}.map-wrap{position:relative;overflow:hidden;background:#f2f2ef}.map-head{position:absolute;left:14px;top:12px;z-index:8;display:flex;gap:8px;align-items:center}.map-note{background:rgba(255,255,255,.94);border:1px solid #111;padding:8px 10px;font-size:12px}.cycle-btn{background:#111;color:#fff;border:0;padding:10px 14px;font-weight:800;box-shadow:0 2px 0 rgba(0,0,0,.2)}.cycle-btn:disabled{background:#777;cursor:not-allowed}.map-scroll{width:100%;height:100%;overflow:auto;display:block;padding:42px 24px 24px}.board-shell{position:relative;min-width:1370px;min-height:670px;margin:0 auto}.board{width:1370px;height:670px;display:block;filter:drop-shadow(0 3px 4px rgba(0,0,0,.13))}.hex{fill:var(--hex);stroke:#b9b9b3;stroke-width:1.3;transition:fill .12s,stroke .12s}.hex:hover{fill:#fff;stroke:#111;stroke-width:2}.hex.selected{stroke:#111;stroke-width:4}.hex.move-target{fill:#eef7ef;stroke:var(--ok);stroke-width:3}.hex.path-cell{fill:#f3f7ff}.hex.enemy-target{fill:#fff2f2;stroke:var(--red)}.hex.fog{fill:var(--fog)}.terrain-image{pointer-events:none}.road{stroke:#222;stroke-width:3;stroke-dasharray:8 5;fill:none;stroke-linecap:round;pointer-events:none;opacity:.9}.capital-halo{stroke-width:4;pointer-events:none}.capital-halo.player{fill:rgba(230,55,55,.18);stroke:var(--red)}.capital-halo.ai{fill:rgba(61,97,223,.18);stroke:var(--blue)}.coord{font-size:10px;font-weight:700;fill:#777;pointer-events:none}.unit-layer{pointer-events:none}.unit-count{font-size:10px;font-weight:900;fill:#111;text-anchor:middle;paint-order:stroke;stroke:#fff;stroke-width:3px;stroke-linejoin:round}.soldier-player{stroke:var(--red);fill:none}.soldier-ai{stroke:var(--blue);fill:none}.order-line{stroke:#111;stroke-width:3;fill:none;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}.order-dot{fill:#fff;stroke:#111;stroke-width:2;pointer-events:none}.combat-turns{font-size:10px;font-weight:800;text-anchor:middle;fill:#111;pointer-events:none;paint-order:stroke;stroke:#fff;stroke-width:3px}.combat-icon{background:none}.permanent-symbol{pointer-events:none}.site-box{fill:#fff;stroke:#111;stroke-width:1.4}.site-text{font-size:10px;font-weight:900;text-anchor:middle;fill:#111}.shop-symbol{font-size:21px;font-weight:900;fill:#111;pointer-events:none}.panel{background:#fff;border-left:2px solid #111;min-height:0;display:grid;grid-template-rows:auto 1fr}.panel-head{padding:14px 16px 12px;border-bottom:2px solid #111;display:flex;justify-content:space-between;gap:10px;align-items:flex-start}.panel-head h2{margin:3px 0 0;font-family:Impact,'Arial Narrow',sans-serif;font-size:23px;letter-spacing:.4px}.eyebrow{font-size:11px;font-weight:800;text-transform:uppercase;color:#555}.panel-close{border:0;background:none;font-size:20px;padding:0 2px}.back-link{border:0;background:none;padding:0 0 5px;font-size:11px;font-weight:800;text-transform:uppercase}.panel-body{overflow:auto;padding:0 16px 26px}.section{padding:15px 0;border-bottom:1px solid #aaa}.section h3{margin:0 0 10px;font-size:13px;text-transform:uppercase;display:flex;align-items:center;gap:7px}.section h3 .num{display:inline-grid;place-items:center;width:21px;height:21px;border:1px solid #111;border-radius:50%;font-size:11px}.kv{display:grid;grid-template-columns:1fr auto;gap:8px 12px;font-size:13px}.kv span{color:#555}.kv b{text-align:right}.unit-row{width:100%;display:flex;justify-content:space-between;align-items:center;text-align:left;background:#fff;border:1px solid #bbb;padding:10px;margin:7px 0}.unit-row:hover:not(.static){border-color:#111}.unit-row small{display:block;color:#666;margin-top:3px}.unit-row .owner{font-size:11px;font-weight:800}.owner.player{color:var(--red)}.owner.ai{color:var(--blue)}.action-grid{display:grid;gap:8px}.action-grid button{width:100%;display:grid;grid-template-columns:1fr auto;align-items:center;text-align:left;border:1px solid #aaa;background:#fff;padding:11px 12px;font-weight:800}.action-grid button small{display:block;color:#666;font-weight:400;margin-top:3px}.action-grid button:hover:not(:disabled){border-color:#111;background:#f4f4f2}.action-grid button:disabled{color:#999;background:#eee;cursor:not-allowed}.notice{border:1px solid #777;background:#f4f4f1;padding:11px;font-size:13px;line-height:1.4;margin:8px 0}.notice.ok{border-color:var(--ok);background:#f0faf3}.notice.warn{border-color:var(--warn);background:#fff8e9}.notice.error{border-color:var(--danger);background:#fff0f0}.report{border:1px solid #bbb;padding:10px;margin:8px 0;background:#fff}.report button{border:0;background:none;padding:0;text-align:left;width:100%}.report strong{display:block}.report small{display:block;color:#666;margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.choice-row{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}.choice-row.four{grid-template-columns:repeat(4,1fr)}.choice-row button,.destination-list button,.equipment-grid button{border:1px solid #111;background:#fff;padding:9px;font-weight:800}.choice-row button.active,.destination-list button.active,.equipment-grid button.active{background:#111;color:#fff}.choice-row.two{grid-template-columns:repeat(2,1fr)}.split-grid{display:grid;gap:8px}.split-row{display:grid;grid-template-columns:1fr 110px;gap:10px;align-items:center;border:1px solid #bbb;padding:9px}.split-row input{width:100%;border:1px solid #111;padding:8px;text-align:right;font-weight:800}.merge-list{display:grid;gap:8px}.merge-option{display:flex;align-items:center;gap:10px;border:1px solid #bbb;padding:10px;cursor:pointer}.merge-option:hover{border-color:#111}.merge-option input{width:18px;height:18px}.merge-option span{display:flex;flex-direction:column;gap:3px}.merge-option small{color:#666}.danger-wide{width:100%;background:#fff;color:var(--danger);border:2px solid var(--danger);padding:11px;font-weight:900}.danger-wide:hover:not(:disabled){background:#fff1f1}.danger-wide:disabled{color:#999;border-color:#aaa;background:#eee}.structural-note{font-size:12px;color:#555;line-height:1.45}.destination-list{display:grid;gap:7px}.destination-list button{text-align:left}.equipment-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.equipment-grid button small{display:block;margin-top:6px;font-weight:400;line-height:1.35}.equipment-grid button:disabled{background:#eee;color:#999;cursor:not-allowed}.order-summary{font-size:13px;line-height:1.5}.turn-log{max-height:250px;overflow:auto;font-size:12px;background:#111;color:#fff;padding:9px}.turn-log div{padding:4px 0;border-bottom:1px solid #333}.mastery-line{display:grid;grid-template-columns:90px 1fr 36px;align-items:center;gap:8px;font-size:12px;margin:8px 0}.progress{height:8px;border:1px solid #111;background:#eee}.progress i{display:block;height:100%;background:#111}.asset-row{display:flex;justify-content:space-between;gap:8px;border-bottom:1px solid #ddd;padding:8px 0;font-size:13px}.asset-row span{color:#666;text-align:right}.mini-table{font-size:12px;line-height:1.55}.sticky-action{padding-top:15px}.wide{width:100%;min-height:42px}.order-move-button{margin-bottom:8px;text-align:center}.validate-move-button{background:#fff;color:var(--ok);border:2px solid var(--ok);font-weight:900}.validate-move-button:hover:not(:disabled){background:#f0faf3}.clear-path-button{background:#fff;color:#111;border:1px solid #111;font-weight:900}.clear-path-button:hover:not(:disabled){background:#eee}.validate-move-button:disabled,.clear-path-button:disabled{background:#ddd;color:#888;border-color:#aaa;cursor:not-allowed}.toast{position:fixed;left:50%;bottom:22px;transform:translateX(-50%);background:#111;color:#fff;padding:11px 16px;font-weight:700;z-index:100;opacity:0;pointer-events:none;transition:opacity .2s}.toast.show{opacity:1}.modal{position:fixed;inset:0;background:rgba(0,0,0,.72);z-index:200;display:none;place-items:center;padding:20px}.modal.show{display:grid}.modal-card{width:min(760px,95vw);max-height:92vh;overflow:auto;background:#fff;border:2px solid #111;padding:24px}.modal-card h1,.modal-card h2{font-family:Impact,'Arial Narrow',sans-serif;margin:0 0 12px;letter-spacing:.5px}.modal-card p,.modal-card li{line-height:1.5}.difficulty{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:18px 0}.difficulty button{border:2px solid #111;background:#fff;padding:16px;text-align:left}.difficulty button.selected{background:#111;color:#fff}.difficulty strong{display:block;font-size:18px;margin-bottom:5px}.difficulty small{line-height:1.35}.legend{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;font-size:13px}.legend span{border:1px solid #bbb;padding:8px}.game-over{border:3px solid #111}.beta-tag{display:inline-block;background:#2d8a4b;color:#fff;font-size:12px;padding:4px 7px;margin-left:7px;vertical-align:middle}.mini{font-size:11px;color:#666}.mobile-tabs{display:none}.system-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:12px 0}.system-grid div{border:1px solid #bbb;padding:9px;font-size:12px}.system-grid b{display:block;margin-bottom:3px}
@media(max-width:1100px){.layout{grid-template-columns:1fr}.panel{position:fixed;right:0;top:58px;bottom:0;width:min(430px,88vw);z-index:30;box-shadow:-8px 0 20px rgba(0,0,0,.18);transform:translateX(100%);transition:transform .2s}.panel.open{transform:translateX(0)}.status{justify-content:flex-start}.status .pill:nth-child(n+6){display:none}.toolbar .iconbtn:nth-child(n+5){display:none}.mobile-tabs{display:block;position:fixed;right:12px;bottom:12px;z-index:35}.mobile-tabs button{border:0;background:#111;color:#fff;padding:12px 14px;font-weight:800}.map-scroll{justify-content:flex-start}.board-shell{margin:auto}}
@media(max-width:720px){.topbar{grid-template-columns:1fr auto}.status{display:none}.brand{font-size:19px}.toolbar .iconbtn{display:none}.map-head{right:8px;left:8px;flex-wrap:wrap}.map-scroll{padding:86px 8px 12px}.panel{width:100vw}.difficulty{grid-template-columns:1fr}.legend,.system-grid{grid-template-columns:1fr}.choice-row.four{grid-template-columns:repeat(2,1fr)}}
.simulation-controls{display:flex;align-items:center;gap:7px}.simulation-controls.hidden{display:none}.simulation-controls label{display:flex;align-items:center;gap:6px;background:rgba(255,255,255,.94);border:1px solid #111;padding:5px 7px;font-size:11px;font-weight:800;text-transform:uppercase}.simulation-controls select{border:0;background:#fff;font-weight:800}.simulation-auto-btn.running{background:var(--danger)}

/* Ultimate Warfare — styles multijoueur */
.hidden,[hidden]{display:none!important}
.lobby-screen{min-height:100%;display:grid;place-items:center;padding:30px;background:linear-gradient(145deg,#e9e9e5,#f7f7f4)}
.lobby-card{width:min(980px,96vw);background:white;border:2px solid #111;padding:28px;box-shadow:0 14px 40px rgba(0,0,0,.12)}
.lobby-brand{font-family:Impact,'Arial Narrow',sans-serif;font-size:24px;letter-spacing:.5px}.lobby-brand span{font:700 11px Arial,sans-serif;border:1px solid #111;padding:4px 6px;margin-left:8px;vertical-align:middle}
.lobby-card h1{font-family:Impact,'Arial Narrow',sans-serif;font-size:42px;margin:16px 0 6px;letter-spacing:.8px}.lobby-card .lead{max-width:760px;line-height:1.55;color:#444}
.lobby-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:24px}.lobby-column{display:grid;gap:18px;align-content:start}.lobby-grid section{border:1px solid #aaa;padding:20px}.lobby-grid h2{font-size:17px;text-transform:uppercase;margin:0 0 14px}.lobby-grid label{display:grid;gap:6px;font-size:13px;font-weight:700;margin:12px 0}.lobby-grid input,.lobby-grid select{border:1px solid #111;padding:11px 12px;background:#fff}.optional{font-weight:400;color:#777}
.resume-box{margin-top:16px;border:1px solid #111;padding:13px;display:flex;justify-content:space-between;gap:12px;align-items:center}.smallprint{font-size:12px;color:#666;line-height:1.45;margin:18px 0 0}.button-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.text-btn{border:0;background:#fff;text-decoration:underline;font-weight:700;padding:8px 10px}.deployment-line{font-size:12px;color:#555;margin:8px 0 0}
.access-box{margin:18px 0 0;border:2px solid #111;padding:16px;background:#f7f7f4}.access-box h2{margin:0 0 8px;font-size:15px;text-transform:uppercase}.access-box label{display:grid;gap:6px;font-size:13px;font-weight:700;margin:12px 0}.access-box input{border:1px solid #111;padding:11px 12px;background:#fff;width:100%}.access-box .smallprint{margin:0}
.connection-badge{font-size:10px;font-weight:900;border:1px solid #111;padding:8px;background:#fff}.connection-badge.online{border-color:var(--ok);color:var(--ok)}.connection-badge.connecting{border-color:var(--warn);color:var(--warn)}.connection-badge.offline{border-color:var(--danger);color:var(--danger)}
.camp-red{color:var(--red)}.camp-blue{color:var(--blue)}.owner.red{color:var(--red)!important}.owner.blue{color:var(--blue)!important}.capital-halo.red{fill:rgba(230,55,55,.18);stroke:var(--red)}.capital-halo.blue{fill:rgba(61,97,223,.18);stroke:var(--blue)}
.soldier-red{stroke:var(--red);fill:none}.soldier-blue{stroke:var(--blue);fill:none}
.iconbtn.danger-lite{border-color:var(--danger);color:var(--danger)}.iconbtn.danger-lite:hover:not(:disabled){background:#fff0f0}
.report-row{width:100%;display:grid;grid-template-columns:1fr auto;gap:10px;align-items:center;text-align:left;background:#fff;border:1px solid #bbb;padding:11px;margin:7px 0;font-weight:700}.report-row:hover{border-color:#111;background:#f4f4f2}.report-row small{display:block;color:#666;font-weight:400;margin-top:3px}.report-unit{border:1px solid #bbb;padding:10px;margin:9px 0}.report-unit-head{display:flex;justify-content:space-between;gap:10px;align-items:center;margin-bottom:9px}.report-unit .kv{font-size:12px}
.reports-section-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 10px}.section .reports-section-head h3{margin:0}.reports-mark-all{flex:0 0 auto;border:1px solid #777;background:#fff;padding:4px 7px;font-size:10px;font-weight:800;line-height:1.2;white-space:nowrap}.reports-mark-all:hover:not(:disabled){border-color:#111;background:#eee}.reports-mark-all:disabled{color:#999;border-color:#bbb;background:#f4f4f2;cursor:not-allowed}
.notice.success{border-color:var(--ok);background:#f0faf3}
@media(max-width:820px){.lobby-grid{grid-template-columns:1fr}}
@media(max-width:560px){.lobby-screen{padding:10px}.lobby-card{padding:18px}.lobby-card h1{font-size:34px}.resume-box{align-items:flex-start;flex-direction:column}}

/* V9.0 — caméra de carte : déplacement souris/tactile et zoom. */
.map-scroll{overflow:auto;cursor:grab;touch-action:none;overscroll-behavior:contain;scrollbar-width:none;user-select:none;padding:var(--map-pan-y,42px) var(--map-pan-x,24px)}
.map-scroll::-webkit-scrollbar{display:none}
.map-scroll.dragging{cursor:grabbing}
.map-scroll .board-shell{min-width:0;min-height:0;width:1370px;height:670px;margin:0 auto}
.map-scroll .board{width:100%;height:100%}
.hex.combat-hex{stroke:#e07816;stroke-width:4}
.toolbar .sound-toggle{white-space:nowrap}
@media(max-width:1100px){.toolbar .sound-toggle{display:inline-block}}
@media(max-width:720px){.toolbar .sound-toggle{display:inline-block;padding:7px 9px;min-height:34px}}
.amount-control{display:grid;gap:8px;font-size:13px;font-weight:700}
.amount-input-row{display:grid;grid-template-columns:110px minmax(120px,1fr);gap:12px;align-items:center;min-width:0}
.amount-input-row input[type="number"]{width:100%;border:1px solid #111;padding:8px;text-align:right;font-weight:800}
.amount-input-row input[type="range"]{width:100%;min-width:0;padding:0;accent-color:#111;cursor:pointer}
.split-row{grid-template-columns:90px minmax(0,1fr)}
@media(max-width:420px){.amount-input-row{grid-template-columns:90px minmax(90px,1fr);gap:8px}}
.fusion-unit{border:1px solid #bbb;padding:10px;display:grid;gap:4px}.fusion-unit>small,.no-mastery{color:#666}
.fusion-masteries{display:flex;flex-wrap:wrap;gap:7px;margin-top:5px}.fusion-mastery{display:inline-flex;align-items:center;gap:3px;border:1px solid #aaa;padding:3px 5px;background:#fff}.fusion-mastery.mastered{border-color:#111}.fusion-mastery.progressing{color:#555}.fusion-mastery small{font-size:10px;font-weight:800}.fusion-result{border:1px solid #111;padding:10px;background:#f7f7f4}.fusion-result .fusion-masteries{margin-top:0}

.smallprint.compact{margin:0 0 6px}

/* M6.5.3.2 — jauge de maîtrise externe, sans style inline ni SVG */
.mastery-progress-v3{display:block;width:100%;height:10px;border:1px solid #111;border-radius:0;background:#fff;color:#111;appearance:none;-webkit-appearance:none;accent-color:#111;overflow:hidden}
.mastery-progress-v3::-webkit-progress-bar{background:#fff;border-radius:0}
.mastery-progress-v3::-webkit-progress-value{background:#111;border-radius:0}
.mastery-progress-v3::-moz-progress-bar{background:#111;border-radius:0}

/* M6.7.7 — roster tactique externe, ancré au viewport de la carte.
   Ne dépend pas des balises <style> créées dynamiquement par le client. */
.map-wrap > #uwRegimentRoster.uw-regiment-roster{
  position:absolute!important;
  top:82px!important;
  left:14px!important;
  z-index:17!important;
  width:240px!important;
  max-width:calc(100% - 28px)!important;
  height:auto!important;
  max-height:calc(100% - 96px)!important;
  margin:0!important;
  padding:0!important;
  display:flex!important;
  flex-direction:column!important;
  font-family:inherit!important;
  color:#111!important;
  pointer-events:auto!important;
  background:rgba(255,255,255,.68)!important;
  border:1px solid rgba(17,17,17,.12)!important;
  box-shadow:none!important;
  box-sizing:border-box!important;
}
.map-wrap > #uwRegimentRoster.uw-regiment-roster button{
  font:inherit!important;
  color:inherit!important;
  box-sizing:border-box!important;
}
.map-wrap > #uwRegimentRoster .uw-regiment-head{
  display:flex!important;
  flex-shrink:0!important;
  align-items:center!important;
  justify-content:space-between!important;
  min-height:30px!important;
  padding:4px 8px!important;
  margin:0!important;
  background:rgba(255,255,255,.40)!important;
  border:0!important;
  border-bottom:1px solid rgba(17,17,17,.12)!important;
  font-weight:800!important;
  font-size:14px!important;
  box-sizing:border-box!important;
}
.map-wrap > #uwRegimentRoster .uw-regiment-collapse{
  display:block!important;
  border:0!important;
  background:transparent!important;
  padding:0 2px!important;
  margin:0!important;
  min-width:22px!important;
  width:auto!important;
  height:22px!important;
  font-weight:900!important;
  font-size:17px!important;
  line-height:1!important;
  cursor:pointer!important;
  box-shadow:none!important;
}
.map-wrap > #uwRegimentRoster .uw-regiment-list{
  display:block!important;
  width:100%!important;
  min-height:0!important;
  max-height:calc(100vh - 150px)!important;
  overflow-y:auto!important;
  overflow-x:hidden!important;
  overscroll-behavior:contain!important;
  scrollbar-gutter:stable!important;
  margin:0!important;
  padding:0!important;
  background:transparent!important;
  box-sizing:border-box!important;
}
.map-wrap > #uwRegimentRoster .uw-regiment-row{
  width:100%!important;
  min-width:0!important;
  height:auto!important;
  display:grid!important;
  grid-template-columns:24px minmax(0,1fr) 10px!important;
  align-items:center!important;
  gap:2px!important;
  border:0!important;
  border-bottom:1px solid rgba(17,17,17,.10)!important;
  border-radius:0!important;
  background:transparent!important;
  padding:5px 7px!important;
  margin:0!important;
  text-align:left!important;
  cursor:grab!important;
  box-shadow:none!important;
  white-space:normal!important;
}
.map-wrap > #uwRegimentRoster .uw-regiment-row:last-child{border-bottom:0!important}
.map-wrap > #uwRegimentRoster .uw-regiment-row:hover{background:rgba(255,255,255,.44)!important}
.map-wrap > #uwRegimentRoster .uw-regiment-row.selected{
  background:rgba(40,135,220,.07)!important;
  box-shadow:inset 2px 0 #2887dc!important;
}
.map-wrap > #uwRegimentRoster .uw-regiment-row.dragging{opacity:.45!important;cursor:grabbing!important}
.map-wrap > #uwRegimentRoster .uw-regiment-row.drag-before{box-shadow:inset 0 2px #111!important}
.map-wrap > #uwRegimentRoster .uw-regiment-row.drag-after{box-shadow:inset 0 -2px #111!important}
.map-wrap > #uwRegimentRoster .uw-regiment-drag{color:#777!important;font-size:12px!important;letter-spacing:-2px!important;text-align:center!important}
.map-wrap > #uwRegimentRoster .uw-regiment-status{
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  width:24px!important;
  font-size:18px!important;
  line-height:1!important;
  font-weight:700!important;
}
.map-wrap > #uwRegimentRoster .uw-regiment-info{display:block!important;min-width:0!important}
.map-wrap > #uwRegimentRoster .uw-regiment-name{
  display:block!important;
  white-space:normal!important;
  overflow:visible!important;
  overflow-wrap:anywhere!important;
  font-weight:700!important;
  font-size:14px!important;
  line-height:1.15!important;
}
.map-wrap > #uwRegimentRoster .uw-regiment-meta{
  display:block!important;
  margin-top:2px!important;
  white-space:normal!important;
  overflow:visible!important;
  overflow-wrap:anywhere!important;
  font-size:12px!important;
  line-height:1.35!important;
  color:#555!important;
}
.map-wrap > #uwRegimentRoster.uw-regiment-roster.collapsed{width:auto!important}
.map-wrap > #uwRegimentRoster.uw-regiment-roster.collapsed .uw-regiment-list{display:none!important}
.map-wrap > #uwRegimentRoster.uw-regiment-roster.collapsed .uw-regiment-head{
  gap:14px!important;
  border-bottom:0!important;
}
@media(max-width:760px){
  .map-wrap > #uwRegimentRoster.uw-regiment-roster{width:220px!important;top:76px!important;left:8px!important;max-height:calc(100% - 88px)!important}.map-wrap > #uwRegimentRoster .uw-regiment-list{max-height:calc(100vh - 130px)!important}
  .map-wrap > #uwRegimentRoster .uw-regiment-row{padding:5px 6px!important}
  .map-wrap > #uwRegimentRoster .uw-regiment-name{font-size:13px!important}
  .map-wrap > #uwRegimentRoster .uw-regiment-meta{font-size:11px!important}
}

/* V8.5.3 - indicateur compact de maîtrise du terrain courant dans la fiche d’hexagone */
.mastery-badge{display:inline-flex;align-items:center;justify-content:center;min-width:1.05em;height:1.05em;font-size:.95em;font-weight:900;line-height:1;vertical-align:-.05em;opacity:.95}
.mastery-forest{font-size:1.05em}.mastery-mountain{font-size:.92em}.mastery-marsh{font-size:1.15em;letter-spacing:-.08em}.mastery-city{font-size:.92em}

/* V8.5.5 — maîtrises toujours affichées séparément, jusqu'à quatre pictogrammes. */
.mastery-badges{display:inline-flex;align-items:center;gap:.18em;white-space:nowrap}.mastery-badges .mastery-badge{flex:0 0 auto}.mastery-forest{font-size:.92em}.mastery-mountain{font-size:.92em}.mastery-marsh{font-size:1.05em}.mastery-city{font-size:.92em}

/* V9.0 — pictogrammes vectoriels monochromes des maîtrises. */
.mastery-badge{width:1.18em;height:1.18em;min-width:1.18em;color:currentColor;font-size:1em;letter-spacing:normal}
.mastery-badge svg{display:block;width:100%;height:100%;fill:currentColor;stroke:none}
.mastery-forest,.mastery-mountain,.mastery-marsh,.mastery-city{font-size:1em;letter-spacing:normal}

.game-result-modal{position:fixed;inset:0;z-index:220;display:grid;place-items:center;padding:24px;background:rgba(12,12,10,.62);backdrop-filter:blur(2px)}
.game-result-modal.hidden{display:none}
.game-result-card{width:min(520px,92vw);background:#fff;border:4px solid #111;padding:34px;text-align:center;box-shadow:0 18px 60px rgba(0,0,0,.38)}
.game-result-card[data-outcome="victory"]{border-color:#267440}
.game-result-card[data-outcome="defeat"]{border-color:#a52b2b}
.game-result-card[data-outcome="draw"]{border-color:#555}
.game-result-eyebrow{font-size:12px;font-weight:900;letter-spacing:.18em;color:#666}
.game-result-card h2{margin:10px 0 12px;font-family:Impact,'Arial Narrow',sans-serif;font-size:clamp(48px,9vw,82px);line-height:1;letter-spacing:.04em}
.game-result-card p{margin:0 0 26px;font-size:16px;line-height:1.5}
.objective-halo{stroke-width:5;pointer-events:none;fill:rgba(255,255,255,.32)}
.objective-halo.red{stroke:var(--red)}
.objective-halo.blue{stroke:var(--blue)}
.objective-halo.neutral{stroke:#777;stroke-dasharray:6 4}

.economy-button{font:inherit;cursor:pointer;background:#fff}.economy-button:hover{background:#eee}

/* V12.3 */
.fatigue-value{font-weight:900}.fatigue-low{color:#2d8a4b!important}.fatigue-medium{color:#d97706!important}.fatigue-high{color:#c62828!important}.loss-detail{display:block;font-weight:400;font-size:11px;color:#666;margin-top:3px}.annihilation-detail{font-weight:800}.camp-value.red,.owner-line.red{color:var(--red)}.camp-value.blue,.owner-line.blue{color:var(--blue)}.combat-formula{padding:10px 0;border-bottom:1px solid #ddd;line-height:1.55}.combat-formula:last-child{border-bottom:0}.combat-result b{max-width:230px}.coord{text-anchor:middle}

/* V13.1 — Couleurs des rapports de combat */
.report-row.unread{background:#e3e3e0;border-color:#92928e;color:#343434}.report-row.unread:hover{background:#d5d5d1}.report-row.unread small{color:#555}.toolbar #allPathsBtn[aria-pressed="true"]{background:#111;color:#fff}.hex.report-highlight{stroke:#f0a32b;stroke-width:5;filter:drop-shadow(0 0 5px #f0a32b)}
@media(max-width:720px){.toolbar #allPathsBtn{display:inline-block;min-height:34px;padding:6px 8px}}
.report-outcome-word,.report-annihilation-word{color:#111!important;font-weight:900}
.report-side.red,.prelim-side.red,.combat-camp-line.red{color:var(--red)!important}
.report-side.blue,.prelim-side.blue,.combat-camp-line.blue{color:var(--blue)!important}
.prelim-side{font-weight:700}
.combat-camp-line .loss-detail{color:inherit!important}

/* V14.0 — validation finale des archives */
.game-history-choice{margin:18px 0 22px;padding:14px;border:1px solid #999;background:#f7f7f4;text-align:left}.game-history-choice>strong{display:block;text-align:center}.game-history-choice p{margin:7px 0 12px}.history-choice-buttons{display:grid;grid-template-columns:1fr 1fr;gap:8px}.history-choice-buttons .danger-wide{padding:10px}.game-history-choice.hidden{display:none}@media(max-width:560px){.history-choice-buttons{grid-template-columns:1fr}}
/* HORDE V1 standalone */
.horde-lobby-grid{grid-template-columns:minmax(0,560px)!important;justify-content:center}

/* HORDE V1.5 COOP ALPHA */
:root{--green:#2d8a4b}
.camp-green{color:var(--green)}.owner.green{color:var(--green)!important}
.capital-halo.green{fill:rgba(45,138,75,.18);stroke:var(--green)}
.soldier-green{stroke:var(--green);fill:none}
.objective-halo.green{stroke:var(--green)}
.camp-value.green,.owner-line.green{color:var(--green)}
.report-side.green,.prelim-side.green,.combat-camp-line.green{color:var(--green)!important}
.horde-lobby-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important;justify-content:stretch}
@media(max-width:820px){.horde-lobby-grid{grid-template-columns:1fr!important}}
.hex.fatigue-blocked-target{fill:#ffe3e3;stroke:var(--danger);stroke-width:3;stroke-dasharray:6 3}
.hex.group-blocked-target{fill:#fff1dd;stroke:var(--warn);stroke-width:3;stroke-dasharray:5 3}
.group-selection-marker{pointer-events:none}.group-selection-marker circle{fill:#111;stroke:#fff;stroke-width:2}.group-selection-marker text{fill:#fff;font-size:12px;font-weight:900;text-anchor:middle}
.group-selection-controls{display:grid;gap:8px}.select-all-stack{margin:0 0 8px}.group-selection-list{display:grid;gap:7px}.group-selection-list.available{margin-top:8px}.group-selection-count{font-weight:900;margin-bottom:10px}.group-selection-row{display:grid;grid-template-columns:minmax(0,1fr) 84px;border:1px solid #aaa;background:#fff;min-width:0}.group-selection-row.selected{border-color:#2887dc;box-shadow:inset 3px 0 #2887dc}.group-selection-row.group-primary{background:#f2f7ff}.group-selection-row.blocking{border-color:var(--warn);background:#fff8e9}.group-unit-main,.group-unit-toggle{min-height:46px;border:0;background:transparent;text-align:left;padding:9px}.group-unit-main{display:flex;min-width:0;flex-direction:column;gap:3px}.group-unit-main small{color:#555}.group-unit-main em{color:var(--danger);font-size:11px;font-style:normal;font-weight:800}.group-unit-toggle{border-left:1px solid #bbb;text-align:center;font-size:11px;font-weight:900}.group-unit-toggle:hover{background:#eee}.allied-not-selectable{opacity:.78}.map-wrap > #uwRegimentRoster .uw-regiment-row.primary{outline:1px solid #2887dc;outline-offset:-2px}
@media(max-width:420px){.group-selection-row{grid-template-columns:minmax(0,1fr) 76px}.group-unit-main,.group-unit-toggle{padding:8px 6px;min-height:48px}.group-unit-toggle{font-size:10px}}
.rename-control{display:grid;gap:7px}.rename-control input{width:100%;border:1px solid #111;padding:10px 11px;font-weight:800}.rename-control small{color:#666}
.panel-head-main{flex:1;min-width:0}.panel-title-row{display:flex;width:100%;align-items:baseline;justify-content:space-between;gap:16px;flex-wrap:wrap}.rename-inline{margin-left:auto;border:0;background:none;color:#555;font-size:11px;font-weight:700;padding:2px 0;text-decoration:underline}.rename-inline:hover:not(:disabled){color:#111}.rename-inline:disabled{color:#aaa;cursor:not-allowed;text-decoration:none}
.mode-picker{border:0;padding:0;margin:12px 0}.mode-picker legend{padding:0;margin:0 0 6px;font-size:13px;font-weight:700}.mode-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.lobby-grid .mode-card{position:relative;display:block;margin:0;cursor:pointer}.mode-card input{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer}.mode-card-content{display:flex;min-height:88px;flex-direction:column;justify-content:center;gap:7px;border:1px solid #999;padding:10px;background:#fff;text-align:center;transition:border-color .12s,background .12s,color .12s}.mode-card-content strong{font-size:13px;letter-spacing:.04em}.mode-card-content small{font-size:11px;font-weight:400;line-height:1.35;color:#666}.mode-card:hover .mode-card-content{border-color:#111}.mode-card input:checked + .mode-card-content{border:2px solid #111;background:#111;color:#fff;padding:9px}.mode-card input:checked + .mode-card-content small{color:#ddd}.mode-card input:focus-visible + .mode-card-content{outline:3px solid #d6812a;outline-offset:2px}@media(max-width:420px){.mode-options{grid-template-columns:1fr}.mode-card-content{min-height:64px}}

.saved-games-list{display:grid;gap:8px;margin-top:12px}.saved-game-row{border:1px solid #bbb;padding:10px;display:grid;gap:8px;background:#fafafa}.saved-game-main{display:flex;justify-content:space-between;gap:10px;align-items:flex-start}.saved-game-title{font-weight:900}.saved-game-meta{font-size:12px;color:#666}.saved-game-actions{display:flex;gap:6px;flex-wrap:wrap}.saved-game-actions button{padding:7px 9px}.saved-games-import{margin-top:12px}.smallprint.compact{margin:6px 0}.iconbtn.hidden{display:none!important}@media(max-width:820px){.lobby-column{gap:18px}}

/* V15.2 — identité visuelle et illustrations libres des modes. */
.soldier-red{color:var(--red)}.soldier-blue{color:var(--blue)}.soldier-green{color:var(--green)}
.unit-count-shared{font-size:9px}.unit-count-red{fill:var(--red)}.unit-count-blue{fill:var(--blue)}.unit-count-green{fill:var(--green)}
.lobby-brand,.brand{display:flex;align-items:center;gap:9px}
.brand-mark{display:block;width:32px;height:32px;object-fit:contain;flex:0 0 auto}
.topbar .brand-mark{width:28px;height:28px}
.mode-card-content{min-height:128px;align-items:center;justify-content:center;gap:5px;padding:9px 6px;overflow:hidden;border-width:2px}
.mode-card-visual{display:block;width:80px;height:60px;max-width:100%;object-fit:contain;object-position:center;flex:0 0 auto}
.mode-card input:checked + .mode-card-content{padding:9px 6px;background:#f3f3f0;color:#111;box-shadow:inset 0 -3px #111}
.mode-card input:checked + .mode-card-content small{color:#555}
@media(max-width:560px){.lobby-brand{font-size:21px;flex-wrap:wrap;gap:6px}.lobby-brand span{margin-left:0}.brand-mark{width:28px;height:28px}}
@media(max-width:420px){.mode-card-content{min-height:78px;display:grid;grid-template-columns:70px minmax(0,1fr);grid-template-rows:auto auto;column-gap:12px;row-gap:3px;align-items:center;text-align:left;padding:9px 12px}.mode-card-visual{grid-row:1 / 3;width:70px;height:52px}.mode-card input:checked + .mode-card-content{padding:9px 12px}.mode-card-content strong{align-self:end}.mode-card-content small{align-self:start}}

/* Four equally sized mode cards, with matching icon, title and description tracks. */
.mode-options{grid-auto-rows:1fr}
.lobby-grid .mode-card{height:100%;min-width:0}
.mode-card-content{display:grid;grid-template-rows:60px 32px 30px;align-content:center;justify-items:center;row-gap:3px;width:100%;height:100%;min-height:148px;padding:8px 6px}
.mode-card-content strong,.mode-card-content small{align-self:center;min-width:0;text-align:center}
.mode-card input:checked + .mode-card-content{padding:8px 6px}
.mode-card-visual-river{transform:scale(1.6)}
@media(max-width:420px){.mode-card-content{grid-template-columns:70px minmax(0,1fr);grid-template-rows:32px 30px;column-gap:12px;row-gap:3px;min-height:90px;padding:9px 12px}.mode-card-visual{grid-row:1 / 3}.mode-card-content strong,.mode-card-content small{justify-self:center}.mode-card input:checked + .mode-card-content{padding:9px 12px}}

.mode-card-placeholder{display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:900;letter-spacing:.04em}

.action-grid.upgrade-actions button{grid-template-columns:36px minmax(0,1fr);gap:12px}
.upgrade-icon{display:block;width:32px;height:32px;pointer-events:none}

/* Archery targeting stays above terrain and units without changing fog visibility. */
.fire-out-of-range{fill:#202426;fill-opacity:.56;stroke:none;pointer-events:none}
.fire-range{fill:transparent;stroke:#77776e;stroke-width:1.8;pointer-events:all;cursor:crosshair}
.fire-range:hover{stroke:#34342e;stroke-width:3.5}
.fire-range.fire-target{fill:#d69a24;fill-opacity:.22;stroke:#b8780d;stroke-width:4}
.fire-reticle{fill:none;stroke:#b8780d;stroke-width:2.5;pointer-events:none}

/* Fourth camp in Total War co-op. */
:root{--orange:#7b3fc6}
.camp-orange,.owner.orange,.camp-value.orange,.owner-line.orange{color:var(--orange)!important}
.capital-halo.orange{fill:rgba(123,63,198,.18);stroke:var(--orange)}
.soldier-orange{stroke:var(--orange);fill:none;color:var(--orange)}
.objective-halo.orange{stroke:var(--orange)}
.unit-count-orange{fill:var(--orange)}
.report-side.orange,.prelim-side.orange,.combat-camp-line.orange{color:var(--orange)!important}
.horde-major-wave{color:#456247;font-size:11px}.horde-wave-mobile{display:none}
@media(max-width:1100px){.status .horde-major-wave{display:none}.horde-wave-mobile:not([hidden]){display:block;color:#456247;font-size:11px}.map-head{flex-wrap:wrap}}
.fire-button,.primary.fire-button{background:#fff;border-color:var(--danger);color:var(--danger);font-weight:700}
.fire-button:hover:not(:disabled),.primary.fire-button:hover:not(:disabled){background:#fcecec;border-color:var(--danger);color:var(--danger)}
.fire-button:disabled,.primary.fire-button:disabled{background:#ddd;border-color:#aaa;color:#888}

/* Archer orders share one vertical action block: fire, then movement. */
.archer-actions{display:flex;flex-direction:column;gap:12px;margin-top:10px}
.archer-action+.archer-action{border-top:1px solid #ddd;padding-top:12px}

/* Shared lobby / in-game keyboard settings. */
.participation-notice{position:absolute;z-index:12;bottom:16px;left:16px;max-width:min(500px,calc(100% - 32px));max-height:45%;overflow:auto;padding:12px 16px;background:#fff7df;border:1px solid #9b711d;border-radius:8px;box-shadow:0 3px 14px #0002;font-size:13px}
.participation-notice p{margin:5px 0 9px}.participation-notice button{font-size:12px;max-width:100%}
.lobby-card{position:relative}
.lobby-card .lobby-brand{padding-right:260px;min-height:44px}
.lobby-shortcuts{position:absolute;top:24px;right:24px;min-height:44px;display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:8px;font-size:12px}
.lobby-shortcuts svg{flex-shrink:0}
@media(max-width:800px){.lobby-card{padding-top:84px}.lobby-card .lobby-brand{padding-right:0}}
@media(max-width:560px){.lobby-card{padding-top:76px}.lobby-shortcuts{top:16px;right:16px}}
.shortcut-dialog{width:min(800px,calc(100vw - 32px));max-height:85vh;overflow:auto;box-sizing:border-box;border:1px solid #aaa;border-radius:12px;padding:24px;background:#f6f5f0;color:#222;box-shadow:0 20px 80px #0005}
.shortcut-dialog::backdrop{background:#0008}
.shortcut-dialog h2{margin-top:0}
.shortcut-heading,.shortcut-row{display:grid;grid-template-columns:1.5fr 1fr 1fr;gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid #ddd}
.shortcut-heading{font-size:12px;color:#666}
.shortcut-slot{display:flex;gap:4px;align-items:center;min-width:0}
.shortcut-slot .secondary{flex:1;min-width:0;overflow-wrap:anywhere;padding:8px;font-size:12px}
.shortcut-slot .text-btn{padding:8px}
.shortcut-footer{display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-end;margin-top:20px}
.shortcut-dialog [data-shortcut-status]{min-height:2.5em}
.toolbar #gameMenuBtn{display:inline-block}
.game-menu-list{display:flex;flex-direction:column;gap:12px}
.game-menu-list button{text-align:left;min-height:48px}
.game-menu-list .game-menu-abandon{margin-top:16px;border-color:var(--danger);color:var(--danger)}
.game-menu-body .shortcut-row{grid-template-columns:1fr 1fr}
.game-menu-body .shortcut-row>strong{grid-column:1 / -1}
.game-menu-body .shortcut-heading{display:none}
.game-menu-body .shortcut-footer{flex-direction:column}
.game-menu-body .shortcut-footer button{width:100%}
.shortcut-unsaved{display:flex;flex-direction:column;gap:8px}
@media(max-width:720px){.app{grid-template-rows:auto 1fr}.topbar{grid-template-columns:1fr;gap:4px;padding:6px 10px}.toolbar{justify-content:flex-end;flex-wrap:wrap}}
@media(max-width:600px){.shortcut-dialog{padding:16px}.shortcut-row{grid-template-columns:1fr 1fr}.shortcut-row>strong{grid-column:1 / -1}.shortcut-heading{display:none}.shortcut-footer button{width:100%}}
