/* Viewer: AdminLTE 3 layout, light theme (no layout override) */

:root {
    --viewer-primary: #001f3f;       /* same navy as admin */
    --viewer-primary-dark: #001a35;
    --viewer-primary-light: #003366;
    --viewer-sidebar-bg: #001f3f;
    --viewer-sidebar-hover: rgba(255,255,255,.08);
}

/* Language dropdown flag icon spacing (flag-icons) */
.lang-flag {
    display: inline-block;
    margin-right: 0.35rem;
    vertical-align: -0.1em;
}

/* Top bar: color only */
.main-header.navbar,
.main-header.navbar.navbar-white.navbar-light {
    background-color: var(--viewer-primary) !important;
    border-color: var(--viewer-primary-dark) !important;
}
.main-header .nav-link,
.main-header .navbar-nav .nav-link {
    color: rgba(255,255,255,.92) !important;
}
.main-header .nav-link:hover,
.main-header .navbar-nav .nav-link:hover {
    color: #fff !important;
    background-color: rgba(255,255,255,.12) !important;
}

/* 手机版收缩菜单按钮（三横）：有未读私信时右上角红点 */
.main-header .nav-link-pushmenu {
    position: relative;
}
.main-header .navbar-dm-unread-dot {
    position: absolute;
    top: 6px;
    right: 6px;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: #e74c3c;
    display: none;
    pointer-events: none;
}

/* Sidebar color */
.main-sidebar.sidebar-dark-primary,
.main-sidebar {
    background-color: var(--viewer-sidebar-bg) !important;
}
.main-sidebar .brand-link,
.main-sidebar .brand-text {
    color: rgba(255,255,255,.95) !important;
}
.main-sidebar .nav-link:hover,
.main-sidebar .nav-link:focus {
    background: var(--viewer-sidebar-hover) !important;
    color: #fff !important;
}
.main-sidebar .nav-link.active {
    background: var(--viewer-primary-light) !important;
    color: #fff !important;
}

/* 侧栏「消息」未读：红点 + 未读条数（封顶 99+），手机端菜单同款 */
.sidebar-dm-unread-wrap {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    margin-left: 4px;
    vertical-align: middle;
}
.main-sidebar .sidebar-dm-unread-dot {
    display: none;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: #e74c3c;
    flex-shrink: 0;
}
.main-sidebar .sidebar-dm-unread-count {
    font-size: 0.75rem;
    min-width: 1.4em;
    text-align: center;
}

/* Primary button / primary color */
.btn-primary,
.bg-primary,
.card-primary:not(.card-outline) .card-header,
.small-box.bg-primary {
    background-color: var(--viewer-primary) !important;
    border-color: var(--viewer-primary) !important;
}
.btn-primary:hover,
.bg-primary:hover {
    background-color: var(--viewer-primary-dark) !important;
    border-color: var(--viewer-primary-dark) !important;
}
.text-primary { color: var(--viewer-primary) !important; }

/* Footer color */
.main-footer {
    background-color: var(--viewer-primary) !important;
    color: rgba(255,255,255,.92) !important;
    border-color: var(--viewer-primary-dark) !important;
}

/* 整体蓝色调：内容区背景 */
.content-wrapper {
    background-color: #e8eef5 !important;
}
.content-header .text-dark {
    color: var(--viewer-primary) !important;
}
/* 消息页等保持蓝色风格 */
body.messages-page .content-wrapper {
    background-color: #e8eef5 !important;
}

/* Viewer room page helpers */
.viewer-video {
    width: 100%;
    height: 100%;
    background: #000;
    border-radius: .25rem;
    object-fit: cover;
}

/* No-signal overlay: show when OBS has no picture / stream loading or error */
.viewer-video-wrap {
    position: relative;
    background: #1a1a2e;
    border-radius: .25rem;
}
.viewer-no-signal-overlay {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: #1a1a2e;
    color: #8b95a5;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 1.5rem;
    border-radius: .25rem;
}
.viewer-no-signal-overlay.hidden {
    display: none !important;
}
.viewer-no-signal-image {
    color: #4a5568;
}
.viewer-no-signal-image svg {
    display: block;
}
.viewer-no-signal-message {
    font-size: 1rem;
    text-align: center;
    max-width: 320px;
}

.viewer-chat-messages {
    min-height: 120px;
    overflow-y: auto;
    background: #f8f9fa;
}

/* --- Viewer room: one-screen layout, no page scroll --- */
.content-wrapper.viewer-room-page .content {
    overflow: hidden;
    display: flex;
    flex-direction: column;
    padding-bottom: 0;
    /* navbar ~57px, content-header ~50px, footer ~50px */
    height: calc(100vh - 157px);
    max-height: calc(100vh - 157px);
}
.content-wrapper.viewer-room-page .content .container-fluid {
    flex: 1;
    display: flex;
    flex-direction: column;
    min-height: 0;
    padding-bottom: 0.75rem;
}

.viewer-room-layout.row {
    display: flex;
    flex: 1;
    min-height: 0;
    margin-left: -0.75rem;
    margin-right: -0.75rem;
}
.viewer-room-layout .viewer-room-left {
    display: flex;
    flex-direction: column;
    min-height: 0;
    flex: 1;
    min-width: 0;
}

.viewer-room-layout .viewer-room-video-card {
    flex-shrink: 0;
}
.viewer-room-layout .viewer-room-video-card .viewer-video {
    max-height: 32vh;
    object-fit: contain;
}

.viewer-room-layout .viewer-room-chat-card {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
}
.viewer-room-layout .viewer-room-chat-card .card-body {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
}
.viewer-room-layout .viewer-chat-messages {
    flex: 1;
    min-height: 0;
    max-height: none;
}

.viewer-room-layout .viewer-room-right {
    display: flex;
    flex-direction: column;
    min-height: 0;
    overflow: hidden;
}
.viewer-room-layout .viewer-room-sidebar {
    overflow-y: auto;
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
}

/* ========== 抖音风格直播间（100% 仿抖音） ========== */
:root {
    --dy-red: #FE2C55;
    --dy-red-dark: #e91e4a;
    --dy-bg: #0d0d0d;
    --dy-bar-bg: rgba(0,0,0,.35);
    --dy-text: #fff;
    --dy-text-secondary: rgba(255,255,255,.75);
    --dy-border: rgba(255,255,255,.15);
    /* 由 viewer_room_base 內聯腳本更新；鍵盤彈出時保留穩定高度以免 iOS 影片黑屏；未執行時等同 1vh */
    --app-vh: 1vh;
}

/* 直播间页：无上下滚动条，全屏一屏内。--app-vh 由頁面腳本按 visualViewport 更新，避免 iOS 上 100vh 偏大 */
body.viewer-room-douyin {
    overflow: hidden !important;
    height: calc(var(--app-vh) * 100) !important;
    max-height: calc(var(--app-vh) * 100) !important;
}
body.viewer-room-douyin .wrapper {
    height: calc(var(--app-vh) * 100) !important;
    max-height: calc(var(--app-vh) * 100) !important;
    overflow: hidden !important;
}
body.viewer-room-douyin .content-wrapper {
    margin-left: 0 !important;
    height: calc(var(--app-vh) * 100) !important;
    max-height: calc(var(--app-vh) * 100) !important;
    overflow: hidden !important;
}
body.viewer-room-douyin .main-sidebar,
body.viewer-room-douyin .main-footer {
    display: none !important;
}
body.viewer-room-douyin .content-header {
    display: none !important;
}
body.viewer-room-douyin .content {
    padding: 0 !important;
    height: calc(var(--app-vh) * 100) !important;
    max-height: calc(var(--app-vh) * 100) !important;
    overflow: hidden !important;
}
body.viewer-room-douyin .content .container-fluid {
    padding: 0 !important;
    height: 100% !important;
    max-height: 100% !important;
    overflow: hidden !important;
}
/* 直播间：不显示 AdminLTE 顶栏（仅 extends viewer_base 时存在）；独立直播间页 body.dy-room-body 显示顶栏 */
body.viewer-room-douyin .main-header,
body.viewer-room-douyin .content-header {
    display: none !important;
}
body.viewer-room-douyin:not(.dy-room-body) .dy-desktop-header {
    display: none !important;
}

/* 直播间独立页（无 AdminLTE）：整页由 dy-live-wrap 占满 */
body.dy-room-body {
    margin: 0;
    padding: 0;
    overflow: hidden;
    height: calc(var(--app-vh) * 100);
    min-height: calc(var(--app-vh) * 100);
    background: var(--dy-bg);
}
body.dy-room-body .dy-live-wrap {
    height: calc(var(--app-vh) * 100);
    min-height: calc(var(--app-vh) * 100);
}

/* 主容器：全屏黑底 */
.dy-live-wrap {
    position: relative;
    width: 100%;
    height: calc(var(--app-vh) * 100);
    min-height: calc(var(--app-vh) * 100);
    background: var(--dy-bg);
    overflow: hidden;
}

/* 视频区域：铺满剩余空间 */
.dy-video-area {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #000;
}
.dy-video-wrap {
    width: 100%;
    height: 100%;
    border-radius: 0;
}
.dy-video-wrap .viewer-video {
    width: 100%;
    height: 100%;
    object-fit: cover;
    border-radius: 0;
}
.dy-video-wrap .viewer-no-signal-overlay {
    border-radius: 0;
    background: #0d0d0d;
}

/* 单路或赛事桌面左侧单块：主视频填满 */
.dy-video-area > .dy-host-video-wrap,
.dy-video-area > .dy-game-video-wrap {
    flex: 1;
    min-height: 0;
    position: relative;
}

/* 赛事双路：网页版桌面时视频区上下分屏（上主播下赛事）- 已改为赛事时主播在右侧栏 */
.dy-video-area.dy-video-area-dual {
    display: flex;
    flex-direction: column;
    gap: 0;
}
.dy-video-area.dy-video-area-dual .dy-host-video-wrap {
    flex: 1;
    min-height: 0;
}
.dy-video-area.dy-video-area-dual .dy-game-video-wrap {
    flex: 0 0 50%;
    min-height: 120px;
    position: relative;
    border-top: 1px solid var(--dy-border);
}
.dy-game-video-wrap .dy-game-video-label {
    position: absolute;
    top: 6px;
    left: 10px;
    z-index: 6;
    padding: 2px 8px;
    border-radius: 4px;
    background: rgba(0,0,0,.6);
    color: rgba(255,255,255,.9);
    font-size: 12px;
}
/* 主播窗内的「主播」标签：同样绝对定位为小角标，不占流避免顶栏占位 */
.dy-host-video-wrap .dy-main-video-label,
.dy-host-video-wrap .dy-game-video-label.dy-main-video-label {
    position: absolute;
    top: 6px;
    left: 10px;
    z-index: 6;
    padding: 2px 8px;
    border-radius: 4px;
    background: rgba(0,0,0,.6);
    color: rgba(255,255,255,.9);
    font-size: 12px;
}
.dy-game-video-wrap .viewer-video {
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.dy-game-video-wrap .viewer-no-signal-overlay {
    border-radius: 0;
}

/* SVGA 专用浮层：与静态预览页 preview_svga 一致，层级最高、不透明 */
.dy-svga-overlay {
    position: absolute;
    left: 0;
    top: 0;
    right: 0;
    bottom: 0;
    width: 100%;
    height: 100%;
    pointer-events: none;
    z-index: 100;
    visibility: hidden;
    display: flex;
    justify-content: center;
    align-items: center;
    transform: translateZ(0);
    backface-visibility: hidden;
    opacity: 1;
}
/* 与静态页 .preview-area 一致：固定尺寸由 JS 内联设置，此处只做裁剪与子元素居中 */
.dy-svga-overlay .dy-svga-preview-area {
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}
.dy-svga-overlay #dySvgaCanvas {
    width: 100% !important;
    height: 100% !important;
}
.dy-svga-overlay canvas {
    display: block;
    width: 100% !important;
    height: 100% !important;
    object-fit: contain;
    opacity: 1;
}
/* 礼物特效层：覆盖在视频上，不阻挡点击；保证有尺寸以便 3D canvas 渲染 */
.dy-three-overlay {
    position: absolute;
    left: 0;
    top: 0;
    right: 0;
    bottom: 0;
    width: 100%;
    height: 100%;
    pointer-events: none;
    z-index: 5;
    visibility: hidden;
    display: flex;
    justify-content: center;
    align-items: center;
}
/* three-overlay 作 SVGA 容器时与 dy-svga-overlay 一致 */
.dy-three-overlay.dy-svga-active {
    z-index: 100;
    opacity: 1;
}
.dy-three-overlay .dy-svga-preview-area {
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}
.dy-three-overlay #dySvgaCanvas {
    width: 100% !important;
    height: 100% !important;
}
.dy-three-overlay canvas {
    display: block;
    width: 100% !important;
    height: 100% !important;
    object-fit: contain;
    opacity: 1;
}
.dy-svga-wrapper {
    flex-shrink: 0;
}
.dy-svga-canvas-fill {
    position: absolute;
    left: 0;
    top: 0;
    right: 0;
    bottom: 0;
    width: 100%;
    height: 100%;
}
.dy-gift-effect-overlay {
    position: absolute;
    left: 0;
    top: 0;
    right: 0;
    bottom: 0;
    pointer-events: none;
    z-index: 4;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    align-items: center;
    padding-bottom: 18%;
}
/* 图标礼物：仅在聊天室顶部浮层，不盖大视频；不模糊，保持清晰 */
.dy-gift-effect-overlay.dy-gift-effect-chat-top {
    position: relative;
    left: auto;
    right: auto;
    top: auto;
    bottom: auto;
    min-height: 0;
    flex: 0 0 auto;
    justify-content: flex-start;
    padding-bottom: 0;
    padding-top: 8px;
    padding-left: 8px;
    padding-right: 8px;
    align-items: center;
}
.dy-gift-effect-overlay.dy-gift-effect-chat-top[aria-hidden="true"] {
    display: none;
}
.dy-gift-effect-overlay.dy-gift-effect-chat-top[aria-hidden="false"] {
    display: flex;
}
.dy-gift-effect-overlay.dy-gift-effect-top {
    justify-content: flex-start;
    padding-bottom: 0;
    padding-top: 8px;
    align-items: center;
}
.dy-gift-effect-item {
    position: absolute;
    left: 50%;
    bottom: 18%;
    transform: translateX(-50%);
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 12px 22px;
    background: linear-gradient(135deg, rgba(254, 44, 85, 0.95) 0%, rgba(233, 30, 74, 0.95) 50%, rgba(255, 64, 129, 0.95) 100%);
    border-radius: 28px;
    box-shadow: 
        0 6px 30px rgba(254, 44, 85, 0.6),
        0 0 20px rgba(255, 64, 129, 0.4),
        inset 0 1px 0 rgba(255,255,255,0.3);
    color: #fff;
    font-size: 15px;
    white-space: nowrap;
    animation: dy-gift-fly 3.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    border: 1px solid rgba(255,255,255,0.2);
}
/* 图标礼物条：聊天室顶部浮层，抖音风格；全程无模糊，保持可读 */
.dy-gift-effect-item-icon {
    position: relative !important;
    left: auto !important;
    bottom: auto !important;
    top: 0 !important;
    margin-bottom: 8px;
    filter: none !important;
    animation: dy-gift-fly-top 3.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
}
.dy-gift-effect-item-icon .dy-ge-gift-wrap {
    display: flex;
    align-items: center;
    flex-wrap: nowrap;
    gap: 8px;
}
.dy-gift-effect-item-icon .dy-ge-platform-badge,
.dy-gift-effect-item-icon .dy-ge-streamer-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 22px;
    height: 20px;
    padding: 0 6px;
    border-radius: 10px;
    font-size: 12px;
    font-weight: 700;
    color: #fff;
    text-shadow: 0 1px 2px rgba(0,0,0,0.3);
    flex-shrink: 0;
}
.dy-gift-effect-item-icon .dy-ge-streamer-badge {
    border: 1px solid transparent;
}
.dy-gift-effect-item-icon .dy-ge-streamer-badge i {
    font-size: 10px;
    margin-right: 2px;
    opacity: 0.95;
}
.dy-gift-effect-item-icon .dy-ge-fixed-icon {
    font-size: 16px;
    opacity: 0.95;
}
.dy-gift-effect-item-icon .dy-ge-sender {
    color: #ffd93d;
    font-weight: 700;
    max-width: 100px;
    overflow: hidden;
    text-overflow: ellipsis;
}
.dy-gift-effect-item-icon .dy-ge-gift-emoji {
    font-size: 22px;
    line-height: 1;
}
.dy-gift-effect-item-icon .dy-ge-gift-img {
    width: 28px;
    height: 28px;
    object-fit: contain;
}
.dy-gift-effect-item-icon .dy-ge-gift-name {
    font-weight: 700;
}
.dy-gift-effect-item-icon .dy-ge-gift-count {
    font-weight: 700;
    opacity: 0.95;
    margin-left: 2px;
}
@keyframes dy-gift-fly-top {
    0% {
        opacity: 0;
        transform: translateY(-20px) scale(0.96);
        filter: none;
    }
    15% {
        opacity: 1;
        transform: translateY(0) scale(1);
        filter: none;
    }
    75% {
        opacity: 1;
        transform: translateY(0) scale(1);
        filter: none;
    }
    100% {
        opacity: 0;
        transform: translateY(-12px) scale(0.98);
        filter: none;
    }
}
/* 移动端 / iPhone：关闭 backdrop-filter 以减轻 GPU 压力，避免卡顿 */
@media (max-width: 1024px), (hover: none) {
    .dy-gift-effect-item {
        backdrop-filter: none;
        -webkit-backdrop-filter: none;
        background: linear-gradient(135deg, rgba(254, 44, 85, 0.98) 0%, rgba(233, 30, 74, 0.98) 50%, rgba(255, 64, 129, 0.98) 100%);
    }
}
.dy-gift-effect-item::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    border-radius: 28px;
    background: linear-gradient(45deg, transparent 30%, rgba(255,255,255,0.2) 50%, transparent 70%);
    animation: dy-gift-shimmer 2s ease-in-out infinite;
}
.dy-gift-effect-item .dy-ge-sender {
    color: #ffd93d;
    font-weight: 700;
    max-width: 120px;
    overflow: hidden;
    text-overflow: ellipsis;
    text-shadow: 0 2px 4px rgba(0,0,0,0.3);
    animation: dy-gift-name-glow 1.5s ease-in-out infinite;
}
.dy-gift-effect-item .dy-ge-gift-wrap {
    display: flex;
    align-items: center;
    gap: 8px;
}
.dy-gift-effect-item .dy-ge-gift-emoji {
    font-size: 28px;
    line-height: 1;
    animation: dy-gift-emoji-bounce 0.6s ease-in-out infinite;
    filter: drop-shadow(0 2px 4px rgba(0,0,0,0.3));
}
.dy-gift-effect-item .dy-ge-gift-img {
    width: 32px;
    height: 32px;
    object-fit: contain;
    border-radius: 6px;
    animation: dy-gift-img-pulse 0.8s ease-in-out infinite;
    filter: drop-shadow(0 2px 6px rgba(0,0,0,0.3));
}
.dy-gift-effect-item .dy-ge-gift-name {
    font-weight: 700;
    text-shadow: 0 1px 3px rgba(0,0,0,0.3);
}
.dy-gift-effect-item .dy-ge-value {
    margin-left: 6px;
    opacity: 0.95;
    font-size: 14px;
    font-weight: 600;
    background: rgba(255,255,255,0.2);
    padding: 2px 8px;
    border-radius: 10px;
}
@keyframes dy-gift-fly {
    0% {
        opacity: 0;
        transform: translateX(-50%) translateY(60px) scale(0.5) rotate(-10deg);
        filter: blur(5px);
    }
    15% {
        opacity: 1;
        transform: translateX(-50%) translateY(-10px) scale(1.15) rotate(3deg);
        filter: blur(0);
    }
    25% {
        transform: translateX(-50%) translateY(5px) scale(0.98) rotate(-2deg);
    }
    35% {
        transform: translateX(-50%) translateY(0) scale(1.02) rotate(1deg);
    }
    45% {
        transform: translateX(-50%) translateY(0) scale(1) rotate(0deg);
    }
    75% {
        opacity: 1;
        transform: translateX(-50%) translateY(0) scale(1);
    }
    100% {
        opacity: 0;
        transform: translateX(-50%) translateY(-150px) scale(0.8) rotate(5deg);
        filter: blur(3px);
    }
}
@keyframes dy-gift-shimmer {
    0%, 100% { background-position: -200% 0; }
    50% { background-position: 200% 0; }
}
@keyframes dy-gift-name-glow {
    0%, 100% { text-shadow: 0 2px 4px rgba(0,0,0,0.3), 0 0 10px rgba(255,217,61,0.3); }
    50% { text-shadow: 0 2px 4px rgba(0,0,0,0.3), 0 0 20px rgba(255,217,61,0.6); }
}
@keyframes dy-gift-emoji-bounce {
    0%, 100% { transform: translateY(0) scale(1); }
    50% { transform: translateY(-4px) scale(1.1); }
}
@keyframes dy-gift-img-pulse {
    0%, 100% { transform: scale(1); filter: drop-shadow(0 2px 6px rgba(0,0,0,0.3)); }
    50% { transform: scale(1.1); filter: drop-shadow(0 4px 10px rgba(0,0,0,0.4)); }
}

/* 大礼物：严格在视频正中央，不显示名片，只显示礼物形态特效（再放大一档） */
.dy-gift-effect-item-big {
    position: absolute !important;
    left: 50% !important;
    top: 50% !important;
    bottom: auto !important;
    right: auto !important;
    width: 0 !important;
    height: 0 !important;
    transform: translate(-50%, -50%) !important;
    padding: 0 !important;
    min-width: 0 !important;
    background: transparent !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    z-index: 9999 !important;
    overflow: visible !important;
    pointer-events: none !important;
}
/* 不显示名片（发送者、礼物名、金额） */
.dy-gift-effect-item-big .dy-ge-sender,
.dy-gift-effect-item-big .dy-ge-gift-name,
.dy-gift-effect-item-big .dy-ge-value { display: none !important; }
.dy-gift-effect-item-big .dy-ge-gift-wrap {
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    position: absolute !important;
    left: 50% !important;
    top: 50% !important;
    transform: translate(-50%, -50%) !important;
    margin: 0 !important;
    padding: 0 !important;
    background: none !important;
    border: none !important;
}
.dy-gift-effect-item-big .dy-ge-gift-emoji {
    font-size: 180px !important;
    line-height: 1 !important;
    display: inline-block !important;
    filter: drop-shadow(0 8px 24px rgba(0,0,0,0.4)) !important;
}
.dy-gift-effect-item-big .dy-ge-gift-img {
    width: 200px !important;
    height: 200px !important;
    object-fit: contain !important;
    filter: drop-shadow(0 8px 24px rgba(0,0,0,0.4)) !important;
}
/* 未指定类型时的默认入场 - 超级炫酷版 */
.dy-gift-effect-item-big .dy-ge-gift-emoji,
.dy-gift-effect-item-big .dy-ge-gift-img { 
    animation: dy-gift-default-in 1.2s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
}
@keyframes dy-gift-default-in {
    0% { transform: scale(0) rotate(-540deg); opacity: 0; filter: blur(20px) brightness(3); }
    40% { transform: scale(1.4) rotate(20deg); opacity: 1; filter: blur(0) brightness(1.5); }
    60% { transform: scale(0.9) rotate(-10deg); filter: brightness(1.2); }
    80% { transform: scale(1.1) rotate(5deg); }
    100% { transform: scale(1) rotate(0deg); opacity: 1; filter: brightness(1); }
}

/* 通用：整层淡入→保持→淡出（5s），带震撼入场 */
@keyframes dy-gift-big-animation {
    0% { opacity: 0; transform: translate(-50%, -50%) scale(0.3); filter: blur(10px); }
    15% { opacity: 1; transform: translate(-50%, -50%) scale(1.15); filter: blur(0); }
    25% { transform: translate(-50%, -50%) scale(0.95); }
    35% { transform: translate(-50%, -50%) scale(1.05); }
    45% { transform: translate(-50%, -50%) scale(1); }
    80% { opacity: 1; transform: translate(-50%, -50%) scale(1); }
    100% { opacity: 0; transform: translate(-50%, -50%) scale(1.2); filter: blur(5px); }
}
.dy-gift-effect-item-big { animation: dy-gift-big-animation 5s ease-out forwards !important; }

/* 全局超级光效背景+多层次光环 */
.dy-gift-effect-item-big .dy-ge-gift-wrap::after {
    content: '';
    position: absolute;
    left: 50%;
    top: 50%;
    width: 500px;
    height: 500px;
    margin: -250px 0 0 -250px;
    background: 
        radial-gradient(circle at 30% 30%, rgba(255,255,255,0.4) 0%, transparent 40%),
        radial-gradient(circle at 70% 70%, rgba(255,200,100,0.3) 0%, transparent 40%),
        radial-gradient(circle, rgba(255,255,255,0.2) 0%, transparent 60%);
    animation: dy-gift-mega-glow 1.5s ease-in-out infinite;
    pointer-events: none;
    z-index: -1;
}
@keyframes dy-gift-mega-glow {
    0%, 100% { 
        transform: scale(0.7) rotate(0deg); 
        opacity: 0.4;
        filter: blur(5px);
    }
    50% { 
        transform: scale(1.3) rotate(180deg); 
        opacity: 0.9;
        filter: blur(0px);
    }
}

/* 礼物特效层整体震动效果 */
.dy-gift-effect-overlay.dy-gift-active {
    animation: dy-screen-shake 0.5s ease-out;
}
@keyframes dy-screen-shake {
    0%, 100% { transform: translateX(0); }
    10% { transform: translateX(-5px) rotate(-0.5deg); }
    20% { transform: translateX(5px) rotate(0.5deg); }
    30% { transform: translateX(-5px) rotate(-0.3deg); }
    40% { transform: translateX(5px) rotate(0.3deg); }
    50% { transform: translateX(-3px); }
    60% { transform: translateX(3px); }
    70% { transform: translateX(-2px); }
    80% { transform: translateX(2px); }
    90% { transform: translateX(-1px); }
}

/* ---------- 每种礼物独立大特效（超炫、大、动感十足） ---------- */

/* 1. 玫瑰：绽放+旋转+多层粉红扩散环+花瓣飘落 */
.dy-gift-effect-item-big.dy-gift-effect-rose .dy-ge-gift-wrap::before {
    content: '';
    position: absolute;
    left: 50%;
    top: 50%;
    width: 300px;
    height: 300px;
    margin: -150px 0 0 -150px;
    border-radius: 50%;
    border: 8px solid rgba(233, 30, 99, 0.8);
    box-shadow: 
        0 0 80px rgba(233, 30, 99, 0.6),
        0 0 120px rgba(233, 30, 99, 0.4),
        inset 0 0 60px rgba(233, 30, 99, 0.2);
    animation: dy-rose-ring 2s ease-out forwards, dy-rose-ring-rotate 2s linear forwards;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-rose .dy-ge-gift-wrap::after {
    content: '🌸🌸🌸🌸🌸';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 40px;
    animation: dy-rose-petals 3s ease-out forwards;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-rose .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-rose .dy-ge-gift-img {
    font-size: 260px !important;
    animation: dy-rose-bloom 1.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards !important;
    filter: drop-shadow(0 0 50px rgba(233, 30, 99, 0.8)) drop-shadow(0 0 100px rgba(255, 64, 129, 0.5)) !important;
}
@keyframes dy-rose-ring {
    0% { transform: scale(0.2) rotate(0deg); opacity: 1; }
    100% { transform: scale(2.5) rotate(180deg); opacity: 0; }
}
@keyframes dy-rose-ring-rotate {
    0% { border-color: rgba(233, 30, 99, 0.8); }
    50% { border-color: rgba(255, 64, 129, 0.9); }
    100% { border-color: rgba(233, 30, 99, 0.8); }
}
@keyframes dy-rose-bloom {
    0% { transform: scale(0) rotate(-720deg); opacity: 0; filter: brightness(3); }
    50% { transform: scale(1.3) rotate(30deg); opacity: 1; filter: brightness(1.5); }
    70% { transform: scale(0.95) rotate(-10deg); }
    100% { transform: scale(1) rotate(0deg); opacity: 1; filter: brightness(1); }
}
@keyframes dy-rose-petals {
    0% { transform: translate(-50%, -50%) scale(0); opacity: 0; }
    30% { transform: translate(-50%, -50%) scale(1.5); opacity: 1; }
    100% { transform: translate(-50%, 100px) scale(2) rotate(180deg); opacity: 0; }
}

/* 2. 棒棒糖：旋转飞入+彩虹光环+弹跳 */
.dy-gift-effect-item-big.dy-gift-effect-lollipop .dy-ge-gift-wrap::before {
    content: '';
    position: absolute;
    left: 50%;
    top: 50%;
    width: 280px;
    height: 280px;
    margin: -140px 0 0 -140px;
    border-radius: 50%;
    background: conic-gradient(from 0deg, #ff6b6b, #feca57, #48dbfb, #ff9ff3, #ff6b6b);
    animation: dy-lollipop-rainbow 2s linear infinite;
    opacity: 0.4;
    filter: blur(20px);
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-lollipop .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-lollipop .dy-ge-gift-img {
    font-size: 280px !important;
    animation: dy-lollipop-spin 1.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-lollipop-bounce 0.4s ease-in-out 1.5s 6 alternate both !important;
    filter: drop-shadow(0 0 40px rgba(255, 182, 193, 0.9)) drop-shadow(0 0 80px rgba(255, 105, 180, 0.5)) !important;
}
@keyframes dy-lollipop-rainbow {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}
@keyframes dy-lollipop-spin {
    0% { transform: translateY(150px) scale(0.2) rotate(720deg); opacity: 0; filter: blur(10px); }
    60% { transform: translateY(-20px) scale(1.2) rotate(0deg); opacity: 1; filter: blur(0); }
    80% { transform: translateY(10px) scale(0.95); }
    100% { transform: translateY(0) scale(1) rotate(0deg); opacity: 1; }
}
@keyframes dy-lollipop-bounce {
    0%, 100% { transform: translateY(0) scale(1) rotate(-15deg); }
    50% { transform: translateY(-30px) scale(1.1) rotate(15deg); }
}

/* 3. 啤酒：泡沫爆发+金色闪光+气泡上升 */
.dy-gift-effect-item-big.dy-gift-effect-beer .dy-ge-gift-wrap::before {
    content: '🫧🫧🫧🫧🫧🫧';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 50px;
    animation: dy-beer-bubbles 2.5s ease-out forwards;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-beer .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-beer .dy-ge-gift-img {
    font-size: 270px !important;
    animation: dy-beer-foam 1.6s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-beer-shake 0.15s ease-in-out 1.6s 8 both !important;
    filter: drop-shadow(0 0 60px rgba(255, 193, 7, 0.9)) drop-shadow(0 0 100px rgba(255, 235, 59, 0.6)) !important;
}
@keyframes dy-beer-bubbles {
    0% { transform: translate(-50%, 0) scale(0); opacity: 0; }
    30% { transform: translate(-50%, -50px) scale(1.2); opacity: 1; }
    100% { transform: translate(-50%, -200px) scale(2); opacity: 0; }
}
@keyframes dy-beer-foam {
    0% { transform: translateY(200px) scale(0.3); opacity: 0; filter: blur(15px) brightness(2); }
    50% { transform: translateY(-30px) scale(1.3); opacity: 1; filter: blur(0) brightness(1.5); }
    70% { transform: translateY(15px) scale(0.95); filter: brightness(1.2); }
    100% { transform: translateY(0) scale(1); opacity: 1; filter: brightness(1); }
}
@keyframes dy-beer-shake {
    0%, 100% { transform: translateX(0) rotate(0deg); }
    25% { transform: translateX(-8px) rotate(-3deg); }
    75% { transform: translateX(8px) rotate(3deg); }
}

/* 4. 掌声：爆发+震动波+连续脉冲 */
.dy-gift-effect-item-big.dy-gift-effect-applause .dy-ge-gift-wrap::before {
    content: '';
    position: absolute;
    left: 50%;
    top: 50%;
    width: 350px;
    height: 350px;
    margin: -175px 0 0 -175px;
    border-radius: 50%;
    border: 10px solid rgba(255, 200, 100, 0.6);
    animation: dy-applause-wave 0.6s ease-out forwards, dy-applause-wave 0.6s ease-out 0.3s forwards;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-applause .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-applause .dy-ge-gift-img {
    font-size: 280px !important;
    animation: dy-applause-clap 1s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-applause-pulse 0.3s ease-in-out 1s 8 both !important;
    filter: drop-shadow(0 0 40px rgba(255, 200, 100, 0.8)) drop-shadow(0 0 80px rgba(255, 165, 0, 0.5)) !important;
}
@keyframes dy-applause-wave {
    0% { transform: scale(0.3); opacity: 1; }
    100% { transform: scale(2); opacity: 0; }
}
@keyframes dy-applause-clap {
    0% { transform: scale(0) rotate(-30deg); opacity: 0; filter: brightness(3); }
    40% { transform: scale(1.5) rotate(10deg); opacity: 1; filter: brightness(1.5); }
    60% { transform: scale(0.85) rotate(-5deg); }
    80% { transform: scale(1.1) rotate(3deg); }
    100% { transform: scale(1) rotate(0deg); opacity: 1; filter: brightness(1); }
}
@keyframes dy-applause-pulse {
    0%, 100% { transform: scale(1); filter: brightness(1); }
    50% { transform: scale(1.25); filter: brightness(1.3); }
}

/* 5. 仙女棒：超级星光爆发+螺旋闪烁+粒子飞散 */
.dy-gift-effect-item-big.dy-gift-effect-spark .dy-ge-gift-wrap::before {
    content: '✨✨✨✨✨✨✨✨';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 60px;
    animation: dy-spark-particles 2s ease-out forwards;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-spark .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-spark .dy-ge-gift-img {
    font-size: 300px !important;
    animation: dy-spark-star 1.2s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-spark-twinkle 0.25s ease-in-out 1.2s 12 both !important;
    filter: drop-shadow(0 0 80px rgba(255, 235, 59, 1)) drop-shadow(0 0 120px rgba(255, 215, 0, 0.7)) drop-shadow(0 0 160px rgba(255, 255, 255, 0.4)) !important;
}
@keyframes dy-spark-particles {
    0% { transform: translate(-50%, -50%) scale(0) rotate(0deg); opacity: 0; }
    30% { transform: translate(-50%, -50%) scale(1.5) rotate(180deg); opacity: 1; }
    100% { transform: translate(-50%, -50%) scale(3) rotate(540deg); opacity: 0; }
}
@keyframes dy-spark-star {
    0% { transform: scale(0) rotate(-720deg); opacity: 0; filter: brightness(5); }
    50% { transform: scale(1.4) rotate(30deg); opacity: 1; filter: brightness(2); }
    70% { transform: scale(0.9) rotate(-10deg); filter: brightness(1.3); }
    100% { transform: scale(1) rotate(0deg); opacity: 1; filter: brightness(1); }
}
@keyframes dy-spark-twinkle {
    0%, 100% { transform: scale(1) rotate(0deg); filter: brightness(1) drop-shadow(0 0 80px gold); }
    50% { transform: scale(1.15) rotate(5deg); filter: brightness(1.8) drop-shadow(0 0 120px white); }
}

/* 6. 为你喝彩：超级礼花爆炸+彩带飘落+多层光环 */
.dy-gift-effect-item-big.dy-gift-effect-cheer .dy-ge-gift-wrap::before {
    content: '🎊🎉🎊🎉🎊🎉';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 50px;
    animation: dy-cheer-confetti 2.5s ease-out forwards;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-cheer .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-cheer .dy-ge-gift-img {
    font-size: 280px !important;
    animation: dy-cheer-pop 1.2s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-cheer-celebrate 0.4s ease-in-out 1.2s 5 both !important;
    filter: drop-shadow(0 0 60px rgba(156, 39, 176, 0.9)) drop-shadow(0 0 100px rgba(233, 30, 99, 0.6)) drop-shadow(0 0 140px rgba(255, 64, 129, 0.3)) !important;
}
@keyframes dy-cheer-confetti {
    0% { transform: translate(-50%, -50%) scale(0) rotate(0deg); opacity: 0; }
    30% { transform: translate(-50%, -50%) scale(2) rotate(180deg); opacity: 1; }
    100% { transform: translate(-50%, 150px) scale(3) rotate(540deg); opacity: 0; }
}
@keyframes dy-cheer-pop {
    0% { transform: scale(0) rotate(-180deg); opacity: 0; filter: brightness(4); }
    40% { transform: scale(1.5) rotate(20deg); opacity: 1; filter: brightness(1.8); }
    60% { transform: scale(0.85) rotate(-10deg); filter: brightness(1.3); }
    80% { transform: scale(1.1) rotate(5deg); }
    100% { transform: scale(1) rotate(0deg); opacity: 1; filter: brightness(1); }
}
@keyframes dy-cheer-celebrate {
    0%, 100% { transform: scale(1) rotate(0deg); }
    25% { transform: scale(1.1) rotate(-8deg); }
    75% { transform: scale(1.1) rotate(8deg); }
}

/* 7. 跑车：超级飙车入场+尾焰+震屏效果 */
.dy-gift-effect-item-big.dy-gift-effect-car .dy-ge-gift-wrap { display: none !important; }
.dy-gift-effect-item-big.dy-gift-effect-car .dy-gift-effect-car-entry {
    position: absolute;
    left: 50%;
    top: 50%;
    width: 100%;
    transform: translate(-50%, -50%);
    pointer-events: none;
    z-index: 1;
}
.dy-gift-effect-item-big.dy-gift-effect-car .dy-gift-effect-car-entry::before {
    content: '🔥🔥🔥';
    position: absolute;
    left: -80px;
    top: 50%;
    font-size: 60px;
    transform: translateY(-50%) scaleX(-1);
    animation: dy-car-flame 0.15s ease-in-out infinite;
    filter: blur(2px);
}
.dy-gift-effect-item-big.dy-gift-effect-car .dy-gift-effect-car-entry svg {
    display: block;
    width: 350px;
    height: 175px;
    margin: 0 auto;
    filter: drop-shadow(0 15px 40px rgba(0,0,0,0.6)) drop-shadow(0 0 50px rgba(254, 44, 85, 0.6));
    animation: dy-gift-car-drive-in 1.8s cubic-bezier(0.16, 1, 0.3, 1) forwards, dy-car-bounce 0.2s ease-in-out 1.8s 4 both;
}
@keyframes dy-gift-car-drive-in {
    0% { transform: translateX(200%) scale(0.3) rotate(5deg); opacity: 0; filter: blur(10px); }
    20% { opacity: 1; filter: blur(2px); }
    60% { transform: translateX(-15%) scale(1.15) rotate(-3deg); filter: blur(0); }
    80% { transform: translateX(5%) scale(0.98) rotate(1deg); }
    100% { transform: translateX(0) scale(1) rotate(0deg); opacity: 1; }
}
@keyframes dy-car-flame {
    0%, 100% { opacity: 0.8; transform: translateY(-50%) scaleX(-1) scale(1); }
    50% { opacity: 1; transform: translateY(-50%) scaleX(-1) scale(1.3); }
}
@keyframes dy-car-bounce {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-15px); }
}

/* 8. 浪漫马车：梦幻飘入+星光环绕+浪漫氛围 */
.dy-gift-effect-item-big.dy-gift-effect-carriage .dy-ge-gift-wrap::before {
    content: '💫💕💫💕💫';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 45px;
    animation: dy-carriage-stars 3s ease-out infinite;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-carriage .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-carriage .dy-ge-gift-img {
    font-size: 280px !important;
    animation: dy-carriage-ride 2.2s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-carriage-float 2s ease-in-out 2.2s infinite both !important;
    filter: drop-shadow(0 0 50px rgba(255, 183, 77, 0.8)) drop-shadow(0 0 100px rgba(255, 138, 101, 0.5)) drop-shadow(0 0 150px rgba(255, 215, 0, 0.3)) !important;
}
@keyframes dy-carriage-stars {
    0% { transform: translate(-50%, -50%) rotate(0deg) scale(1); opacity: 0.8; }
    50% { transform: translate(-50%, -50%) rotate(180deg) scale(1.3); opacity: 1; }
    100% { transform: translate(-50%, -50%) rotate(360deg) scale(1); opacity: 0.8; }
}
@keyframes dy-carriage-float {
    0%, 100% { transform: translateY(0) rotate(0deg); }
    50% { transform: translateY(-20px) rotate(3deg); }
}
@keyframes dy-carriage-ride {
    0% { transform: scale(0.2) rotate(-360deg); opacity: 0; }
    45% { transform: scale(1.2) rotate(20deg); opacity: 1; }
    65% { transform: scale(0.98) rotate(-5deg); }
    100% { transform: scale(1) rotate(0deg); opacity: 1; }
}

/* 9. 嘉年华：超级炫彩爆发+旋转灯光+彩带飞舞 */
.dy-gift-effect-item-big.dy-gift-effect-carnival .dy-ge-gift-wrap::before {
    content: '🎪🎡🎠🎢🎪';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 50px;
    animation: dy-carnival-lights 2.5s linear infinite;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-carnival .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-carnival .dy-ge-gift-img {
    font-size: 300px !important;
    animation: dy-carnival-tent 1.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-carnival-flash 0.2s ease-in-out 1.5s 10 both !important;
    filter: drop-shadow(0 0 70px rgba(255, 87, 34, 0.9)) drop-shadow(0 0 120px rgba(255, 152, 0, 0.6)) drop-shadow(0 0 180px rgba(255, 235, 59, 0.3)) !important;
}
@keyframes dy-carnival-lights {
    0% { transform: translate(-50%, -50%) rotate(0deg) scale(1); opacity: 0.9; }
    50% { transform: translate(-50%, -50%) rotate(180deg) scale(1.4); opacity: 1; }
    100% { transform: translate(-50%, -50%) rotate(360deg) scale(1); opacity: 0.9; }
}
@keyframes dy-carnival-tent {
    0% { transform: scale(0) rotate(-540deg); opacity: 0; filter: brightness(4) hue-rotate(0deg); }
    40% { transform: scale(1.4) rotate(30deg); opacity: 1; filter: brightness(1.8) hue-rotate(30deg); }
    60% { transform: scale(0.9) rotate(-15deg); filter: brightness(1.3) hue-rotate(0deg); }
    80% { transform: scale(1.1) rotate(8deg); }
    100% { transform: scale(1) rotate(0deg); opacity: 1; filter: brightness(1) hue-rotate(0deg); }
}
@keyframes dy-carnival-flash {
    0%, 100% { filter: brightness(1) hue-rotate(0deg); }
    50% { filter: brightness(1.5) hue-rotate(30deg); }
}

/* ---------- 扩展礼物：爱心、热气球、奶茶、蛋糕、钻戒、城堡、飞机、火箭等 ---------- */

/* 爱心：超级心跳+爱心飞散+脉冲光环 */
.dy-gift-effect-item-big.dy-gift-effect-heart .dy-ge-gift-wrap::before {
    content: '💕💕💕💕💕💕';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 40px;
    animation: dy-heart-scatter 2.5s ease-out forwards;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-heart .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-heart .dy-ge-gift-img {
    font-size: 260px !important;
    animation: dy-heart-beat 1.2s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-heart-pulse 0.4s ease-in-out 1.2s 8 both !important;
    filter: drop-shadow(0 0 60px rgba(233, 30, 99, 0.9)) drop-shadow(0 0 100px rgba(255, 64, 129, 0.6)) drop-shadow(0 0 150px rgba(255, 182, 193, 0.3)) !important;
}
@keyframes dy-heart-scatter {
    0% { transform: translate(-50%, -50%) scale(0); opacity: 0; }
    30% { transform: translate(-50%, -50%) scale(1.5); opacity: 1; }
    100% { transform: translate(-50%, -150px) scale(2.5) rotate(180deg); opacity: 0; }
}
@keyframes dy-heart-beat {
    0% { transform: scale(0); opacity: 0; filter: brightness(3); }
    30% { transform: scale(1.5); opacity: 1; filter: brightness(1.8); }
    50% { transform: scale(0.85); filter: brightness(1.3); }
    70% { transform: scale(1.2); }
    100% { transform: scale(1); opacity: 1; filter: brightness(1); }
}
@keyframes dy-heart-pulse {
    0%, 100% { transform: scale(1); filter: brightness(1); }
    50% { transform: scale(1.25); filter: brightness(1.4); }
}

/* 热气球：梦幻升空+云朵环绕+柔和飘动 */
.dy-gift-effect-item-big.dy-gift-effect-balloon .dy-ge-gift-wrap::before {
    content: '☁️☁️☁️';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 60px;
    animation: dy-balloon-clouds 3s ease-out forwards;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-balloon .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-balloon .dy-ge-gift-img {
    font-size: 280px !important;
    animation: dy-balloon-float 2.2s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-balloon-sway 3s ease-in-out 2.2s infinite both !important;
    filter: drop-shadow(0 0 50px rgba(255, 152, 0, 0.7)) drop-shadow(0 0 100px rgba(255, 193, 7, 0.4)) !important;
}
@keyframes dy-balloon-clouds {
    0% { transform: translate(-50%, 50px) scale(0); opacity: 0; }
    40% { transform: translate(-50%, -30px) scale(1.3); opacity: 0.8; }
    100% { transform: translate(-50%, -150px) scale(2); opacity: 0; }
}
@keyframes dy-balloon-float {
    0% { transform: translateY(200px) scale(0.2); opacity: 0; filter: blur(10px); }
    50% { transform: translateY(-40px) scale(1.2); opacity: 1; filter: blur(0); }
    70% { transform: translateY(10px) scale(0.95); }
    100% { transform: translateY(0) scale(1); opacity: 1; }
}
@keyframes dy-balloon-sway {
    0%, 100% { transform: translateX(0) rotate(0deg); }
    25% { transform: translateX(-20px) rotate(-5deg); }
    75% { transform: translateX(20px) rotate(5deg); }
}

/* 奶茶：珍珠跳动+气泡涌出+Q弹效果 */
.dy-gift-effect-item-big.dy-gift-effect-milk_tea .dy-ge-gift-wrap::before {
    content: '🫧🫧🫧🫧';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 45px;
    animation: dy-milktea-bubbles 2.5s ease-out forwards;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-milk_tea .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-milk_tea .dy-ge-gift-img {
    font-size: 260px !important;
    animation: dy-milktea-bubble 1.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-milktea-jiggle 0.3s ease-in-out 1.5s 6 both !important;
    filter: drop-shadow(0 0 40px rgba(139, 90, 43, 0.6)) drop-shadow(0 0 80px rgba(210, 180, 140, 0.4)) !important;
}
@keyframes dy-milktea-bubbles {
    0% { transform: translate(-50%, 30px) scale(0); opacity: 0; }
    30% { transform: translate(-50%, -20px) scale(1.2); opacity: 1; }
    100% { transform: translate(-50%, -120px) scale(1.8); opacity: 0; }
}
@keyframes dy-milktea-bubble {
    0% { transform: translateY(150px) scale(0.3) rotate(-20deg); opacity: 0; filter: blur(8px); }
    50% { transform: translateY(-25px) scale(1.3) rotate(10deg); opacity: 1; filter: blur(0); }
    70% { transform: translateY(10px) scale(0.9) rotate(-5deg); }
    100% { transform: translateY(0) scale(1) rotate(0deg); opacity: 1; }
}
@keyframes dy-milktea-jiggle {
    0%, 100% { transform: scale(1) rotate(0deg); }
    25% { transform: scale(1.08) rotate(-3deg); }
    75% { transform: scale(1.08) rotate(3deg); }
}

/* 蛋糕：庆祝弹出+蜡烛闪烁+彩屑飞扬 */
.dy-gift-effect-item-big.dy-gift-effect-cake .dy-ge-gift-wrap::before {
    content: '🎂✨🎂✨🎂';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 50px;
    animation: dy-cake-candles 2.5s ease-out forwards;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-cake .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-cake .dy-ge-gift-img {
    font-size: 280px !important;
    animation: dy-cake-pop 1.3s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-cake-glow-pulse 0.5s ease-in-out 1.3s 5 both !important;
    filter: drop-shadow(0 0 50px rgba(255, 193, 7, 0.8)) drop-shadow(0 0 100px rgba(255, 152, 0, 0.5)) drop-shadow(0 0 150px rgba(255, 87, 34, 0.3)) !important;
}
@keyframes dy-cake-candles {
    0% { transform: translate(-50%, -50%) scale(0); opacity: 0; }
    30% { transform: translate(-50%, -50%) scale(1.5); opacity: 1; }
    100% { transform: translate(-50%, -100px) scale(2.5) rotate(180deg); opacity: 0; }
}
@keyframes dy-cake-pop {
    0% { transform: scale(0) rotate(-180deg); opacity: 0; filter: brightness(3); }
    40% { transform: scale(1.4) rotate(15deg); opacity: 1; filter: brightness(1.5); }
    60% { transform: scale(0.9) rotate(-8deg); filter: brightness(1.2); }
    80% { transform: scale(1.1) rotate(4deg); }
    100% { transform: scale(1) rotate(0deg); opacity: 1; filter: brightness(1); }
}
@keyframes dy-cake-glow-pulse {
    0%, 100% { filter: brightness(1) drop-shadow(0 0 50px gold); }
    50% { filter: brightness(1.5) drop-shadow(0 0 100px orange); }
}

/* 钻戒：超级钻石闪耀+光芒四射+璀璨夺目 */
.dy-gift-effect-item-big.dy-gift-effect-diamond_ring .dy-ge-gift-wrap::before {
    content: '💎✨💎✨💎';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 45px;
    animation: dy-diamond-rays 2s linear infinite;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-diamond_ring .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-diamond_ring .dy-ge-gift-img {
    font-size: 260px !important;
    animation: dy-diamond-sparkle 1.3s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-diamond-shine 0.3s ease-in-out 1.3s 10 both !important;
    filter: drop-shadow(0 0 70px rgba(187, 222, 251, 1)) drop-shadow(0 0 120px rgba(255,255,255,0.8)) drop-shadow(0 0 180px rgba(100, 181, 246, 0.5)) !important;
}
@keyframes dy-diamond-rays {
    0% { transform: translate(-50%, -50%) rotate(0deg) scale(1); opacity: 0.8; }
    50% { transform: translate(-50%, -50%) rotate(180deg) scale(1.5); opacity: 1; }
    100% { transform: translate(-50%, -50%) rotate(360deg) scale(1); opacity: 0.8; }
}
@keyframes dy-diamond-sparkle {
    0% { transform: scale(0) rotate(-720deg); opacity: 0; filter: brightness(5) hue-rotate(0deg); }
    50% { transform: scale(1.4) rotate(30deg); opacity: 1; filter: brightness(2) hue-rotate(20deg); }
    70% { transform: scale(0.9) rotate(-15deg); filter: brightness(1.5) hue-rotate(0deg); }
    100% { transform: scale(1) rotate(0deg); opacity: 1; filter: brightness(1); }
}
@keyframes dy-diamond-shine {
    0%, 100% { filter: brightness(1) drop-shadow(0 0 70px rgba(187,222,251,1)); }
    50% { filter: brightness(2) drop-shadow(0 0 150px rgba(255,255,255,1)); }
}

/* 城堡：史诗级拔地而起+光柱冲天+震撼登场 */
.dy-gift-effect-item-big.dy-gift-effect-castle .dy-ge-gift-wrap::before {
    content: '✨🏰✨';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 60px;
    animation: dy-castle-magic 2s ease-out forwards;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-castle .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-castle .dy-ge-gift-img {
    font-size: 300px !important;
    animation: dy-castle-rise 1.8s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-castle-shine 0.8s ease-in-out 1.8s 3 both !important;
    filter: drop-shadow(0 0 50px rgba(158, 158, 158, 0.7)) drop-shadow(0 0 100px rgba(189, 189, 189, 0.5)) drop-shadow(0 15px 50px rgba(0,0,0,0.5)) !important;
}
@keyframes dy-castle-magic {
    0% { transform: translate(-50%, 100px) scale(0); opacity: 0; }
    30% { transform: translate(-50%, -30px) scale(1.3); opacity: 1; }
    100% { transform: translate(-50%, -180px) scale(2); opacity: 0; }
}
@keyframes dy-castle-rise {
    0% { transform: translateY(250px) scale(0.15); opacity: 0; filter: blur(15px) brightness(2); }
    40% { transform: translateY(-30px) scale(1.25); opacity: 1; filter: blur(0) brightness(1.3); }
    60% { transform: translateY(15px) scale(0.95); filter: brightness(1.1); }
    80% { transform: translateY(-8px) scale(1.05); }
    100% { transform: translateY(0) scale(1); opacity: 1; filter: brightness(1); }
}
@keyframes dy-castle-shine {
    0%, 100% { filter: brightness(1); }
    50% { filter: brightness(1.4); }
}

/* 飞机：超级冲刺飞入+尾迹+音爆效果 */
.dy-gift-effect-item-big.dy-gift-effect-plane .dy-ge-gift-wrap::before {
    content: '💨💨💨';
    position: absolute;
    left: -150px;
    top: 50%;
    font-size: 50px;
    transform: translateY(-50%);
    animation: dy-plane-trail 1.5s ease-out forwards;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-plane .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-plane .dy-ge-gift-img {
    font-size: 280px !important;
    animation: dy-plane-fly-in 1.8s cubic-bezier(0.16, 1, 0.3, 1) forwards, dy-plane-hover 2s ease-in-out 1.8s infinite both !important;
    filter: drop-shadow(0 0 60px rgba(33, 150, 243, 0.8)) drop-shadow(0 0 100px rgba(100, 181, 246, 0.5)) drop-shadow(0 15px 40px rgba(0,0,0,0.4)) !important;
}
@keyframes dy-plane-trail {
    0% { opacity: 1; transform: translateY(-50%) translateX(0); }
    100% { opacity: 0; transform: translateY(-50%) translateX(-200px); }
}
@keyframes dy-plane-fly-in {
    0% { transform: translateX(-250%) scale(0.3) rotate(-30deg); opacity: 0; filter: blur(15px); }
    30% { opacity: 1; filter: blur(5px); }
    60% { transform: translateX(10%) scale(1.15) rotate(8deg); filter: blur(0); }
    80% { transform: translateX(-5%) scale(0.98) rotate(-3deg); }
    100% { transform: translateX(0) scale(1) rotate(0deg); opacity: 1; }
}
@keyframes dy-plane-hover {
    0%, 100% { transform: translateY(0) rotate(0deg); }
    50% { transform: translateY(-15px) rotate(3deg); }
}

/* 火箭：超级冲天+火焰喷射+震屏效果 */
.dy-gift-effect-item-big.dy-gift-effect-rocket .dy-ge-gift-wrap::before {
    content: '🔥🔥🔥🔥🔥';
    position: absolute;
    left: 50%;
    bottom: -80px;
    font-size: 60px;
    transform: translateX(-50%);
    animation: dy-rocket-fire 0.15s ease-in-out infinite, dy-rocket-fire-fade 2s ease-out forwards;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-rocket .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-rocket .dy-ge-gift-img {
    font-size: 300px !important;
    animation: dy-rocket-launch 1.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-rocket-shake 0.1s ease-in-out 0s 15 both !important;
    filter: drop-shadow(0 0 70px rgba(255, 87, 34, 0.9)) drop-shadow(0 0 120px rgba(255, 152, 0, 0.6)) drop-shadow(0 0 180px rgba(255, 235, 59, 0.3)) !important;
}
@keyframes dy-rocket-fire {
    0%, 100% { transform: translateX(-50%) scale(1); opacity: 0.9; }
    50% { transform: translateX(-50%) scale(1.3); opacity: 1; }
}
@keyframes dy-rocket-fire-fade {
    0% { opacity: 1; }
    70% { opacity: 1; }
    100% { opacity: 0; }
}
@keyframes dy-rocket-launch {
    0% { transform: translateY(300px) scale(0.2); opacity: 0; filter: blur(15px) brightness(3); }
    40% { transform: translateY(-50px) scale(1.3); opacity: 1; filter: blur(0) brightness(1.5); }
    60% { transform: translateY(20px) scale(0.95); filter: brightness(1.2); }
    80% { transform: translateY(-10px) scale(1.08); }
    100% { transform: translateY(0) scale(1); opacity: 1; filter: brightness(1); }
}
@keyframes dy-rocket-shake {
    0%, 100% { transform: translateX(0); }
    25% { transform: translateX(-5px); }
    75% { transform: translateX(5px); }
}

/* 游艇：豪华驶入+水波纹+海浪效果 */
.dy-gift-effect-item-big.dy-gift-effect-yacht .dy-ge-gift-wrap::before {
    content: '🌊🌊🌊';
    position: absolute;
    left: 50%;
    bottom: -40px;
    font-size: 55px;
    transform: translateX(-50%);
    animation: dy-yacht-waves 2s ease-in-out infinite;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-yacht .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-yacht .dy-ge-gift-img {
    font-size: 280px !important;
    animation: dy-yacht-sail 2s cubic-bezier(0.16, 1, 0.3, 1) forwards, dy-yacht-rock 2.5s ease-in-out 2s infinite both !important;
    filter: drop-shadow(0 0 50px rgba(33, 150, 243, 0.7)) drop-shadow(0 0 100px rgba(100, 181, 246, 0.4)) drop-shadow(0 15px 40px rgba(0,0,0,0.4)) !important;
}
@keyframes dy-yacht-waves {
    0%, 100% { transform: translateX(-50%) translateY(0); opacity: 0.8; }
    50% { transform: translateX(-50%) translateY(-10px); opacity: 1; }
}
@keyframes dy-yacht-sail {
    0% { transform: translateX(200%) scale(0.3) rotate(10deg); opacity: 0; filter: blur(10px); }
    50% { transform: translateX(-10%) scale(1.15) rotate(-5deg); opacity: 1; filter: blur(0); }
    70% { transform: translateX(5%) scale(0.98) rotate(3deg); }
    100% { transform: translateX(0) scale(1) rotate(0deg); opacity: 1; }
}
@keyframes dy-yacht-rock {
    0%, 100% { transform: rotate(0deg) translateY(0); }
    25% { transform: rotate(-3deg) translateY(-5px); }
    75% { transform: rotate(3deg) translateY(-5px); }
}

/* 皇冠：帝王降临+金光万丈+尊贵加冕 */
.dy-gift-effect-item-big.dy-gift-effect-crown .dy-ge-gift-wrap::before {
    content: '✨👑✨';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 60px;
    animation: dy-crown-shine 2s linear infinite;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-crown .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-crown .dy-ge-gift-img {
    font-size: 300px !important;
    animation: dy-crown-drop 1.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-crown-glow 0.6s ease-in-out 1.5s 4 both !important;
    filter: drop-shadow(0 0 70px rgba(255, 193, 7, 0.9)) drop-shadow(0 0 120px rgba(255, 235, 59, 0.6)) drop-shadow(0 0 180px rgba(255, 215, 0, 0.3)) !important;
}
@keyframes dy-crown-shine {
    0% { transform: translate(-50%, -50%) rotate(0deg) scale(1); opacity: 0.8; }
    50% { transform: translate(-50%, -50%) rotate(180deg) scale(1.3); opacity: 1; }
    100% { transform: translate(-50%, -50%) rotate(360deg) scale(1); opacity: 0.8; }
}
@keyframes dy-crown-drop {
    0% { transform: translateY(-200px) scale(0.3) rotate(-30deg); opacity: 0; filter: brightness(3) blur(10px); }
    40% { transform: translateY(30px) scale(1.3) rotate(10deg); opacity: 1; filter: brightness(1.5) blur(0); }
    60% { transform: translateY(-15px) scale(0.95) rotate(-5deg); filter: brightness(1.2); }
    80% { transform: translateY(8px) scale(1.05) rotate(3deg); }
    100% { transform: translateY(0) scale(1) rotate(0deg); opacity: 1; filter: brightness(1); }
}
@keyframes dy-crown-glow {
    0%, 100% { filter: brightness(1) drop-shadow(0 0 70px gold); }
    50% { filter: brightness(1.6) drop-shadow(0 0 150px yellow); }
}

/* 梦幻城堡：终极魔法显现+仙境光环+粒子环绕 */
.dy-gift-effect-item-big.dy-gift-effect-dream_castle .dy-ge-gift-wrap::before {
    content: '🏰✨🌟✨🏰';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 55px;
    animation: dy-dreamcastle-stars 3s linear infinite;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-dream_castle .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-dream_castle .dy-ge-gift-img {
    font-size: 320px !important;
    animation: dy-dreamcastle-appear 1.6s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-dreamcastle-float 3s ease-in-out 1.6s infinite both !important;
    filter: drop-shadow(0 0 80px rgba(156, 39, 176, 0.9)) drop-shadow(0 0 140px rgba(233, 30, 99, 0.6)) drop-shadow(0 0 200px rgba(63, 81, 181, 0.3)) !important;
}
@keyframes dy-dreamcastle-stars {
    0% { transform: translate(-50%, -50%) rotate(0deg) scale(1); opacity: 0.9; }
    50% { transform: translate(-50%, -50%) rotate(180deg) scale(1.4); opacity: 1; }
    100% { transform: translate(-50%, -50%) rotate(360deg) scale(1); opacity: 0.9; }
}
@keyframes dy-dreamcastle-appear {
    0% { transform: scale(0) rotate(-540deg); opacity: 0; filter: brightness(4) blur(15px) hue-rotate(0deg); }
    40% { transform: scale(1.4) rotate(20deg); opacity: 1; filter: brightness(1.8) blur(0) hue-rotate(30deg); }
    60% { transform: scale(0.9) rotate(-10deg); filter: brightness(1.3) hue-rotate(0deg); }
    80% { transform: scale(1.1) rotate(5deg); }
    100% { transform: scale(1) rotate(0deg); opacity: 1; filter: brightness(1) hue-rotate(0deg); }
}
@keyframes dy-dreamcastle-float {
    0%, 100% { transform: translateY(0) rotate(0deg); filter: brightness(1); }
    50% { transform: translateY(-25px) rotate(3deg); filter: brightness(1.2); }
}

/* 星空之约：超级星爆+银河闪烁+宇宙光环 */
.dy-gift-effect-item-big.dy-gift-effect-star_sky .dy-ge-gift-wrap::before {
    content: '⭐🌟✨💫⭐🌟✨💫';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 50px;
    animation: dy-starsky-galaxy 3s linear infinite;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-star_sky .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-star_sky .dy-ge-gift-img {
    font-size: 320px !important;
    animation: dy-starsky-twinkle 1.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-starsky-sparkle 0.25s ease-in-out 1.5s 12 both !important;
    filter: drop-shadow(0 0 80px rgba(103, 58, 183, 1)) drop-shadow(0 0 140px rgba(63, 81, 181, 0.7)) drop-shadow(0 0 200px rgba(255, 255, 255, 0.5)) !important;
}
@keyframes dy-starsky-galaxy {
    0% { transform: translate(-50%, -50%) rotate(0deg) scale(1); opacity: 0.8; }
    50% { transform: translate(-50%, -50%) rotate(180deg) scale(1.6); opacity: 1; }
    100% { transform: translate(-50%, -50%) rotate(360deg) scale(1); opacity: 0.8; }
}
@keyframes dy-starsky-twinkle {
    0% { transform: scale(0) rotate(-720deg); opacity: 0; filter: brightness(5) blur(15px); }
    50% { transform: scale(1.4) rotate(30deg); opacity: 1; filter: brightness(2) blur(0); }
    70% { transform: scale(0.9) rotate(-15deg); filter: brightness(1.3); }
    100% { transform: scale(1) rotate(0deg); opacity: 1; filter: brightness(1); }
}
@keyframes dy-starsky-sparkle {
    0%, 100% { transform: scale(1) rotate(0deg); filter: brightness(1) hue-rotate(0deg); }
    50% { transform: scale(1.15) rotate(5deg); filter: brightness(1.6) hue-rotate(20deg); }
}

/* 抱抱：超级温暖拥抱+爱心环绕+暖光效果 */
.dy-gift-effect-item-big.dy-gift-effect-hug .dy-ge-gift-wrap::before {
    content: '💕💖💕';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 45px;
    animation: dy-hug-hearts 2.5s ease-out forwards;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-hug .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-hug .dy-ge-gift-img {
    font-size: 260px !important;
    animation: dy-hug-warm 1.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-hug-squeeze 0.5s ease-in-out 1.4s 4 both !important;
    filter: drop-shadow(0 0 50px rgba(255, 182, 193, 0.8)) drop-shadow(0 0 100px rgba(255, 105, 180, 0.5)) !important;
}
@keyframes dy-hug-hearts {
    0% { transform: translate(-50%, -50%) scale(0); opacity: 0; }
    30% { transform: translate(-50%, -50%) scale(1.3); opacity: 1; }
    100% { transform: translate(-50%, -100px) scale(2) rotate(180deg); opacity: 0; }
}
@keyframes dy-hug-warm {
    0% { transform: scale(0) rotate(-180deg); opacity: 0; filter: brightness(2); }
    50% { transform: scale(1.3) rotate(10deg); opacity: 1; filter: brightness(1.4); }
    70% { transform: scale(0.95) rotate(-5deg); }
    100% { transform: scale(1) rotate(0deg); opacity: 1; filter: brightness(1); }
}
@keyframes dy-hug-squeeze {
    0%, 100% { transform: scale(1); }
    50% { transform: scale(1.15); }
}

/* 亲亲：甜蜜飞吻+爱心喷发+粉色梦幻 */
.dy-gift-effect-item-big.dy-gift-effect-kiss .dy-ge-gift-wrap::before {
    content: '💋💕💋💕💋';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 40px;
    animation: dy-kiss-hearts 2.5s ease-out forwards;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-kiss .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-kiss .dy-ge-gift-img {
    font-size: 260px !important;
    animation: dy-kiss-pop 1.2s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-kiss-pulse 0.4s ease-in-out 1.2s 6 both !important;
    filter: drop-shadow(0 0 50px rgba(244, 143, 177, 0.9)) drop-shadow(0 0 100px rgba(233, 30, 99, 0.5)) !important;
}
@keyframes dy-kiss-hearts {
    0% { transform: translate(-50%, -50%) scale(0) rotate(0deg); opacity: 0; }
    30% { transform: translate(-50%, -50%) scale(1.4) rotate(90deg); opacity: 1; }
    100% { transform: translate(-50%, -120px) scale(2.5) rotate(270deg); opacity: 0; }
}
@keyframes dy-kiss-pop {
    0% { transform: scale(0) rotate(-180deg); opacity: 0; filter: brightness(2.5); }
    40% { transform: scale(1.4) rotate(15deg); opacity: 1; filter: brightness(1.5); }
    60% { transform: scale(0.9) rotate(-8deg); }
    80% { transform: scale(1.1) rotate(4deg); }
    100% { transform: scale(1) rotate(0deg); opacity: 1; filter: brightness(1); }
}
@keyframes dy-kiss-pulse {
    0%, 100% { transform: scale(1); filter: brightness(1); }
    50% { transform: scale(1.2); filter: brightness(1.3); }
}

/* 幸运星：超级旋转+星光四射+幸运光环 */
.dy-gift-effect-item-big.dy-gift-effect-lucky_star .dy-ge-gift-wrap::before {
    content: '⭐✨⭐✨⭐';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 45px;
    animation: dy-luckystar-orbit 2s linear infinite;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-lucky_star .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-lucky_star .dy-ge-gift-img {
    font-size: 280px !important;
    animation: dy-luckystar-spin 1.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-luckystar-shine 0.3s ease-in-out 1.5s 8 both !important;
    filter: drop-shadow(0 0 60px rgba(255, 235, 59, 0.9)) drop-shadow(0 0 120px rgba(255, 193, 7, 0.6)) !important;
}
@keyframes dy-luckystar-orbit {
    0% { transform: translate(-50%, -50%) rotate(0deg) scale(1); opacity: 0.8; }
    50% { transform: translate(-50%, -50%) rotate(180deg) scale(1.3); opacity: 1; }
    100% { transform: translate(-50%, -50%) rotate(360deg) scale(1); opacity: 0.8; }
}
@keyframes dy-luckystar-spin {
    0% { transform: scale(0) rotate(-1080deg); opacity: 0; filter: brightness(4); }
    50% { transform: scale(1.35) rotate(30deg); opacity: 1; filter: brightness(1.8); }
    70% { transform: scale(0.9) rotate(-15deg); filter: brightness(1.3); }
    100% { transform: scale(1) rotate(0deg); opacity: 1; filter: brightness(1); }
}
@keyframes dy-luckystar-shine {
    0%, 100% { transform: scale(1) rotate(0deg); filter: brightness(1); }
    50% { transform: scale(1.15) rotate(15deg); filter: brightness(1.6); }
}

/* 冰淇淋：清凉飘落+冰晶效果+彩虹光泽 */
.dy-gift-effect-item-big.dy-gift-effect-ice_cream .dy-ge-gift-wrap::before {
    content: '❄️✨❄️';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 45px;
    animation: dy-icecream-frost 2.5s ease-out forwards;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-ice_cream .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-ice_cream .dy-ge-gift-img {
    font-size: 260px !important;
    animation: dy-icecream-cool 1.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-icecream-wobble 0.4s ease-in-out 1.4s 5 both !important;
    filter: drop-shadow(0 0 50px rgba(179, 229, 252, 0.8)) drop-shadow(0 0 100px rgba(129, 212, 250, 0.5)) !important;
}
@keyframes dy-icecream-frost {
    0% { transform: translate(-50%, -80px) scale(0); opacity: 0; }
    30% { transform: translate(-50%, -50%) scale(1.2); opacity: 1; }
    100% { transform: translate(-50%, 50px) scale(1.8); opacity: 0; }
}
@keyframes dy-icecream-cool {
    0% { transform: translateY(-150px) scale(0.3) rotate(20deg); opacity: 0; filter: blur(10px) brightness(2); }
    50% { transform: translateY(20px) scale(1.2) rotate(-10deg); opacity: 1; filter: blur(0) brightness(1.4); }
    70% { transform: translateY(-10px) scale(0.95) rotate(5deg); filter: brightness(1.2); }
    100% { transform: translateY(0) scale(1) rotate(0deg); opacity: 1; filter: brightness(1); }
}
@keyframes dy-icecream-wobble {
    0%, 100% { transform: rotate(0deg); }
    25% { transform: rotate(-8deg); }
    75% { transform: rotate(8deg); }
}

/* 口红：魅惑红唇+光泽闪耀+时尚气场 */
.dy-gift-effect-item-big.dy-gift-effect-lipstick .dy-ge-gift-wrap::before {
    content: '💋✨💋';
    position: absolute;
    left: 50%;
    top: 50%;
    font-size: 45px;
    animation: dy-lipstick-shine 2.5s ease-out forwards;
    pointer-events: none;
}
.dy-gift-effect-item-big.dy-gift-effect-lipstick .dy-ge-gift-emoji,
.dy-gift-effect-item-big.dy-gift-effect-lipstick .dy-ge-gift-img {
    font-size: 240px !important;
    animation: dy-lipstick-gloss 1.3s cubic-bezier(0.34, 1.56, 0.64, 1) forwards, dy-lipstick-glow 0.5s ease-in-out 1.3s 4 both !important;
    filter: drop-shadow(0 0 50px rgba(244, 67, 54, 0.8)) drop-shadow(0 0 100px rgba(233, 30, 99, 0.5)) !important;
}
@keyframes dy-lipstick-shine {
    0% { transform: translate(-50%, -50%) scale(0) rotate(0deg); opacity: 0; }
    30% { transform: translate(-50%, -50%) scale(1.3) rotate(90deg); opacity: 1; }
    100% { transform: translate(-50%, -50%) scale(2) rotate(270deg); opacity: 0; }
}
@keyframes dy-lipstick-gloss {
    0% { transform: scale(0) rotate(-180deg); opacity: 0; filter: brightness(2.5); }
    40% { transform: scale(1.3) rotate(15deg); opacity: 1; filter: brightness(1.5); }
    60% { transform: scale(0.9) rotate(-8deg); }
    80% { transform: scale(1.08) rotate(4deg); }
    100% { transform: scale(1) rotate(0deg); opacity: 1; filter: brightness(1); }
}
@keyframes dy-lipstick-glow {
    0%, 100% { filter: brightness(1) drop-shadow(0 0 50px red); }
    50% { filter: brightness(1.4) drop-shadow(0 0 100px crimson); }
}

/* ---------- 打赏金额炫酷特效系统（基于金额分级） ---------- */
/* 基础打赏特效容器 */
.dy-tip-effect {
    position: absolute !important;
    left: 50% !important;
    top: 50% !important;
    width: 100% !important;
    height: 100% !important;
    transform: translate(-50%, -50%) !important;
    padding: 0 !important;
    background: none !important;
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    justify-content: center !important;
    pointer-events: none !important;
    z-index: 9999 !important;
    overflow: hidden !important;
}

/* 打赏标签 */
.dy-tip-effect-label {
    position: relative;
    font-size: 28px;
    font-weight: 800;
    letter-spacing: 0.2em;
    margin-bottom: 8px;
    z-index: 10;
}

/* 打赏金额 */
.dy-tip-effect-amount {
    position: relative;
    font-size: 120px;
    line-height: 1;
    font-weight: 900;
    letter-spacing: 0.05em;
    z-index: 10;
}

/* 粒子容器 */
.dy-tip-particles {
    position: absolute;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    pointer-events: none;
    overflow: hidden;
}

.dy-tip-particle {
    position: absolute;
    pointer-events: none;
    will-change: transform, opacity;
}

/* ============== 级别1: 小额打赏 (<100) - 金币雨 ============== */
.dy-tip-effect.dy-tip-level-1 {
    animation: dy-tip-fade-basic 5s ease-out forwards;
}
.dy-tip-effect.dy-tip-level-1 .dy-tip-effect-label {
    color: #ffd700;
    text-shadow: 0 0 20px rgba(255, 215, 0, 0.8), 0 2px 4px rgba(0,0,0,0.5);
    animation: dy-tip-label-bounce 0.6s ease-out;
}
.dy-tip-effect.dy-tip-level-1 .dy-tip-effect-amount {
    color: #fff;
    text-shadow: 
        0 0 30px rgba(255, 215, 0, 1),
        0 0 60px rgba(255, 193, 7, 0.8),
        0 4px 0 #e6b800,
        0 8px 15px rgba(0,0,0,0.4);
    animation: dy-tip-amount-pop 0.8s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.dy-tip-effect.dy-tip-level-1::before {
    content: '';
    position: absolute;
    width: 300px;
    height: 300px;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(255, 215, 0, 0.3) 0%, transparent 70%);
    animation: dy-tip-glow-basic 2s ease-in-out infinite;
}

/* ============== 级别2: 中额打赏 (100-499) - 钻石闪耀 ============== */
.dy-tip-effect.dy-tip-level-2 {
    animation: dy-tip-fade-diamond 6s ease-out forwards;
}
.dy-tip-effect.dy-tip-level-2 .dy-tip-effect-label {
    color: #00d4ff;
    text-shadow: 0 0 30px rgba(0, 212, 255, 1), 0 0 60px rgba(138, 43, 226, 0.6), 0 2px 4px rgba(0,0,0,0.5);
    animation: dy-tip-label-shine 0.8s ease-out, dy-tip-shimmer 1s ease-in-out 0.8s infinite;
}
.dy-tip-effect.dy-tip-level-2 .dy-tip-effect-amount {
    font-size: 140px;
    background: linear-gradient(135deg, #00d4ff 0%, #a855f7 25%, #00d4ff 50%, #ec4899 75%, #00d4ff 100%);
    background-size: 400% 400%;
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
    filter: drop-shadow(0 0 30px rgba(0, 212, 255, 0.8)) drop-shadow(0 4px 8px rgba(0,0,0,0.5));
    animation: dy-tip-amount-diamond 1s cubic-bezier(0.34, 1.56, 0.64, 1), dy-tip-gradient-shift 2s ease-in-out infinite;
}
.dy-tip-effect.dy-tip-level-2::before {
    content: '';
    position: absolute;
    width: 400px;
    height: 400px;
    background: 
        radial-gradient(circle at 30% 30%, rgba(0, 212, 255, 0.4) 0%, transparent 50%),
        radial-gradient(circle at 70% 70%, rgba(168, 85, 247, 0.4) 0%, transparent 50%);
    animation: dy-tip-diamond-pulse 1.5s ease-in-out infinite;
}
.dy-tip-effect.dy-tip-level-2::after {
    content: '✦';
    position: absolute;
    font-size: 80px;
    color: rgba(0, 212, 255, 0.6);
    animation: dy-tip-star-spin 3s linear infinite;
}

/* ============== 级别3: 大额打赏 (500-999) - 火焰爆炸 ============== */
.dy-tip-effect.dy-tip-level-3 {
    animation: dy-tip-fade-fire 7s ease-out forwards;
}
.dy-tip-effect.dy-tip-level-3 .dy-tip-effect-label {
    color: #ff6b35;
    text-shadow: 0 0 30px rgba(255, 107, 53, 1), 0 0 60px rgba(255, 0, 0, 0.8), 0 2px 4px rgba(0,0,0,0.6);
    animation: dy-tip-label-fire 0.6s ease-out, dy-tip-fire-flicker 0.15s ease-in-out 0.6s infinite;
}
.dy-tip-effect.dy-tip-level-3 .dy-tip-effect-amount {
    font-size: 160px;
    color: #fff;
    text-shadow:
        0 0 40px rgba(255, 100, 0, 1),
        0 0 80px rgba(255, 50, 0, 1),
        0 0 120px rgba(255, 0, 0, 0.8),
        0 0 160px rgba(255, 100, 0, 0.6),
        0 4px 0 #ff4500,
        0 8px 0 #cc3700,
        0 12px 20px rgba(0,0,0,0.5);
    animation: dy-tip-amount-explode 1s cubic-bezier(0.34, 1.56, 0.64, 1), dy-tip-fire-pulse 0.3s ease-in-out 1s infinite;
}
.dy-tip-effect.dy-tip-level-3::before {
    content: '';
    position: absolute;
    width: 500px;
    height: 500px;
    background: radial-gradient(circle, rgba(255, 100, 0, 0.5) 0%, rgba(255, 50, 0, 0.3) 30%, rgba(255, 0, 0, 0.1) 60%, transparent 80%);
    animation: dy-tip-fire-burst 0.5s ease-out, dy-tip-fire-glow 1s ease-in-out 0.5s infinite;
}
.dy-tip-effect.dy-tip-level-3::after {
    content: '🔥';
    position: absolute;
    font-size: 100px;
    animation: dy-tip-emoji-bounce 0.8s ease-in-out infinite;
}

/* ============== 级别4: 超大额打赏 (≥1000) - 彩虹庆典全屏特效 ============== */
.dy-tip-effect.dy-tip-level-4 {
    animation: dy-tip-fade-epic 8s ease-out forwards;
    background: radial-gradient(ellipse at center, rgba(0,0,0,0.3) 0%, transparent 70%);
}
.dy-tip-effect.dy-tip-level-4 .dy-tip-effect-label {
    font-size: 36px;
    background: linear-gradient(90deg, #ff0000, #ff7f00, #ffff00, #00ff00, #0000ff, #4b0082, #8f00ff, #ff0000);
    background-size: 800% 100%;
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
    filter: drop-shadow(0 0 20px rgba(255,255,255,0.8)) drop-shadow(0 2px 4px rgba(0,0,0,0.5));
    animation: dy-tip-label-epic 1s cubic-bezier(0.34, 1.56, 0.64, 1), dy-tip-rainbow-flow 2s linear infinite;
}
.dy-tip-effect.dy-tip-level-4 .dy-tip-effect-amount {
    font-size: 200px;
    background: linear-gradient(135deg, #ff0080, #ff8c00, #40e0d0, #ff0080);
    background-size: 300% 300%;
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
    filter: 
        drop-shadow(0 0 40px rgba(255, 0, 128, 0.8))
        drop-shadow(0 0 80px rgba(64, 224, 208, 0.6))
        drop-shadow(0 6px 0 rgba(255, 140, 0, 0.8))
        drop-shadow(0 12px 25px rgba(0,0,0,0.5));
    animation: dy-tip-amount-epic 1.2s cubic-bezier(0.34, 1.56, 0.64, 1), dy-tip-epic-pulse 1.5s ease-in-out infinite;
}
.dy-tip-effect.dy-tip-level-4::before {
    content: '';
    position: absolute;
    width: 800px;
    height: 800px;
    background: 
        conic-gradient(from 0deg, 
            rgba(255,0,0,0.3), rgba(255,127,0,0.3), rgba(255,255,0,0.3), 
            rgba(0,255,0,0.3), rgba(0,0,255,0.3), rgba(75,0,130,0.3), 
            rgba(143,0,255,0.3), rgba(255,0,0,0.3));
    border-radius: 50%;
    animation: dy-tip-rainbow-spin 4s linear infinite;
    filter: blur(30px);
}
.dy-tip-effect.dy-tip-level-4::after {
    content: '🎉✨🌟💎👑🎊';
    position: absolute;
    font-size: 60px;
    letter-spacing: 20px;
    animation: dy-tip-celebration 1s ease-out, dy-tip-float-emojis 2s ease-in-out infinite;
}

/* 级别4专属：射线光芒 */
.dy-tip-effect.dy-tip-level-4 .dy-tip-rays {
    position: absolute;
    width: 100%;
    height: 100%;
}
.dy-tip-effect.dy-tip-level-4 .dy-tip-ray {
    position: absolute;
    left: 50%;
    top: 50%;
    width: 4px;
    height: 300px;
    transform-origin: center bottom;
    background: linear-gradient(to top, rgba(255,255,255,0) 0%, rgba(255,255,255,0.8) 50%, rgba(255,255,255,0) 100%);
    animation: dy-tip-ray-pulse 1.5s ease-in-out infinite;
}

/* ============== 动画关键帧 ============== */
/* 基础淡入淡出 */
@keyframes dy-tip-fade-basic {
    0% { opacity: 0; }
    10% { opacity: 1; }
    80% { opacity: 1; }
    100% { opacity: 0; }
}
@keyframes dy-tip-fade-diamond {
    0% { opacity: 0; }
    10% { opacity: 1; }
    85% { opacity: 1; }
    100% { opacity: 0; }
}
@keyframes dy-tip-fade-fire {
    0% { opacity: 0; }
    8% { opacity: 1; }
    88% { opacity: 1; }
    100% { opacity: 0; }
}
@keyframes dy-tip-fade-epic {
    0% { opacity: 0; }
    5% { opacity: 1; }
    90% { opacity: 1; }
    100% { opacity: 0; }
}

/* 标签动画 */
@keyframes dy-tip-label-bounce {
    0% { opacity: 0; transform: translateY(-30px) scale(0.5); }
    60% { transform: translateY(5px) scale(1.1); }
    100% { opacity: 1; transform: translateY(0) scale(1); }
}
@keyframes dy-tip-label-shine {
    0% { opacity: 0; transform: translateY(-40px) scale(0.3); filter: blur(10px); }
    50% { transform: translateY(10px) scale(1.2); }
    100% { opacity: 1; transform: translateY(0) scale(1); filter: blur(0); }
}
@keyframes dy-tip-label-fire {
    0% { opacity: 0; transform: scale(0.3) rotate(-10deg); }
    50% { transform: scale(1.3) rotate(5deg); }
    100% { opacity: 1; transform: scale(1) rotate(0deg); }
}
@keyframes dy-tip-label-epic {
    0% { opacity: 0; transform: scale(0) rotate(-180deg); filter: blur(20px); }
    50% { transform: scale(1.5) rotate(10deg); }
    70% { transform: scale(0.9) rotate(-5deg); }
    100% { opacity: 1; transform: scale(1) rotate(0deg); filter: blur(0); }
}

/* 金额动画 */
@keyframes dy-tip-amount-pop {
    0% { opacity: 0; transform: scale(0.3); }
    50% { transform: scale(1.2); }
    70% { transform: scale(0.9); }
    100% { opacity: 1; transform: scale(1); }
}
@keyframes dy-tip-amount-diamond {
    0% { opacity: 0; transform: scale(0.2) rotate(-20deg); filter: blur(15px); }
    40% { transform: scale(1.3) rotate(5deg); }
    60% { transform: scale(0.95) rotate(-3deg); }
    100% { opacity: 1; transform: scale(1) rotate(0deg); filter: blur(0); }
}
@keyframes dy-tip-amount-explode {
    0% { opacity: 0; transform: scale(0.1); filter: blur(20px) brightness(3); }
    30% { transform: scale(1.5); filter: blur(5px) brightness(2); }
    50% { transform: scale(0.85); }
    70% { transform: scale(1.1); }
    100% { opacity: 1; transform: scale(1); filter: blur(0) brightness(1); }
}
@keyframes dy-tip-amount-epic {
    0% { opacity: 0; transform: scale(0) rotate(-360deg); filter: blur(30px); }
    30% { transform: scale(1.8) rotate(20deg); filter: blur(10px); }
    50% { transform: scale(0.8) rotate(-10deg); }
    70% { transform: scale(1.2) rotate(5deg); }
    100% { opacity: 1; transform: scale(1) rotate(0deg); filter: blur(0); }
}

/* 闪烁效果 */
@keyframes dy-tip-shimmer {
    0%, 100% { filter: brightness(1) drop-shadow(0 0 30px rgba(0, 212, 255, 1)); }
    50% { filter: brightness(1.5) drop-shadow(0 0 50px rgba(168, 85, 247, 1)); }
}
@keyframes dy-tip-fire-flicker {
    0%, 100% { filter: brightness(1); transform: scale(1); }
    50% { filter: brightness(1.3); transform: scale(1.02); }
}
@keyframes dy-tip-fire-pulse {
    0%, 100% { text-shadow: 0 0 40px rgba(255, 100, 0, 1), 0 0 80px rgba(255, 50, 0, 1); transform: scale(1); }
    50% { text-shadow: 0 0 60px rgba(255, 150, 0, 1), 0 0 120px rgba(255, 100, 0, 1); transform: scale(1.03); }
}
@keyframes dy-tip-epic-pulse {
    0%, 100% { filter: drop-shadow(0 0 40px rgba(255, 0, 128, 0.8)); transform: scale(1); }
    50% { filter: drop-shadow(0 0 80px rgba(64, 224, 208, 1)); transform: scale(1.05); }
}

/* 背景光晕 */
@keyframes dy-tip-glow-basic {
    0%, 100% { transform: scale(1); opacity: 0.6; }
    50% { transform: scale(1.3); opacity: 1; }
}
@keyframes dy-tip-diamond-pulse {
    0%, 100% { transform: scale(1) rotate(0deg); opacity: 0.8; }
    50% { transform: scale(1.2) rotate(10deg); opacity: 1; }
}
@keyframes dy-tip-fire-burst {
    0% { transform: scale(0.3); opacity: 0; }
    50% { opacity: 1; }
    100% { transform: scale(1); opacity: 0.8; }
}
@keyframes dy-tip-fire-glow {
    0%, 100% { transform: scale(1); filter: brightness(1); }
    50% { transform: scale(1.15); filter: brightness(1.3); }
}
@keyframes dy-tip-rainbow-spin {
    from { transform: rotate(0deg); }
    to { transform: rotate(360deg); }
}

/* 装饰元素动画 */
@keyframes dy-tip-star-spin {
    from { transform: rotate(0deg) scale(1); opacity: 0.6; }
    50% { transform: rotate(180deg) scale(1.5); opacity: 1; }
    to { transform: rotate(360deg) scale(1); opacity: 0.6; }
}
@keyframes dy-tip-emoji-bounce {
    0%, 100% { transform: translateY(0) scale(1); }
    50% { transform: translateY(-20px) scale(1.2); }
}
@keyframes dy-tip-celebration {
    0% { transform: scale(0) rotate(-180deg); opacity: 0; }
    50% { transform: scale(1.5) rotate(20deg); }
    100% { transform: scale(1) rotate(0deg); opacity: 1; }
}
@keyframes dy-tip-float-emojis {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-15px); }
}
@keyframes dy-tip-gradient-shift {
    0% { background-position: 0% 50%; }
    50% { background-position: 100% 50%; }
    100% { background-position: 0% 50%; }
}
@keyframes dy-tip-rainbow-flow {
    from { background-position: 0% 50%; }
    to { background-position: 800% 50%; }
}
@keyframes dy-tip-ray-pulse {
    0%, 100% { opacity: 0.3; transform: scaleY(0.8); }
    50% { opacity: 0.8; transform: scaleY(1.2); }
}

/* 粒子动画 */
@keyframes dy-tip-particle-rise {
    0% { transform: translateY(0) translateX(0) scale(1); opacity: 1; }
    100% { transform: translateY(-200px) translateX(var(--end-x, 0)) scale(0); opacity: 0; }
}
@keyframes dy-tip-particle-explode {
    0% { transform: translate(0, 0) scale(1); opacity: 1; }
    100% { transform: translate(var(--end-x, 100px), var(--end-y, -100px)) scale(0.5); opacity: 0; }
}
@keyframes dy-tip-particle-fall {
    0% { transform: translateY(0) rotate(0deg) scale(0.5); opacity: 0; }
    10% { opacity: 1; transform: translateY(20px) rotate(72deg) scale(1); }
    100% { transform: translateY(400px) rotate(720deg) scale(0.8); opacity: 0; }
}

/* 震屏效果 */
@keyframes dy-screen-shake {
    0%, 100% { transform: translateX(0); }
    10%, 30%, 50%, 70%, 90% { transform: translateX(-5px); }
    20%, 40%, 60%, 80% { transform: translateX(5px); }
}

/* 移动端适配 */
@media (max-width: 768px) {
    .dy-tip-effect.dy-tip-level-1 .dy-tip-effect-amount { font-size: 80px; }
    .dy-tip-effect.dy-tip-level-2 .dy-tip-effect-amount { font-size: 90px; }
    .dy-tip-effect.dy-tip-level-3 .dy-tip-effect-amount { font-size: 100px; }
    .dy-tip-effect.dy-tip-level-4 .dy-tip-effect-amount { font-size: 120px; }
    .dy-tip-effect.dy-tip-level-4 .dy-tip-effect-label { font-size: 24px; }
    .dy-tip-effect.dy-tip-level-4::after { font-size: 40px; letter-spacing: 10px; }
}

/* 兼容旧的打赏特效关键帧（保持向后兼容） */
@keyframes dy-tip-effect-fade {
    0% { opacity: 0; transform: translate(-50%, -50%) scale(0.3) rotate(-10deg); filter: blur(10px); }
    20% { opacity: 1; transform: translate(-50%, -50%) scale(1.1) rotate(3deg); filter: blur(0); }
    30% { transform: translate(-50%, -50%) scale(0.95) rotate(-2deg); }
    40% { transform: translate(-50%, -50%) scale(1.02) rotate(1deg); }
    50% { transform: translate(-50%, -50%) scale(1) rotate(0deg); }
    85% { opacity: 1; transform: translate(-50%, -50%) scale(1); }
    100% { opacity: 0; transform: translate(-50%, -50%) scale(1.15) rotate(5deg); filter: blur(5px); }
}
@keyframes dy-tip-coins {
    0% { transform: translate(-50%, -50%) rotate(0deg) scale(1); opacity: 0.8; }
    50% { transform: translate(-50%, -50%) rotate(180deg) scale(1.3); opacity: 1; }
    100% { transform: translate(-50%, -50%) rotate(360deg) scale(1); opacity: 0.8; }
}
@keyframes dy-tip-glow-pulse {
    0%, 100% { transform: scale(1); opacity: 0.8; box-shadow: 0 0 150px rgba(255, 215, 0, 0.6), 0 0 250px rgba(255, 193, 7, 0.4); }
    50% { transform: scale(1.2); opacity: 1; box-shadow: 0 0 200px rgba(255, 215, 0, 0.8), 0 0 350px rgba(255, 193, 7, 0.5); }
}
@keyframes dy-tip-label-in {
    0% { opacity: 0; transform: translateY(40px) scale(0.5); filter: blur(5px); }
    60% { transform: translateY(-10px) scale(1.1); }
    100% { opacity: 1; transform: translateY(0) scale(1); filter: blur(0); }
}
@keyframes dy-tip-label-glow {
    0%, 100% { text-shadow: 0 0 30px rgba(255, 215, 0, 1), 0 0 60px rgba(255, 193, 7, 0.8); filter: brightness(1); }
    50% { text-shadow: 0 0 50px rgba(255, 255, 200, 1), 0 0 100px rgba(255, 235, 59, 1); filter: brightness(1.3); }
}
@keyframes dy-tip-amount-in {
    0% { opacity: 0; transform: scale(0.2) rotate(-30deg); filter: blur(15px) brightness(3); }
    50% { transform: scale(1.15) rotate(5deg); filter: blur(0) brightness(1.5); }
    70% { transform: scale(0.95) rotate(-3deg); }
    100% { opacity: 1; transform: scale(1) rotate(0deg); filter: brightness(1); }
}
@keyframes dy-tip-amount-shine {
    0%, 100% { 
        text-shadow: 0 0 30px rgba(255,215,0,1), 0 0 60px rgba(255,193,7,1), 0 0 90px rgba(255,152,0,0.8), 0 0 120px rgba(255,193,7,0.6), 0 3px 0 #e6b800, 0 6px 0 #cc9900, 0 10px 20px rgba(0,0,0,0.5); 
        filter: brightness(1); 
        transform: scale(1);
    }
    50% { 
        text-shadow: 0 0 50px rgba(255,255,200,1), 0 0 100px rgba(255,235,59,1), 0 0 150px rgba(255,193,7,0.9), 0 0 200px rgba(255,215,0,0.7), 0 3px 0 #ffd700, 0 6px 0 #ffcc00, 0 12px 25px rgba(0,0,0,0.4); 
        filter: brightness(1.4); 
        transform: scale(1.05);
    }
}

/* 画质选择：右上角 */
.dy-quality-wrap {
    position: absolute;
    top: 12px;
    right: 80px;
    z-index: 10;
    display: flex;
    align-items: center;
    gap: 6px;
}
.dy-quality-label {
    color: rgba(255,255,255,.8);
    font-size: 12px;
    margin: 0;
}
.dy-quality-select {
    background: var(--dy-bar-bg);
    color: #fff;
    border: 1px solid var(--dy-border);
    border-radius: 4px;
    padding: 4px 8px;
    font-size: 12px;
}

/* 左侧弹幕/评论 overlay（抖音样式：半透明、从下往上滚） */
.dy-comment-overlay {
    position: absolute;
    left: 0;
    right: 70px;
    bottom: 70px;
    top: 56px;
    pointer-events: none;
    z-index: 5;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    padding: 0 12px 8px;
}
.dy-chat-messages {
    max-height: 50%;
    overflow-y: auto;
    overflow-x: hidden;
    display: flex;
    flex-direction: column;
    gap: 6px;
    min-height: 0;
}
.dy-chat-msg {
    background: rgba(0,0,0,.35);
    color: #fff;
    padding: 4px 10px;
    border-radius: 4px;
    font-size: 13px;
    line-height: 1.4;
    max-width: 85%;
    align-self: flex-start;
    pointer-events: auto;
}
.dy-chat-user {
    color: #fff;
    margin-right: 6px;
    text-shadow: 0 0 1px rgba(0,0,0,.8), 0 1px 2px rgba(0,0,0,.5);
}
.dy-chat-gift .dy-chat-user { color: #ffb74d; text-shadow: 0 0 1px rgba(0,0,0,.8), 0 1px 2px rgba(0,0,0,.5); }
.dy-chat-gift .dy-chat-gift-name { color: #D97706; font-weight: 600; }
.dy-chat-gift .dy-chat-gift-fixed-icon { color: #F59E0B; margin-right: 4px; font-size: 1em; vertical-align: middle; }

/* 平台等级灯牌（1-75 级，后台可配置颜色）— 数字白字+阴影保证任意背景都清晰 */
.dy-platform-level-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 18px;
    height: 16px;
    padding: 0 4px;
    border-radius: 8px;
    font-size: 10px;
    font-weight: 700;
    color: #fff;
    text-shadow: 0 0 1px rgba(0,0,0,.95), 0 1px 2px rgba(0,0,0,.7);
    margin-right: 4px;
    white-space: nowrap;
    vertical-align: middle;
}
/* 对主播等级灯牌（1-20 级，心形+数字）— 白字+阴影增强反差 */
.dy-streamer-level-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 2px;
    min-width: 20px;
    height: 16px;
    padding: 0 4px;
    border-radius: 8px;
    font-size: 10px;
    font-weight: 700;
    color: #fff;
    text-shadow: 0 0 1px rgba(0,0,0,.95), 0 1px 2px rgba(0,0,0,.7);
    border: 1.5px solid rgba(255,255,255,.9);
    margin-right: 4px;
    white-space: nowrap;
    vertical-align: middle;
}
.dy-streamer-level-badge .dy-streamer-level-num {
    line-height: 1;
}
.dy-streamer-level-badge i.fa-heart {
    font-size: 8px;
    opacity: 1;
    filter: drop-shadow(0 0 1px rgba(0,0,0,.8));
}

/* 粉丝灯牌样式（类抖音） */
.dy-fan-badge {
    display: inline-flex;
    align-items: center;
    padding: 1px 4px 1px 6px;
    border-radius: 10px;
    font-size: 10px;
    font-weight: 500;
    color: #fff;
    margin-right: 6px;
    white-space: nowrap;
    vertical-align: middle;
}
.dy-fan-badge .dy-badge-level {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 14px;
    height: 14px;
    background: rgba(0,0,0,.3);
    border-radius: 7px;
    margin-left: 3px;
    font-size: 9px;
    font-weight: 600;
    padding: 0 3px;
}
/* 房管灯牌样式 */
.dy-fan-badge-mod {
    background: linear-gradient(180deg, #ffc107 0%, #e0a800 100%) !important;
    color: #1a1a1a !important;
    font-weight: 600;
}
/* 主播灯牌：直播间聊天里主播发言显示「主播」+ 单独颜色 */
.dy-fan-badge-streamer {
    background: linear-gradient(180deg, #e67e22 0%, #d35400 100%) !important;
    color: #fff !important;
    font-weight: 600;
}
.dy-chat-msg-streamer .dy-chat-user {
    color: #e67e22;
    font-weight: 600;
}
.dy-gift-ico { margin-right: 4px; color: #ff6b9d; }

/* 礼物特效中的灯牌样式 */
.dy-ge-badge {
    font-size: 11px;
    padding: 2px 5px 2px 7px;
    margin-right: 8px;
}
.dy-ge-badge .dy-badge-level {
    min-width: 16px;
    height: 16px;
    font-size: 10px;
}

/* 排行榜中的灯牌样式 */
.dy-lb-badge {
    font-size: 10px;
    padding: 1px 4px 1px 5px;
    margin-right: 6px;
    flex-shrink: 0;
}
.dy-lb-badge .dy-badge-level {
    min-width: 13px;
    height: 13px;
    font-size: 9px;
}
.dy-leaderboard-item .dy-lb-badge,
.dy-lb-row .dy-lb-badge {
    margin-left: 0;
}
.dy-chat-system {
    background: transparent;
    color: rgba(255,255,255,.6);
}
.dy-chat-rules {
    color: var(--dy-text-secondary, rgba(255,255,255,.75));
}
.dy-chat-rules .dy-chat-system-text {
    color: inherit;
    font-size: 12px;
    padding: 2px 0;
}
.dy-chat-system .dy-chat-system-text { color: inherit; }

/* 新用户进房欢迎语：渐变 BG，醒目炫效 */
.dy-chat-welcome {
    background: linear-gradient(135deg, #667eea 0%, #764ba2 35%, #f093fb 100%) !important;
    color: #fff !important;
    font-size: 13px;
    padding: 6px 12px;
    border-radius: 20px;
    margin: 4px 0;
    box-shadow: 0 2px 12px rgba(102, 126, 234, 0.45), 0 0 0 1px rgba(255,255,255,.25) inset;
    animation: dy-welcome-glow 2s ease-out;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    max-width: 95%;
}
.dy-chat-welcome .dy-chat-welcome-icon {
    font-size: 14px;
    opacity: 0.95;
    flex-shrink: 0;
}
.dy-chat-welcome .dy-chat-system-text {
    color: #fff !important;
    text-shadow: 0 1px 2px rgba(0,0,0,.2);
}
@keyframes dy-welcome-glow {
    0% { box-shadow: 0 0 20px rgba(102, 126, 234, 0.8), 0 2px 12px rgba(102, 126, 234, 0.45); opacity: 0.92; }
    100% { box-shadow: 0 2px 12px rgba(102, 126, 234, 0.45), 0 0 0 1px rgba(255,255,255,.25) inset; opacity: 1; }
}

/* 欢迎语浮窗：与礼物浮层同位置，样式与聊天室欢迎条一致，仅增加浮窗动画 */
.dy-welcome-overlay {
    position: relative;
    left: auto;
    right: auto;
    top: auto;
    bottom: auto;
    min-height: 0;
    flex: 0 0 auto;
    justify-content: flex-start;
    padding-bottom: 0;
    padding-top: 8px;
    padding-left: 8px;
    padding-right: 8px;
    align-items: center;
    flex-direction: column;
    pointer-events: none;
    overflow: hidden;
}
.dy-welcome-overlay[aria-hidden="true"],
.dy-welcome-overlay:not([aria-hidden="false"]) { display: none !important; }
.dy-welcome-overlay[aria-hidden="false"] { display: flex !important; }
.dy-welcome-overlay .dy-welcome-float-item {
    margin-bottom: 8px;
    animation: dy-welcome-float 3.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
}
@keyframes dy-welcome-float {
    0% { opacity: 0; transform: translateY(-12px) scale(0.96); }
    12% { opacity: 1; transform: translateY(0) scale(1); }
    85% { opacity: 1; transform: translateY(0) scale(1); }
    100% { opacity: 0; transform: translateY(-8px) scale(0.98); }
}

/* 关注主播消息：粉红渐变 */
.dy-chat-follow {
    background: linear-gradient(135deg, #ec4899 0%, #db2777 50%, #be185d 100%) !important;
    color: #fff !important;
    padding: 6px 12px;
    border-radius: 20px;
    margin: 4px 0;
    box-shadow: 0 2px 12px rgba(236, 72, 153, 0.4);
    display: inline-flex;
    align-items: center;
    gap: 8px;
    max-width: 95%;
}
.dy-chat-follow .dy-chat-follow-icon { font-size: 14px; opacity: 0.95; flex-shrink: 0; }
.dy-chat-follow .dy-chat-system-text { color: #fff !important; text-shadow: 0 1px 2px rgba(0,0,0,.2); }

/* 右侧竖排栏（抖音一致：头像、点赞、评论、礼物、人数、分享、更多） */
.dy-right-bar {
    position: absolute;
    right: 0;
    top: 50%;
    transform: translateY(-50%);
    z-index: 20;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 18px;
    padding: 12px 8px;
}
.dy-right-item {
    color: #fff;
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 2px;
    font-size: 12px;
    text-decoration: none;
}
.dy-right-item:hover { color: rgba(255,255,255,.9); }
.dy-back {
    margin-bottom: 8px;
    font-size: 20px;
}
.dy-avatar-wrap {
    margin-bottom: 4px;
}
.dy-avatar {
    width: 48px;
    height: 48px;
    border-radius: 50%;
    background: linear-gradient(180deg, #666 0%, #333 100%);
    border: 2px solid rgba(255,255,255,.3);
    margin-bottom: 4px;
}
.dy-follow-btn {
    font-size: 12px;
    color: var(--dy-red);
    font-weight: 600;
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
}
.dy-follow-btn.dy-following {
    color: rgba(255,255,255,.75);
}
.dy-like-wrap, .dy-viewer-wrap {
    font-size: 11px;
    color: rgba(255,255,255,.95);
}
button.dy-like-wrap {
    background: none;
    border: none;
    cursor: pointer;
    color: inherit;
    padding: 0;
}
.dy-like-icon { font-size: 28px; color: #fff; }
/* 点赞动画（仿抖音：点击心形放大变红） */
.dy-like-wrap.dy-like-burst .dy-like-icon,
.dy-header-likes.dy-like-burst .dy-header-like-icon,
.dy-sidebar-likes-btn.dy-like-burst .dy-sidebar-like-icon,
.dy-sidebar-like-inline.dy-like-burst .dy-sidebar-like-icon {
    animation: dy-heart-burst 0.35s ease-out;
}
@keyframes dy-heart-burst {
    0% { transform: scale(1); opacity: 1; }
    40% { transform: scale(1.4); opacity: 1; color: var(--dy-red); }
    70% { transform: scale(1.15); }
    100% { transform: scale(1); opacity: 1; }
}
.dy-action-btn {
    width: 48px;
    height: 48px;
    align-items: center;
    justify-content: center;
}
.dy-action-btn i { font-size: 26px; }
.dy-gift-btn i { color: #ffd93d; }
.dy-viewer-wrap i { font-size: 20px; margin-bottom: 2px; }
.dy-more-wrap i { font-size: 22px; }

/* 更多菜单弹窗 */
.dy-more-menu {
    position: fixed;
    bottom: 120px;
    right: 16px;
    z-index: 100;
    background: rgba(30,30,30,.95);
    backdrop-filter: blur(10px);
    border-radius: 12px;
    padding: 8px 0;
    min-width: 140px;
    box-shadow: 0 4px 20px rgba(0,0,0,.4);
}
.dy-more-menu-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 12px 16px;
    width: 100%;
    background: none;
    border: none;
    color: #fff;
    font-size: 14px;
    cursor: pointer;
    text-align: left;
}
.dy-more-menu-item:hover {
    background: rgba(255,255,255,.1);
}
.dy-more-menu-item i {
    width: 20px;
    text-align: center;
    font-size: 16px;
}
.dy-more-menu-item i.fa-flag { color: #f44336; }
.dy-more-menu-item i.fa-share-alt { color: #4caf50; }
@media (min-width: 992px) {
    .dy-more-menu {
        bottom: auto;
        top: 100px;
        right: 120px;
    }
}

/* 底部栏：主播名 + 评论输入 */
.dy-bottom-bar {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 15;
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    padding: 12px 80px 16px 12px;
    background: linear-gradient(transparent, rgba(0,0,0,.5));
}
.dy-bottom-left {
    display: flex;
    flex-direction: column;
    gap: 2px;
    max-width: 55%;
}
.dy-streamer-name {
    color: #fff;
    font-size: 15px;
    font-weight: 600;
}
.dy-room-title {
    color: var(--dy-text-secondary);
    font-size: 13px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.dy-bottom-input-wrap {
    display: flex;
    align-items: center;
    gap: 8px;
    flex: 1;
    max-width: 320px;
}
.dy-chat-input {
    flex: 1;
    height: 36px;
    padding: 0 14px;
    border-radius: 18px;
    border: none;
    background: rgba(255,255,255,.2);
    color: #fff;
    font-size: 14px;
}
.dy-chat-input::placeholder { color: rgba(255,255,255,.6); }
.dy-send-btn {
    height: 36px;
    padding: 0 16px;
    border-radius: 18px;
    border: none;
    background: var(--dy-red);
    color: #fff;
    font-size: 14px;
    font-weight: 500;
    cursor: pointer;
}
.dy-send-btn:hover { background: var(--dy-red-dark); color: #fff; }
.dy-send-btn:disabled {
    background: rgba(255,255,255,.25);
    cursor: not-allowed;
}
.dy-chat-status {
    position: absolute;
    left: -9999px;
}

/* 礼物抽屉（底部弹出） */
.dy-gift-drawer {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    max-height: 70vh;
    background: #1a1a1a;
    border-radius: 16px 16px 0 0;
    z-index: 1050;
    box-shadow: 0 -4px 20px rgba(0,0,0,.4);
    transition: transform .25s ease;
}
.dy-gift-drawer[aria-hidden="true"] {
    transform: translateY(100%);
    pointer-events: none;
}
.dy-gift-drawer[aria-hidden="false"] {
    transform: translateY(0);
}
.dy-gift-drawer-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 14px 16px;
    border-bottom: 1px solid var(--dy-border);
    color: #fff;
    font-size: 16px;
    font-weight: 600;
}
.dy-wallet-link {
    color: #ffd93d;
    text-decoration: none;
    font-size: 13px;
}
.dy-drawer-close {
    background: none;
    border: none;
    color: rgba(255,255,255,.8);
    font-size: 20px;
    cursor: pointer;
    padding: 4px 8px;
}
.dy-gift-drawer-body {
    padding: 12px 16px 24px;
    overflow-y: auto;
    max-height: calc(70vh - 56px);
}
.dy-drawer-title { font-weight: 600; }
.dy-drawer-title .mr-1 { margin-right: 0.25rem; }
.dy-drawer-section {
    margin-bottom: 14px;
    padding-bottom: 14px;
    border-bottom: 1px solid var(--dy-border);
}
.dy-drawer-section:last-child { border-bottom: none; padding-bottom: 0; margin-bottom: 0; }
.dy-section-title {
    color: rgba(255,255,255,.92);
    font-size: 13px;
    font-weight: 600;
    margin-bottom: 8px;
}
.dy-section-title i { margin-right: 6px; color: #ffd93d; }
.dy-gift-list {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(90px, 1fr));
    gap: 10px;
}
.dy-gift-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 10px 8px;
    background: rgba(255,255,255,.08);
    border: 1px solid var(--dy-border);
    border-radius: 10px;
    color: #fff;
    font-size: 12px;
    cursor: pointer;
}
.dy-gift-item:hover {
    background: rgba(254,44,85,.2);
    border-color: var(--dy-red);
}
.dy-gift-item.selected {
    background: rgba(254,44,85,.15);
    border-color: var(--dy-red);
    box-shadow: 0 0 0 1px var(--dy-red);
}
.dy-gift-icon-img,
.dy-gift-emoji-img { 
    width: 48px; 
    height: 48px; 
    object-fit: contain; 
    margin-bottom: 4px;
    filter: drop-shadow(0 2px 4px rgba(0,0,0,0.3));
    transition: transform 0.2s ease, filter 0.2s ease;
}
.dy-gift-item:hover .dy-gift-icon-img,
.dy-gift-item:hover .dy-gift-emoji-img {
    transform: scale(1.15);
    filter: drop-shadow(0 4px 8px rgba(254,44,85,0.4));
}
.dy-gift-emoji { font-size: 32px; margin-bottom: 4px; }
.dy-gift-name { margin-bottom: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.dy-gift-points { color: #ffd93d; font-size: 11px; }
/* 礼物抽屉内：与桌面一致，第一下选中、第二下点「赠送」送出 */
.dy-gift-list .dy-gift-bar-item.dy-gift-drawer-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 10px 8px;
    background: rgba(255,255,255,.08);
    border: 1px solid var(--dy-border);
    border-radius: 10px;
    color: #fff;
    font-size: 12px;
    cursor: pointer;
    position: relative;
}
.dy-gift-list .dy-gift-bar-item.dy-gift-drawer-item:hover {
    background: rgba(254,44,85,.15);
    border-color: var(--dy-border);
}
.dy-gift-list .dy-gift-bar-item.dy-gift-drawer-item.selected {
    background: rgba(254,44,85,.25);
    border-color: var(--dy-red);
}
.dy-gift-list .dy-gift-bar-item.dy-gift-drawer-item .dy-gift-icon-img,
.dy-gift-list .dy-gift-bar-item.dy-gift-drawer-item .dy-gift-emoji-img {
    width: 40px;
    height: 40px;
    object-fit: contain;
    margin-bottom: 4px;
}
.dy-gift-list .dy-gift-bar-item.dy-gift-drawer-item .dy-gift-emoji { font-size: 28px; margin-bottom: 4px; }
.dy-gift-list .dy-gift-bar-item.dy-gift-drawer-item .dy-gift-name { margin-bottom: 2px; }
.dy-gift-list .dy-gift-bar-item.dy-gift-drawer-item .dy-gift-points { font-size: 11px; margin-bottom: 6px; }
/* 移动端礼物抽屉：第一下点击才显示赠送按钮，未选中时隐藏 */
.dy-gift-list .dy-gift-bar-item.dy-gift-drawer-item .dy-gift-send-btn {
    display: none;
    margin-top: auto;
    padding: 4px 10px;
    font-size: 12px;
    border-radius: 6px;
    border: none;
    background: var(--dy-red);
    color: #fff;
    cursor: pointer;
}
.dy-gift-list .dy-gift-bar-item.dy-gift-drawer-item.selected .dy-gift-send-btn {
    display: block;
}
.dy-gift-list .dy-gift-bar-item.dy-gift-drawer-item .dy-gift-send-btn:hover {
    background: var(--dy-red-dark);
}
.dy-loading, .dy-muted { color: rgba(255,255,255,.5); }
.dy-error { color: #ff6b6b; }
.dy-tip-section {
    margin-bottom: 12px;
    padding-bottom: 12px;
    border-bottom: 1px solid var(--dy-border);
}
.dy-tip-label {
    display: block;
    color: var(--dy-text-secondary);
    font-size: 12px;
    margin-bottom: 6px;
}
.dy-tip-row {
    display: flex;
    gap: 8px;
    align-items: center;
}
.dy-tip-input {
    width: 100px;
    height: 36px;
    padding: 0 10px;
    border: 1px solid var(--dy-border);
    border-radius: 8px;
    background: rgba(255,255,255,.08);
    color: #fff;
    font-size: 14px;
}
.dy-tip-btn {
    height: 36px;
    padding: 0 16px;
    border-radius: 8px;
    border: none;
    background: var(--dy-red);
    color: #fff;
    font-size: 14px;
    cursor: pointer;
}
.dy-tip-btn:hover { background: var(--dy-red-dark); }
.dy-tip-hint { font-size: 11px; color: rgba(255,255,255,.5); display: block; margin-top: 4px; }
.dy-leaderboard-title {
    color: rgba(255,255,255,.9);
    font-size: 13px;
    margin-bottom: 8px;
}
.dy-leaderboard-title i { margin-right: 6px; color: #ffd93d; }
.dy-leaderboard-list {
    list-style: none;
    padding: 0;
    margin: 0;
}
/* 礼物抽屉 / 下注榜抽屉：首五条固定高度，多出可滚动 */
#giftLeaderboard,
#dyBetLeaderboardList {
    height: 150px;
    min-height: 150px;
    overflow-y: auto;
}
.dy-leaderboard-item {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 6px 0;
    color: rgba(255,255,255,.85);
    font-size: 13px;
}
.dy-rank {
    color: rgba(255,255,255,.5);
    min-width: 20px;
}
.dy-lb-username { flex: 1; min-width: 0; }
.dy-lb-value { color: #ffd93d; font-weight: 600; white-space: nowrap; }
.dy-lb-amount { color: rgba(255,255,255,.85); font-size: 0.95em; }
.dy-bet-leaderboard-hint { margin-bottom: 10px; }
.dy-gift-drawer-mask {
    position: fixed;
    inset: 0;
    background: rgba(0,0,0,.5);
    z-index: 1040;
    transition: opacity .2s;
}
.dy-gift-drawer-mask[aria-hidden="true"] {
    opacity: 0;
    pointer-events: none;
}
.dy-gift-drawer-mask[aria-hidden="false"] {
    opacity: 1;
}

/* 赛事直播间：钱包抽屉（多种币种 + 外部余额列表） */
.dy-wallet-drawer .dy-wallet-balance-list {
    list-style: none;
    padding: 0;
    margin: 0 0 12px 0;
}
.dy-wallet-balance-item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 8px;
    padding: 10px 12px;
    margin-bottom: 6px;
    background: rgba(255,255,255,.06);
    border-radius: 10px;
    color: rgba(255,255,255,.9);
    font-size: 14px;
}
.dy-wallet-balance-item:last-child { margin-bottom: 0; }
.dy-wallet-label { font-weight: 500; }
.dy-wallet-amount { color: #ffd93d; font-weight: 600; margin-left: auto; }
.dy-wallet-source { font-size: 11px; color: rgba(255,255,255,.5); margin-left: 4px; }
.dy-wallet-drawer-hint { font-size: 12px; color: rgba(255,255,255,.55); }
.dy-wallet-drawer-recharge {
    display: inline-block;
    margin-top: 8px;
    padding: 8px 16px;
    background: var(--dy-red, #fe2c55);
    color: #fff;
    border-radius: 8px;
    font-size: 14px;
    text-decoration: none;
}
.dy-wallet-drawer-recharge:hover { color: #fff; opacity: .95; }
.dy-header-wallet-btn,
.dy-gift-bar-recharge,
.dy-wallet-link-btn {
    background: none;
    border: none;
    cursor: pointer;
    font: inherit;
    color: inherit;
    padding: 0;
    text-decoration: none;
}
.dy-header-wallet-btn:hover,
.dy-gift-bar-recharge:hover,
.dy-wallet-link-btn:hover { opacity: .9; }
.dy-wallet-link-btn.dy-wallet-link { color: #ffd93d; }

/* 桌面专用块：移动端隐藏 */
.dy-desktop-header,
.dy-desktop-sidebar,
.dy-desktop-gift-bar {
    display: none;
}

/* 移动端专属元素 */
.dy-mobile-only {
    display: block;
}

/* 下注榜浮层：非赛事房默认隐藏；赛事直播间内始终显示（由下方赛事专用规则控制布局） */
.dy-video-bet-overlay {
    display: none;
}
.dy-danmaku-marquee-overlay {
    display: none;
}
/* 赛事直播间：视频播放器仅隐藏暂停/播放键，保留声音键和全屏键，不影响 m3u8/HLS 播放 */
.viewer-room-event video::-webkit-media-controls-play-button,
.dy-event-mobile video::-webkit-media-controls-play-button {
    display: none !important;
}
.viewer-room-event video::-webkit-media-controls-start-playback-button,
.dy-event-mobile video::-webkit-media-controls-start-playback-button {
    display: none !important;
}
/* 桌面版赛事直播间：两个视频（主视频 + 主播小窗）均隐藏进度条 */
@media (min-width: 900px) {
    body.viewer-room-douyin .viewer-room-event video::-webkit-media-controls-timeline,
    body.dy-room-body .viewer-room-event video::-webkit-media-controls-timeline {
        display: none !important;
    }
    body.viewer-room-douyin .viewer-room-event video::-webkit-media-controls-current-time-display,
    body.dy-room-body .viewer-room-event video::-webkit-media-controls-current-time-display {
        display: none !important;
    }
    body.viewer-room-douyin .viewer-room-event video::-webkit-media-controls-time-remaining-display,
    body.dy-room-body .viewer-room-event video::-webkit-media-controls-time-remaining-display {
        display: none !important;
    }
}

/* 赛事直播间：下注榜浮层必须显示，避免被默认 display:none 盖住 */
body.viewer-room-douyin .viewer-room-event .dy-video-bet-overlay,
body.dy-room-body .viewer-room-event .dy-video-bet-overlay {
    display: flex;
    flex-direction: column;
    position: absolute;
    right: 12px;
    top: 120px;
    bottom: 12px;
    width: 280px;
    max-width: 90vw;
    background: rgba(0,0,0,.4);
    padding: 10px;
    border-radius: 8px;
    z-index: 20;
    overflow: hidden;
    pointer-events: auto;
}
body.viewer-room-douyin .viewer-room-event .dy-video-bet-overlay .dy-video-bet-overlay-head,
body.dy-room-body .viewer-room-event .dy-video-bet-overlay .dy-video-bet-overlay-head {
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 8px;
    margin-bottom: 8px;
}
body.viewer-room-douyin .viewer-room-event .dy-video-bet-overlay .dy-video-bet-event-title,
body.dy-room-body .viewer-room-event .dy-video-bet-overlay .dy-video-bet-event-title {
    font-size: 13px;
    font-weight: 600;
    color: #fff;
    line-height: 1.35;
    max-height: 2.7em;
    overflow: hidden;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    word-break: break-word;
}
body.viewer-room-douyin .viewer-room-event .dy-video-bet-overlay .dy-video-bet-place-btn,
body.dy-room-body .viewer-room-event .dy-video-bet-overlay .dy-video-bet-place-btn {
    width: 100%;
    padding: 8px 12px;
    border: none;
    border-radius: 8px;
    background: linear-gradient(135deg, #ff4d6d 0%, #e03150 100%);
    color: #fff;
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    flex-shrink: 0;
}
body.viewer-room-douyin .viewer-room-event .dy-video-bet-overlay .dy-video-bet-place-btn:hover,
body.dy-room-body .viewer-room-event .dy-video-bet-overlay .dy-video-bet-place-btn:hover {
    filter: brightness(1.08);
}
body.viewer-room-douyin .viewer-room-event .dy-video-bet-overlay .dy-video-bet-place-btn:active,
body.dy-room-body .viewer-room-event .dy-video-bet-overlay .dy-video-bet-place-btn:active {
    filter: brightness(0.95);
}
body.viewer-room-douyin .viewer-room-event .dy-video-bet-overlay .dy-video-bet-header,
body.dy-room-body .viewer-room-event .dy-video-bet-overlay .dy-video-bet-header {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 13px;
    font-weight: 600;
    color: #fff;
    margin-bottom: 8px;
    flex-shrink: 0;
}
body.viewer-room-douyin .viewer-room-event .dy-video-bet-overlay .dy-video-bet-list,
body.dy-room-body .viewer-room-event .dy-video-bet-overlay .dy-video-bet-list {
    list-style: none;
    margin: 0;
    padding: 0;
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    gap: 6px;
}
body.viewer-room-douyin .viewer-room-event .dy-video-bet-overlay .dy-video-bet-desktop,
body.dy-room-body .viewer-room-event .dy-video-bet-overlay .dy-video-bet-desktop {
    display: none;
}
body.viewer-room-douyin .viewer-room-event .dy-video-bet-overlay .dy-video-bet-list-mobile,
body.dy-room-body .viewer-room-event .dy-video-bet-overlay .dy-video-bet-list-mobile {
    list-style: none;
    margin: 0;
    padding: 0;
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    gap: 6px;
}
body.viewer-room-douyin .viewer-room-event .dy-video-bet-overlay .dy-video-bet-item,
body.dy-room-body .viewer-room-event .dy-video-bet-overlay .dy-video-bet-item {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px 8px;
    font-size: 12px;
    color: rgba(255,255,255,.95);
    padding: 6px 10px;
    background: rgba(0, 0, 0, 0.35);
    border-radius: 8px;
}
body.viewer-room-douyin .viewer-room-event .dy-video-bet-overlay .dy-video-bet-rank,
body.dy-room-body .viewer-room-event .dy-video-bet-overlay .dy-video-bet-rank-icon {
    flex-shrink: 0;
}
body.viewer-room-douyin .viewer-room-event .dy-video-bet-overlay .dy-video-bet-line1,
body.dy-room-body .viewer-room-event .dy-video-bet-overlay .dy-video-bet-line1 {
    flex: 1;
    min-width: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    color: #fff;
}
body.viewer-room-douyin .viewer-room-event .dy-video-bet-overlay .dy-video-bet-line2,
body.dy-room-body .viewer-room-event .dy-video-bet-overlay .dy-video-bet-line2 {
    width: 100%;
    font-size: 11px;
    color: rgba(255,255,255,.8);
    word-break: break-word;
    line-height: 1.35;
}
body.viewer-room-douyin .viewer-room-event .dy-video-bet-overlay .dy-video-bet-empty,
body.dy-room-body .viewer-room-event .dy-video-bet-overlay .dy-video-bet-empty {
    color: rgba(255,255,255,.5);
    font-size: 12px;
    text-align: center;
    padding: 20px 0;
}

/* ========== 赛事直播间移动端：抖音式 UI（< 900px）========== */
/* 移动端顶部栏（抖音一致）：仅赛事直播间移动端显示，叠在视频上 */
.dy-mobile-top-bar {
    display: none;
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    z-index: 25;
    padding: env(safe-area-inset-top, 12px) 12px 12px 12px;
    background: linear-gradient(180deg, rgba(0,0,0,.55) 0%, transparent 100%);
    align-items: center;
    gap: 12px;
    pointer-events: none;
}
.dy-mobile-top-bar > * { pointer-events: auto; }
.dy-mobile-top-back {
    color: #fff;
    font-size: 22px;
    width: 40px;
    height: 40px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    text-decoration: none;
    flex-shrink: 0;
}
.dy-mobile-top-back:active { opacity: .8; }
.dy-anon-visitor-label {
    color: rgba(255,255,255,.9);
    font-size: 13px;
    white-space: nowrap;
    flex-shrink: 0;
    max-width: 100px;
    overflow: hidden;
    text-overflow: ellipsis;
}
.dy-anon-visitor-label-desktop {
    margin-left: 4px;
}
.dy-mobile-top-info {
    display: flex;
    align-items: center;
    gap: 10px;
    flex: 1;
    min-width: 0;
}
.dy-mobile-top-avatar {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: linear-gradient(180deg, #666 0%, #333 100%);
    background-size: cover;
    background-position: center;
    flex-shrink: 0;
    border: 1px solid rgba(255,255,255,.35);
}
.dy-mobile-top-avatar.dy-avatar-has-img { border-color: rgba(255,255,255,.5); }
.dy-mobile-top-meta {
    display: flex;
    align-items: center;
    gap: 6px;
    min-width: 0;
}
.dy-mobile-top-name {
    color: #fff;
    font-size: 14px;
    font-weight: 600;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.dy-mobile-top-live-dot {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: #ff4757;
    flex-shrink: 0;
    animation: dy-live-pulse 1.2s ease-in-out infinite;
}
@keyframes dy-live-pulse {
    0%, 100% { opacity: 1; transform: scale(1); }
    50% { opacity: .7; transform: scale(1.1); }
}
.dy-mobile-top-follow {
    font-size: 12px;
    font-weight: 600;
    color: #FE2C55;
    background: none;
    border: none;
    padding: 4px 14px;
    cursor: pointer;
    flex-shrink: 0;
}
.dy-mobile-top-follow.dy-following {
    color: rgba(255,255,255,.75);
}

/* ========== 移动端布局（< 900px）：视频全屏 + 浮层弹幕 ========== */
@media (max-width: 899px) {
    body.viewer-room-douyin .dy-live-wrap,
    body.dy-room-body .dy-live-wrap {
        display: block;
        position: relative;
        width: 100%;
        height: calc(var(--app-vh) * 100);
        min-height: calc(var(--app-vh) * 100);
        overflow: hidden;
    }
    /* 赛事直播间移动端：显示抖音式顶部栏 */
    body.viewer-room-douyin .viewer-room-event .dy-mobile-top-bar,
    body.dy-room-body .viewer-room-event .dy-mobile-top-bar {
        display: flex !important;
    }
    /* 赛事直播间移动端：主播视窗到顶，顶栏不占位、视频区无上间隙 */
    body.viewer-room-douyin .viewer-room-event .dy-desktop-header,
    body.dy-room-body .viewer-room-event .dy-desktop-header {
        display: none !important;
        height: 0 !important;
        min-height: 0 !important;
        overflow: hidden !important;
        padding: 0 !important;
        margin: 0 !important;
    }
    body.viewer-room-douyin .viewer-room-event .dy-live-wrap,
    body.dy-room-body .viewer-room-event .dy-live-wrap {
        padding-top: 0 !important;
        margin-top: 0 !important;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-area,
    body.dy-room-body .viewer-room-event .dy-video-area {
        top: 0 !important;
        padding-top: 0 !important;
    }
    body.viewer-room-douyin .dy-video-area,
    body.dy-room-body .dy-video-area {
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        z-index: 1;
        display: flex !important;
    }
    /* 赛事直播间移动端单路：主视频填满整个区域 */
    body.viewer-room-douyin .viewer-room-event .dy-video-area:not(.dy-video-area-dual) > .dy-host-video-wrap,
    body.dy-room-body .viewer-room-event .dy-video-area:not(.dy-video-area-dual) > .dy-host-video-wrap {
        flex: 1 1 0;
        min-height: 0;
        min-width: 0;
        width: 100%;
        height: 100%;
    }
    body.viewer-room-douyin .dy-comment-overlay,
    body.dy-room-body .dy-comment-overlay {
        position: absolute;
        left: 0;
        bottom: 80px;
        width: 70%;
        max-height: 40vh;
        z-index: 10;
        pointer-events: none;
    }
    /* 赛事直播间移动端：聊天浮层在输入框上方、靠左 */
    body.viewer-room-douyin .viewer-room-event .dy-comment-overlay,
    body.dy-room-body .viewer-room-event .dy-comment-overlay {
        left: 8px;
        right: auto;
        width: 72%;
        max-width: 280px;
        bottom: 58px;
        max-height: 38vh;
    }
    /* 赛事直播间移动端双路：聊天只在「下面那个视频」的左方（下半屏），不压在上方主播画面上 */
    body.viewer-room-douyin .viewer-room-event .dy-video-area.dy-video-area-dual .dy-comment-overlay,
    body.dy-room-body .viewer-room-event .dy-video-area.dy-video-area-dual .dy-comment-overlay {
        top: 50%;
        max-height: calc(50% - 62px);
    }
    body.viewer-room-douyin .dy-comment-overlay .dy-chat-messages,
    body.dy-room-body .dy-comment-overlay .dy-chat-messages {
        pointer-events: auto;
    }
    /* 赛事直播间移动端：聊天区域背景透明，内容贴底 */
    body.viewer-room-douyin .viewer-room-event .dy-comment-overlay,
    body.dy-room-body .viewer-room-event .dy-comment-overlay {
        background: transparent;
    }
    body.viewer-room-douyin .viewer-room-event .dy-comment-overlay .dy-chat-messages,
    body.dy-room-body .viewer-room-event .dy-comment-overlay .dy-chat-messages {
        background: transparent;
        justify-content: flex-end;
    }
    /* 赛事直播间移动端：每条聊天无背景色、透明，灯牌照常显示 */
    body.viewer-room-douyin .viewer-room-event .dy-comment-overlay .dy-chat-msg,
    body.dy-room-body .viewer-room-event .dy-comment-overlay .dy-chat-msg {
        background: transparent;
        color: #fff;
    }
    body.viewer-room-douyin .viewer-room-event .dy-comment-overlay .dy-chat-msg.dy-chat-gift,
    body.dy-room-body .viewer-room-event .dy-comment-overlay .dy-chat-msg.dy-chat-gift {
        background: transparent;
    }
    body.viewer-room-douyin .viewer-room-event .dy-comment-overlay .dy-chat-msg.dy-chat-system,
    body.dy-room-body .viewer-room-event .dy-comment-overlay .dy-chat-msg.dy-chat-system {
        background: transparent;
        color: rgba(255,255,255,.85);
    }
    /* 赛事直播间移动端：聊天内容文字一律白色 */
    body.viewer-room-douyin .viewer-room-event .dy-comment-overlay .dy-chat-msg .dy-chat-user,
    body.viewer-room-douyin .viewer-room-event .dy-comment-overlay .dy-chat-msg .dy-chat-text,
    body.dy-room-body .viewer-room-event .dy-comment-overlay .dy-chat-msg .dy-chat-user,
    body.dy-room-body .viewer-room-event .dy-comment-overlay .dy-chat-msg .dy-chat-text {
        color: #fff !important;
    }
    /* 房管/主播弹幕消息：字体加大、有底色、炫一点；房管显示灯牌 */
    body.viewer-room-douyin .viewer-room-event .dy-chat-msg.dy-chat-danmaku,
    body.dy-room-body .viewer-room-event .dy-chat-msg.dy-chat-danmaku {
        background: linear-gradient(135deg, rgba(255, 193, 7, 0.35) 0%, rgba(255, 152, 0, 0.3) 100%);
        border-left: 4px solid #ffc107;
        box-shadow: 0 2px 8px rgba(255, 193, 7, 0.25);
        font-size: 14px;
        padding: 8px 12px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-chat-msg.dy-chat-danmaku .dy-chat-danmaku-label,
    body.dy-room-body .viewer-room-event .dy-chat-msg.dy-chat-danmaku .dy-chat-danmaku-label {
        color: #ffc107;
        font-weight: 700;
        margin-right: 6px;
        font-size: 14px;
        text-shadow: 0 0 8px rgba(255, 193, 7, 0.6);
    }
    body.viewer-room-douyin .viewer-room-event .dy-chat-msg.dy-chat-danmaku .dy-fan-badge-mod,
    body.dy-room-body .viewer-room-event .dy-chat-msg.dy-chat-danmaku .dy-fan-badge-mod {
        margin-right: 6px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-chat-msg.dy-chat-danmaku .dy-chat-user,
    body.dy-room-body .viewer-room-event .dy-chat-msg.dy-chat-danmaku .dy-chat-user {
        font-weight: 600;
        color: #fff;
        font-size: 14px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-chat-msg.dy-chat-danmaku .dy-chat-text,
    body.dy-room-body .viewer-room-event .dy-chat-msg.dy-chat-danmaku .dy-chat-text {
        font-size: 14px;
        color: rgba(255,255,255,.95);
    }
    /* 赛事直播间移动端双路：上主播、下赛事，两格等高 */
    body.viewer-room-douyin .viewer-room-event .dy-video-area.dy-video-area-dual,
    body.dy-room-body .viewer-room-event .dy-video-area.dy-video-area-dual {
        display: flex;
        flex-direction: column;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-area.dy-video-area-dual .dy-host-video-wrap,
    body.dy-room-body .viewer-room-event .dy-video-area.dy-video-area-dual .dy-host-video-wrap {
        flex: 1 1 50%;
        min-height: 0;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-area.dy-video-area-dual .dy-game-video-wrap,
    body.dy-room-body .viewer-room-event .dy-video-area.dy-video-area-dual .dy-game-video-wrap {
        flex: 1 1 50%;
        min-height: 0;
        border-top: 1px solid var(--dy-border);
    }
    body.viewer-room-douyin .dy-right-bar,
    body.dy-room-body .dy-right-bar {
        display: flex;
        z-index: 20;
    }
    /* 赛事直播间移动端：右侧栏从顶部起（抖音一致），留出顶部栏空间 */
    body.viewer-room-douyin .viewer-room-event .dy-right-bar,
    body.dy-room-body .viewer-room-event .dy-right-bar {
        top: 0;
        transform: none;
        padding-top: calc(env(safe-area-inset-top, 12px) + 52px);
        align-items: center;
        gap: 14px;
    }
    body.viewer-room-douyin .dy-bottom-bar,
    body.dy-room-body .dy-bottom-bar {
        display: flex;
        z-index: 20;
        padding-bottom: calc(env(safe-area-inset-bottom, 0px) + 16px);
    }
    /* 赛事直播间移动端：底部输入条与抖音一致，留足右侧图标栏空间 */
    body.viewer-room-douyin .viewer-room-event .dy-bottom-bar,
    body.dy-room-body .viewer-room-event .dy-bottom-bar {
        padding-left: 12px;
        padding-right: 72px;
    }
    /* 赛事直播间移动端：聊天室放在最下方、输入框上方；不显示主播名/房间名 */
    body.viewer-room-douyin .viewer-room-event .dy-mobile-chat-messages-wrap,
    body.dy-room-body .viewer-room-event .dy-mobile-chat-messages-wrap {
        display: flex !important;
        flex-direction: column;
        width: 100%;
        max-height: 140px;
        min-height: 60px;
        overflow: hidden;
        order: -1;
        flex-shrink: 0;
    }
    body.viewer-room-douyin .viewer-room-event .dy-bottom-bar,
    body.dy-room-body .viewer-room-event .dy-bottom-bar {
        flex-direction: column;
        align-items: stretch;
        gap: 8px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-bottom-input-wrap,
    body.dy-room-body .viewer-room-event .dy-bottom-input-wrap {
        flex-shrink: 0;
    }
    body.viewer-room-douyin .viewer-room-event .dy-bottom-left,
    body.dy-room-body .viewer-room-event .dy-bottom-left {
        display: none !important;
    }
    body.viewer-room-douyin .viewer-room-event .dy-comment-overlay,
    body.dy-room-body .viewer-room-event .dy-comment-overlay {
        display: none !important;
    }
    body.viewer-room-douyin .viewer-room-event .dy-chat-messages-mobile,
    body.dy-room-body .viewer-room-event .dy-chat-messages-mobile {
        flex: 1;
        min-height: 0;
        overflow-y: auto;
        overflow-x: hidden;
        display: flex;
        flex-direction: column;
        gap: 6px;
        padding: 4px 0;
    }
    body.viewer-room-douyin .viewer-room-event .dy-chat-messages-mobile .dy-chat-msg,
    body.dy-room-body .viewer-room-event .dy-chat-messages-mobile .dy-chat-msg {
        background: rgba(0,0,0,.4);
        color: #fff;
        padding: 4px 10px;
        border-radius: 4px;
        font-size: 13px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-chat-input,
    body.dy-room-body .viewer-room-event .dy-chat-input {
        border-radius: 20px;
        height: 38px;
        padding: 0 16px;
        font-size: 14px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-send-btn,
    body.dy-room-body .viewer-room-event .dy-send-btn {
        border-radius: 20px;
        height: 38px;
        padding: 0 18px;
        font-size: 14px;
    }
    /* 赛事直播间移动端：下注榜浮层保留显示（叠在视频上，紧凑布局），与桌面端一致会请求外部下注记录 */
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-overlay {
        position: absolute;
        right: 8px;
        top: calc(env(safe-area-inset-top, 12px) + 56px);
        bottom: 80px;
        width: min(280px, 70vw);
        max-height: 40vh;
        display: flex !important;
        flex-direction: column;
        background: rgba(0,0,0,.35);
        padding: 8px;
        border-radius: 8px;
        z-index: 20;
        overflow: hidden;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-header {
        display: flex;
        align-items: center;
        gap: 6px;
        font-size: 12px;
        color: #fff;
        margin-bottom: 6px;
        flex-shrink: 0;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-list {
        list-style: none;
        margin: 0;
        padding: 0;
        display: flex;
        flex-direction: column;
        gap: 6px;
        overflow-y: auto;
        flex: 1;
        min-height: 0;
    }
}

@media (min-width: 900px) {
    body.viewer-room-douyin .viewer-room-event .dy-mobile-top-bar,
    body.dy-room-body .viewer-room-event .dy-mobile-top-bar {
        display: none !important;
    }
    body.viewer-room-douyin .viewer-room-event .dy-mobile-chat-messages-wrap,
    body.dy-room-body .viewer-room-event .dy-mobile-chat-messages-wrap {
        display: none !important;
    }
}

/* 赛事直播间 900–1023px：顶栏不占位，主播视窗到顶 */
@media (min-width: 900px) and (max-width: 1023px) {
    body.viewer-room-douyin .viewer-room-event .dy-desktop-header,
    body.dy-room-body .viewer-room-event .dy-desktop-header {
        display: none !important;
    }
    body.viewer-room-douyin .viewer-room-event .dy-live-wrap,
    body.dy-room-body .viewer-room-event .dy-live-wrap {
        grid-template-rows: 0 1fr auto;
    }
}

/* ========== 网页版桌面布局（图1 抖音式）：顶栏 + 左视频右聊天 + 底礼物条 ========== */
@media (min-width: 900px) {
    body.viewer-room-douyin .dy-live-wrap,
    body.dy-room-body .dy-live-wrap {
        display: grid;
        grid-template-rows: auto 1fr auto;
        grid-template-columns: 1fr 340px;
        grid-template-areas:
            "dy-top dy-top"
            "dy-video dy-sidebar"
            "dy-giftbar dy-giftbar";
        height: calc(var(--app-vh) * 100);
        min-height: calc(var(--app-vh) * 100);
        row-gap: 0;
        column-gap: 0;
    }
    /* 赛事直播间：侧栏加宽，主播小视窗更大更清晰 */
    body.viewer-room-douyin .dy-live-wrap.viewer-room-event,
    body.dy-room-body .dy-live-wrap.viewer-room-event {
        grid-template-columns: 1fr 480px;
    }
    body.viewer-room-douyin .dy-desktop-header,
    body.dy-room-body .dy-desktop-header {
        display: flex !important;
        grid-area: dy-top;
        flex-direction: row;
        align-items: center;
        justify-content: space-between;
        min-height: 52px;
        height: 52px;
        max-height: 52px;
        padding: 0 16px;
        margin: 0;
        background: linear-gradient(180deg, rgba(0,0,0,.6) 0%, transparent 100%);
        z-index: 100;
    }
    body.viewer-room-douyin .dy-desktop-sidebar,
    body.viewer-room-douyin .dy-desktop-gift-bar,
    body.dy-room-body .dy-desktop-sidebar,
    body.dy-room-body .dy-desktop-gift-bar {
        display: flex !important;
    }
    body.viewer-room-douyin .dy-header-left,
    body.dy-room-body .dy-header-left {
        display: flex;
        align-items: center;
        gap: 14px;
    }
    body.viewer-room-douyin .dy-header-back,
    body.dy-room-body .dy-header-back {
        color: #fff;
        font-size: 20px;
        text-decoration: none;
    }
    body.viewer-room-douyin .dy-header-back:hover,
    body.dy-room-body .dy-header-back:hover { color: rgba(255,255,255,.9); }
    body.viewer-room-douyin .dy-header-avatar,
    body.dy-room-body .dy-header-avatar {
        width: 36px;
        height: 36px;
        border-radius: 50%;
        background: #333;
        overflow: hidden;
        flex-shrink: 0;
    }
    body.viewer-room-douyin .dy-header-avatar img,
    body.dy-room-body .dy-header-avatar img {
        width: 100%;
        height: 100%;
        object-fit: cover;
    }
    body.viewer-room-douyin .dy-header-more,
    body.dy-room-body .dy-header-more {
        background: none;
        border: none;
        color: rgba(255,255,255,.8);
        padding: 4px 8px;
        cursor: pointer;
        font-size: 14px;
    }
    body.viewer-room-douyin .dy-header-more:hover,
    body.dy-room-body .dy-header-more:hover { color: #fff; }
    body.viewer-room-douyin .dy-header-info,
    body.dy-room-body .dy-header-info {
        display: flex;
        flex-direction: column;
        gap: 2px;
    }
    body.viewer-room-douyin .dy-header-name {
        color: #fff;
        font-size: 16px;
        font-weight: 600;
    }
    body.viewer-room-douyin .dy-header-title {
        color: var(--dy-text-secondary);
        font-size: 13px;
    }
    body.viewer-room-douyin .dy-header-follow-btn {
        padding: 6px 16px;
        border-radius: 4px;
        background: var(--dy-red);
        color: #fff !important;
        font-size: 13px;
        font-weight: 600;
        border: none;
        cursor: pointer;
    }
    body.viewer-room-douyin .dy-header-follow-btn.dy-following {
        background: rgba(255,255,255,.25);
        color: rgba(255,255,255,.9) !important;
    }
    body.viewer-room-douyin .dy-header-live-dot {
        width: 8px;
        height: 8px;
        border-radius: 50%;
        background: var(--dy-red);
        flex-shrink: 0;
    }
    body.viewer-room-douyin .dy-header-likes {
        color: rgba(255,255,255,.95);
        font-size: 14px;
        font-weight: 500;
    }
    body.viewer-room-douyin .dy-header-likes-btn {
        background: none;
        border: none;
        cursor: pointer;
        padding: 0;
        color: rgba(255,255,255,.95);
        font: inherit;
    }
    body.viewer-room-douyin .dy-header-likes-btn:hover {
        color: #fff;
    }
    body.viewer-room-douyin .dy-header-likes i { margin-right: 4px; }
    body.viewer-room-douyin .dy-header-likes #dyDesktopLikeCount {
        color: #fff;
        font-weight: 600;
    }
    body.viewer-room-douyin .dy-header-center.viewer-room-event-header-center,
    body.dy-room-body .dy-header-center.viewer-room-event-header-center {
        flex: 1;
        display: flex;
        justify-content: center;
        align-items: center;
        min-width: 0;
        padding: 0 12px;
    }
    body.viewer-room-douyin .dy-header-streamer-description,
    body.dy-room-body .dy-header-streamer-description {
        font-size: 13px;
        color: rgba(255,255,255,.85);
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        max-width: 100%;
    }
    body.viewer-room-douyin .dy-header-right,
    body.dy-room-body .dy-header-right {
        display: flex;
        align-items: center;
        gap: 20px;
        color: var(--dy-text-secondary);
        font-size: 13px;
    }
    body.viewer-room-douyin .dy-header-stat { white-space: nowrap; }
    body.viewer-room-douyin .dy-header-stat-btn {
        border: none;
        background: none;
        color: inherit;
        cursor: pointer;
        font: inherit;
        padding: 0;
    }
    body.viewer-room-douyin .dy-header-stat-btn:hover { opacity: 0.9; }
    body.viewer-room-douyin .dy-header-wallet {
        color: inherit;
        text-decoration: none;
        white-space: nowrap;
    }
    body.viewer-room-douyin .dy-header-wallet:hover { color: rgba(255,255,255,.9); text-decoration: none; }
    body.viewer-room-douyin .dy-header-wallet-icon { margin-right: 4px; }

    /* 外部观众：钱包左侧头像 + 下滑浮层（昵称/头像编辑） */
    body.viewer-room-douyin .dy-header-guest-avatar-wrap {
        position: relative;
        margin-right: 8px;
    }
    body.viewer-room-douyin .dy-header-guest-avatar-btn {
        position: relative;
        border: none;
        background: none;
        padding: 0;
        cursor: pointer;
    }
    body.viewer-room-douyin .dy-header-guest-dm-badge {
        position: absolute;
        top: -2px;
        right: -2px;
        min-width: 18px;
        height: 18px;
        line-height: 18px;
        padding: 0 4px;
        background: #e74c3c;
        color: #fff;
        font-size: 11px;
        font-weight: 600;
        border-radius: 9px;
        text-align: center;
        box-sizing: border-box;
        white-space: nowrap;
    }
    body.viewer-room-douyin .dy-header-guest-avatar {
        width: 32px;
        height: 32px;
        border-radius: 50%;
        background: rgba(255,255,255,.2);
        display: flex;
        align-items: center;
        justify-content: center;
        color: rgba(255,255,255,.8);
        background-size: cover;
        background-position: center;
        overflow: hidden;
    }
    body.viewer-room-douyin .dy-header-guest-avatar .dy-guest-avatar-img {
        width: 100%;
        height: 100%;
        object-fit: cover;
        border-radius: 50%;
    }
    body.viewer-room-douyin .dy-header-guest-avatar .dy-external-guest-initial {
        width: 100%;
        height: 100%;
        display: flex;
        align-items: center;
        justify-content: center;
        font-weight: 600;
        font-size: 0.9rem;
        background: linear-gradient(135deg, #6366f1, #10b981);
        color: #fff;
        border-radius: 50%;
    }
    body.viewer-room-douyin .dy-header-guest-dropdown {
        position: absolute;
        top: 100%;
        right: 0;
        margin-top: 10px;
        min-width: 260px;
        background: rgba(28,28,32,.97);
        backdrop-filter: blur(16px);
        -webkit-backdrop-filter: blur(16px);
        border: 1px solid rgba(255,255,255,.12);
        border-radius: 12px;
        box-shadow: 0 8px 32px rgba(0,0,0,.45), 0 0 0 1px rgba(255,255,255,.05) inset;
        z-index: 1100;
        overflow: visible;
        animation: dy-guest-dropdown-in 0.2s ease-out;
    }
    body.viewer-room-douyin .dy-header-guest-dropdown[aria-hidden="true"] { display: none; }
    @keyframes dy-guest-dropdown-in {
        from { opacity: 0; transform: translateY(-6px); }
        to { opacity: 1; transform: translateY(0); }
    }
    body.viewer-room-douyin .dy-guest-dropdown-arrow {
        position: absolute;
        top: -6px;
        right: 14px;
        width: 12px;
        height: 12px;
        background: rgba(28,28,32,.97);
        border-left: 1px solid rgba(255,255,255,.12);
        border-top: 1px solid rgba(255,255,255,.12);
        transform: rotate(45deg);
    }
    body.viewer-room-douyin .dy-guest-profile-form {
        position: relative;
        padding: 14px 16px 16px;
        z-index: 1;
    }
    body.viewer-room-douyin .dy-guest-form-messages-btn {
        display: inline-flex;
        align-items: center;
        gap: 6px;
        margin-bottom: 12px;
        padding: 8px 14px;
        font-size: 13px;
        font-weight: 500;
        color: #5cb3ff;
        background: rgba(92,179,255,.15);
        border: 1px solid rgba(92,179,255,.35);
        border-radius: 8px;
        text-decoration: none;
    }
    body.viewer-room-douyin .dy-guest-form-messages-btn:hover {
        color: #8ac9ff;
        background: rgba(92,179,255,.25);
        border-color: rgba(92,179,255,.5);
        text-decoration: none;
    }
    body.viewer-room-douyin .dy-guest-form-dm-unread-wrap {
        display: inline-flex;
        align-items: center;
        gap: 4px;
        margin-left: 2px;
    }
    body.viewer-room-douyin .dy-guest-form-dm-dot {
        width: 6px;
        height: 6px;
        border-radius: 50%;
        background: #e74c3c;
        flex-shrink: 0;
    }
    body.viewer-room-douyin .dy-guest-form-dm-count {
        font-size: 11px;
        font-weight: 600;
        color: #e74c3c;
        min-width: 1.2em;
    }
    body.viewer-room-douyin .dy-guest-form-title {
        font-size: 13px;
        font-weight: 600;
        color: rgba(255,255,255,.95);
        margin-bottom: 12px;
        padding-bottom: 10px;
        border-bottom: 1px solid rgba(255,255,255,.08);
    }
    body.viewer-room-douyin .dy-guest-form-group {
        margin-bottom: 12px;
    }
    body.viewer-room-douyin .dy-guest-form-group:last-of-type { margin-bottom: 14px; }
    body.viewer-room-douyin .dy-guest-form-label {
        display: block;
        font-size: 12px;
        color: rgba(255,255,255,.7);
        margin-bottom: 6px;
    }
    body.viewer-room-douyin .dy-guest-form-input {
        width: 100%;
        padding: 8px 12px;
        font-size: 13px;
        color: #fff;
        background: rgba(255,255,255,.08);
        border: 1px solid rgba(255,255,255,.12);
        border-radius: 8px;
        outline: none;
        box-sizing: border-box;
    }
    body.viewer-room-douyin .dy-guest-form-input::placeholder { color: rgba(255,255,255,.4); }
    body.viewer-room-douyin .dy-guest-form-input:focus {
        border-color: rgba(255,255,255,.25);
        background: rgba(255,255,255,.1);
    }
    body.viewer-room-douyin .dy-guest-avatar-upload {
        position: relative;
        display: flex;
        align-items: center;
        min-height: 40px;
        padding: 6px 12px;
        background: rgba(255,255,255,.08);
        border: 1px solid rgba(255,255,255,.12);
        border-radius: 8px;
    }
    body.viewer-room-douyin .dy-guest-avatar-file-input {
        position: absolute;
        inset: 0;
        width: 100%;
        height: 100%;
        opacity: 0;
        cursor: pointer;
        font-size: 0;
    }
    body.viewer-room-douyin .dy-guest-avatar-file-text {
        font-size: 13px;
        color: rgba(255,255,255,.75);
    }
    body.viewer-room-douyin .dy-guest-form-save {
        width: 100%;
        padding: 10px 16px;
        font-size: 14px;
        font-weight: 500;
        color: #fff;
        background: linear-gradient(135deg, var(--dy-red, #fe2c55) 0%, #e91e50 100%);
        border: none;
        border-radius: 8px;
        cursor: pointer;
        transition: opacity 0.2s, transform 0.1s;
    }
    body.viewer-room-douyin .dy-guest-form-save:hover {
        opacity: .95;
        transform: translateY(-1px);
    }
    body.viewer-room-douyin .dy-guest-form-save:active { transform: translateY(0); }

    /* 顶部栏在线观众区域 */
    body.viewer-room-douyin .dy-header-online {
        display: flex;
        align-items: center;
        gap: 6px;
        color: rgba(255,255,255,.85);
        font-size: 13px;
        padding: 6px 12px;
        background: rgba(255,255,255,.1);
        border-radius: 20px;
    }
    body.viewer-room-douyin .dy-header-online-icon {
        font-size: 14px;
        color: rgba(255,255,255,.9);
    }
    body.viewer-room-douyin .dy-header-online-sep {
        color: rgba(255,255,255,.5);
        margin: 0 2px;
    }
    body.viewer-room-douyin .dy-header-top-donors {
        display: flex;
        align-items: center;
        margin-left: 6px;
    }
    body.viewer-room-douyin .dy-header-top-donors .dy-donor-avatar {
        width: 22px;
        height: 22px;
        border-radius: 50%;
        border: 2px solid rgba(255,255,255,.3);
        background: #333 center/cover no-repeat;
        margin-left: -6px;
        flex-shrink: 0;
    }
    body.viewer-room-douyin .dy-avatar-img-wrap {
        position: relative;
        display: inline-flex;
        align-items: center;
        justify-content: center;
    }
    body.viewer-room-douyin .dy-avatar-img-wrap .dy-avatar-img {
        position: absolute;
        inset: 0;
        width: 100%;
        height: 100%;
        object-fit: cover;
        border-radius: inherit;
    }
    body.viewer-room-douyin .dy-avatar-img-wrap .dy-avatar-fallback {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        position: absolute;
        inset: 0;
        border-radius: inherit;
        background: #333;
        color: rgba(255,255,255,.5);
    }
    body.viewer-room-douyin .dy-avatar-img-wrap .dy-avatar-fallback i {
        font-size: 50%;
    }
    body.viewer-room-douyin .dy-header-top-donors .dy-donor-avatar:first-child {
        margin-left: 0;
    }
    body.viewer-room-douyin .dy-header-top-donors .dy-donor-avatar-placeholder .dy-avatar-img,
    body.dy-room-body .dy-header-top-donors .dy-donor-avatar-placeholder .dy-avatar-img {
        display: none;
    }
    body.viewer-room-douyin .dy-header-top-donors .dy-donor-avatar-placeholder .dy-avatar-fallback,
    body.dy-room-body .dy-header-top-donors .dy-donor-avatar-placeholder .dy-avatar-fallback {
        display: inline-flex !important;
        background: rgba(255,255,255,.08);
        color: rgba(255,255,255,.35);
    }
    /* 空占位：仅显示圆圈，不显示人像图标 */
    body.viewer-room-douyin .dy-header-top-donors .dy-donor-avatar-empty,
    body.dy-room-body .dy-header-top-donors .dy-donor-avatar-empty,
    .viewer-room-douyin .dy-header-top-donors .dy-donor-avatar-empty {
        background: rgba(255,255,255,.08) !important;
        border: 2px solid rgba(255,255,255,.2);
    }
    body.viewer-room-douyin .dy-header-top-donors .dy-donor-avatar-empty i,
    body.dy-room-body .dy-header-top-donors .dy-donor-avatar-empty .dy-avatar-fallback,
    .viewer-room-douyin .dy-header-top-donors .dy-donor-avatar-empty i,
    .viewer-room-douyin .dy-header-top-donors .dy-donor-avatar-empty .dy-avatar-fallback {
        display: none !important;
    }
    body.viewer-room-douyin .dy-header-online-more {
        display: flex;
        align-items: center;
        justify-content: center;
        width: 24px;
        height: 24px;
        border-radius: 50%;
        background: rgba(255,255,255,.15);
        color: #ffd700;
        font-size: 12px;
        text-decoration: none;
        margin-left: 4px;
    }
    body.viewer-room-douyin .dy-header-online-more:hover {
        background: rgba(255,255,255,.25);
        color: #ffd700;
        text-decoration: none;
    }

    body.viewer-room-douyin .dy-video-area,
    body.dy-room-body .dy-video-area {
        grid-area: dy-video;
        position: relative;
        min-height: 0;
        align-self: stretch;
        /* 覆盖默认的 absolute 定位，让 grid 布局正确工作 */
        top: auto;
        left: auto;
        right: auto;
        bottom: auto;
        /* 左侧直播流填满顶栏下方、与右侧主播流顶对齐：取消居中，改为拉伸填满 */
        display: flex;
        align-items: stretch;
        justify-content: flex-start;
        /* 确保视频区域不溢出到侧边栏 */
        overflow: hidden;
        z-index: 1;
    }
    /* 左侧主视频容器必须顶对齐、填满，与右侧主播窗同一行顶边对齐 */
    body.viewer-room-douyin .dy-video-area > .dy-host-video-wrap,
    body.dy-room-body .dy-video-area > .dy-host-video-wrap {
        align-self: stretch;
        flex: 1 1 0;
        min-height: 0;
        min-width: 0;
    }
    /* 赛事直播间：左视频区顶边与右侧栏对齐、无空隙，左侧主视频填满整块 */
    body.viewer-room-douyin .dy-live-wrap.viewer-room-event,
    body.dy-room-body .dy-live-wrap.viewer-room-event {
        row-gap: 0;
        column-gap: 0;
        grid-template-rows: 52px 1fr auto;
    }
    body.viewer-room-douyin .viewer-room-event .dy-desktop-header,
    body.dy-room-body .viewer-room-event .dy-desktop-header {
        margin: 0;
        padding: 0 16px;
        box-sizing: border-box;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-area,
    body.dy-room-body .viewer-room-event .dy-video-area {
        padding: 0;
        margin: 0;
        align-self: stretch;
        min-height: 0;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-area > .dy-host-video-wrap.dy-main-video-wrap,
    body.dy-room-body .viewer-room-event .dy-video-area > .dy-host-video-wrap.dy-main-video-wrap {
        flex: 1 1 0;
        min-width: 0;
        min-height: 0;
        width: 100%;
        height: 100%;
        position: relative;
        overflow: hidden;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-area > .dy-host-video-wrap.dy-main-video-wrap .viewer-video,
    body.dy-room-body .viewer-room-event .dy-video-area > .dy-host-video-wrap.dy-main-video-wrap .viewer-video {
        position: absolute;
        inset: 0;
        width: 100%;
        height: 100%;
        object-fit: cover;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-area > .dy-host-video-wrap.dy-main-video-wrap .viewer-no-signal-overlay,
    body.dy-room-body .viewer-room-event .dy-video-area > .dy-host-video-wrap.dy-main-video-wrap .viewer-no-signal-overlay {
        position: absolute;
        inset: 0;
        width: 100%;
        height: 100%;
    }
    /* 赛事直播间桌面大窗：有 game_stream 时强制用 iframe、隐藏 video，避免被 video 盖住 */
    body.viewer-room-douyin .viewer-room-event .dy-host-video-wrap.dy-main-game-iframe #videoPlayer,
    body.dy-room-body .viewer-room-event .dy-host-video-wrap.dy-main-game-iframe #videoPlayer {
        display: none !important;
        visibility: hidden !important;
    }
    body.viewer-room-douyin .viewer-room-event .dy-host-video-wrap.dy-main-game-iframe #gameStreamIframe,
    body.dy-room-body .viewer-room-event .dy-host-video-wrap.dy-main-game-iframe #gameStreamIframe {
        display: block !important;
        position: absolute;
        inset: 0;
        width: 100%;
        height: 100%;
        z-index: 2;
    }
    body.viewer-room-douyin .viewer-room-event .dy-desktop-sidebar,
    body.dy-room-body .viewer-room-event .dy-desktop-sidebar {
        padding-top: 0;
        margin: 0;
        align-self: stretch;
    }
    body.viewer-room-douyin .dy-desktop-sidebar,
    body.dy-room-body .dy-desktop-sidebar {
        grid-area: dy-sidebar;
        display: flex !important;
        flex-direction: column;
        min-height: 0;
        align-self: stretch;
        overflow: hidden;
        background: #141414;
        border-left: 1px solid var(--dy-border);
        z-index: 50;
        /* 确保侧边栏在视频区上方，不被覆盖；顶边与左侧视频区对齐 */
        position: relative;
        padding-top: 0;
    }
    body.viewer-room-douyin .dy-desktop-sidebar[aria-hidden="true"] { display: none !important; }
    body.viewer-room-douyin .dy-sidebar-top-row {
        flex-shrink: 0;
        display: flex;
        align-items: center;
        flex-wrap: wrap;
        gap: 12px 16px;
        padding: 10px 14px;
        border-bottom: 1px solid var(--dy-border);
    }
    body.viewer-room-douyin .dy-sidebar-back {
        color: rgba(255,255,255,.95);
        text-decoration: none;
        font-size: 14px;
    }
    body.viewer-room-douyin .dy-sidebar-back:hover { color: #fff; text-decoration: none; }
    body.viewer-room-douyin .dy-sidebar-stat { color: rgba(255,255,255,.85); font-size: 13px; }
    body.viewer-room-douyin .dy-sidebar-wallet-link {
        color: rgba(255,255,255,.95);
        text-decoration: none;
        font-size: 13px;
    }
    body.viewer-room-douyin .dy-sidebar-wallet-link:hover { color: #fff; text-decoration: none; }
    body.viewer-room-douyin .dy-sidebar-top-like {
        padding: 0;
        border: none;
        background: none;
        cursor: pointer;
        color: rgba(255,255,255,.9);
        font-size: 13px;
    }
    body.viewer-room-douyin .dy-sidebar-top-like:hover { color: #fff; }
    /* 赛事直播桌面：右侧栏顶部主播小窗 */
    body.viewer-room-douyin .dy-desktop-sidebar.dy-sidebar-with-host > .dy-host-video-wrap {
        flex: 0 0 auto;
        height: 200px;
        min-height: 160px;
        border-radius: 8px;
        margin: 10px 12px;
        overflow: hidden;
        background: #000;
    }
    body.viewer-room-douyin .dy-desktop-sidebar.dy-sidebar-with-host > .dy-host-video-wrap .viewer-video {
        width: 100%;
        height: 100%;
        object-fit: cover;
    }
    body.viewer-room-douyin .dy-desktop-sidebar.dy-sidebar-with-host > .dy-host-video-wrap .viewer-no-signal-overlay {
        border-radius: 8px;
    }
    body.viewer-room-douyin .dy-sidebar-online {
        flex-shrink: 0;
        display: flex;
        align-items: center;
        flex-wrap: wrap;
        gap: 6px 10px;
        padding: 12px 14px;
        color: var(--dy-text-secondary);
        font-size: 13px;
        border-bottom: 1px solid var(--dy-border);
    }
    body.viewer-room-douyin .dy-sidebar-online-icon {
        color: rgba(255,255,255,.85);
        font-size: 14px;
    }
    body.viewer-room-douyin .dy-sidebar-online-sep { color: rgba(255,255,255,.5); }
    body.viewer-room-douyin .dy-sidebar-top-donors {
        display: flex;
        align-items: center;
        margin-left: auto;
    }
    body.viewer-room-douyin .dy-sidebar-top-donors .dy-donor-avatar {
        width: 24px;
        height: 24px;
        border-radius: 50%;
        border: 2px solid var(--dy-bg-secondary, #2a2a2e);
        background: var(--dy-bg-secondary, #2a2a2e) center/cover no-repeat;
        margin-left: -8px;
        flex-shrink: 0;
    }
    body.viewer-room-douyin .dy-sidebar-top-donors .dy-donor-avatar:first-child { margin-left: 0; }
    body.viewer-room-douyin .dy-sidebar-online-more {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        width: 22px;
        height: 22px;
        border-radius: 50%;
        background: rgba(255,255,255,.15);
        color: rgba(255,255,255,.8);
        font-size: 11px;
        text-decoration: none;
        flex-shrink: 0;
    }
    body.viewer-room-douyin .dy-sidebar-online-more:hover { background: rgba(255,255,255,.25); color: #fff; }

    /* 赛事直播间：右侧栏顶部主播推流小窗（放大），聊天区相应缩小 */
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-host-video-wrap {
        display: block;
        flex-shrink: 0;
        position: relative;
        width: 100%;
        height: 280px;
        background: #000;
        border-radius: 0;
        overflow: hidden;
        margin-bottom: 0;
        border-bottom: 1px solid var(--dy-border);
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-host-video-wrap .viewer-video {
        width: 100%;
        height: 100%;
        object-fit: cover;
        border-radius: 0;
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-host-video-wrap .dy-sidebar-host-video-label {
        position: absolute;
        top: 6px;
        left: 8px;
        z-index: 2;
        font-size: 11px;
        color: rgba(255,255,255,.9);
        background: rgba(0,0,0,.5);
        padding: 2px 8px;
        border-radius: 4px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-host-video-wrap .dy-sidebar-host-swap-btn {
        position: absolute;
        top: 6px;
        right: 8px;
        z-index: 2;
        width: 32px;
        height: 32px;
        padding: 0;
        border: none;
        border-radius: 6px;
        background: rgba(0,0,0,.5);
        color: rgba(255,255,255,.9);
        font-size: 14px;
        display: inline-flex;
        align-items: center;
        justify-content: center;
        cursor: pointer;
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-host-video-wrap .dy-sidebar-host-swap-btn:hover {
        background: rgba(0,0,0,.7);
        color: #fff;
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-host-video-wrap .dy-sidebar-host-no-signal {
        position: absolute;
        inset: 0;
        display: flex;
        align-items: center;
        justify-content: center;
        background: rgba(0,0,0,.7);
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-host-video-wrap .dy-sidebar-host-no-signal[aria-hidden="true"] { display: none; }

    /* 赛事直播间桌面版：礼物特效用浮层浮在主播视频与聊天室之间，不占布局中间一块 */
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-effect-area.viewer-room-event-gift-effect-area,
    body.dy-room-body .viewer-room-event .dy-sidebar-effect-area.viewer-room-event-gift-effect-area {
        flex-shrink: 0;
        position: relative;
        width: 100%;
        min-height: 0;
        max-height: 0;
        overflow: visible;
        background: transparent;
        pointer-events: none;
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-effect-area .dy-gift-effect-overlay,
    body.dy-room-body .viewer-room-event .dy-sidebar-effect-area .dy-gift-effect-overlay {
        position: fixed;
        left: 0;
        top: 0;
        right: 0;
        bottom: 0;
        z-index: 999998;
        display: flex;
        align-items: center;
        justify-content: center;
        pointer-events: none;
        padding: 0;
    }

    /* 赛事直播间：下注榜（左侧，与聊天室等高）+ 聊天室 */
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-bottom-row {
        flex: 1;
        min-height: 0;
        display: flex;
        flex-direction: row;
        overflow: hidden;
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-bet-leaderboard {
        width: 220px;
        min-width: 180px;
        flex-shrink: 0;
        display: flex;
        flex-direction: column;
        border-right: 1px solid var(--dy-border);
        background: rgba(0,0,0,.2);
        overflow: hidden;
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-bet-leaderboard .dy-sidebar-bet-title {
        flex-shrink: 0;
        margin: 0;
        padding: 8px 10px;
        font-size: 13px;
        font-weight: 600;
        color: rgba(255,255,255,.95);
        border-bottom: 1px solid var(--dy-border);
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-bet-list {
        list-style: none;
        margin: 0;
        padding: 8px 10px;
        flex: 1;
        min-height: 0;
        overflow-y: auto;
        display: flex;
        flex-direction: column;
        gap: 6px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-bet-list .dy-lb-row {
        display: flex;
        align-items: center;
        gap: 6px;
        font-size: 12px;
        color: rgba(255,255,255,.9);
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-bet-list .dy-lb-avatar {
        width: 24px;
        height: 24px;
        border-radius: 50%;
        background: var(--dy-bg-secondary, #2a2a2e) center/cover no-repeat;
        flex-shrink: 0;
        display: inline-flex;
        align-items: center;
        justify-content: center;
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-bet-list .dy-lb-avatar .fas {
        font-size: 11px;
        color: rgba(255,255,255,.5);
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-bet-list .dy-lb-nickname {
        flex: 1;
        min-width: 0;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-bet-list .dy-lb-value,
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-bet-list .dy-lb-content {
        min-width: 0;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        font-size: 11px;
        color: rgba(255,255,255,.75);
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-bet-list .dy-lb-amount {
        color: #ffd93d;
        font-size: 11px;
        flex-shrink: 0;
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-bet-list .dy-lb-empty {
        color: rgba(255,255,255,.5);
        font-size: 12px;
        padding: 8px 0;
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-chat-column {
        flex: 1;
        min-width: 0;
        display: flex;
        flex-direction: column;
        overflow: hidden;
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-chat-column .dy-chat-messages-sidebar {
        flex: 1 1 auto;
        min-height: 0;
        max-height: none;
    }

    /* 赛事直播间：仅奖杯可点击打开排行榜，在线观众/人数/三头像不可点 */
    body.viewer-room-douyin .viewer-room-event .dy-header-online {
        cursor: default;
        position: relative;
    }
    body.viewer-room-douyin .viewer-room-event .dy-header-online .dy-header-online-more,
    body.viewer-room-douyin .viewer-room-event .dy-header-online .dy-header-online-trophy-only {
        cursor: pointer;
    }
    body.viewer-room-douyin .viewer-room-event .dy-header-online .dy-header-top-donors,
    body.viewer-room-douyin .viewer-room-event .dy-header-online #dyHeaderViewerCount {
        pointer-events: none;
    }
    /* 送礼排行榜下拉浮层 */
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-dropdown {
        position: absolute;
        top: calc(100% + 8px);
        right: 0;
        width: 300px;
        max-height: 0;
        overflow: hidden;
        background: rgba(20, 20, 20, 0.98);
        backdrop-filter: blur(10px);
        -webkit-backdrop-filter: blur(10px);
        border-radius: 12px;
        box-shadow: 0 8px 32px rgba(0,0,0,0.5);
        z-index: 9999;
        opacity: 0;
        transform: translateY(-10px);
        transition: max-height 0.35s ease, opacity 0.25s ease, transform 0.25s ease;
        pointer-events: none;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-dropdown[aria-hidden="false"] {
        max-height: 520px;
        opacity: 1;
        transform: translateY(0);
        pointer-events: auto;
        overflow: visible;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-header {
        display: flex;
        align-items: center;
        gap: 8px;
        padding: 14px 16px 10px;
        font-size: 14px;
        font-weight: 600;
        color: #fff;
        border-bottom: 1px solid rgba(255,255,255,.1);
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-header i {
        color: #ffd93d;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-tabs {
        display: flex;
        align-items: center;
        padding: 0 16px;
        gap: 0;
        border-bottom: 1px solid rgba(255,255,255,.1);
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-tabs-label {
        margin-left: auto;
        font-size: 11px;
        color: rgba(255,255,255,.5);
        pointer-events: none;
        user-select: none;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-tab {
        padding: 10px 14px;
        font-size: 13px;
        color: rgba(255,255,255,.6);
        background: none;
        border: none;
        border-bottom: 2px solid transparent;
        margin-bottom: -1px;
        cursor: pointer;
        transition: color .2s, border-color .2s;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-tab:hover {
        color: rgba(255,255,255,.85);
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-tab.active {
        color: #ffd93d;
        border-bottom-color: #ffd93d;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-panel {
        display: block;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-panel[aria-hidden="true"] {
        display: none !important;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-list {
        list-style: none;
        margin: 0;
        padding: 10px 12px 14px;
        max-height: 400px;
        overflow-y: auto;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-list::-webkit-scrollbar {
        width: 4px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-list::-webkit-scrollbar-thumb {
        background: rgba(255,255,255,.2);
        border-radius: 2px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-item {
        display: flex;
        align-items: center;
        gap: 10px;
        padding: 8px 10px;
        border-radius: 8px;
        transition: background 0.2s;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-item:hover {
        background: rgba(255,255,255,.08);
    }
    /* 送礼排行榜冠亚季军图标（与下注榜一致） */
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-icon {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        width: 22px;
        height: 22px;
        flex-shrink: 0;
        font-size: 14px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-item:nth-child(1) .dy-gift-rank-icon.dy-gift-rank-icon-1 {
        color: #ffd700;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-item:nth-child(2) .dy-gift-rank-icon.dy-gift-rank-icon-2 {
        color: #c0c0c0;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-item:nth-child(3) .dy-gift-rank-icon.dy-gift-rank-icon-3 {
        color: #cd7f32;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-num {
        width: 22px;
        height: 22px;
        border-radius: 50%;
        background: rgba(255,255,255,.15);
        display: inline-flex;
        align-items: center;
        justify-content: center;
        font-size: 11px;
        font-weight: 600;
        color: rgba(255,255,255,.9);
        flex-shrink: 0;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-avatar {
        width: 32px;
        height: 32px;
        border-radius: 50%;
        background: #333 center/cover no-repeat;
        flex-shrink: 0;
        display: flex;
        align-items: center;
        justify-content: center;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-avatar i {
        font-size: 14px;
        color: rgba(255,255,255,.5);
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-name {
        flex: 1;
        min-width: 0;
        font-size: 13px;
        color: #fff;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-amount {
        font-size: 13px;
        color: #ffd93d;
        font-weight: 500;
        flex-shrink: 0;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-rank-empty {
        color: rgba(255,255,255,.5);
        font-size: 13px;
        text-align: center;
        padding: 20px 0;
    }

    /* 赛事直播间：下注榜浮层叠在大视频上，透明底，右侧；桌面版=前3固定+下方向上滚动 */
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-overlay {
        position: absolute;
        right: 12px;
        /* 与右侧聊天区对齐：主播小窗 280px 下方开始 */
        top: 280px;
        bottom: 12px;
        width: 400px;
        height: auto;
        max-height: none;
        background: transparent;
        padding: 10px;
        z-index: 20;
        display: flex;
        flex-direction: column;
        overflow: hidden;
        pointer-events: auto;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-desktop,
    body.dy-room-body .viewer-room-event .dy-video-bet-desktop {
        display: flex !important;
        flex-direction: column;
        flex: 1;
        min-height: 0;
        overflow: hidden;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-list-mobile,
    body.dy-room-body .viewer-room-event .dy-video-bet-list-mobile {
        display: none !important;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-top3,
    body.dy-room-body .viewer-room-event .dy-video-bet-top3 {
        list-style: none;
        margin: 0;
        padding: 0;
        flex-shrink: 0;
        display: flex;
        flex-direction: column;
        gap: 8px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-scroll-wrap,
    body.dy-room-body .viewer-room-event .dy-video-bet-scroll-wrap {
        flex: 1;
        min-height: 0;
        overflow: hidden;
        display: none;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-scroll-wrap.dy-video-bet-scroll-visible,
    body.dy-room-body .viewer-room-event .dy-video-bet-scroll-wrap.dy-video-bet-scroll-visible {
        display: block;
    }
    /* 動畫時長由 JS 依列表高度以固定捲速（--dy-bet-scroll-duration，px/s）寫入，預設偏慢 */
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-scroll-inner,
    body.dy-room-body .viewer-room-event .dy-video-bet-scroll-inner {
        --dy-bet-scroll-duration: 72s;
        animation: dy-bet-scroll-up var(--dy-bet-scroll-duration) linear infinite;
    }
    @keyframes dy-bet-scroll-up {
        0% { transform: translateY(0); }
        100% { transform: translateY(-50%); }
    }
    /* 桌面版：房管/主播弹幕在大视频上方走马灯 */
    body.viewer-room-douyin .viewer-room-event .dy-host-video-wrap .dy-danmaku-marquee-overlay,
    body.dy-room-body .viewer-room-event .dy-host-video-wrap .dy-danmaku-marquee-overlay {
        position: absolute;
        left: 0;
        right: 0;
        top: 12px;
        height: 36px;
        overflow: hidden;
        pointer-events: none;
        z-index: 18;
        display: block;
    }
    body.viewer-room-douyin .viewer-room-event .dy-host-video-wrap .dy-danmaku-marquee-overlay[aria-hidden="true"]:empty,
    body.dy-room-body .viewer-room-event .dy-host-video-wrap .dy-danmaku-marquee-overlay[aria-hidden="true"]:empty {
        display: none;
    }
    body.viewer-room-douyin .viewer-room-event .dy-danmaku-marquee-item,
    body.dy-room-body .viewer-room-event .dy-danmaku-marquee-item {
        position: absolute;
        top: 0;
        left: 100%;
        white-space: nowrap;
        color: #fff;
        font-size: 22px;
        font-weight: 700;
        padding: 6px 16px;
        background: linear-gradient(135deg, rgba(255, 193, 7, 0.5) 0%, rgba(255, 152, 0, 0.45) 100%);
        border-radius: 8px;
        box-shadow: 0 2px 12px rgba(0,0,0,.5), 0 0 20px rgba(255, 193, 7, 0.3);
        text-shadow: 0 1px 4px rgba(0,0,0,.95), 0 0 12px rgba(255, 193, 7, 0.5);
        border: 1px solid rgba(255, 255, 255, 0.35);
        animation: dy-danmaku-marquee 14s linear forwards;
    }
    @keyframes dy-danmaku-marquee {
        0% { transform: translateX(0); }
        100% { transform: translateX(calc(-100vw - 100%)); }
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-overlay .dy-video-bet-list.dy-video-bet-list-rest,
    body.dy-room-body .viewer-room-event .dy-video-bet-overlay .dy-video-bet-list.dy-video-bet-list-rest {
        flex: none;
        overflow: visible;
        gap: 8px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-header {
        display: flex;
        align-items: center;
        gap: 6px;
        font-size: 13px;
        font-weight: 600;
        color: #fff;
        margin-bottom: 10px;
        flex-shrink: 0;
        background: rgba(0, 0, 0, 0.4);
        padding: 6px 10px;
        border-radius: 6px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-header i {
        color: #ffd93d;
        font-size: 14px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-list {
        list-style: none;
        margin: 0;
        padding: 0;
        display: flex;
        flex-direction: column;
        gap: 8px;
        overflow-y: auto;
        flex: 1;
        min-height: 0;
        transition: opacity 0.2s ease;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-list.dy-video-bet-updating {
        opacity: 0.75;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-list::-webkit-scrollbar {
        width: 4px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-list::-webkit-scrollbar-thumb {
        background: rgba(255,255,255,.2);
        border-radius: 2px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-item {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        gap: 6px 8px;
        font-size: 12px;
        color: rgba(255,255,255,.95);
        padding: 6px 10px;
        background: rgba(0, 0, 0, 0.35);
        border-radius: 8px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-item .dy-video-bet-rank,
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-item .dy-video-bet-rank-icon {
        flex-shrink: 0;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-line1 {
        font-size: 12px;
        color: #fff;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        flex: 1;
        min-width: 0;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-line2 {
        font-size: 11px;
        color: rgba(255,255,255,.8);
        word-break: break-word;
        white-space: normal;
        line-height: 1.35;
        width: 100%;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-rank {
        width: 18px;
        height: 18px;
        border-radius: 50%;
        background: rgba(255,255,255,.15);
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 10px;
        font-weight: 700;
        color: #fff;
        flex-shrink: 0;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-item:nth-child(1) .dy-video-bet-rank {
        background: linear-gradient(135deg, #ffd700, #ffaa00);
        color: #000;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-item:nth-child(2) .dy-video-bet-rank {
        background: linear-gradient(135deg, #c0c0c0, #a0a0a0);
        color: #000;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-item:nth-child(3) .dy-video-bet-rank {
        background: linear-gradient(135deg, #cd7f32, #a0522d);
        color: #fff;
    }
    /* 前三名图标（奖杯/奖牌） */
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-rank-icon {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        width: 22px;
        height: 22px;
        flex-shrink: 0;
        font-size: 14px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-item:nth-child(1) .dy-video-bet-rank-icon.dy-video-bet-rank-1 {
        color: #ffd700;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-item:nth-child(2) .dy-video-bet-rank-icon.dy-video-bet-rank-2 {
        color: #c0c0c0;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-item:nth-child(3) .dy-video-bet-rank-icon.dy-video-bet-rank-3 {
        color: #cd7f32;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-avatar {
        width: 26px;
        height: 26px;
        border-radius: 50%;
        background: var(--dy-bg-secondary, #2a2a2e) center/cover no-repeat;
        flex-shrink: 0;
        display: flex;
        align-items: center;
        justify-content: center;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-info {
        flex: 1;
        min-width: 0;
        display: flex;
        flex-direction: column;
        gap: 2px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-nickname {
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        font-size: 12px;
        color: #fff;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-content {
        font-size: 11px;
        color: rgba(255,255,255,.75);
        display: block;
        margin-top: 2px;
        word-break: break-word;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-details {
        display: flex;
        flex-direction: column;
        gap: 2px;
        font-size: 11px;
        color: rgba(255,255,255,.8);
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-meta {
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-meta-label {
        color: rgba(255,255,255,.6);
        margin-right: 4px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-amount {
        font-size: 11px;
        color: #ffd93d;
        font-weight: 500;
    }
    body.viewer-room-douyin .viewer-room-event .dy-video-bet-empty {
        color: rgba(255,255,255,.5);
        font-size: 12px;
        text-align: center;
        padding: 20px 0;
    }

    body.viewer-room-douyin .dy-sidebar-actions-row {
        flex-shrink: 0;
        display: flex;
        align-items: center;
        gap: 12px;
        padding: 8px 14px;
        border-top: 1px solid var(--dy-border);
    }
    body.viewer-room-douyin .dy-sidebar-like-inline {
        display: inline-flex;
        align-items: center;
        gap: 4px;
        padding: 0;
        border: none;
        background: none;
        cursor: pointer;
        color: rgba(255,255,255,.9);
        font-size: 13px;
    }
    body.viewer-room-douyin .dy-sidebar-like-inline:hover { color: #fff; }
    body.viewer-room-douyin .dy-sidebar-like-inline .dy-sidebar-like-icon { margin-right: 2px; }
    body.viewer-room-douyin .dy-sidebar-more-gifts,
    body.viewer-room-douyin .dy-sidebar-recharge {
        padding: 0;
        border: none;
        background: none;
        cursor: pointer;
        color: rgba(255,255,255,.7);
        font-size: 13px;
        text-decoration: none;
    }
    body.viewer-room-douyin .dy-sidebar-more-gifts:hover,
    body.viewer-room-douyin .dy-sidebar-recharge:hover { color: #fff; }
    body.viewer-room-douyin .dy-chat-messages-sidebar {
        flex: 1 1 auto;
        min-height: 120px;
        overflow-y: auto;
        padding: 10px 14px;
        display: flex;
        flex-direction: column;
        gap: 8px;
    }
    /* 赛事直播房：聊天区填满剩余空间 */
    body.viewer-room-douyin .viewer-room-event .dy-desktop-sidebar .dy-chat-messages-sidebar {
        flex: 1 1 auto;
        max-height: none;
    }
    body.viewer-room-douyin .dy-sidebar-rules {
        flex-shrink: 0;
        padding: 10px 14px;
        color: rgba(255,255,255,.5);
        font-size: 12px;
        line-height: 1.5;
        border-top: 1px solid var(--dy-border);
    }
    body.viewer-room-douyin .dy-sidebar-input-wrap {
        flex-shrink: 0;
        display: flex;
        gap: 8px;
        padding: 12px 14px;
        border-top: 1px solid var(--dy-border);
    }
    body.viewer-room-douyin .dy-sidebar-chat-input {
        flex: 1;
        height: 38px;
        padding: 0 14px;
        border-radius: 8px;
        border: 1px solid var(--dy-border);
        background: rgba(255,255,255,.08);
        color: #fff;
        font-size: 14px;
    }
    body.viewer-room-douyin .dy-sidebar-chat-input::placeholder { color: rgba(255,255,255,.5); }
    body.viewer-room-douyin .dy-sidebar-send-btn {
        height: 38px;
        padding: 0 18px;
        border-radius: 8px;
        border: none;
        background: var(--dy-red);
        color: #fff;
        font-size: 14px;
        font-weight: 500;
        cursor: pointer;
    }
    body.viewer-room-douyin .dy-sidebar-send-btn:hover { background: var(--dy-red-dark); }

    body.viewer-room-douyin .dy-desktop-gift-bar,
    body.dy-room-body .dy-desktop-gift-bar {
        grid-area: dy-giftbar;
        display: flex !important;
        align-items: flex-end;
        gap: 6px;
        padding: 0 12px 8px 12px;
        min-height: 90px;
        height: auto;
        flex-shrink: 0;
        background: #1a1a1a;
        border-top: 1px solid var(--dy-border);
        overflow: visible;
        z-index: 15;
        position: relative;
    }
    body.viewer-room-douyin .dy-desktop-gift-bar[aria-hidden="true"] { display: none !important; }
    
    /* 礼物栏箭头 */
    body.viewer-room-douyin .dy-gift-bar-arrow {
        flex-shrink: 0;
        display: none;
        align-items: center;
        justify-content: center;
        width: 28px;
        height: 52px;
        background: linear-gradient(90deg, rgba(26,26,26,0.95) 0%, rgba(26,26,26,0.7) 100%);
        border: none;
        border-radius: 4px;
        color: rgba(255,255,255,0.8);
        font-size: 14px;
        cursor: pointer;
        z-index: 5;
        transition: all 0.2s;
    }
    body.viewer-room-douyin .dy-gift-bar-arrow:hover {
        background: rgba(255,255,255,0.15);
        color: #fff;
    }
    body.viewer-room-douyin .dy-gift-bar-arrow-left {
        background: linear-gradient(90deg, rgba(26,26,26,1) 0%, rgba(26,26,26,0) 100%);
    }
    body.viewer-room-douyin .dy-gift-bar-arrow-right {
        background: linear-gradient(270deg, rgba(26,26,26,1) 0%, rgba(26,26,26,0) 100%);
    }
    
    body.viewer-room-douyin .dy-gift-bar-scroll,
    body.dy-room-body .dy-gift-bar-scroll {
        flex: 1;
        min-width: 0;
        overflow-x: auto;
        overflow-y: visible;
        padding: 24px 0 2px 0;
        scrollbar-width: none;
        -ms-overflow-style: none;
    }
    body.viewer-room-douyin .dy-gift-bar-scroll::-webkit-scrollbar,
    body.dy-room-body .dy-gift-bar-scroll::-webkit-scrollbar {
        display: none;
    }
    body.viewer-room-douyin .dy-gift-bar-list,
    body.dy-room-body .dy-gift-bar-list {
        display: flex;
        gap: 6px;
        padding-right: 6px;
        align-items: center;
    }
    body.viewer-room-douyin .dy-gift-bar-item,
    body.dy-room-body .dy-gift-bar-item {
        flex-shrink: 0;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: 2px;
        width: 52px;
        min-height: 62px;
        padding: 4px 4px 6px;
        background: rgba(255,255,255,.06);
        border: 2px solid transparent;
        border-radius: 6px;
        color: #fff;
        font-size: 10px;
        cursor: pointer;
        transition: all 0.15s;
        position: relative;
    }
    body.viewer-room-douyin .dy-gift-bar-item:hover,
    body.dy-room-body .dy-gift-bar-item:hover {
        background: rgba(254,44,85,.12);
        border-color: rgba(254,44,85,.5);
    }
    /* 选中状态 */
    body.viewer-room-douyin .dy-gift-bar-item.selected,
    body.dy-room-body .dy-gift-bar-item.selected {
        background: rgba(254,44,85,.15);
        border-color: var(--dy-red);
        box-shadow: 0 0 0 1px var(--dy-red);
    }
    /* 选中时的赠送按钮（浮在礼物卡片上方） */
    body.viewer-room-douyin .dy-gift-bar-item .dy-gift-send-btn,
    body.dy-room-body .dy-gift-bar-item .dy-gift-send-btn {
        display: none;
        position: absolute;
        top: -22px;
        left: 50%;
        transform: translateX(-50%);
        padding: 3px 10px;
        background: linear-gradient(135deg, #fe2c55 0%, #ff4d6d 100%);
        color: #fff;
        font-size: 11px;
        font-weight: 600;
        border: none;
        border-radius: 12px;
        cursor: pointer;
        white-space: nowrap;
        z-index: 100;
        box-shadow: 0 2px 10px rgba(254,44,85,0.5);
        letter-spacing: 0.5px;
        transition: all 0.15s ease;
    }
    body.viewer-room-douyin .dy-gift-bar-item.selected .dy-gift-send-btn,
    body.dy-room-body .dy-gift-bar-item.selected .dy-gift-send-btn {
        display: block;
        animation: giftSendBtnPop 0.2s ease-out;
    }
    @keyframes giftSendBtnPop {
        0% { opacity: 0; transform: translateX(-50%) scale(0.8) translateY(5px); }
        100% { opacity: 1; transform: translateX(-50%) scale(1) translateY(0); }
    }
    body.viewer-room-douyin .dy-gift-bar-item .dy-gift-send-btn:hover,
    body.dy-room-body .dy-gift-bar-item .dy-gift-send-btn:hover {
        background: linear-gradient(135deg, #e0264c 0%, #ff3d5c 100%);
        transform: translateX(-50%) scale(1.05);
        box-shadow: 0 3px 14px rgba(254,44,85,0.6);
    }
    body.viewer-room-douyin .dy-gift-bar-item .dy-gift-send-btn:active,
    body.dy-room-body .dy-gift-bar-item .dy-gift-send-btn:active {
        transform: translateX(-50%) scale(0.96);
    }
    body.viewer-room-douyin .dy-gift-bar-item .dy-gift-icon-img,
    body.viewer-room-douyin .dy-gift-bar-item .dy-gift-emoji-img,
    body.dy-room-body .dy-gift-bar-item .dy-gift-icon-img,
    body.dy-room-body .dy-gift-bar-item .dy-gift-emoji-img { width: 28px; height: 28px; object-fit: contain; flex-shrink: 0; }
    body.viewer-room-douyin .dy-gift-bar-item .dy-gift-emoji { font-size: 22px; flex-shrink: 0; line-height: 1; }
    body.viewer-room-douyin .dy-gift-bar-item .dy-gift-bar-text { display: flex; flex-direction: column; align-items: center; justify-content: center; min-width: 0; width: 100%; gap: 0; }
    body.viewer-room-douyin .dy-gift-bar-item .dy-gift-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 10px; line-height: 1.2; max-width: 100%; text-align: center; }
    body.viewer-room-douyin .dy-gift-bar-item .dy-gift-points { color: #ffd93d; font-size: 10px; line-height: 1.2; text-align: center; }
    
    /* 分隔线 */
    body.viewer-room-douyin .dy-gift-bar-divider {
        width: 1px;
        height: 40px;
        background: rgba(255,255,255,0.15);
        flex-shrink: 0;
        margin: 0 4px;
    }
    
    /* 自定义打赏 */
    body.viewer-room-douyin .dy-gift-bar-tip {
        flex-shrink: 0;
        display: flex;
        align-items: center;
        gap: 4px;
    }
    body.viewer-room-douyin .dy-gift-bar-tip-input {
        width: 70px;
        height: 32px;
        padding: 0 8px;
        border: 1px solid var(--dy-border);
        border-radius: 4px;
        background: rgba(255,255,255,0.08);
        color: #fff;
        font-size: 13px;
        text-align: center;
    }
    body.viewer-room-douyin .dy-gift-bar-tip-input::placeholder {
        color: rgba(255,255,255,0.4);
    }
    body.viewer-room-douyin .dy-gift-bar-tip-input:focus {
        outline: none;
        border-color: var(--dy-red);
        background: rgba(255,255,255,0.12);
    }
    body.viewer-room-douyin .dy-gift-bar-tip-btn {
        height: 32px;
        padding: 0 12px;
        border: none;
        border-radius: 4px;
        background: rgba(255,255,255,0.1);
        color: #fff;
        font-size: 12px;
        cursor: pointer;
        transition: all 0.15s;
    }
    body.viewer-room-douyin .dy-gift-bar-tip-btn:hover {
        background: rgba(255,255,255,0.18);
    }
    
    /* 旧的赠送按钮已移除，赠送按钮现在浮在选中的礼物下方 */
    
    body.viewer-room-douyin .dy-gift-bar-recharge {
        flex-shrink: 0;
        display: flex;
        align-items: center;
        justify-content: center;
        height: 32px;
        padding: 0 12px;
        border-radius: 4px;
        background: linear-gradient(135deg, #ff6b35 0%, #f7931e 100%);
        color: #fff;
        font-size: 12px;
        text-decoration: none;
        border: none;
        cursor: pointer;
        transition: all 0.15s;
    }
    body.viewer-room-douyin .dy-gift-bar-recharge:hover { 
        background: linear-gradient(135deg, #ff5722 0%, #e68900 100%); 
        color: #fff; 
        transform: scale(1.02);
    }
    /* 赛事直播间电脑版：隐藏充值按钮，显示钱包（外部余额+钻石） */
    body.viewer-room-douyin .viewer-room-event .dy-gift-bar-recharge.dy-gift-bar-recharge-hidden,
    body.dy-room-body .viewer-room-event .dy-gift-bar-recharge.dy-gift-bar-recharge-hidden {
        display: none !important;
    }
    body.viewer-room-douyin .viewer-room-event .dy-header-wallet,
    body.dy-room-body .viewer-room-event .dy-header-wallet {
        display: none !important;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-bar-wallet-wrap,
    body.dy-room-body .viewer-room-event .dy-gift-bar-wallet-wrap {
        flex-shrink: 0;
        display: flex;
        align-items: center;
        justify-content: center;
        flex-direction: column;
        gap: 2px;
        min-width: 100px;
        padding: 6px 12px;
        border-radius: 6px;
        background: rgba(0,0,0,.25);
        color: rgba(255,255,255,.95);
        font-size: 12px;
        cursor: pointer;
        transition: background 0.2s;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-bar-wallet-wrap:hover,
    body.dy-room-body .viewer-room-event .dy-gift-bar-wallet-wrap:hover {
        background: rgba(0,0,0,.4);
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-bar-wallet-display {
        display: flex;
        flex-direction: column;
        align-items: flex-end;
        gap: 2px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-bar-wallet-line {
        white-space: nowrap;
    }
    body.viewer-room-douyin .viewer-room-event .dy-gift-bar-wallet-diamond {
        font-weight: 600;
        color: #ffd93d;
    }

    body.viewer-room-douyin .dy-right-bar,
    body.viewer-room-douyin .dy-bottom-bar,
    body.viewer-room-douyin .dy-comment-overlay {
        display: none !important;
    }
    
    /* 桌面端隐藏移动端专属元素 */
    .dy-mobile-only {
        display: none !important;
    }
}

/* 小屏幕高度时的调整（如笔记本电脑） */
@media (min-width: 900px) and (max-height: 700px) {
    body.viewer-room-douyin .dy-live-wrap,
    body.dy-room-body .dy-live-wrap {
        /* 允许内容超出时滚动 */
        overflow-y: auto;
    }
    body.viewer-room-douyin .dy-desktop-sidebar,
    body.dy-room-body .dy-desktop-sidebar {
        min-height: 400px;
    }
    body.viewer-room-douyin .dy-sidebar-online {
        padding: 8px 12px;
    }
    body.viewer-room-douyin .dy-sidebar-rules {
        padding: 6px 12px;
        font-size: 11px;
    }
    body.viewer-room-douyin .dy-sidebar-input-wrap {
        padding: 8px 12px;
    }
    body.viewer-room-douyin .dy-desktop-gift-bar,
    body.dy-room-body .dy-desktop-gift-bar {
        min-height: 65px;
        padding: 6px 10px;
    }
}

/* 更小的宽度范围（900-1100px）：适当缩小侧边栏 */
@media (min-width: 900px) and (max-width: 1100px) {
    body.viewer-room-douyin .dy-live-wrap,
    body.dy-room-body .dy-live-wrap {
        grid-template-columns: 1fr 300px;
    }
    body.viewer-room-douyin .dy-live-wrap.viewer-room-event,
    body.dy-room-body .dy-live-wrap.viewer-room-event {
        grid-template-columns: 1fr 400px;
    }
}

/* 大屏幕（≥1400px）：赛事侧边栏更宽，主播小视窗更大 */
@media (min-width: 1400px) {
    body.viewer-room-douyin .dy-live-wrap.viewer-room-event,
    body.dy-room-body .dy-live-wrap.viewer-room-event {
        grid-template-columns: 1fr 520px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-host-video-wrap {
        height: 320px;
    }
}

/* 超大屏幕（≥1600px）：赛事侧边栏更宽 */
@media (min-width: 1600px) {
    body.viewer-room-douyin .dy-live-wrap.viewer-room-event,
    body.dy-room-body .dy-live-wrap.viewer-room-event {
        grid-template-columns: 1fr 580px;
    }
    body.viewer-room-douyin .viewer-room-event .dy-sidebar-host-video-wrap {
        height: 360px;
    }
}

.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0,0,0,0);
    white-space: nowrap;
    border: 0;
}

/* ========== 抖音风格直播间列表（竖卡片流） ========== */
body.viewer-rooms-douyin .content-wrapper.viewer-rooms-douyin .content {
    padding: 0 !important;
    background: var(--dy-bg) !important;
}
body.viewer-rooms-douyin .content-header {
    background: var(--dy-bg) !important;
    border-color: rgba(255,255,255,.08) !important;
}
body.viewer-rooms-douyin .content-header .m-0 {
    color: #fff !important;
    font-size: 18px;
    font-weight: 600;
}
.dy-rooms-wrap {
    min-height: calc(100vh - 110px);
    padding: 12px 0 24px;
    background: var(--dy-bg);
}
.dy-rooms-feed {
    display: flex;
    flex-direction: column;
    gap: 16px;
    max-width: 420px;
    margin: 0 auto;
    padding: 0 12px;
}
.dy-room-card {
    display: block;
    text-decoration: none;
    color: inherit;
    border-radius: 12px;
    overflow: hidden;
    background: #1a1a1a;
    box-shadow: 0 2px 12px rgba(0,0,0,.3);
    transition: transform .2s, box-shadow .2s;
}
.dy-room-card:hover {
    transform: scale(1.02);
    box-shadow: 0 4px 20px rgba(0,0,0,.4);
    color: inherit;
}
.dy-room-cover {
    position: relative;
    width: 100%;
    padding-bottom: 56.25%;
    background: linear-gradient(145deg, #2a2a2e 0%, #1a1a1e 100%);
}
.dy-room-cover-placeholder {
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, #333 0%, #1a1a1a 100%);
}
.dy-room-live-badge {
    position: absolute;
    top: 10px;
    left: 10px;
    padding: 4px 10px;
    border-radius: 4px;
    background: var(--dy-red);
    color: #fff;
    font-size: 12px;
    font-weight: 600;
}
.dy-room-viewers {
    position: absolute;
    bottom: 10px;
    right: 10px;
    padding: 4px 8px;
    border-radius: 4px;
    background: rgba(0,0,0,.5);
    color: rgba(255,255,255,.9);
    font-size: 12px;
}
.dy-room-viewers i { margin-right: 4px; }
.dy-room-info {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 14px;
}
.dy-room-avatar {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: linear-gradient(180deg, #444 0%, #2a2a2a 100%);
    flex-shrink: 0;
}
.dy-room-meta {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.dy-room-title {
    color: #fff;
    font-size: 15px;
    font-weight: 600;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.dy-room-desc {
    color: rgba(255,255,255,.55);
    font-size: 13px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.dy-room-enter {
    flex-shrink: 0;
    padding: 8px 16px;
    border-radius: 20px;
    background: var(--dy-red);
    color: #fff;
    font-size: 13px;
    font-weight: 500;
}
.dy-rooms-empty {
    text-align: center;
    padding: 48px 24px;
    color: rgba(255,255,255,.6);
    font-size: 15px;
}
.dy-rooms-message { padding: 12px; }
.dy-alert {
    padding: 12px 16px;
    border-radius: 8px;
    font-size: 14px;
}
.dy-alert-danger {
    background: rgba(254,44,85,.15);
    color: #ff6b6b;
    border: 1px solid rgba(254,44,85,.3);
}

/* 付费进房遮罩 */
.viewer-pay-entry-overlay {
    position: absolute;
    inset: 0;
    background: rgba(0,0,0,.85);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 100;
    backdrop-filter: blur(8px);
}
.viewer-pay-entry-content {
    text-align: center;
    padding: 32px;
    max-width: 320px;
}
.viewer-pay-entry-icon {
    font-size: 48px;
    color: var(--dy-yellow, #FFD700);
    margin-bottom: 16px;
}
.viewer-pay-entry-title {
    font-size: 20px;
    font-weight: 600;
    color: #fff;
    margin-bottom: 8px;
}
.viewer-pay-entry-hint {
    font-size: 15px;
    color: rgba(255,255,255,.8);
    margin-bottom: 20px;
}
.viewer-pay-entry-hint strong {
    color: var(--dy-yellow, #FFD700);
    font-size: 24px;
    margin: 0 4px;
}
.viewer-pay-entry-btn {
    background: linear-gradient(135deg, #FE2C55 0%, #FF6B6B 100%);
    border: none;
    padding: 12px 32px;
    font-size: 16px;
    font-weight: 600;
    border-radius: 24px;
    color: #fff;
    cursor: pointer;
    transition: transform .15s, box-shadow .15s;
}
.viewer-pay-entry-btn:hover {
    transform: scale(1.05);
    box-shadow: 0 4px 20px rgba(254,44,85,.5);
}
.viewer-pay-entry-btn:disabled {
    opacity: .6;
    cursor: not-allowed;
    transform: none;
}
.viewer-pay-entry-balance {
    color: rgba(255,255,255,.6);
}

/* ========== 主播操作抽屉 ========== */
.dy-streamer-drawer {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    background: linear-gradient(180deg, #1a1a2e 0%, #16213e 100%);
    border-radius: 20px 20px 0 0;
    z-index: 1100;
    transform: translateY(100%);
    transition: transform .3s ease;
    max-height: 60vh;
    overflow: hidden;
}
.dy-streamer-drawer[aria-hidden="false"] {
    transform: translateY(0);
}
.dy-streamer-drawer-mask {
    position: fixed;
    inset: 0;
    background: rgba(0,0,0,.6);
    z-index: 1099;
    opacity: 0;
    visibility: hidden;
    transition: opacity .3s, visibility .3s;
}
.dy-streamer-drawer-mask[aria-hidden="false"] {
    opacity: 1;
    visibility: visible;
}
.dy-streamer-drawer-header {
    display: flex;
    align-items: center;
    padding: 20px 16px 16px;
    border-bottom: 1px solid rgba(255,255,255,.1);
}
.dy-streamer-drawer-avatar {
    width: 56px;
    height: 56px;
    border-radius: 50%;
    background: #333 center/cover no-repeat;
    flex-shrink: 0;
    border: 2px solid var(--dy-red, #FE2C55);
}
.dy-streamer-drawer-info {
    flex: 1;
    margin-left: 12px;
    overflow: hidden;
}
.dy-streamer-drawer-name {
    display: block;
    font-size: 18px;
    font-weight: 600;
    color: #fff;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.dy-streamer-drawer-status {
    display: block;
    font-size: 13px;
    color: rgba(255,255,255,.7);
    margin-top: 4px;
}
.dy-streamer-drawer-status i {
    font-size: 8px;
    vertical-align: middle;
    margin-right: 4px;
}
.dy-streamer-drawer-header .dy-drawer-close {
    background: rgba(255,255,255,.1);
    border: none;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    color: rgba(255,255,255,.8);
    font-size: 14px;
    cursor: pointer;
    transition: background .2s;
}
.dy-streamer-drawer-header .dy-drawer-close:hover {
    background: rgba(255,255,255,.2);
}
.dy-streamer-drawer-body {
    padding: 16px;
    display: flex;
    gap: 12px;
    flex-wrap: wrap;
}
.dy-streamer-action-btn {
    flex: 1;
    min-width: 120px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 20px 16px;
    background: rgba(255,255,255,.05);
    border: 1px solid rgba(255,255,255,.1);
    border-radius: 12px;
    color: #fff;
    font-size: 14px;
    cursor: pointer;
    transition: background .2s, transform .15s;
}
.dy-streamer-action-btn:hover {
    background: rgba(255,255,255,.1);
    transform: translateY(-2px);
}
.dy-streamer-action-btn i {
    font-size: 24px;
    color: var(--dy-red, #FE2C55);
}
.dy-streamer-action-btn.dy-streamer-follow-btn i {
    color: #ff6b6b;
}
.dy-streamer-action-btn.dy-following i {
    color: #888;
}
.dy-streamer-action-btn.dy-following {
    background: rgba(255,255,255,.03);
}

/* ========== 私聊 Modal ========== */
.dy-dm-modal {
    position: fixed;
    inset: 0;
    z-index: 1200;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
    opacity: 0;
    visibility: hidden;
    transition: opacity .3s, visibility .3s;
}
.dy-dm-modal[aria-hidden="false"] {
    opacity: 1;
    visibility: visible;
}
.dy-dm-modal-mask {
    position: fixed;
    inset: 0;
    background: rgba(0,0,0,.7);
    z-index: 1199;
    opacity: 0;
    visibility: hidden;
    transition: opacity .3s, visibility .3s;
}
.dy-dm-modal-mask[aria-hidden="false"] {
    opacity: 1;
    visibility: visible;
}
.dy-dm-modal-dialog {
    width: 100%;
    max-width: 480px;
    max-height: 80vh;
    background: linear-gradient(180deg, #1a1a2e 0%, #0f0f1a 100%);
    border-radius: 16px;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    box-shadow: 0 8px 32px rgba(0,0,0,.5);
    transform: scale(.95);
    transition: transform .3s;
}
.dy-dm-modal[aria-hidden="false"] .dy-dm-modal-dialog {
    transform: scale(1);
}
.dy-dm-modal-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 16px 20px;
    border-bottom: 1px solid rgba(255,255,255,.1);
    background: rgba(255,255,255,.02);
}
.dy-dm-modal-title {
    font-size: 16px;
    font-weight: 600;
    color: #fff;
    margin: 0;
}
.dy-dm-modal-title i {
    color: var(--dy-red, #FE2C55);
}
.dy-dm-modal-close {
    background: rgba(255,255,255,.1);
    border: none;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    color: rgba(255,255,255,.8);
    font-size: 14px;
    cursor: pointer;
    transition: background .2s;
}
.dy-dm-modal-close:hover {
    background: rgba(255,255,255,.2);
}
.dy-dm-modal-body {
    flex: 1;
    overflow: hidden;
}
.dy-dm-messages {
    height: 320px;
    max-height: 50vh;
    overflow-y: auto;
    padding: 16px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}
.dy-dm-msg {
    display: flex;
    flex-direction: column;
    max-width: 80%;
}
.dy-dm-msg-me {
    align-self: flex-end;
    align-items: flex-end;
}
.dy-dm-msg-other {
    align-self: flex-start;
    align-items: flex-start;
}
.dy-dm-bubble {
    padding: 10px 14px;
    border-radius: 16px;
    font-size: 14px;
    line-height: 1.5;
    word-break: break-word;
}
.dy-dm-msg-me .dy-dm-bubble {
    background: linear-gradient(135deg, #FE2C55 0%, #FF6B6B 100%);
    color: #fff;
    border-bottom-right-radius: 4px;
}
.dy-dm-msg-other .dy-dm-bubble {
    background: rgba(255,255,255,.1);
    color: #fff;
    border-bottom-left-radius: 4px;
}
.dy-dm-time {
    font-size: 11px;
    color: rgba(255,255,255,.4);
    margin-top: 4px;
    padding: 0 4px;
}
.dy-dm-modal-footer {
    padding: 12px 16px;
    border-top: 1px solid rgba(255,255,255,.1);
    background: rgba(255,255,255,.02);
}
.dy-dm-send-form {
    display: flex;
    gap: 8px;
}
.dy-dm-input {
    flex: 1;
    background: rgba(255,255,255,.08);
    border: 1px solid rgba(255,255,255,.15);
    border-radius: 20px;
    padding: 10px 16px;
    font-size: 14px;
    color: #fff;
    outline: none;
    transition: border-color .2s, background .2s;
}
.dy-dm-input::placeholder {
    color: rgba(255,255,255,.4);
}
.dy-dm-input:focus {
    border-color: var(--dy-red, #FE2C55);
    background: rgba(255,255,255,.1);
}
.dy-dm-send-btn {
    background: linear-gradient(135deg, #FE2C55 0%, #FF6B6B 100%);
    border: none;
    border-radius: 20px;
    padding: 10px 20px;
    font-size: 14px;
    font-weight: 500;
    color: #fff;
    cursor: pointer;
    transition: transform .15s, box-shadow .15s;
}
.dy-dm-send-btn:hover {
    transform: scale(1.05);
    box-shadow: 0 4px 16px rgba(254,44,85,.4);
}

/* 桌面端头像可点击提示 */
.dy-header-avatar,
.dy-avatar {
    cursor: pointer;
    transition: transform .15s, box-shadow .15s;
}
.dy-header-avatar:hover,
.dy-avatar:hover {
    transform: scale(1.08);
    box-shadow: 0 0 0 3px rgba(254,44,85,.4);
}

/* 桌面端抽屉和Modal调整 */
@media (min-width: 768px) {
    .dy-streamer-drawer {
        left: 50%;
        right: auto;
        width: 400px;
        transform: translateX(-50%) translateY(100%);
        border-radius: 20px 20px 0 0;
    }
    .dy-streamer-drawer[aria-hidden="false"] {
        transform: translateX(-50%) translateY(0);
    }
    .dy-dm-modal-dialog {
        max-width: 520px;
    }
    .dy-dm-messages {
        height: 400px;
    }
}

/* 私聊/消息页面：保留主侧栏可见，仅内容区全宽由模板控制 */
/* 不再隐藏 main-sidebar，菜单在消息页也保持显示 */

/* ========== WhatsApp 风格聊天室样式 ========== */
:root {
    --wa-green: #25D366;
    --wa-green-dark: #128C7E;
    --wa-green-light: #DCF8C6;
    --wa-blue: #34B7F1;
    --wa-bg-chat: #E5DDD5;
    --wa-bg-chat-dark: #0B141A;
    --wa-msg-out: #DCF8C6;
    --wa-msg-in: #FFFFFF;
    --wa-msg-out-dark: #005C4B;
    --wa-msg-in-dark: #202C33;
    --wa-header-bg: #00A884;
    --wa-header-bg-dark: #202C33;
    --wa-text-primary: #111B21;
    --wa-text-secondary: #667781;
    --wa-time-text: #667781;
    --wa-border: rgba(134,150,160,0.15);
}

/* WhatsApp 聊天区域背景（浅色模式仿WhatsApp墙纸） */
.wa-chat-bg {
    background-color: var(--wa-bg-chat);
    background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23c5c5c5' fill-opacity='0.15'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
}

/* WhatsApp 消息容器 */
.wa-chat-messages {
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 12px 10%;
    min-height: 200px;
    overflow-y: auto;
}

/* WhatsApp 消息气泡基础样式 */
.wa-chat-msg {
    position: relative;
    max-width: 75%;
    padding: 6px 12px 22px 12px;
    border-radius: 8px;
    font-size: 14px;
    line-height: 1.4;
    word-break: break-word;
    box-shadow: 0 1px 0.5px rgba(11,20,26,0.13);
}

/* 自己发送的消息（绿色，右侧） */
.wa-chat-msg-out {
    align-self: flex-end;
    background: var(--wa-msg-out);
    color: var(--wa-text-primary);
    border-top-right-radius: 0;
    margin-right: 8px;
}
.wa-chat-msg-out::before {
    content: '';
    position: absolute;
    top: 0;
    right: -8px;
    width: 0;
    height: 0;
    border-top: 8px solid var(--wa-msg-out);
    border-right: 8px solid transparent;
}

/* 收到的消息（白色，左侧） */
.wa-chat-msg-in {
    align-self: flex-start;
    background: var(--wa-msg-in);
    color: var(--wa-text-primary);
    border-top-left-radius: 0;
    margin-left: 8px;
}
.wa-chat-msg-in::before {
    content: '';
    position: absolute;
    top: 0;
    left: -8px;
    width: 0;
    height: 0;
    border-top: 8px solid var(--wa-msg-in);
    border-left: 8px solid transparent;
}

/* 消息发送者名称 */
.wa-chat-sender {
    display: block;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--wa-green-dark);
    margin-bottom: 2px;
}

/* 消息时间 */
.wa-chat-time {
    position: absolute;
    right: 8px;
    bottom: 4px;
    font-size: 11px;
    color: var(--wa-time-text);
    white-space: nowrap;
}

/* 系统消息（如加入、礼物等） */
.wa-chat-msg-system {
    align-self: center;
    max-width: 85%;
    background: rgba(255,255,255,0.9);
    color: var(--wa-text-secondary);
    padding: 4px 12px;
    border-radius: 8px;
    font-size: 12px;
    text-align: center;
    box-shadow: 0 1px 0.5px rgba(11,20,26,0.08);
    margin: 4px 0;
}
.wa-chat-msg-system::before {
    display: none;
}

/* 礼物消息样式 */
.wa-chat-msg-gift {
    background: linear-gradient(135deg, #FFF9E6 0%, #FFF3CD 100%);
    border: 1px solid #FFE69C;
}
.wa-chat-msg-gift .wa-gift-icon {
    color: #F59E0B;
    margin-right: 6px;
}
.wa-chat-msg-gift .wa-gift-name {
    font-weight: 600;
    color: #D97706;
}
.wa-chat-msg-gift .wa-gift-value {
    color: #92400E;
    font-size: 12px;
    margin-left: 4px;
}

/* WhatsApp 聊天输入区域 */
.wa-chat-input-wrap {
    display: flex;
    align-items: flex-end;
    gap: 8px;
    padding: 10px 12px;
    background: #F0F2F5;
    border-top: 1px solid var(--wa-border);
}

.wa-chat-input {
    flex: 1;
    min-height: 42px;
    max-height: 100px;
    padding: 10px 14px;
    border: none;
    border-radius: 21px;
    background: #FFFFFF;
    font-size: 15px;
    color: var(--wa-text-primary);
    resize: none;
    outline: none;
}
.wa-chat-input::placeholder {
    color: var(--wa-text-secondary);
}
.wa-chat-input:focus {
    box-shadow: 0 0 0 2px rgba(0,168,132,0.15);
}

.wa-chat-send-btn {
    width: 42px;
    height: 42px;
    border: none;
    border-radius: 50%;
    background: var(--wa-header-bg);
    color: #fff;
    font-size: 18px;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: background 0.2s, transform 0.15s;
    flex-shrink: 0;
}
.wa-chat-send-btn:hover {
    background: var(--wa-green-dark);
    transform: scale(1.05);
}
.wa-chat-send-btn:disabled {
    background: #CCD0D5;
    cursor: not-allowed;
    transform: none;
}

/* WhatsApp 聊天头部 */
.wa-chat-header {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 16px;
    background: var(--wa-header-bg);
    color: #fff;
    min-height: 56px;
}
.wa-chat-header-avatar {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: rgba(255,255,255,0.2);
    object-fit: cover;
}
.wa-chat-header-info {
    flex: 1;
    min-width: 0;
}
.wa-chat-header-name {
    font-size: 16px;
    font-weight: 500;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.wa-chat-header-status {
    font-size: 13px;
    color: rgba(255,255,255,0.8);
}
.wa-chat-header-actions {
    display: flex;
    gap: 8px;
}
.wa-chat-header-btn {
    width: 36px;
    height: 36px;
    border: none;
    border-radius: 50%;
    background: rgba(255,255,255,0.15);
    color: #fff;
    font-size: 16px;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: background 0.2s;
}
.wa-chat-header-btn:hover {
    background: rgba(255,255,255,0.25);
}

/* WhatsApp 在线人数标签 */
.wa-online-badge {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px 10px;
    background: rgba(255,255,255,0.2);
    border-radius: 12px;
    font-size: 12px;
}
.wa-online-badge i {
    font-size: 10px;
}

/* ========== 观众端直播间 WhatsApp 风格覆盖 ========== */

/* 桌面端右侧聊天栏 WhatsApp 风格 */
@media (min-width: 1024px) {
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style {
        background: var(--wa-bg-chat);
        background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23c5c5c5' fill-opacity='0.12'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
    }
    
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-sidebar-online {
        background: var(--wa-header-bg);
        color: #fff;
        border-bottom: none;
        padding: 12px 16px;
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-sidebar-online-icon {
        color: #fff;
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-sidebar-online-sep {
        color: rgba(255,255,255,0.6);
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-sidebar-online-more {
        background: rgba(255,255,255,0.2);
        color: #fff;
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-sidebar-online-more:hover {
        background: rgba(255,255,255,0.3);
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-sidebar-top-donors .dy-donor-avatar {
        border-color: rgba(255,255,255,0.3);
    }
    
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-chat-messages-sidebar {
        background: transparent;
        padding: 12px 8%;
    }
    
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-chat-messages-sidebar .dy-chat-msg {
        position: relative;
        background: var(--wa-msg-in);
        color: var(--wa-text-primary);
        padding: 6px 12px 6px 12px;
        border-radius: 8px;
        border-top-left-radius: 0;
        max-width: 85%;
        box-shadow: 0 1px 0.5px rgba(11,20,26,0.13);
        font-size: 14px;
        line-height: 1.4;
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-chat-messages-sidebar .dy-chat-msg::before {
        content: '';
        position: absolute;
        top: 0;
        left: -8px;
        width: 0;
        height: 0;
        border-top: 8px solid var(--wa-msg-in);
        border-left: 8px solid transparent;
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-chat-messages-sidebar .dy-chat-msg .dy-chat-user {
        display: block;
        font-size: 12.5px;
        font-weight: 600;
        color: var(--wa-green-dark);
        margin-bottom: 2px;
        margin-right: 0;
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-chat-messages-sidebar .dy-chat-msg .dy-chat-text {
        color: var(--wa-text-primary);
    }
    
    /* 礼物消息 */
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-chat-messages-sidebar .dy-chat-msg.dy-chat-gift {
        background: linear-gradient(135deg, #FFF9E6 0%, #FFF3CD 100%);
        border: 1px solid #FFE69C;
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-chat-messages-sidebar .dy-chat-msg.dy-chat-gift::before {
        border-top-color: #FFF9E6;
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-chat-messages-sidebar .dy-chat-msg.dy-chat-gift .dy-gift-ico {
        color: #F59E0B;
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-chat-messages-sidebar .dy-chat-msg.dy-chat-gift .dy-chat-user {
        color: #D97706;
    }
    
    /* 系统消息 */
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-chat-messages-sidebar .dy-chat-msg.dy-chat-system {
        align-self: center;
        max-width: 90%;
        background: rgba(255,255,255,0.9);
        color: var(--wa-text-secondary);
        padding: 4px 12px;
        border-radius: 8px;
        font-size: 12px;
        text-align: center;
        box-shadow: 0 1px 0.5px rgba(11,20,26,0.08);
        border-top-left-radius: 8px;
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-chat-messages-sidebar .dy-chat-msg.dy-chat-system::before {
        display: none;
    }
    /* 欢迎进房：保持渐变炫效 */
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-chat-messages-sidebar .dy-chat-msg.dy-chat-welcome {
        background: linear-gradient(135deg, #667eea 0%, #764ba2 35%, #f093fb 100%) !important;
        color: #fff !important;
        box-shadow: 0 2px 12px rgba(102, 126, 234, 0.45), 0 0 0 1px rgba(255,255,255,.25) inset;
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-chat-messages-sidebar .dy-chat-msg.dy-chat-welcome .dy-chat-system-text {
        color: #fff !important;
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-chat-messages-sidebar .dy-chat-msg.dy-chat-follow {
        background: linear-gradient(135deg, #ec4899 0%, #db2777 50%, #be185d 100%) !important;
        color: #fff !important;
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-chat-messages-sidebar .dy-chat-msg.dy-chat-follow .dy-chat-system-text {
        color: #fff !important;
    }
    
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-sidebar-rules {
        background: rgba(255,255,255,0.9);
        color: var(--wa-text-secondary);
        border-top: 1px solid var(--wa-border);
        border-radius: 8px;
        margin: 8px 12px;
        padding: 8px 12px;
    }
    
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-sidebar-input-wrap {
        background: #F0F2F5;
        border-top: 1px solid var(--wa-border);
        padding: 10px 14px;
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-sidebar-chat-input {
        background: #FFFFFF;
        border: none;
        border-radius: 21px;
        color: var(--wa-text-primary);
        font-size: 15px;
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-sidebar-chat-input::placeholder {
        color: var(--wa-text-secondary);
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-sidebar-chat-input:focus {
        box-shadow: 0 0 0 2px rgba(0,168,132,0.15);
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-sidebar-send-btn {
        width: 42px;
        height: 42px;
        padding: 0;
        border-radius: 50%;
        background: var(--wa-header-bg);
        font-size: 16px;
    }
    body.viewer-room-douyin .dy-desktop-sidebar.wa-style .dy-sidebar-send-btn:hover {
        background: var(--wa-green-dark);
    }
}

/* 移动端聊天弹幕 WhatsApp 风格 */
@media (max-width: 1023px) {
    body.viewer-room-douyin.wa-style-mobile .dy-chat-messages .dy-chat-msg {
        background: var(--wa-msg-in);
        color: var(--wa-text-primary);
        border-radius: 8px;
        border-top-left-radius: 0;
        padding: 6px 10px;
        max-width: 80%;
        box-shadow: 0 1px 0.5px rgba(11,20,26,0.13);
    }
    body.viewer-room-douyin.wa-style-mobile .dy-chat-messages .dy-chat-msg::before {
        content: '';
        position: absolute;
        top: 0;
        left: -6px;
        width: 0;
        height: 0;
        border-top: 6px solid var(--wa-msg-in);
        border-left: 6px solid transparent;
    }
    body.viewer-room-douyin.wa-style-mobile .dy-chat-messages .dy-chat-msg .dy-chat-user {
        color: var(--wa-green-dark);
        font-weight: 600;
    }
    body.viewer-room-douyin.wa-style-mobile .dy-chat-messages .dy-chat-msg .dy-chat-text {
        color: var(--wa-text-primary);
    }
    
    body.viewer-room-douyin.wa-style-mobile .dy-chat-messages .dy-chat-msg.dy-chat-gift {
        background: linear-gradient(135deg, #FFF9E6 0%, #FFF3CD 100%);
    }
    body.viewer-room-douyin.wa-style-mobile .dy-chat-messages .dy-chat-msg.dy-chat-gift::before {
        border-top-color: #FFF9E6;
    }
    
    body.viewer-room-douyin.wa-style-mobile .dy-bottom-input-wrap .dy-chat-input {
        background: #FFFFFF;
        color: var(--wa-text-primary);
        border-radius: 21px;
    }
    body.viewer-room-douyin.wa-style-mobile .dy-bottom-input-wrap .dy-chat-input::placeholder {
        color: var(--wa-text-secondary);
    }
    body.viewer-room-douyin.wa-style-mobile .dy-bottom-input-wrap .dy-send-btn {
        background: var(--wa-header-bg);
        border-radius: 50%;
        width: 36px;
        height: 36px;
        padding: 0;
    }
    body.viewer-room-douyin.wa-style-mobile .dy-bottom-input-wrap .dy-send-btn:hover {
        background: var(--wa-green-dark);
    }
    /* 赛事直播间移动端：强制聊天浮层消息无背景（覆盖上面 wa 气泡样式） */
    body.viewer-room-douyin.wa-style-mobile .viewer-room-event .dy-comment-overlay .dy-chat-messages .dy-chat-msg,
    body.viewer-room-douyin.wa-style-mobile .viewer-room-event .dy-comment-overlay .dy-chat-messages .dy-chat-msg.dy-chat-gift,
    body.viewer-room-douyin.wa-style-mobile .viewer-room-event .dy-comment-overlay .dy-chat-messages .dy-chat-msg.dy-chat-system {
        background: transparent !important;
        box-shadow: none;
    }
    body.viewer-room-douyin.wa-style-mobile .viewer-room-event .dy-comment-overlay .dy-chat-messages .dy-chat-msg.dy-chat-welcome {
        background: linear-gradient(135deg, #667eea 0%, #764ba2 35%, #f093fb 100%) !important;
        box-shadow: 0 2px 12px rgba(102, 126, 234, 0.45);
    }
    body.viewer-room-douyin.wa-style-mobile .viewer-room-event .dy-comment-overlay .dy-chat-messages .dy-chat-msg.dy-chat-follow {
        background: linear-gradient(135deg, #ec4899 0%, #db2777 50%, #be185d 100%) !important;
        box-shadow: 0 2px 12px rgba(236, 72, 153, 0.4);
    }
    body.viewer-room-douyin.wa-style-mobile .viewer-room-event .dy-comment-overlay .dy-chat-messages .dy-chat-msg::before {
        display: none;
    }
    body.viewer-room-douyin.wa-style-mobile .viewer-room-event .dy-comment-overlay .dy-chat-messages .dy-chat-msg.dy-chat-gift::before {
        display: none;
    }
    /* 赛事直播间移动端：聊天内容文字一律白色 */
    body.viewer-room-douyin.wa-style-mobile .viewer-room-event .dy-comment-overlay .dy-chat-messages .dy-chat-msg .dy-chat-user,
    body.viewer-room-douyin.wa-style-mobile .viewer-room-event .dy-comment-overlay .dy-chat-messages .dy-chat-msg .dy-chat-text,
    body.viewer-room-douyin.wa-style-mobile .viewer-room-event .dy-comment-overlay .dy-chat-messages .dy-chat-msg.dy-chat-gift .dy-chat-user,
    body.viewer-room-douyin.wa-style-mobile .viewer-room-event .dy-comment-overlay .dy-chat-messages .dy-chat-msg.dy-chat-gift .dy-chat-text {
        color: #fff !important;
    }
}

/* ========== 私聊 Modal WhatsApp 风格 ========== */
.dy-dm-modal.wa-style .dy-dm-modal-dialog {
    background: var(--wa-bg-chat);
    background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23c5c5c5' fill-opacity='0.12'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
}
.dy-dm-modal.wa-style .dy-dm-modal-header {
    background: var(--wa-header-bg);
    color: #fff;
    border-radius: 16px 16px 0 0;
    border-bottom: none;
}
.dy-dm-modal.wa-style .dy-dm-modal-title {
    color: #fff;
}
.dy-dm-modal.wa-style .dy-dm-modal-close {
    color: rgba(255,255,255,0.8);
}
.dy-dm-modal.wa-style .dy-dm-modal-close:hover {
    color: #fff;
}
.dy-dm-modal.wa-style .dy-dm-modal-body {
    background: transparent;
}
.dy-dm-modal.wa-style .dy-dm-messages {
    padding: 16px 8%;
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.dy-dm-modal.wa-style .dy-dm-msg {
    max-width: 80%;
}
.dy-dm-modal.wa-style .dy-dm-msg-me {
    align-self: flex-end;
}
.dy-dm-modal.wa-style .dy-dm-msg-other {
    align-self: flex-start;
}
.dy-dm-modal.wa-style .dy-dm-msg .dy-dm-bubble {
    position: relative;
    border-radius: 8px;
    padding: 8px 12px;
    box-shadow: 0 1px 0.5px rgba(11,20,26,0.13);
}
.dy-dm-modal.wa-style .dy-dm-msg-me .dy-dm-bubble {
    background: var(--wa-msg-out);
    color: var(--wa-text-primary);
    border-top-right-radius: 0;
}
.dy-dm-modal.wa-style .dy-dm-msg-me .dy-dm-bubble::before {
    content: '';
    position: absolute;
    top: 0;
    right: -8px;
    width: 0;
    height: 0;
    border-top: 8px solid var(--wa-msg-out);
    border-right: 8px solid transparent;
}
.dy-dm-modal.wa-style .dy-dm-msg-other .dy-dm-bubble {
    background: var(--wa-msg-in);
    color: var(--wa-text-primary);
    border-top-left-radius: 0;
}
.dy-dm-modal.wa-style .dy-dm-msg-other .dy-dm-bubble::before {
    content: '';
    position: absolute;
    top: 0;
    left: -8px;
    width: 0;
    height: 0;
    border-top: 8px solid var(--wa-msg-in);
    border-left: 8px solid transparent;
}
.dy-dm-modal.wa-style .dy-dm-time {
    color: var(--wa-time-text);
}
.dy-dm-modal.wa-style .dy-dm-modal-footer {
    background: #F0F2F5;
    border-radius: 0 0 16px 16px;
    border-top: 1px solid var(--wa-border);
}
.dy-dm-modal.wa-style .dy-dm-input {
    background: #FFFFFF;
    border: none;
    color: var(--wa-text-primary);
    border-radius: 21px;
}
.dy-dm-modal.wa-style .dy-dm-input::placeholder {
    color: var(--wa-text-secondary);
}
.dy-dm-modal.wa-style .dy-dm-input:focus {
    box-shadow: 0 0 0 2px rgba(0,168,132,0.15);
    border-color: transparent;
}
.dy-dm-modal.wa-style .dy-dm-send-btn {
    background: var(--wa-header-bg);
    border-radius: 50%;
    width: 42px;
    height: 42px;
    padding: 0;
}
.dy-dm-modal.wa-style .dy-dm-send-btn:hover {
    background: var(--wa-green-dark);
    transform: scale(1.05);
    box-shadow: 0 4px 16px rgba(0,168,132,0.3);
}
