/* V3.5: one bounded cluster, independent of timer, settings and device width. */
.action-cluster{display:contents}.action-label{display:none}
.vitals{position:absolute;bottom:24px;left:28px;width:clamp(220px,26vw,340px);display:flex;flex-direction:column;gap:6px;pointer-events:none}
.vitals .health,.vitals .ammo{position:relative;inset:auto;transform:none;width:100%;min-width:0;max-width:none;margin:0}
.vitals .health{height:24px}.vitals .ammo{pointer-events:auto;text-align:center;padding:6px 8px;min-height:58px}
.health.invulnerable{border-color:#f4d77f;box-shadow:0 0 0 2px #080e12,0 0 12px #e1b84f99}.health.invulnerable .health-fill,.health.invulnerable .shield-fill{background:linear-gradient(#ffe799,#bc8f36)}
.concussion-status{align-self:flex-start;color:#d8efff;background:#122432ed;border:1px solid #66adf0;padding:4px 9px;font:700 14px/1.2 system-ui;text-shadow:0 1px 2px #000}.concussion-status[hidden]{display:none}
.xp-progress{height:8px;background:#0b1929;border:1px solid #90a6ba;box-shadow:0 1px 4px #000c;overflow:hidden}
#xp-fill{height:100%;width:0;background:linear-gradient(90deg,#3d95df,#8ad3ff);transition:width .12s linear}
.minimap{position:absolute;left:max(14px,env(safe-area-inset-left));top:14px;width:clamp(96px,16dvh,150px);height:clamp(96px,16dvh,150px);border:1px solid #748783;border-radius:4px;pointer-events:none}
.notifications{left:calc(clamp(96px,16vh,150px) + 30px);top:max(16px,env(safe-area-inset-top));width:280px;max-width:28vw;gap:8px;pointer-events:none}
.notice{padding:8px 10px;background:#07151cdb;border-left:3px solid #e5c258}.notice strong{font-size:14px}.notice span{font-size:13px;line-height:1.35}
.pc-game .swap-control{display:none}
.pc-game .utility{left:auto;right:28px;bottom:28px}
.mobile-game{--action:clamp(58px,min(17dvh,8.2dvw),98px);--gap:8px;--edge:max(16px,env(safe-area-inset-right));--bottom:max(18px,env(safe-area-inset-bottom))}
.mobile-game .action-cluster{display:grid;position:absolute;right:var(--edge);bottom:var(--bottom);grid-template-columns:repeat(3,var(--action));grid-template-rows:repeat(2,var(--action));gap:var(--gap);pointer-events:none;align-items:center;justify-items:center}
.mobile-game .ability-hud{display:contents}
.mobile-game .action-cluster .ability,.mobile-game .action-cluster .utility,.mobile-game .action-cluster .swap-control{position:relative;inset:auto;transform:none;margin:0;min-width:0;width:var(--action);height:var(--action);pointer-events:auto;touch-action:none;border-radius:50%;display:grid;place-items:center;box-shadow:inset 0 0 0 3px #08141c,0 3px 12px #0009}
.mobile-game .action-cluster .ability-one{grid-row:2;grid-column:1}
.mobile-game .action-cluster .ability-two{grid-row:2;grid-column:2}
.mobile-game .action-cluster .ultimate{grid-row:2;grid-column:3;border:3px solid #f3c36b;background:radial-gradient(circle,#784b24,#291c15);color:#ffe0a1}
.mobile-game .action-cluster .utility{grid-row:1;grid-column:3;width:calc(var(--action)*.84);height:calc(var(--action)*.84);border-color:#c995e2}
.mobile-game .action-cluster .swap-control{grid-row:1;grid-column:2;width:calc(var(--action)*.72);height:calc(var(--action)*.72);background:#19272c;border:1px solid #9aa69b;color:#d8dfd7}
.mobile-game .action-cluster [hidden]{display:none}
.mobile-game .action-cluster svg{width:calc(var(--action)*.44);height:calc(var(--action)*.44);margin-top:-6px}
.mobile-game .action-label{display:block;position:absolute;bottom:6px;font:700 12px Arial,sans-serif;letter-spacing:.03em;pointer-events:none}
.mobile-game .ability .cooldown{font-size:22px;text-shadow:0 2px 3px #000}.mobile-game .ability.unavailable svg{opacity:.32}
.mobile-game .utility>span{display:none}.mobile-game .utility.empty{opacity:.6}
.mobile-game .joystick.move-stick{width:clamp(120px,32dvh,176px);height:clamp(120px,32dvh,176px);left:max(22px,env(safe-area-inset-left));right:auto;bottom:var(--bottom)}
body[data-control-layout=left] .mobile-game .action-cluster{right:auto;left:max(16px,env(safe-area-inset-left))}
body[data-control-layout=left] .mobile-game .joystick.move-stick{left:auto;right:max(22px,env(safe-area-inset-right))}
.mobile-game .vitals{left:50%;transform:translateX(-50%);bottom:max(16px,env(safe-area-inset-bottom));width:clamp(160px,24dvw,270px);gap:5px}
.mobile-game .vitals .health{width:100%;min-width:0;max-width:none;height:22px;bottom:auto;left:auto;transform:none}
.mobile-game .vitals .ammo{width:100%;min-width:0;max-width:none;bottom:auto;left:auto;right:auto;transform:none;line-height:1.2;font-size:14px}
.mobile-game .vitals .ammo strong{font-size:20px}.mobile-game .vitals .ammo small{font-size:12px;min-height:14px}.mobile-game .vitals .ammo>span{display:block;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mobile-game .notifications{display:flex;left:calc(clamp(96px,16vh,150px) + 28px);width:clamp(170px,27dvw,280px);max-width:none;top:16px;gap:5px}
.mobile-game .notice{padding:6px 8px}.mobile-game .notice strong{font-size:13px}.mobile-game .notice span{font-size:12px}
.mobile-game .timer{top:14px}.mobile-game .notification-button{top:17px;left:auto;right:76px}
.mobile-game .gear{top:max(12px,env(safe-area-inset-top));right:max(14px,env(safe-area-inset-right))}
.mobile-game .multiplayer-status{top:66px;right:14px;font-size:12px;max-width:170px;pointer-events:none}
.mobile-game .encounter{top:54px;font-size:16px}.mobile-game .xp-feedback{top:40%;font-size:16px}

/* V4.5 local identity and post-cap progression. */
.survivor-status{display:flex;align-items:center;justify-content:space-between;gap:12px;height:38px}
.self-revives{display:inline-flex;align-items:center;gap:7px;color:#efc86b;background:#0b151deb;border:1px solid #9a814c;padding:5px 9px;border-radius:4px;font-size:16px;line-height:1}
.self-revives svg{width:19px;height:19px}
.portrait.hud-portrait,.portrait.slot-portrait,.portrait.team-portrait{flex:none;width:40px;height:40px;min-width:0;min-height:0;border:1px solid #93866a;border-radius:4px;background-color:#132027;mask-image:none}
.portrait.team-portrait{width:26px;height:30px;display:inline-block;vertical-align:middle;margin-right:6px}
.portrait.downed-portrait{width:64px;height:76px;margin:auto;background-color:#101b22;mask-image:none}
.portrait.result-portrait{width:100px;height:120px;margin:12px auto;mask-image:none}
.result-character,.upgrade-identity{display:flex;align-items:center;gap:10px}.upgrade-identity{margin-bottom:10px}
.player-slot{position:relative;padding-left:60px}.player-slot .slot-portrait{position:absolute;left:10px;top:10px}
.postmax-stats{grid-template-columns:repeat(3,minmax(0,1fr));max-height:56dvh;overflow:auto;padding:2px}
.postmax-stats .upgrade-card{min-height:140px}.postmax-stats .upgrade-mark{display:none}
.postmax-stats .upgrade-pick{padding:16px}.postmax-stats h2{font-size:20px}.postmax-stats p{font-size:14px}
.postmax-stats .upgrade-card:focus-within{outline:2px solid #e8ce8c;outline-offset:1px}
@media(max-height:480px){.survivor-status{height:26px}.portrait.hud-portrait{width:26px;height:26px}.self-revives{font-size:14px;padding:4px 7px}.self-revives svg{width:16px;height:16px}.postmax-stats{max-height:46dvh}.postmax-stats .upgrade-card{min-height:110px}.postmax-stats .upgrade-pick{padding:12px}.upgrade-identity{margin-bottom:4px}.upgrade-identity .slot-portrait{width:28px;height:30px}}
@media(max-width:700px){.postmax-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.postmax-stats h2{font-size:18px}}

/* Lobby map choice shared by solo runs and multiplayer parties. */
.run-options{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap}
.map-screen>p{text-align:center;margin:-22px auto 25px}
.map-screen .difficulty-card{min-height:185px;padding:30px 24px}
.map-screen .difficulty-card.unavailable{opacity:.55;cursor:default}
.map-screen .difficulty-card.unavailable h2{color:#b9bdb4}
.map-availability{display:inline-block;margin-top:15px;color:#f1d18f;font-weight:700}
@media(max-width:750px),(max-height:460px){
 .run-options{order:-1;width:100%;gap:4px}
 .run-options .difficulty-toggle{order:0;width:auto;margin:0;gap:5px;font-size:12px}
 .run-options .difficulty-toggle strong{min-width:0;padding:5px 7px;font-size:13px}
 .map-screen .difficulty-options{gap:10px}
 .map-screen .difficulty-card{min-height:130px;padding:14px}
 .map-screen .difficulty-card h2{font-size:20px;margin-bottom:10px}
 .map-screen .difficulty-card p{font-size:13px;line-height:1.4}
 .map-screen>p{margin:-27px auto 14px}
}
