/* Keep DM's normal header even when the keyboard reduces available height. */
html body #dmChatPanel.chat-compact>.realtime-duel-chat-header{display:flex;padding:12px 13px;min-height:0;flex:none}
html body #dmChatPanel.chat-compact .realtime-duel-chat-subtitle{display:block}
/* Use the family title's explicit size, including the shared user text scale.
   Native/mobile text autosizing must not independently inflate heading elements. */
html body :is(#globalChatPanel,#realtimeDuelChatPanel,#familyChatPanel,#dmChatPanel) .realtime-duel-chat-title{font-size:calc(.94rem * var(--xixi-chat-scale,1))!important;-webkit-text-size-adjust:100%;text-size-adjust:100%}
/* Reply sits beside the album's lower edge, opposite the sender's avatar. */
html body .realtime-duel-chat-message .chat-photo-album-body{grid-template-columns:minmax(0,1fr) 30px;column-gap:5px;width:min(82%,calc(var(--album-columns,3)*116px + 52px));row-gap:4px}
html body .chat-photo-album-body>.xixi-chat-reply-action{grid-row:2;grid-column:2;align-self:end;justify-self:center}
html body .realtime-duel-chat-message.mine .chat-photo-album-body{grid-template-columns:30px minmax(0,1fr)}
html body .realtime-duel-chat-message.mine .chat-photo-album-body>:is(.chat-photo-album-title,.chat-photo-album){grid-column:2}
html body .realtime-duel-chat-message.mine .chat-photo-album-body>.xixi-chat-reply-action{grid-column:1;justify-self:center}
.xixi-image-video-tools button{position:relative;display:inline-flex;align-items:center;justify-content:center}
.xixi-image-video-tools button>svg{width:16px;height:16px;display:block;pointer-events:none}
.xixi-image-video-mute.is-muted::after{content:'';position:absolute;left:50%;top:50%;width:22px;height:2px;transform:translate(-50%,-50%) rotate(-45deg);background:#ef4444;border-radius:1px;pointer-events:none}
