/* Une seule disposition tactile, indépendante des anciens seuils desktop. */
.control-icon { width:23px; height:23px; flex:none; display:block; }
.mobile-only,.mobile-dock,.stick-caption,.mobile-icon { display:none; }
#ability-button>.mobile-icon,#hud .mobile-only { display:none; }
#ability-class { display:block; font-size:12px; color:var(--muted); margin-bottom:4px; }
.touch-ui { overscroll-behavior:none; -webkit-text-size-adjust:100%; text-size-adjust:100%; }
.touch-ui body { position:fixed; inset:0; overscroll-behavior:none; }
.touch-ui #game-shell { position:absolute; top:var(--viewport-top,0px); height:var(--viewport-height,100dvh); min-height:0; --safe-top:env(safe-area-inset-top,0px); --safe-bottom:env(safe-area-inset-bottom,0px); --safe-left:max(12px,env(safe-area-inset-left,0px)); --safe-right:max(12px,env(safe-area-inset-right,0px)); --stick-size:112px; --dock-bottom:calc(var(--safe-bottom) + 156px); }
.touch-ui #game-shell,.touch-ui #game-shell * { -webkit-user-select:none; user-select:none; -webkit-touch-callout:none; }
.touch-ui #game-shell input,.touch-ui #game-shell textarea { -webkit-user-select:text; user-select:text; -webkit-touch-callout:default; }
.touch-ui button,.touch-ui a { touch-action:manipulation; }
.touch-ui input:not([type=range]):not([type=checkbox]),.touch-ui select,.touch-ui #room-code { font-size:16px; }
.touch-ui #hud,.touch-ui #hud * { touch-action:none; }
.touch-ui #hud { position:absolute; inset:0; pointer-events:none; }
.touch-ui #hud button { pointer-events:auto; }
.touch-ui .menu-screen,.touch-ui .panel { overscroll-behavior:contain; -webkit-overflow-scrolling:touch; touch-action:pan-y pinch-zoom; }
.touch-ui .mobile-only,.touch-ui .mobile-icon { display:flex; }
.touch-ui #hud .mobile-only,.touch-ui #ability-button>.mobile-icon { display:flex; }
.touch-ui #hud .desktop-label { display:none; }
.touch-ui #hud kbd,.touch-ui .hud-actions #squad-button,.touch-ui .hud-actions #stats-button,.touch-ui .hud-actions .desktop-label { display:none; }
.touch-ui .hud-top { top:calc(var(--safe-top) + 8px); left:var(--safe-left); right:var(--safe-right); height:44px; gap:8px; align-items:center; }
.touch-ui .wave-block { display:grid; grid-template-columns:auto 1fr; column-gap:6px; row-gap:0; align-items:center; min-width:0; }
.touch-ui .wave-block>.eyebrow { font-size:8px; letter-spacing:.04em; line-height:1; }
.touch-ui .wave-block strong { font:600 24px/1 var(--mono); grid-column:1; grid-row:2; }
.touch-ui #wave-status { font:10px/1.3 var(--mono); grid-column:2; grid-row:1/3; width:60px; max-width:60px; }
.touch-ui .hud-money { flex-shrink:0; gap:0; white-space:nowrap; }
.touch-ui .hud-money .eyebrow { display:none; }
.touch-ui .hud-money strong { font:600 16px/1 var(--mono); }
.touch-ui .hud-money small { font-size:11px; }
.touch-ui .hud-actions { gap:4px; }
.touch-ui .hud-actions .hud-button { width:44px; height:44px; min-height:44px; padding:0; justify-content:center; border-radius:12px; background:#101c20dc; }
.touch-ui .hud-actions [data-action=shop] { color:#eed09a; }
.touch-ui .hud-actions .hud-button:active { background:#425550; }
.touch-ui .hud-bottom { display:contents; }
.touch-ui .vitals { position:absolute; top:calc(var(--safe-top) + 60px); left:var(--safe-left); width:126px; padding:7px 9px; border:1px solid #a9c4ac33; border-radius:9px; background:#101c20d9; }
.touch-ui .vital-heading { font:10px/1 var(--mono); gap:4px; }
.touch-ui .vital-heading>span { font-size:9px; }
.touch-ui .health-track { height:4px; margin-top:6px; }
.touch-ui .stamina-track { height:2px; margin-top:4px; }
.touch-ui .armor-status { min-height:0; margin:0; font:8px/1.2 var(--mono); }
.touch-ui .armor-status:not(:empty) { margin-top:4px; }
.touch-ui .ammo-panel { position:absolute; top:calc(var(--safe-top) + 60px); right:var(--safe-right); width:146px; height:46px; display:grid; grid-template-columns:1fr 44px; grid-template-rows:14px 24px; gap:0 6px; padding:4px 3px 4px 8px; margin:0; background:#101c20d9; border:1px solid #a9c4ac33; border-radius:9px; pointer-events:auto; }
.touch-ui #weapon-name { font:9px/14px var(--mono); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; grid-row:1; }
.touch-ui .ammo-panel>div { grid-column:1; grid-row:2; margin:0; gap:5px; }
.touch-ui #ammo-count { font:600 23px/24px var(--mono); }
.touch-ui #ammo-reserve { font:11px var(--mono); }
.touch-ui #reload-button { position:absolute; inset:0; width:100%; padding:0 11px 0 0; justify-content:flex-end; border-radius:9px; }
.touch-ui #reload-label { display:none; }
.touch-ui .ammo-panel.is-reloading { border-color:#edbb76; }
.touch-ui .ammo-panel.is-reloading .control-icon { color:#edbb76; }
.touch-ui .gear { display:none; }
.touch-ui .weapon-belt,.touch-ui .knife-status,.touch-ui #touch-sprint { display:none; }
.touch-ui .mission-status,.touch-ui .field-status { display:none; }
.touch-ui .mission-status.extraction-active { display:block; top:calc(var(--safe-top) + 112px); left:50%; transform:translateX(-50%); max-width:calc(100% - var(--safe-left) - var(--safe-right)); width:max-content; font:10px/1.3 var(--mono); padding:5px 8px; white-space:normal; text-align:center; pointer-events:none; }
.touch-ui .next-wave { top:calc(var(--safe-top) + 112px); left:auto; right:var(--safe-right); min-height:44px; padding:6px 12px; font:11px var(--mono); border-radius:10px; background:#1c2922d9; }
.touch-ui .online-hud { left:var(--safe-left); top:calc(var(--safe-top) + 112px); width:126px; padding:6px 8px; border-radius:8px; }
.touch-ui .online-hud>div:first-child { font-size:8px; letter-spacing:0; }
.touch-ui .online-hud>strong { font:10px/14px var(--mono); max-width:66px; margin:3px 0; vertical-align:middle; }
.touch-ui #partner-health { font:8px/14px var(--mono); margin-top:3px; }
.touch-ui #partner-money { display:none; }
.touch-ui .partner-track { height:2px; }
.touch-ui .mobile-dock { position:absolute; display:flex; gap:6px; justify-content:center; align-items:center; bottom:var(--dock-bottom); left:var(--safe-left); right:var(--safe-right); pointer-events:none; }
.touch-ui .mobile-dock>button { position:relative; inset:auto; transform:none; flex:0 0 44px; width:44px; height:48px; min-height:44px; padding:4px; margin:0; border-radius:12px; background:#15272ad9; border:1px solid #abcbb34d; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px; font:10px/1 var(--mono); color:#e5e6d7; text-align:center; overflow:hidden; }
.touch-ui .mobile-dock>button:active,.touch-ui .mobile-dock>button.is-held { background:#426257ed; border-color:#bbdab3; }
.touch-ui .mobile-dock .gear-button>span:first-child { font-size:initial; color:inherit; }
.touch-ui .mobile-dock button:disabled { opacity:.42; }
.touch-ui #touch-knife { color:#d5dce0; }
.touch-ui #ability-button { color:var(--class-color); border-color:var(--class-color); }
.touch-ui #ability-class,.touch-ui #ability-name { display:none; }
.touch-ui .ability-state { margin:0; font:9px/10px var(--mono); }
.touch-ui .ability-track { height:2px; }
.touch-ui #touch-interact { inset:auto; color:#a8e0d7; }
.touch-ui #touch-interact:disabled { opacity:.32; }
.touch-ui .touch-controls { display:block; position:absolute; inset:0; pointer-events:none; }
.touch-ui .touch-pad { position:absolute; bottom:calc(var(--safe-bottom) + 26px); left:var(--safe-left); width:var(--stick-size); height:var(--stick-size); border:1px solid #d2e0c84d; background:#15272a45; border-radius:50%; display:flex; align-items:center; justify-content:center; touch-action:none; pointer-events:auto; }
.touch-ui #aim-pad { left:auto; right:var(--safe-right); }
.touch-ui .touch-pad .stick-knob { display:flex; align-items:center; justify-content:center; width:46px; height:46px; border-radius:50%; background:#b5c9ba20; border:1px solid #d2dfc774; color:#dee8d4; line-height:1; }
.touch-ui .touch-pad .stick-knob .control-icon { width:24px; height:24px; }
.touch-ui .touch-pad.is-active { border-color:#cfe8cba3; background:#15272a70; }
.touch-ui .touch-pad.is-sprinting { border-color:#eed09a; box-shadow:inset 0 0 0 3px #eed09a25; }
.touch-ui .stick-caption { position:absolute; bottom:-18px; display:block; width:140px; font:9px var(--mono); text-align:center; color:#d3dbca; opacity:.75; white-space:nowrap; }
.touch-ui .touch-controls>button { width:44px; height:44px; padding:0; display:flex; align-items:center; justify-content:center; background:#15272ad9; border:1px solid #abcbb34d; border-radius:12px; pointer-events:auto; position:absolute; }
.touch-ui #touch-weapon { left:50%; right:auto; transform:translateX(-50%); bottom:calc(var(--safe-bottom) + 26px); }
.touch-ui #touch-loot { left:50%; right:auto; transform:translateX(-50%); bottom:calc(var(--safe-bottom) + 78px); color:#a8e0d7; }
.touch-ui .interaction { bottom:calc(var(--dock-bottom) + 58px); left:50%; transform:translateX(-50%); max-width:calc(100% - var(--safe-left) - var(--safe-right)); width:max-content; padding:7px 12px; font-size:11px; line-height:1.3; pointer-events:none; }
.touch-ui .interaction strong { font-size:10px; }
.touch-ui .interaction .repair-track { height:3px; margin-top:4px; }
.touch-ui .wave-banner,.touch-ui body.online .wave-banner { top:calc(var(--safe-top) + 170px); left:50%; transform:translateX(-50%); max-width:250px; width:max-content; padding:6px 12px; border:0; border-radius:6px; background:#101c20d9; text-align:center; }
.touch-ui .wave-banner strong { font:600 14px var(--mono); }
.touch-ui .wave-banner>p,.touch-ui .wave-banner>span { display:none; }
.touch-ui .toast { top:calc(var(--safe-top) + 206px); right:auto; left:50%; bottom:auto; transform:translateX(-50%); width:260px; max-width:calc(100% - 32px); }
.touch-ui .notice { padding:7px 9px; gap:7px; background:#132127ed; }
.touch-ui .notice strong { font-size:10px; margin:0 0 3px; }
.touch-ui .notice p { font-size:11px; line-height:1.4; }
.touch-ui .notice-icon { flex-basis:18px; height:18px; font-size:11px; }
.touch-ui .notice:nth-child(n+2) { display:none; }
.touch-ui .active-buffs { top:calc(var(--safe-top) + 164px); left:var(--safe-left); max-width:130px; font-size:9px; gap:3px; pointer-events:none; }
.touch-ui .active-buffs span { padding:3px 5px; }
.touch-ui .event-status { top:calc(var(--safe-top) + 54px); left:50%; max-width:40%; padding:4px 6px; font-size:9px; white-space:normal; text-align:center; pointer-events:none; }
.touch-ui .boss-status { top:calc(var(--safe-top) + 146px); width:50%; font-size:10px; pointer-events:none; }
.touch-ui .streak-status { right:var(--safe-right); bottom:calc(var(--dock-bottom) + 65px); }
.touch-ui .streak-status strong { font-size:10px; }
.touch-ui .down-notice { top:35%; width:min(330px,80%); font-size:12px; margin:0; pointer-events:none; }
.touch-ui .overlay { padding:calc(var(--safe-top) + 8px) var(--safe-right) calc(var(--safe-bottom) + 8px) var(--safe-left); align-items:center; }
.touch-ui .panel { max-height:100%; padding:16px; border-radius:14px; scroll-padding-top:76px; }
.touch-ui .panel-top { position:sticky; top:-16px; z-index:3; background:#191f1c; padding:12px 0; margin:-8px 0 12px; align-items:center; }
.touch-ui .panel-top .eyebrow { font-size:9px; }
.touch-ui .panel h2 { font-size:25px; margin-top:4px; }
.touch-ui .close-button { width:44px; height:44px; border-radius:10px; }
.touch-ui .panel p { font-size:13px; line-height:1.5; }
.touch-ui .panel .secondary-button,.touch-ui .panel .primary-button { min-height:44px; padding:10px 12px; border-radius:7px; font-size:13px; }
.touch-ui .shop-item { padding:12px; gap:8px; }
.touch-ui .weapon-art { height:68px; padding:0; }
.touch-ui .shop-item p { min-height:0; margin:0; font-size:12px; }
.touch-ui .shop-item h3 { font-size:16px; }
.touch-ui .shop-item button { min-height:44px; }
.touch-ui .weapon-stats { gap:4px; padding:7px 0; }
.touch-ui .weapon-stats span { font-size:10px; }
.touch-ui .shop-tabs button { min-height:44px; }
.touch-ui .shop-panel .shop-balance { margin:0 0 0 auto; font:18px var(--mono); white-space:nowrap; }
.touch-ui .shop-panel .panel-top { gap:10px; }
.touch-ui .shop-panel[data-shop-tab=weapons] .squad-roster { display:none; }
.touch-ui .squad-roster { margin:10px 0; padding:8px; }
.touch-ui .squad-roster>p { font-size:11px; }
.touch-ui .result-grid { gap:12px; margin:16px 0; }
.touch-ui .result-grid strong { font-size:24px; }
.touch-ui .run-detail { gap:6px; margin-bottom:12px; }
.touch-ui .run-detail>div { padding:8px; }
.touch-ui .run-detail strong { font-size:19px; }
.touch-ui .run-xp { font-size:11px!important; }
.touch-ui .stack { margin-top:15px; gap:8px; }
.touch-ui .result-panel .stack { position:sticky; bottom:-16px; background:#191f1c; margin:12px -4px -16px; padding:10px 4px 16px; z-index:2; }
.touch-ui .install-steps { padding-left:22px; color:#d6dfd0; font-size:14px; line-height:1.6; }
.touch-ui .install-steps li { margin:12px 0; }
.touch-ui .keyboard-settings { margin-top:16px; border-top:1px solid var(--line); }
.touch-ui .keyboard-settings summary { padding:14px 0; min-height:44px; cursor:pointer; font-size:13px; }
.touch-ui .objectives-summary { padding:12px; border:1px solid #aec4ac33; border-radius:8px; }
.touch-ui .objectives-summary p { margin:7px 0; }
.touch-ui .contract-grid { grid-template-columns:1fr; }
.touch-ui .contract-card { padding:12px; }
.touch-ui .topbar { top:var(--safe-top); left:var(--safe-left); right:var(--safe-right); height:52px; padding:0; }
.touch-ui .topbar-actions { gap:4px; }
.touch-ui .topbar button { min-width:44px; min-height:44px; display:flex; align-items:center; justify-content:center; }
.touch-ui .menu-screen { padding-top:calc(var(--safe-top) + 70px); padding-bottom:calc(var(--safe-bottom) + 20px); scroll-padding-top:calc(var(--safe-top) + 68px); }
.touch-ui .menu-links button { min-height:44px; }
.touch-ui .map-options button { min-height:44px; }
.touch-ui .mission-card.is-collapsed>:not(#briefing-toggle) { display:none; }
.touch-ui #briefing-toggle { justify-content:space-between; width:100%; min-height:44px; background:none; color:#d9dfcc; padding:8px 0; text-align:left; font-size:13px; }
.touch-ui #briefing-toggle::after { content:'−'; font-size:22px; }
.touch-ui #briefing-toggle[aria-expanded=false]::after { content:'+'; }
.touch-ui .mobile-tip { display:flex; gap:9px; align-items:center; font-size:11px; color:#a5b2a4; margin:10px 0 0; }
.touch-ui .mobile-tip button { min-height:44px; padding:7px 10px; border:1px solid #a9c4ac33; border-radius:7px; background:#1b2826; font-size:11px; }

@media(max-width:700px) {
  .touch-ui .menu-screen { gap:18px; padding-left:var(--safe-left); padding-right:var(--safe-right); }
  .touch-ui .menu-main>.eyebrow,.touch-ui .menu-intro,.touch-ui .deployment-head,.touch-ui .deployment-intro,.touch-ui .solo-insignia { display:none; }
  .touch-ui .menu-main h1 { font-size:48px; margin:0; line-height:1; }
  .touch-ui .menu-tagline { font-size:13px; margin:9px 0 12px; }
  .touch-ui .class-picker { padding-top:10px; }
  .touch-ui .class-picker legend { font-size:9px; margin-bottom:8px; }
  .touch-ui .class-options button { min-height:48px; flex-direction:row; font-size:12px; gap:7px; padding:8px 3px; }
  .touch-ui .class-passive { font-size:11px; margin:8px 0; }
  .touch-ui .class-skill { display:block; padding-top:7px; }
  .touch-ui .class-skill strong { display:inline; font-size:10px; margin-right:8px; }
  .touch-ui .class-skill span { display:inline; font-size:11px; }
  .touch-ui .menu-links { margin:4px 0 0; gap:12px; font-size:12px; }
  .touch-ui .deployment-panel { padding-top:10px; }
  .touch-ui .play-mode-picker { margin-bottom:13px; gap:22px; }
  .touch-ui .play-mode-picker button { min-height:44px; padding:8px 0; font-size:15px; }
  .touch-ui .deployment-panel h2 { font-size:21px; margin-bottom:14px; }
  .touch-ui .lobby-label { font-size:10px; }
  .touch-ui .lobby-input { height:46px; border-radius:6px; }
  .touch-ui .primary-button,.touch-ui .secondary-button,.touch-ui .join-button { min-height:44px; font-size:13px; border-radius:7px; }
  .touch-ui .lobby-divider { margin:15px 0; }
  .touch-ui .join-room-form { margin-top:12px; }
  .touch-ui .online-status { margin-top:14px; }
  .touch-ui .lobby-rules { margin-top:12px; padding-top:10px; font-size:10px; }
  .touch-ui .mission-card { padding-top:6px; }
  .touch-ui .menu-footer { padding-top:12px; font-size:8px; }
  .touch-ui .event-status { top:calc(var(--safe-top) + 112px); left:auto; right:var(--safe-right); transform:none; max-width:50%; }
}

/* Paysage : pouces aux bords, actions au centre du bord inférieur. */
@media(orientation:landscape) and (max-height:600px) {
  .touch-ui #game-shell { --stick-size:100px; --dock-bottom:calc(var(--safe-bottom) + 10px); }
  .touch-ui .touch-pad { bottom:calc(var(--safe-bottom) + 23px); }
  .touch-ui .mobile-dock { left:calc(var(--safe-left) + 116px); right:calc(var(--safe-right) + 116px); gap:6px; }
  .touch-ui #touch-weapon { left:auto; right:var(--safe-right); bottom:calc(var(--safe-bottom) + 134px); transform:none; }
  .touch-ui #touch-loot { left:auto; right:calc(var(--safe-right) + 52px); bottom:calc(var(--safe-bottom) + 134px); transform:none; }
  .touch-ui .interaction { bottom:calc(var(--safe-bottom) + 67px); max-width:calc(100% - 290px); }
  .touch-ui .hud-top { top:calc(var(--safe-top) + 5px); }
  .touch-ui .vitals,.touch-ui .ammo-panel { top:calc(var(--safe-top) + 54px); }
  .touch-ui .online-hud { left:calc(var(--safe-left) + 136px); top:calc(var(--safe-top) + 54px); }
  .touch-ui .next-wave { top:calc(var(--safe-top) + 55px); right:calc(var(--safe-right) + 156px); }
  .touch-ui .wave-banner,.touch-ui body.online .wave-banner { top:calc(var(--safe-top) + 105px); }
  .touch-ui .toast { top:calc(var(--safe-top) + 105px); max-width:34%; }
  .touch-ui #game-shell:has(#toast:not([hidden])) .wave-banner { display:none; }
  .touch-ui .active-buffs { top:calc(var(--safe-top) + 54px); left:50%; transform:translateX(-50%); }
  .touch-ui .event-status { top:calc(var(--safe-top) + 9px); max-width:32%; }
  .touch-ui .boss-status { top:calc(var(--safe-top) + 97px); width:30%; }
  .touch-ui .streak-status { right:calc(var(--safe-right) + 120px); bottom:calc(var(--safe-bottom) + 76px); }
  .touch-ui .mission-status.extraction-active { top:calc(var(--safe-top) + 102px); max-width:42%; }
  .touch-ui .menu-screen { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); column-gap:24px; row-gap:16px; padding-left:var(--safe-left); padding-right:var(--safe-right); }
  .touch-ui .menu-main { padding-top:0; max-width:none; }
  .touch-ui .menu-main h1 { font-size:56px; margin:0; }
  .touch-ui .menu-main h1 br,.touch-ui .menu-main>.eyebrow,.touch-ui .menu-intro,.touch-ui .deployment-head,.touch-ui .deployment-intro,.touch-ui .solo-insignia,.touch-ui .career-summary,.touch-ui .best-record { display:none; }
  .touch-ui .menu-tagline { font-size:13px; margin:12px 0; }
  .touch-ui .class-picker { padding-top:10px; }
  .touch-ui .class-options button { flex-direction:row; min-height:48px; font-size:11px; }
  .touch-ui .menu-links { margin:7px 0; }
  .touch-ui .mission-card { grid-column:1/-1; display:block; padding:0; }
  .touch-ui .shop-grid,.touch-ui .coop-stats { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .touch-ui .panel.compact { max-width:620px; }
  .touch-ui .panel.compact .stack { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); }
  .touch-ui .result-grid { grid-template-columns:repeat(4,minmax(0,1fr)); }
  .touch-ui .run-detail { grid-template-columns:repeat(4,minmax(0,1fr)); }
}
@media(max-width:600px) and (orientation:landscape) {
  .touch-ui #game-shell { --stick-size:86px; }
  .touch-ui .mobile-dock { left:calc(var(--safe-left) + 90px); right:calc(var(--safe-right) + 90px); gap:4px; }
}
@media(max-width:350px) and (orientation:portrait) {
  .touch-ui #game-shell { --safe-left:max(8px,env(safe-area-inset-left,0px)); --safe-right:max(8px,env(safe-area-inset-right,0px)); --stick-size:100px; }
  .touch-ui .mobile-dock { gap:4px; }
  .touch-ui .hud-top { gap:4px; }
  .touch-ui .hud-actions { gap:3px; }
  .touch-ui #wave-status { width:47px; max-width:47px; font-size:9px; }
  .touch-ui .hud-money strong { font-size:13px; }
}
@media(prefers-reduced-motion:reduce) { .touch-ui * { scroll-behavior:auto; } }
