/* 手機介面僅在 mobile-ui 啟用；電腦沿用原本樣式。 */
.mobile-ui {
  --mobile-top: env(safe-area-inset-top, 0px);
  --mobile-bottom: env(safe-area-inset-bottom, 0px);
  --mobile-left: env(safe-area-inset-left, 0px);
  --mobile-right: env(safe-area-inset-right, 0px);
  --mobile-nav: 60px;
  --mobile-combat-bottom: calc(104px + var(--mobile-bottom));
}
.mobile-ui body { overscroll-behavior: none; }
.mobile-ui * { -webkit-tap-highlight-color: transparent; }
.mobile-ui .app { height: 100dvh; overflow: hidden; }
.mobile-ui .topbar, .mobile-ui .side, .mobile-ui .side-toggle, .mobile-ui #ctrlRow,
.mobile-ui .pill-loc, .mobile-ui .pill-pos { display: none !important; }
.mobile-ui #layout, .mobile-ui #center { display: block; position: absolute; inset: 0; width: 100%; height: 100%; padding: 0; margin: 0; min-height: 0; overflow: hidden; }
.mobile-ui #stage, .mobile-ui .in-siege #stage { position: absolute; inset: 0; width: 100%; height: 100%; min-height: 0; border: 0; border-radius: 0; }
/* 保留電腦隱藏設定；離開手機模式後自動恢復原樣式。 */
.mobile-ui .center.hidden-stage > .stage { display: block !important; }
.mobile-ui .mobile-shell { position: fixed; inset: 0; z-index: 22; pointer-events: none; }
.mobile-ui .mobile-shell button, .mobile-ui .mobile-shell nav { pointer-events: auto; }
.mobile-ui button, .mobile-ui select, .mobile-ui input:not([type=checkbox]):not([type=range]), .mobile-ui summary,
.mobile-ui [role=button], .mobile-ui label:has(input[type=checkbox]) { min-height: 44px; }
.mobile-ui button { min-width: 44px; touch-action: manipulation; }
html.mobile-ui :is(#windowLayer, dialog, .mobile-item-sheet, .ctx-menu, .qx-pop, #runePicker) button { min-height: 44px; min-width: 44px; }
.mobile-ui input:not([type=checkbox]):not([type=range]), .mobile-ui textarea, .mobile-ui select { font-size: 16px; max-width: 100%; }
.mobile-ui label:has(input[type=checkbox]) { display: flex; align-items: center; }
.mobile-ui :is(.mobile-button, .mobile-status button, .mobile-nav button, .mobile-quest, .mobile-ticker, .mobile-skills-toggle) {
  border: 1px solid var(--line); background: var(--card); color: var(--ink); border-radius: 10px; font: inherit; padding: 6px 10px;
}
.mobile-ui .mobile-status {
  position: absolute; top: 0; left: 0; right: 0; height: calc(48px + var(--mobile-top)); padding: var(--mobile-top) max(6px, var(--mobile-right)) 0 max(6px, var(--mobile-left));
  display: grid; grid-template-columns: 24px 100px minmax(0, 1fr) 88px; align-items: center; gap: 5px; background: var(--card); border-bottom: 1px solid var(--line);
}
.mobile-ui .mobile-logo { width: 24px; height: 24px; border-radius: 7px; object-fit: cover; }
.mobile-ui #mobilePortrait { display: flex; align-items: center; gap: 4px; padding: 0; background: none; border: 0; text-align: left; overflow: hidden; height: 44px; }
.mobile-ui .mobile-avatar { display: grid; place-items: center; width: 36px; height: 36px; flex: none; overflow: hidden; background: var(--green-pale); border: 1px solid var(--line); border-radius: 50%; }
.mobile-ui .mobile-avatar img, .mobile-ui .mobile-avatar canvas { max-width: 100%; max-height: 100%; object-fit: cover; }
.mobile-ui #mobileIdentity { font-size: 10px; line-height: 1.6; white-space: pre-line; overflow: hidden; }
.mobile-ui .mobile-meters { display: grid; gap: 2px; min-width: 0; }
.mobile-ui .mobile-meter { position: relative; height: 13px; overflow: hidden; border-radius: 4px; background: var(--soft); font-size: 10px; font-variant-numeric: tabular-nums; }
.mobile-ui .mobile-meter i { position: absolute; inset: 0 auto 0 0; background: #d86b74; }
.mobile-ui .mobile-mp i { background: #4e94c2; }
.mobile-ui .mobile-exp { height: 10px; font-size: 9px; }
.mobile-ui .mobile-exp i { background: #538448; }
.mobile-ui .mobile-meter span { position: absolute; inset: 0; display: grid; place-items: center; color: #fff; background: #122c3345; text-shadow: 0 1px 2px #192b24; line-height: 1; white-space: nowrap; }
.mobile-ui .mobile-status-actions { display: flex; }
.mobile-ui .mobile-status-actions button { display: grid; place-items: center; padding: 0; width: 44px; height: 44px; border: 0; border-radius: 50%; background: var(--soft); position: relative; }
.mobile-ui .mobile-icon-slot { display: inline-grid; place-items: center; width: 32px; height: 32px; flex: none; pointer-events: none; user-select: none; }
.mobile-ui .mobile-icon-slot > * { grid-area: 1 / 1; }
.mobile-ui .mobile-icon { display: block; width: 100%; height: 100%; object-fit: contain; }
.mobile-ui .mobile-icon-fallback { font-size: 12px; line-height: 1; color: var(--ink); font-weight: 700; }
.mobile-ui .mobile-icon-slot:not(.mobile-icon-loaded) > .mobile-icon { visibility: hidden; }
.mobile-ui .mobile-icon-loaded > .mobile-icon-fallback { visibility: hidden; }
.mobile-ui .mobile-status-actions button .mobile-icon-slot { width: 34px; height: 34px; }
.mobile-ui .mobile-status-actions .mobile-icon-fallback { font-size: 25px; }
.mobile-ui :is(.mobile-nav, .mobile-more-grid, .mobile-status-actions) button:focus-visible { outline: 2px solid var(--accent); outline-offset: -3px; }
.mobile-ui :is(.mobile-nav, .mobile-more-grid, .mobile-status-actions) button:active .mobile-icon { transform: scale(.92); }
.mobile-ui #mobileMail.mail-unread::after { content: ''; position: absolute; right: 8px; top: 7px; width: 8px; height: 8px; background: #d9475d; border: 2px solid var(--card); border-radius: 50%; }
.mobile-ui .mobile-quest { position: absolute; left: max(8px, var(--mobile-left)); right: calc(84px + var(--mobile-right)); top: calc(54px + var(--mobile-top)); height: 44px; display: flex; align-items: center; gap: 7px; box-shadow: var(--shadow); font-size: 11px; text-align: left; }
.mobile-ui .mobile-quest > span:first-child { flex: none; color: var(--accent); font-weight: 700; }
.mobile-ui .mobile-quest b { min-width: 0; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 500; }
.mobile-ui .stage-tr { position: fixed; top: calc(54px + var(--mobile-top)); right: max(8px, var(--mobile-right)); z-index: 23; transform: none; }
.mobile-ui .minimap { position: relative; width: 64px; height: 64px; cursor: pointer; border-width: 2px; overflow: visible; pointer-events: auto; }
.mobile-ui .minimap canvas { width: 100%; height: 100%; border-radius: 50%; }
.mobile-ui .mobile-map-label { position: absolute; top: 66px; right: 0; width: 116px; text-align: right; font-size: 9px; color: #fff; text-shadow: 0 1px 3px #152d22, 0 0 4px #152d22; line-height: 1.5; pointer-events: none; }
.mobile-ui .mobile-world-map { display: block; width: 100%; height: auto; border-radius: 12px; background: #152d22; image-rendering: auto; }
.mobile-ui .mobile-world-map-title { margin: 0 0 12px; font-size: 15px; }
.mobile-ui .mobile-nav { position: absolute; bottom: 0; left: 0; right: 0; height: calc(60px + var(--mobile-bottom)); padding: 0 var(--mobile-right) var(--mobile-bottom) var(--mobile-left); display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); background: var(--card); border-top: 1px solid var(--line); }
.mobile-ui .mobile-nav button { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; border: 0; border-radius: 0; background: transparent; padding: 3px; min-width: 0; font-size: 11px; }
.mobile-ui .mobile-nav .mobile-icon-slot { width: 32px; height: 32px; }
.mobile-ui .mobile-nav button[aria-current=page] { background: var(--green-pale); box-shadow: inset 0 3px var(--accent); }
.mobile-ui .mobile-ticker { position: absolute; bottom: calc(60px + var(--mobile-bottom)); left: 0; right: 0; width: 100%; height: 32px; min-height: 32px; display: flex; align-items: center; gap: 8px; border-radius: 0; border-width: 1px 0 0; font-size: 11px; padding: 4px 10px; }
.mobile-ui .mobile-ticker::before { content: ''; position: absolute; inset: -6px 0; }
.mobile-ui .mobile-ticker > span:first-child { color: var(--accent); flex: none; font-weight: 700; }
.mobile-ui :is(.mobile-quest, .mobile-ticker) > .mobile-icon-slot { width: 28px; height: 28px; }
.mobile-ui .mobile-quest-label { display: flex; align-items: center; gap: 4px; }
.mobile-ui .mobile-quest-label .mobile-icon-slot { width: 28px; height: 28px; }
.mobile-ui #mobileTickerText { flex: 1; min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; text-align: left; }
.mobile-ui .mobile-chat-drawer { position: fixed; display: none; z-index: 26; left: var(--mobile-left); right: var(--mobile-right); bottom: max(calc(60px + var(--mobile-bottom)), var(--mobile-keyboard, 0px)); height: min(340px, 38dvh); min-height: 260px; background: var(--card); color: var(--ink); border: 1px solid var(--line); border-radius: 16px 16px 0 0; box-shadow: 0 -8px 28px #10282038; padding: 0 10px 8px; }
.mobile-ui.mobile-chat-open .mobile-chat-drawer { display: flex; flex-direction: column; }
.mobile-ui .mobile-chat-heading { height: 44px; flex: none; display: flex; align-items: center; justify-content: space-between; font-size: 12px; font-weight: 700; border-bottom: 1px solid var(--line); }
.mobile-ui .mobile-chat-heading button { display: grid; place-items: center; padding: 0; border: 0; background: none; font-size: 12px; }
.mobile-ui #dock { display: block; position: static; width: 100%; min-width: 0; flex: 1; min-height: 0; padding: 0; }
.mobile-ui #dock .dock-card { height: 100%; border: 0; border-radius: 0; padding: 0; background: var(--card); color: var(--ink); backdrop-filter: none; box-shadow: none; }
.mobile-ui #dock .log-card { display: none; }
.mobile-ui #dock.show-log .log-card { display: flex; }
.mobile-ui #dock.show-log .chat { display: none; }
.mobile-ui #dock .dock-head { flex: none; height: 44px; margin: 0; gap: 4px; }
.mobile-ui #dock .dock-tabs { align-self: stretch; overflow-x: auto; align-items: stretch; }
.mobile-ui #dock .dock-tabs button { padding: 4px 10px; white-space: nowrap; color: var(--ink); flex: none; font-size: 12px; }
.mobile-ui #dock .dock-tabs button.active { background: var(--green-pale); color: var(--accent); }
.mobile-ui #dock .dock-swap { display: block; min-width: 44px; color: var(--ink); background: var(--soft); }
.mobile-ui #chatFold { display: none; }
.mobile-ui #dock .chat-log, .mobile-ui #dock .log-list { display: block; flex: 1; min-height: 24px; height: auto; max-height: none; overflow-y: auto; background: var(--soft); color: var(--ink); padding: 5px 7px; }
.mobile-ui #dock .line { color: var(--ink) !important; font-size: 12px; overflow-wrap: anywhere; }
.mobile-ui #dock .line .ts { color: var(--ink-soft); }
.mobile-ui #chatForm { display: grid; grid-template-columns: minmax(0, 1fr) 56px; gap: 4px 6px; flex: none; margin: 0; padding: 4px 0 0; }
.mobile-ui #chatCh { grid-column: 1 / -1; min-height: 44px; width: 100%; max-width: none; background: var(--soft); border: 1px solid var(--line); border-radius: 7px; }
.mobile-ui #chatText { min-width: 0; width: 100%; height: 44px; padding: 8px; background: var(--card2); color: var(--ink); }
.mobile-ui #chatForm .send-btn { width: 56px; height: 44px; padding: 0; font-size: 14px; background: var(--green-pale); color: var(--accent); }
.mobile-ui #guildChatStatus:not(.hidden) { font-size: 10px; max-height: 40px; overflow-y: auto; margin: 3px 0; }
.mobile-ui #stage .hotbar { position: fixed; left: auto; right: max(8px, var(--mobile-right)); bottom: var(--mobile-combat-bottom); width: 164px; max-width: none; display: flex; flex-direction: column; align-items: flex-end; gap: 6px; transform: none; z-index: 19; }
.mobile-ui #stage .skills { display: grid; grid-template-columns: repeat(3, 48px); gap: 6px; direction: ltr; padding: 0; margin: 0; background: none; box-shadow: none; }
.mobile-ui #stage .skill-slot { width: 48px; height: 48px; min-width: 48px; padding: 0; border: 2px solid var(--card); border-radius: 50%; }
.mobile-ui #stage .skill-slot .skill-name { font-size: 10px; }
.mobile-ui #stage .skill-key { width: 14px; height: 14px; line-height: 14px; font-size: 9px; left: -2px; bottom: -2px; }
.mobile-ui #stage .potions { display: flex; gap: 6px; align-self: flex-start; min-height: 56px; align-items: flex-end; padding: 0; margin: 0; background: none; box-shadow: none; }
.mobile-ui #stage .potion { width: 44px; height: 44px; min-width: 44px; border: 2px solid var(--card); border-radius: 12px; padding: 0; }
.mobile-ui #stage .potion b { font-size: 11px; bottom: 2px; right: 2px; }
/* 職業資源條（刀刃、墨量、超載、風壓…）：固定在左下角、技能區左邊，不再疊在技能上方擋畫面 */
.mobile-ui #stage .blade-bar { position: fixed; left: max(8px, var(--mobile-left)); bottom: var(--mobile-combat-bottom); z-index: 19;
  font-size: 10px; flex-wrap: wrap; align-content: flex-end; width: auto; max-width: calc(100vw - 236px - var(--mobile-left) - var(--mobile-right));
  gap: 3px 4px; padding: 4px 6px; overflow: hidden; border-radius: 8px; white-space: nowrap; }
.mobile-ui #stage .blade-bar > b, .mobile-ui #stage .blade-bar > i { flex-shrink: 0; }
.mobile-ui #stage .blade-bar > small { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.mobile-ui #stage .blade-bar .heat-meter { width: 44px; min-width: 30px; flex: 0 1 44px; }
.mobile-ui #stage .blade-bar .heat-vent { flex: none; min-height: 44px; min-width: 44px; font-size: 10px; padding: 2px 5px; }
.mobile-ui #stage .blade-bar .blade { width: 10px; height: 14px; }
.mobile-ui #autoFab { position: fixed; right: max(8px, var(--mobile-right)); bottom: var(--mobile-combat-bottom); display: block; width: 56px; height: 56px; min-width: 56px; padding: 0; border: 2px solid var(--card); border-radius: 50%; color: #fff; background: linear-gradient(#6fbf8a, #3f9461); font-size: 12px; z-index: 20; }
.mobile-ui #autoFab.has-ico::before { display: block; width: 32px; height: 32px; margin: 0 auto; background-image: url('../assets/ui_mobile/hunt.png'); }
.mobile-ui #autoFab.on { animation: mobile-breathe 2s ease-in-out infinite; }
.mobile-ui .mobile-skills-toggle { display: none; width: 44px; height: 44px; padding: 0; font-size: 11px; }
.mobile-ui #mobileSkillsToggle { width: 44px; min-width: 44px; padding: 0; white-space: nowrap; font-size: 11px; line-height: 1; }
.mobile-ui.mobile-auto-active .mobile-skills-toggle { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px; }
.mobile-ui .mobile-skills-toggle .mobile-icon-slot { width: 28px; height: 28px; }
.mobile-ui.mobile-auto-active:not(.mobile-skills-open) #stage .skills { display: none; }
.mobile-ui .target-frame { top: calc(150px + var(--mobile-top)); left: max(8px, var(--mobile-left)); right: auto; width: 160px; transform: none; }
.mobile-ui .dg-hud { top: calc(102px + var(--mobile-top)); left: 8px; right: 84px; transform: none; width: auto; font-size: 11px; }
/* 副本資訊條：桌面版的 max-width 在手機會變負值，按鈕被擠出框；改成兩行：上行波次，下行剩餘時間＋離開鈕 */
.mobile-ui .dg-hud { top: calc(140px + var(--mobile-top)); right: 8px; max-width: none; flex-wrap: wrap; row-gap: 4px; column-gap: 8px; padding: 6px 8px 6px 12px; border-radius: 14px; white-space: normal; }
.mobile-ui .dg-hud .dg-wave { flex: 1 1 100%; min-width: 0; font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mobile-ui .dg-hud .dg-timer { flex: 1 1 auto; min-width: 0; font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mobile-ui .dg-hud #dgLeave { flex: 0 0 auto; min-height: 32px; }
.mobile-ui .mobile-alerts { position: absolute; top: calc(190px + var(--mobile-top)); left: 8px; max-width: calc(100% - 190px); display: grid; gap: 5px; }
.mobile-ui .mobile-alerts button { background: #8a303c; color: #fff; border: 1px solid #ffd8de; font-size: 11px; }
.mobile-ui .revive { position: fixed; inset: var(--mobile-top) var(--mobile-right) calc(60px + var(--mobile-bottom)) var(--mobile-left); z-index: 27; }
.mobile-ui .revive-card { max-width: calc(100vw - 24px); }
.mobile-ui #windowLayer { inset: var(--mobile-top) var(--mobile-right) var(--mobile-bottom) var(--mobile-left); z-index: 30; }
.mobile-ui #windowLayer > .mobile-window,
.mobile-ui #windowLayer.inventory-pair > .mobile-window {
  position: absolute !important; inset: 0 !important; transform: none !important; width: 100% !important; height: 100% !important; max-width: none; max-height: 100% !important; min-width: 0; min-height: 0;
  display: flex; flex-direction: column; padding: 0; margin: 0; border: 0; border-radius: 0; overflow: hidden; background: var(--card); color: var(--ink);
}
.mobile-ui #windowLayer > .mobile-window[data-mobile-covered] { visibility: hidden; pointer-events: none; }
.mobile-ui #windowLayer > .mobile-window { padding: 0 !important; border: 0 !important; border-radius: 0 !important; }
.mobile-ui #windowLayer > .mobile-window > .card-title,
.mobile-ui #windowLayer > #buildWin > .card-title.build-head,
.mobile-ui #windowLayer > #forgeWin > .forge-head {
  display: flex; align-items: center; flex-wrap: nowrap; gap: 6px; position: relative; top: auto; height: 52px; min-height: 52px; flex: none; padding: 4px 8px 4px 12px; margin: 0; border-bottom: 1px solid var(--line); background: var(--card); font-size: 15px; overflow: hidden;
}
.mobile-ui .mobile-window > .card-title > small:not(.mobile-wallet), .mobile-ui .mobile-window > .card-title > .mall-dew { display: none; }
.mobile-ui .mobile-window .win-close { position: static; flex: 0 0 44px; order: 9; margin: 0 0 0 auto; width: 44px; height: 44px; font-size: 25px; border-radius: 9px; padding: 0; line-height: 1; }
.mobile-ui :is(.win-close, .sb-clear) { font-size: 25px !important; background: transparent; }
.mobile-ui.mobile-close-loaded :is(.win-close, .sb-clear) { font-size: 0 !important; background: transparent url('../assets/ui_mobile/close.png') center / 28px 28px no-repeat; }
.mobile-ui button[data-add] { font-size: 22px; background: transparent; }
.mobile-ui.mobile-add-loaded button[data-add] { font-size: 0; background: transparent url('../assets/ui_mobile/add.png') center / 28px 28px no-repeat; }
.mobile-ui .mobile-wallet { display: flex; align-items: center; gap: 3px; margin-left: auto; white-space: nowrap; font-size: 10px; color: var(--ink); font-weight: 500; }
.mobile-ui .mobile-wallet .mobile-icon-slot { width: 20px; height: 20px; }
.mobile-ui .mobile-window .mobile-wallet + .win-close { margin-left: 0; }
.mobile-ui .mobile-window-body { flex: 1; min-height: 0; min-width: 0; overflow-y: auto; overflow-x: hidden; padding: 12px; overscroll-behavior: contain; scrollbar-gutter: stable; align-content: start; }
.mobile-ui .mobile-window-body > * { max-width: 100%; min-width: 0; }
.mobile-ui .mobile-window-body > :first-child { margin-top: 0; }
.mobile-ui .mobile-window-body .card { box-shadow: none; }
.mobile-ui .mobile-window-tabs { display: flex; order: 0; gap: 4px; align-items: stretch; flex: 0 0 44px; height: 44px; min-height: 44px; width: 100%; max-width: 100%; overflow-x: auto; overflow-y: hidden; padding: 0 24px 0 8px; margin: 0; border-bottom: 1px solid var(--line); border-radius: 0; background: var(--card); scrollbar-width: thin; }
.mobile-ui .mobile-window-tabs button { flex: none; min-height: 44px; padding: 4px 12px; white-space: nowrap; border-radius: 0; font-size: 12px; }
.mobile-ui #forgeTabs { order: 0; }
.mobile-ui .mobile-window-tabs::after { content: ''; position: absolute; right: 0; top: 52px; height: 44px; width: 24px; background: var(--card) url('../assets/ui_mobile/arrow-right.png') center / 24px 24px no-repeat; pointer-events: none; }
.mobile-ui #windowLayer .mobile-window-footer { flex: none; display: flex; align-items: center; justify-content: space-between; gap: 6px; min-height: 60px; height: 60px; max-height: 60px; overflow-y: auto; padding: 8px 12px; margin: 0; border: 0; border-top: 1px solid var(--line); border-radius: 0; background: var(--card); box-shadow: 0 -2px 10px #1028200a; }
.mobile-ui .mobile-window-footer button { font-size: 12px; }
.mobile-ui .mobile-window-footer > button:only-child { margin-left: auto; }
.mobile-ui .mobile-window-footer#hsSave { display: block; color: var(--accent); font-weight: 700; }
.mobile-ui .mobile-pair-switch { display: none; background: var(--green-pale); border: 1px solid var(--line); border-radius: 8px; font-size: 11px; }
.mobile-ui.mobile-inventory-pair .mobile-pair-switch { display: block; }
.mobile-ui #bagWin .bag-wallet { display: none; }
.mobile-ui #bagGrid, .mobile-ui #windowLayer.inventory-pair #bagGrid, .mobile-ui #whGrid {
  grid-template-columns: repeat(5, minmax(44px, 1fr)); gap: 7px; padding: 0; margin: 0; min-height: 0; height: auto; max-height: none; overflow: visible; flex: none; align-content: start; justify-content: stretch;
}
.mobile-ui #bagGrid .bag-slot, .mobile-ui #whGrid .bag-slot { width: 100%; height: auto; aspect-ratio: 1; min-width: 44px; min-height: 44px; border-radius: 9px; }
.mobile-ui #bagGrid .bag-slot i, .mobile-ui #whGrid .bag-slot i { width: 36px; height: 36px; max-width: 90%; max-height: 90%; }
.mobile-ui #bagEmpty { padding: 10px 0; text-align: left; }
.mobile-ui .bag-empty:not(.hidden) ~ .bag-foot { margin-top: 0; }
.mobile-ui #bagGrid:has(+ .bag-empty:not(.hidden)) .bag-slot:disabled { display: none; }
.mobile-ui #bagGrid:has(+ .bag-empty:not(.hidden)) { display: none; }
.mobile-ui .mall-grid, .mobile-ui .mall-grid.mall-styles { grid-template-columns: repeat(2, minmax(0, 1fr)); max-height: none; overflow: visible; gap: 10px; padding: 0; }
.mobile-ui .monthly-card { grid-column: 1 / -1; }
.mobile-ui .mall-card { min-width: 0; }
.mobile-ui .mall-card .main-btn { min-height: 44px; }
.mobile-ui #buildWin .build-quick { display: none; }
.mobile-ui #buildWin .mobile-window-tabs { justify-content: flex-start; }
.mobile-ui #buildWin .build-panel { height: auto; min-height: 0; overflow: visible; padding: 0; }
.mobile-ui :is(.sb-layout, .tb-layout, .tb-side, .cfg-layout, .hs-grid, .guild-overview-grid) { display: grid; grid-template-columns: minmax(0, 1fr); height: auto; min-height: 0; gap: 12px; }
.mobile-ui :is(.sb-pool, .sb-bar, .tree-detail, .tb-job, .tb-common, .cfg-rec, .cfg-auto) { min-width: 0; max-height: none; overflow: visible; }
.mobile-ui .sb-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.mobile-ui .sb-slots { min-height: 260px; }
.mobile-ui .sb-slot { padding: 8px 3px; }
.mobile-ui .sb-slot-main .sk-ico { width: 48px; height: 48px; }
.mobile-ui .sb-clear { position: static; align-self: flex-end; opacity: 1; min-width: 44px; width: 44px; height: 44px; }
.mobile-ui .rune-sock { min-width: 44px; min-height: 44px; }
.mobile-ui .sb-runes { gap: 0; }
.mobile-ui .build-actions { display: flex; gap: 6px; width: 100%; }
.mobile-ui .build-actions button { flex: 1; min-width: 0; padding: 6px; white-space: normal; font-size: 11px; }
.mobile-ui #buildWin .build-actions button { min-height: 44px; height: 44px; }
.mobile-ui #buildWin .build-footer { flex-wrap: wrap; }
.mobile-ui #buildStatus { position: sticky; top: -12px; background: var(--card); z-index: 4; margin: 0 0 8px; padding: 4px 0; min-height: 0; font-size: 10px; width: 100%; }
.mobile-ui .tb-top { flex-wrap: wrap; }
.mobile-ui .tb-tree { min-width: 0; }
.mobile-ui .tb-branch { min-width: 0; }
.mobile-ui #windowLayer #forgeWin .forge-body, .mobile-ui #windowLayer.inventory-pair #forgeWin .forge-body { display: flex; flex-direction: column; gap: 12px; overflow: visible; height: auto; min-height: 0; padding: 0; }
.mobile-ui #windowLayer #forgeWin .forge-body > * { flex: none; max-height: none; overflow: visible; width: auto; }
.mobile-ui #windowLayer #forgeWin .forge-list { max-height: none; }
.mobile-ui #forgeWin #forgeActions { display: flex; flex-wrap: wrap; gap: 5px; margin-left: auto; }
.mobile-ui #forgeWin #forgeActions button { min-width: 44px; padding: 8px; }
.mobile-ui #forgeStatus { font-size: 10px; min-height: 0; margin: 0; }
.mobile-ui .mail-toolbar { flex-wrap: nowrap; justify-content: space-between; }
.mobile-ui .mail-toolbar [role=tablist] { flex: none; }
.mobile-ui .mail-layout { display: grid; grid-template-columns: minmax(0, 1fr); min-height: 0; }
.mobile-ui #mailList { max-height: none; border-right: 0; padding: 0; }
.mobile-ui .mail-actions { position: sticky; bottom: -12px; background: var(--card); padding: 8px 0; min-height: 60px; }
.mobile-ui .x-sell, .mobile-ui .x-filters { grid-template-columns: minmax(0, 1fr); flex-wrap: wrap; }
.mobile-ui .x-filters > *, .mobile-ui .x-sell > * { min-width: 0; max-width: 100%; }
.mobile-ui .map-filters { display: grid; grid-template-columns: minmax(0, 1fr); }
.mobile-ui .map-list { grid-template-columns: minmax(0, 1fr); max-height: none; }
.mobile-ui .dg-list, .mobile-ui .fr-list, .mobile-ui .shop-list, .mobile-ui .x-body { max-height: none; overflow: visible; }
.mobile-ui .dg-gallery { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; overflow: visible; padding: 8px 0; }
.mobile-ui .dg-card { flex: none; width: 100%; height: 240px; }
.mobile-ui .dg-card, .mobile-ui .fr-row, .mobile-ui .shop-row { min-width: 0; flex-wrap: wrap; }
.mobile-ui .hs-skill { display: flex; flex-wrap: wrap; min-height: 56px; }
.mobile-ui .hs-skill label { flex: 1; min-width: 100px; }
.mobile-ui .hs-grip { display: none; }
.mobile-ui .mobile-order { display: flex; margin-left: auto; }
.mobile-ui .mobile-order button { display: grid; place-items: center; border: 1px solid var(--line); background: var(--soft); border-radius: 6px; padding: 4px; }
.mobile-ui .hs-meter { display: grid; grid-template-columns: auto minmax(44px, 1fr) 54px auto; gap: 5px; }
.mobile-ui .hs-meter input { min-width: 0; width: 100%; }
.mobile-ui .mobile-more-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.mobile-ui .mobile-more-grid button { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 94px; gap: 8px; padding: 8px 4px; font-size: 12px; }
.mobile-ui .mobile-more-grid .mobile-feature-icon { width: 36px; height: 36px; }
.mobile-ui .mobile-setting-actions { display: flex; flex-wrap: wrap; gap: 8px; padding-bottom: 12px; }
.mobile-ui .mobile-setting-actions .round-btn { width: auto; min-width: 100px; border-radius: 9px; }
.mobile-ui #mobileSettingsWin #btnTheme { display: flex; align-items: center; justify-content: center; gap: 6px; font-size: 0; }
.mobile-ui #mobileSettingsWin #btnTheme::before { content: ''; display: block; width: 28px; height: 28px; background: url('../assets/ui_mobile/theme.png') center / contain no-repeat; }
.mobile-ui #mobileSettingsWin #btnTheme::after { content: '切換暗色'; font-size: 12px; }
.mobile-ui[data-theme=dark] #mobileSettingsWin #btnTheme::after { content: '切換亮色'; }
.mobile-ui #mobileSettingsWin #btnSound::after { content: ' 音效'; font-size: 12px; }
.mobile-ui #mobileSettingsWin #btnSound img { width: 26px; height: 26px; }
.mobile-ui .mobile-order .mobile-icon-slot { width: 28px; height: 28px; }
.mobile-ui .mobile-icon-label { display: flex; align-items: center; justify-content: center; gap: 6px; }
.mobile-ui .mobile-icon-label .mobile-icon-slot { width: 28px; height: 28px; }
.mobile-ui :is(.sb-empty:not(.lock), .rune-none) { font-size: 22px; }
.mobile-ui.mobile-add-loaded :is(.sb-empty:not(.lock), .rune-none) { font-size: 0; background: url('../assets/ui_mobile/add.png') center / 28px 28px no-repeat; }
.mobile-ui.mobile-add-loaded .rune-none > i { visibility: hidden; }
.mobile-ui .mobile-window-body .party-panel { position: static; width: 100%; transform: none; padding: 10px; }
.mobile-ui .mobile-party-title { margin: 14px 0 8px; font-size: 13px; }
.mobile-ui #whisperWins { position: static; display: flex; flex-direction: column-reverse; gap: 12px; }
.mobile-ui #whisperWins .whisper { width: 100%; min-width: 0; margin: 0; }
.mobile-ui .mobile-window-body .quest { padding: 0; border: 0; }
.mobile-ui .mobile-window-body .quest > .card-title { display: none; }
.mobile-ui .qt-item { min-height: 44px; }
.mobile-ui .monthly-hero { grid-template-columns: 100px minmax(0, 1fr); gap: 12px; }
.mobile-ui .monthly-row { min-height: 60px; }
.mobile-ui .monthly-footer { min-height: 60px; bottom: -12px; }
.mobile-ui #monthlyWin .monthly-footer { position: static; }
.mobile-ui #monthlyWin .monthly-footer > span { min-width: 0; font-size: 10px; }
.mobile-ui #monthlySave { min-width: 110px; font-size: 12px; }
.mobile-ui .guild-panel { max-height: none; overflow: visible; padding: 0; scrollbar-gutter: auto; }
.mobile-ui :is(.mobile-item-sheet, .qx-pop, .ctx-menu:not(.hidden), .npc-dialog:not(.hidden), #runePicker, dialog:not(.siege-dialog)) {
  position: fixed !important; inset: auto var(--mobile-right) var(--mobile-bottom) var(--mobile-left) !important; transform: none !important; width: auto !important; max-width: none; max-height: min(76dvh, 650px); min-height: 0; margin: 0; padding: 16px; border: 1px solid var(--line); border-radius: 18px 18px 0 0; background: var(--card); color: var(--ink); overflow-y: auto; z-index: 10020; box-shadow: 0 -15px 0 100vmax #10282066; pointer-events: auto;
}
.mobile-ui #itemTip { display: none !important; }
.mobile-ui .mobile-item-sheet::backdrop { background: #10282066; }
.mobile-ui #mobileItemSheet { box-shadow: 0 -8px 28px #10282038; }
.mobile-ui .mobile-sheet-heading { display: flex; align-items: center; justify-content: space-between; gap: 8px; height: 52px; font-size: 15px; font-weight: 700; border-bottom: 1px solid var(--line); }
.mobile-ui .mobile-item-content { padding: 12px 0; font-size: 13px; line-height: 1.7; }
.mobile-ui .mobile-item-content img { max-width: 48px; }
.mobile-ui .mobile-sheet-actions { display: flex; gap: 8px; position: sticky; bottom: -16px; padding: 8px 0; min-height: 60px; background: var(--card); }
.mobile-ui .mobile-sheet-actions button { flex: 1; }
.mobile-ui .ctx-menu button { width: 100%; min-height: 44px; }
.mobile-ui .npc-dialog { display: flex; }
.mobile-ui .npc-dialog .nd-portrait { flex: 0 0 60px; width: 60px; }
.mobile-ui .nd-body { min-width: 0; }
.mobile-ui .nd-opts { flex-wrap: wrap; }
.mobile-ui .npc-dialog .win-close { position: sticky; top: 0; flex: 0 0 44px; }
.mobile-ui .qx-confirm .pop-btns { position: sticky; bottom: -16px; padding: 8px 0; background: var(--card); }
.mobile-ui .siege-dialog { position: fixed; inset: var(--mobile-top) var(--mobile-right) var(--mobile-bottom) var(--mobile-left); width: auto; height: auto; max-width: none; max-height: none; margin: 0; padding: 0 12px 12px; border: 0; border-radius: 0; }
.mobile-ui .siege-heading { position: sticky; top: 0; z-index: 3; height: 52px; align-items: center; background: var(--card); border-bottom: 1px solid var(--line); }
.mobile-ui .siege-heading h2 { font-size: 18px; margin: 0; }
.mobile-ui .siege-heading button { margin: 0; }
.mobile-ui .siege-config-grid { grid-template-columns: minmax(0, 1fr); }
/* 頂條避開小地圖與入口，攻城內容使用既有手機視窗。 */
.mobile-ui .siege-hud { position:fixed;top:calc(102px + var(--mobile-top));left:8px;right:calc(82px + var(--mobile-right));width:auto;min-width:0;max-width:none;transform:none;padding:6px 8px;z-index:18; }
.mobile-ui .siege-score { font-size:10px;gap:5px; }
.mobile-ui .siege-score>span { font-size:20px; }
.mobile-ui #mobileSiegeWin .siege-panel { padding:0; }
.mobile-ui #mobileSiegeWin button { min-height:44px; }
.mobile-ui #mobileSiegeWin .siege-targets { max-height:180px; }
.mobile-ui #mobileSiegeEntry[hidden] { display:none; }
.mobile-ui .toast { top: calc(150px + var(--mobile-top)); max-width: calc(100vw - 24px); font-size: 12px; z-index: 10040; }
.mobile-ui .overlay { padding: var(--mobile-top) var(--mobile-right) var(--mobile-bottom) var(--mobile-left); overflow-y: auto; }
.mobile-ui .dialog { max-width: 100%; max-height: 100%; overflow-y: auto; }
.mobile-ui .dialog-create { width: 100%; }
.mobile-ui .job-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.mobile-ui .job-card { min-width: 0; }
.mobile-ui .char-list { max-height: 35dvh; }
@keyframes mobile-breathe { 0%, 100% { box-shadow: 0 0 0 2px #f2a7b8, 0 0 0 5px #df6c8330; } 50% { box-shadow: 0 0 0 2px #f2a7b8, 0 0 0 10px #df6c8300; } }
@media (orientation: landscape) {
  .mobile-ui { --mobile-combat-bottom: calc(12px + var(--mobile-bottom)); }
  .mobile-ui .mobile-status { right: auto; width: min(390px, 48vw); border-radius: 0 0 12px 0; }
  .mobile-ui .mobile-quest { width: min(300px, 38vw); right: auto; }
  .mobile-ui .mobile-nav { top: 0; left: auto; width: calc(60px + var(--mobile-right)); height: 100%; padding: var(--mobile-top) var(--mobile-right) var(--mobile-bottom) 0; grid-template-columns: 1fr; grid-template-rows: repeat(5, minmax(44px, 1fr)); border-top: 0; border-left: 1px solid var(--line); }
  .mobile-ui .stage-tr { right: calc(72px + var(--mobile-right)); top: calc(8px + var(--mobile-top)); }
  .mobile-ui #stage .hotbar, .mobile-ui #autoFab { right: calc(72px + var(--mobile-right)); }
  .mobile-ui .mobile-ticker { width: min(390px, 48vw); right: auto; bottom: var(--mobile-bottom); border-radius: 0 10px 0 0; }
  .mobile-ui .mobile-chat-drawer { right: auto; width: min(430px, 55vw); bottom: max(var(--mobile-bottom), var(--mobile-keyboard, 0px)); height: 75dvh; min-height: 0; }
  .mobile-ui #windowLayer { inset: 7.5dvh 10vw; }
  .mobile-ui #windowLayer > .mobile-window, .mobile-ui #windowLayer.inventory-pair > .mobile-window { border-radius: 16px !important; border: 1px solid var(--line) !important; box-shadow: 0 0 0 100vmax #10282066; }
  .mobile-ui .mobile-window-body { padding: 10px 14px; }
  .mobile-ui #bagGrid, .mobile-ui #windowLayer.inventory-pair #bagGrid, .mobile-ui #whGrid { grid-template-columns: repeat(auto-fill, minmax(48px, 1fr)); }
  .mobile-ui #bagGrid .bag-slot, .mobile-ui #whGrid .bag-slot { max-height: 64px; }
  .mobile-ui .mall-grid, .mobile-ui .mall-grid.mall-styles { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .mobile-ui .monthly-card { grid-column: span 2; }
  .mobile-ui :is(.sb-layout, .cfg-layout, .hs-grid, .guild-overview-grid) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .mobile-ui .sb-layout .sb-detail { grid-column: 1 / -1; }
  .mobile-ui #mobileCharacterWin .mobile-window-body { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
  .mobile-ui #windowLayer #forgeWin .forge-body { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .mobile-ui #forgeDetail { grid-column: 1 / -1; }
  .mobile-ui .mail-layout { grid-template-columns: 40% minmax(0, 1fr); }
  .mobile-ui .map-list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .mobile-ui .dg-gallery { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .mobile-ui .mobile-more-grid { gap: 8px; }
  .mobile-ui .mobile-more-grid button { min-height: 74px; gap: 2px; }
  .mobile-ui .mobile-alerts { top: calc(110px + var(--mobile-top)); }
  .mobile-ui .mobile-world-map { width: auto; height: calc(85dvh - 200px); max-width: 100%; object-fit: contain; margin-inline: auto; }
  .mobile-ui .target-frame { top: calc(102px + var(--mobile-top)); }
  .mobile-ui .siege-dialog { inset: 7.5dvh 10vw; border-radius: 16px; }
  .mobile-ui .siege-hud { top:calc(55px + var(--mobile-top));left:calc(38vw + 12px);right:calc(148px + var(--mobile-right)); }
}
@media (orientation: landscape) and (max-width: 680px) {
  .mobile-ui .siege-score { grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:3px;font-size:9px; }
  .mobile-ui .siege-score>strong { min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
  .mobile-ui .siege-score>strong[data-compact] { font-size:0; }
  .mobile-ui .siege-score>strong[data-compact]::after { content:attr(data-compact);font-size:9px; }
  .mobile-ui .siege-score>span { font-size:16px; }
}
@media (prefers-reduced-motion: reduce) { .mobile-ui #autoFab.on { animation: none; } }
