// ==UserScript== // @name xyDouYinTools 抖音沉浸式优化 // @namespace https://scriptcat.org/zh-CN/users/219474 // @version 6.6.10 // @description 抖音沉浸式美化、面板自动显隐、浮动评论与鼠标手势。 // @author lxy // @license MIT // @match https://www.douyin.com/* // @match https://live.douyin.com/* // @run-at document-start // @grant none // ==/UserScript== /* ===== src/content/style-payload.js ===== */ (function(){var t="/*\n * 抖音 class 非常容易变,这里把“纯样式层”的易变选择器集中放在一个文件里。\n * 如果是 JS 主动查找的 DOM,请优先改 src/shared/constants.js 里的 SELECTORS。\n */\n\n:root {\n --xydy-panel-bg: rgba(255, 255, 255, 0.26);\n --xydy-panel-border: rgba(255, 255, 255, 0.45);\n --xydy-panel-shadow: 0 16px 48px rgba(0, 0, 0, 0.28);\n --xydy-panel-shadow-soft: 0 10px 30px rgba(0, 0, 0, 0.16);\n --xydy-panel-bg-strong: linear-gradient(180deg, rgba(255, 255, 255, 0.36), rgba(240, 246, 255, 0.18));\n --xydy-panel-bg-soft: linear-gradient(180deg, rgba(255, 255, 255, 0.3), rgba(244, 248, 255, 0.14));\n --xydy-panel-bg-deep: linear-gradient(180deg, rgba(255, 255, 255, 0.34), rgba(227, 237, 251, 0.16));\n --xydy-accent-bg: rgba(76, 138, 255, 0.16);\n --xydy-accent-border: rgba(99, 159, 255, 0.34);\n --xydy-text-main: rgba(255, 255, 255, 0.96);\n --xydy-text-subtle: rgba(255, 255, 255, 0.68);\n --xydy-ink-strong: rgba(18, 27, 44, 0.92);\n --xydy-ink-main: rgba(31, 41, 55, 0.9);\n --xydy-ink-subtle: rgba(71, 85, 105, 0.82);\n --xydy-ink-faint: rgba(100, 116, 139, 0.72);\n}\n\nhtml:root[data-xydy-theme=\"custom\"] {\n --xydy-theme-color: rgb(var(--xydy-theme-rgb));\n --xydy-theme-hover: rgb(var(--xydy-theme-hover-rgb));\n --xydy-theme-active: rgb(var(--xydy-theme-active-rgb));\n --xydy-theme-light: rgb(var(--xydy-theme-light-rgb));\n --xydy-accent-bg: rgba(var(--xydy-theme-rgb), 0.16);\n --xydy-accent-border: rgba(var(--xydy-theme-rgb), 0.4);\n}\n\nhtml:root[data-xydy-theme=\"custom\"],\nhtml:root[data-xydy-theme=\"custom\"] :is(body, #dark, #light, [semi-theme], [delight-theme-mode], .search-darkmode, .delight-always-light, .delight-always-dark, .semi-always-light, .semi-always-dark) {\n --color-primary: var(--xydy-theme-color) !important;\n --color-primary-default: var(--xydy-theme-color) !important;\n --color-primary-hover: var(--xydy-theme-hover) !important;\n --color-primary-active: var(--xydy-theme-active) !important;\n --color-primary-disable: rgba(var(--xydy-theme-rgb), 0.34) !important;\n --color-primary-disabled: rgba(var(--xydy-theme-rgb), 0.34) !important;\n --color-primary-default-ucenter: var(--xydy-theme-color) !important;\n --color-primary-hover-ucenter: var(--xydy-theme-hover) !important;\n --color-primary-active-ucenter: var(--xydy-theme-active) !important;\n --color-primary-disable-ucenter: rgba(var(--xydy-theme-rgb), 0.34) !important;\n --color-fill-tag: rgba(var(--xydy-theme-rgb), 0.12) !important;\n --color-bg-comp-filledTab-selected_Red: rgba(var(--xydy-theme-rgb), 0.12) !important;\n --color-bg-comp-tag_red: rgba(var(--xydy-theme-rgb), 0.12) !important;\n --color-fill-live: linear-gradient(131deg, var(--xydy-theme-color), var(--xydy-theme-hover)) !important;\n --semi-color-primary: var(--xydy-theme-color) !important;\n --semi-color-primary-hover: var(--xydy-theme-hover) !important;\n --semi-color-primary-active: var(--xydy-theme-active) !important;\n --semi-color-primary-disabled: rgba(var(--xydy-theme-rgb), 0.34) !important;\n --semi-color-primary-light-default: rgba(var(--xydy-theme-rgb), 0.2) !important;\n --semi-color-primary-light-hover: rgba(var(--xydy-theme-rgb), 0.3) !important;\n --semi-color-primary-light-active: rgba(var(--xydy-theme-rgb), 0.4) !important;\n --semi-color-fill-tag: rgba(var(--xydy-theme-rgb), 0.12) !important;\n --semi-brand-0: var(--xydy-theme-active-rgb) !important;\n --semi-brand-1: var(--xydy-theme-active-rgb) !important;\n --semi-brand-2: var(--xydy-theme-active-rgb) !important;\n --semi-brand-3: var(--xydy-theme-hover-rgb) !important;\n --semi-brand-4: var(--xydy-theme-rgb) !important;\n --semi-brand-5: var(--xydy-theme-rgb) !important;\n --semi-brand-6: var(--xydy-theme-light-rgb) !important;\n --semi-brand-7: var(--xydy-theme-light-rgb) !important;\n --semi-brand-8: var(--xydy-theme-light-rgb) !important;\n --semi-brand-9: var(--xydy-theme-light-rgb) !important;\n --primary-50: var(--xydy-theme-light-rgb) !important;\n --primary-100: var(--xydy-theme-light-rgb) !important;\n --primary-200: var(--xydy-theme-light-rgb) !important;\n --primary-300: var(--xydy-theme-light-rgb) !important;\n --primary-400: var(--xydy-theme-rgb) !important;\n --primary-500: var(--xydy-theme-rgb) !important;\n --primary-600: var(--xydy-theme-hover-rgb) !important;\n --primary-700: var(--xydy-theme-active-rgb) !important;\n --primary-800: var(--xydy-theme-active-rgb) !important;\n --primary-900: var(--xydy-theme-active-rgb) !important;\n --dux-Primary: var(--xydy-theme-color) !important;\n --dux-TextActionPrimary: var(--xydy-theme-color) !important;\n --dux-BGBadge: var(--xydy-theme-color) !important;\n --dux-BGBrand: rgba(var(--xydy-theme-rgb), 0.06) !important;\n --dux-BGBrand2: rgba(var(--xydy-theme-rgb), 0.34) !important;\n --dux-BGLightPrimary: rgba(var(--xydy-theme-rgb), 0.2) !important;\n --dux-BGNegative: rgba(var(--xydy-theme-rgb), 0.12) !important;\n --dux-TextNegativeSecondary: rgba(var(--xydy-theme-rgb), 0.6) !important;\n --dux-LiveColorStart: var(--xydy-theme-color) !important;\n --dux-LiveColorEnd: var(--xydy-theme-hover) !important;\n}\n\nhtml:root[data-xydy-theme=\"custom\"] :is(.LfWUAfCI, .JsAyGzb8, .semi-badge-primary.semi-badge-solid, .semi-badge-danger.semi-badge-solid, .ConversationItemUnReadCountmutedUnreadBadge, .semi-switch-checked),\nhtml:root[data-xydy-theme=\"custom\"] :is([style*=\"background-color: rgb(254, 44, 85)\"], [style*=\"background-color: rgb(255, 44, 85)\"], [style*=\"background-color:rgb(254,44,85)\"], [style*=\"background-color:rgb(255,44,85)\"], [style*=\"background-color: #fe2c55\" i], [style*=\"background-color:#fe2c55\" i], [style*=\"background-color: #ff2c55\" i], [style*=\"background-color:#ff2c55\" i]) {\n background-color: var(--xydy-theme-color) !important;\n}\n\nhtml:root[data-xydy-theme=\"custom\"] .semi-switch-checked:hover {\n background-color: var(--xydy-theme-hover) !important;\n}\n\nhtml:root[data-xydy-theme=\"custom\"] .xgplayer-volume .xgplayer-slider .xgplayer-drag {\n background-color: var(--xydy-theme-color) !important;\n}\n\nhtml:root[data-xydy-theme=\"custom\"] :is(.X1UqCDsf, [style^=\"color: rgb(254, 44, 85)\"], [style^=\"color: rgb(255, 44, 85)\"], [style*=\"; color: rgb(254, 44, 85)\"], [style*=\"; color: rgb(255, 44, 85)\"], [style^=\"color: #fe2c55\" i], [style^=\"color: #ff2c55\" i]) {\n color: var(--xydy-theme-color) !important;\n}\n\nhtml:root[data-xydy-theme=\"custom\"] #douyin-header input {\n caret-color: var(--xydy-theme-color) !important;\n}\n\nhtml:root[data-xydy-theme=\"custom\"] .danmakuInputContainer :is(input, textarea, [contenteditable=\"true\"]) {\n caret-color: var(--xydy-theme-color) !important;\n}\n\nhtml:root[data-xydy-theme=\"custom\"] .xg-switch[aria-checked=\"true\"] {\n background-color: var(--xydy-theme-color) !important;\n border-color: transparent !important;\n}\n\nhtml:root[data-xydy-theme=\"custom\"] .xg-switch[aria-checked=\"true\"]:hover {\n background-color: var(--xydy-theme-hover) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .danmakuContainer:has(.danmakuInputContainer) {\n flex: 0 1 auto !important;\n width: max-content !important;\n min-width: 0 !important;\n max-width: 100% !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .danmakuContainer > .BpJmrV14 {\n width: 100% !important;\n max-width: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-controls .xgplayer-autoplay-setting {\n display: block !important;\n flex-shrink: 0 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-setting-list[data-xydy-settings-empty=\"true\"] {\n display: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .danmakuInputContainer {\n position: relative !important;\n flex: 0 0 auto !important;\n width: 56px !important;\n min-width: 56px !important;\n max-width: 56px !important;\n border-radius: 999px !important;\n transition: width 0.32s cubic-bezier(0.22, 1, 0.36, 1), max-width 0.32s cubic-bezier(0.22, 1, 0.36, 1), min-width 0.32s cubic-bezier(0.22, 1, 0.36, 1), border-radius 0.24s ease !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .danmakuInputContainer::before {\n content: \"弹幕\";\n position: absolute;\n inset: 0;\n display: grid;\n place-items: center;\n color: var(--xydy-text-main);\n font-size: 12px;\n pointer-events: none;\n transition: opacity 0.12s ease;\n}\n\nhtml[data-xydy-styles=\"on\"] .danmakuInputContainer[data-xydy-danmaku=\"expanded\"] {\n width: clamp(196px, 25vw, 420px) !important;\n min-width: min(196px, 100%) !important;\n max-width: 100% !important;\n border-radius: 12px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .danmakuInputContainer[data-xydy-danmaku=\"expanded\"]::before {\n opacity: 0;\n}\n\nhtml[data-xydy-styles=\"on\"] .danmakuInputContainer :is(.FOWJAyvx, .hI6m1KGv, input) {\n transition: opacity 0.16s ease !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .danmakuInputContainer:not([data-xydy-danmaku=\"expanded\"]) :is(.FOWJAyvx, .hI6m1KGv) {\n opacity: 0 !important;\n pointer-events: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .danmakuInputContainer:not([data-xydy-danmaku=\"expanded\"]) input {\n position: absolute !important;\n inset: 0 !important;\n width: 100% !important;\n height: 100% !important;\n min-width: 0 !important;\n margin: 0 !important;\n opacity: 0 !important;\n cursor: pointer !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .danmakuInputContainer .lTm4eK4g {\n min-width: 0 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .danmakuInputContainer[data-xydy-danmaku=\"expanded\"] input {\n min-width: 0 !important;\n}\n\n@media (prefers-reduced-motion: reduce) {\n html[data-xydy-styles=\"on\"] .danmakuInputContainer,\n html[data-xydy-styles=\"on\"] .danmakuInputContainer::before,\n html[data-xydy-styles=\"on\"] .danmakuInputContainer :is(.FOWJAyvx, .hI6m1KGv, input) {\n transition: none !important;\n }\n}\n\nhtml:root[data-xydy-theme=\"custom\"] svg :is([fill=\"#fe2c55\" i], [fill=\"#ff2c55\" i], [fill=\"rgb(254, 44, 85)\"], [fill=\"rgb(255, 44, 85)\"]) {\n fill: var(--xydy-theme-color) !important;\n}\n\nhtml:root[data-xydy-theme=\"custom\"] svg :is([stroke=\"#fe2c55\" i], [stroke=\"#ff2c55\" i]) {\n stroke: var(--xydy-theme-color) !important;\n}\n\nhtml:root[data-xydy-theme=\"custom\"] svg :is([stop-color=\"#fe2c55\" i], [stop-color=\"#ff2c55\" i], [stop-color=\"#ff1764\" i]) {\n stop-color: var(--xydy-theme-color) !important;\n}\n\nhtml:root[data-xydy-theme=\"custom\"] svg [stop-color=\"#ed3495\" i] {\n stop-color: var(--xydy-theme-hover) !important;\n}\n\n#xydy-loading-overlay {\n position: fixed;\n inset: 0;\n z-index: 2147483646;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.9);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n opacity: 1;\n transition: opacity 0.24s ease;\n}\n\n#xydy-loading-overlay.closing {\n opacity: 0;\n pointer-events: none;\n}\n\n.xydy-loading-card {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 14px;\n width: min(420px, 86vw);\n padding: 28px 24px;\n border: 1px solid rgba(255, 255, 255, 0.14);\n border-radius: 24px;\n background: rgba(255, 255, 255, 0.05);\n box-shadow: 0 18px 60px rgba(0, 0, 0, 0.4);\n color: var(--xydy-text-main);\n text-align: center;\n}\n\n.xydy-loading-spinner {\n width: 52px;\n height: 52px;\n border: 5px solid rgba(255, 255, 255, 0.22);\n border-top-color: rgba(255, 255, 255, 0.96);\n border-radius: 999px;\n animation: xydy-spin 0.9s linear infinite;\n}\n\n.xydy-loading-title {\n font-size: 18px;\n font-weight: 700;\n letter-spacing: 0.02em;\n}\n\n.xydy-loading-desc {\n color: var(--xydy-text-subtle);\n font-size: 13px;\n line-height: 1.55;\n}\n\n@keyframes xydy-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n#xydy-toast-host {\n position: fixed;\n left: 50%;\n bottom: 20px;\n z-index: 2147483647;\n display: flex;\n flex-direction: column;\n gap: 8px;\n transform: translateX(-50%);\n pointer-events: none;\n}\n\n.xydy-toast {\n min-width: 200px;\n max-width: min(68vw, 480px);\n padding: 10px 14px;\n border-radius: 999px;\n background: rgba(13, 17, 23, 0.88);\n color: #f8fafc;\n font-size: 13px;\n line-height: 1.4;\n text-align: center;\n opacity: 0;\n transform: translateY(8px);\n transition: transform 0.18s ease, opacity 0.18s ease;\n box-shadow: 0 12px 30px rgba(0, 0, 0, 0.35);\n}\n\n.xydy-toast.show {\n opacity: 1;\n transform: translateY(0);\n}\n\n.xydy-toast-warn {\n background: rgba(121, 20, 20, 0.92);\n}\n\n#xydy-quick-help {\n position: fixed;\n inset: 0;\n z-index: 2147483645;\n display: none;\n align-items: center;\n justify-content: center;\n padding: 20px;\n background: rgba(0, 0, 0, 0.6);\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n}\n\n#xydy-quick-help.show {\n display: flex;\n}\n\n.xydy-quick-help-card {\n width: min(560px, 92vw);\n padding: 22px 22px 18px;\n border: 1px solid rgba(255, 255, 255, 0.16);\n border-radius: 22px;\n background: rgba(10, 14, 20, 0.82);\n box-shadow: 0 24px 64px rgba(0, 0, 0, 0.46);\n color: #f8fafc;\n}\n\n.xydy-quick-help-title {\n font-size: 20px;\n font-weight: 800;\n}\n\n.xydy-quick-help-desc {\n margin-top: 8px;\n color: rgba(248, 250, 252, 0.72);\n font-size: 13px;\n line-height: 1.55;\n}\n\n.xydy-quick-help-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n margin-top: 16px;\n}\n\n.xydy-quick-help-row {\n display: grid;\n grid-template-columns: 100px 1fr;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 14px;\n background: rgba(255, 255, 255, 0.06);\n}\n\n.xydy-quick-help-key {\n color: #fde68a;\n font-weight: 700;\n}\n\n.xydy-quick-help-value {\n color: rgba(248, 250, 252, 0.88);\n line-height: 1.5;\n}\n\nhtml[data-xydy-navigation=\"on\"] #douyin-header {\n position: fixed !important;\n top: -56px !important;\n left: 0 !important;\n width: 100% !important;\n z-index: 1000 !important;\n transition: top 0.16s cubic-bezier(0.25, 1, 0.5, 1) !important;\n background: transparent !important;\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n border-bottom: none !important;\n}\n\n#xydy-header-blur-bg {\n display: none !important;\n}\n\nhtml[data-xydy-header-entries=\"on\"][data-xydy-header-hide-all=\"on\"] #douyin-header,\nhtml[data-xydy-header-entries=\"on\"][data-xydy-header-search=\"off\"] #douyin-header .GjgTnTzB,\nhtml[data-xydy-header-entries=\"on\"] #douyin-header [data-xydy-header-hidden=\"on\"],\nhtml[data-xydy-header-entries=\"on\"] #douyin-header-menuCt[data-xydy-header-empty=\"on\"] {\n display: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #douyin-header,\nhtml[data-xydy-styles=\"on\"] #douyin-header > .oJj2v8B4,\nhtml[data-xydy-styles=\"on\"] #douyin-header .FJclIVL4,\nhtml[data-xydy-styles=\"on\"] #douyin-header .ztm3KRqq {\n background: transparent !important;\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n border-bottom: none !important;\n box-shadow: none !important;\n}\n\nhtml[data-xydy-navigation=\"on\"].xydy-header-visible #douyin-header {\n top: 0 !important;\n}\n\nhtml[data-xydy-navigation=\"on\"] #douyin-header .xydy-search-shell {\n position: fixed !important;\n left: 50vw !important;\n right: auto !important;\n top: -48px !important;\n width: 92px !important;\n min-width: 0 !important;\n max-width: calc(100vw - 24px) !important;\n height: 40px !important;\n margin: 0 !important;\n padding: 0 !important;\n transform: translateX(-50%) !important;\n z-index: 1002 !important;\n transition: width 380ms cubic-bezier(.22, 1, .36, 1), top 160ms cubic-bezier(.25, 1, .5, 1) !important;\n}\n\nhtml[data-xydy-navigation=\"on\"].xydy-header-visible #douyin-header .xydy-search-shell {\n top: 8px !important;\n}\n\nhtml[data-xydy-navigation=\"on\"] #douyin-header .xydy-search-shell[data-xydy-search=\"expanded\"] {\n width: clamp(92px, calc(100vw - 320px), 500px) !important;\n}\n\nhtml[data-xydy-navigation=\"on\"] .xydy-search-shell :is(.ov6B8lHR, .zPZkM57p) {\n width: 100% !important;\n min-width: 0 !important;\n max-width: none !important;\n height: 40px !important;\n margin: 0 !important;\n padding: 0 !important;\n box-sizing: border-box !important;\n}\n\nhtml[data-xydy-navigation=\"on\"] #douyin-header :is(.xydy-search-shell, .xydy-search-shell .ov6B8lHR, .xydy-search-shell .zPZkM57p) {\n background: transparent !important;\n border: none !important;\n box-shadow: none !important;\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n}\n\nhtml[data-xydy-navigation=\"on\"] #douyin-header :is(.xydy-search-shell, .xydy-search-shell .ov6B8lHR, .xydy-search-shell .zPZkM57p)::before,\nhtml[data-xydy-navigation=\"on\"] #douyin-header :is(.xydy-search-shell, .xydy-search-shell .ov6B8lHR, .xydy-search-shell .zPZkM57p)::after {\n content: none !important;\n}\n\nhtml[data-xydy-navigation=\"on\"] .xydy-search-shell .GySDQyGR {\n position: relative !important;\n isolation: isolate;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n width: 100% !important;\n height: 40px !important;\n min-width: 0 !important;\n border-radius: 999px !important;\n box-sizing: border-box !important;\n overflow: visible !important;\n background: transparent !important;\n border: none !important;\n box-shadow: none !important;\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n}\n\nhtml[data-xydy-navigation=\"on\"][data-xydy-styles=\"on\"] #xydy-header-search-background {\n background: rgba(255, 255, 255, 0.1) !important;\n border: 1px solid rgba(255, 255, 255, 0.24) !important;\n backdrop-filter: blur(30px) saturate(180%) !important;\n -webkit-backdrop-filter: blur(30px) saturate(180%) !important;\n box-shadow: 0 4px 18px rgba(0, 0, 0, 0.14) !important;\n}\n\nhtml[data-xydy-navigation=\"on\"] .xydy-search-shell .qTaE0VU_ {\n flex: 1 1 0 !important;\n width: auto !important;\n min-width: 0 !important;\n padding: 0 !important;\n opacity: 0;\n visibility: hidden;\n overflow: hidden !important;\n transition: opacity 180ms ease, visibility 0s linear 180ms;\n}\n\nhtml[data-xydy-navigation=\"on\"] .xydy-search-shell[data-xydy-search=\"expanded\"] .qTaE0VU_ {\n flex: 1 1 0 !important;\n width: auto !important;\n opacity: 1;\n visibility: visible;\n transition: opacity 220ms ease 70ms, visibility 0s;\n}\n\nhtml[data-xydy-navigation=\"on\"] .xydy-search-shell [data-e2e=\"searchbar-input\"] {\n width: 100% !important;\n height: 38px !important;\n min-width: 0 !important;\n margin: 0 !important;\n padding: 0 4px 0 16px !important;\n background: transparent !important;\n box-sizing: border-box !important;\n}\n\nhtml[data-xydy-navigation=\"on\"] .xydy-search-shell [data-e2e=\"searchbar-button\"] {\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n flex: 0 0 90px !important;\n width: 90px !important;\n min-width: 0 !important;\n height: 38px !important;\n gap: 6px !important;\n padding: 0 10px !important;\n margin: 0 !important;\n border: none !important;\n border-radius: 999px !important;\n background: transparent !important;\n box-sizing: border-box !important;\n transition: flex-basis 380ms cubic-bezier(.22, 1, .36, 1), width 380ms cubic-bezier(.22, 1, .36, 1) !important;\n}\n\nhtml[data-xydy-navigation=\"on\"] .xydy-search-shell[data-xydy-search=\"expanded\"] [data-e2e=\"searchbar-button\"] {\n flex-basis: 80px !important;\n width: 80px !important;\n}\n\nhtml[data-xydy-navigation=\"on\"][data-xydy-styles=\"on\"] .xydy-search-shell :is([data-e2e=\"searchbar-input\"], [data-e2e=\"searchbar-button\"], .btn-title) {\n color: var(--xydy-text-main) !important;\n}\n\nhtml[data-xydy-navigation=\"on\"][data-xydy-styles=\"on\"] .xydy-search-shell [data-e2e=\"searchbar-button\"] path {\n fill: currentColor !important;\n}\n\nhtml[data-xydy-navigation=\"on\"] .xydy-search-shell :is(.aRMXmTKL, .S5q6TZQt) {\n display: none !important;\n}\n\nhtml[data-xydy-navigation=\"on\"] .xydy-search-shell[data-xydy-search=\"collapsed\"] :is(.mahkhHpk, .sYw1LTOe) {\n visibility: hidden !important;\n opacity: 0 !important;\n pointer-events: none !important;\n}\n\nhtml[data-xydy-navigation=\"on\"] #douyin-header-menuCt {\n position: fixed !important;\n top: -48px !important;\n right: 16px !important;\n left: auto !important;\n display: flex !important;\n align-items: center !important;\n width: max-content !important;\n height: 40px !important;\n min-height: 0 !important;\n margin: 0 !important;\n padding: 0 10px !important;\n border: none !important;\n border-radius: 999px !important;\n box-sizing: border-box !important;\n background: transparent !important;\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n box-shadow: none !important;\n isolation: isolate;\n overflow: visible !important;\n z-index: 1002 !important;\n transition: top 160ms cubic-bezier(.25, 1, .5, 1) !important;\n}\n\nhtml[data-xydy-navigation=\"on\"].xydy-header-visible #douyin-header-menuCt {\n top: 8px !important;\n}\n\n#xydy-header-actions-background,\n#xydy-header-search-background {\n position: absolute;\n inset: 0;\n border-radius: inherit;\n pointer-events: none;\n z-index: -1;\n box-sizing: border-box;\n}\n\nhtml[data-xydy-navigation=\"on\"][data-xydy-styles=\"on\"] #xydy-header-actions-background {\n background: rgba(255, 255, 255, 0.1) !important;\n border: 1px solid rgba(255, 255, 255, 0.24) !important;\n backdrop-filter: blur(30px) saturate(180%) !important;\n -webkit-backdrop-filter: blur(30px) saturate(180%) !important;\n box-shadow: 0 4px 18px rgba(0, 0, 0, 0.14) !important;\n}\n\nhtml[data-xydy-navigation=\"on\"] #douyin-header-menuCt :is(.K9oPgidp, .K9oPgidp > pace-island, .GLoxxgrP) {\n height: 100% !important;\n min-height: 0 !important;\n align-items: center !important;\n background: transparent !important;\n border: none !important;\n box-shadow: none !important;\n}\n\nhtml[data-xydy-navigation=\"on\"] #douyin-header-menuCt .K9oPgidp > pace-island {\n display: block !important;\n}\n\nhtml[data-xydy-navigation=\"on\"] #douyin-header-menuCt .iLNqted2 {\n height: 32px !important;\n justify-content: center !important;\n gap: 1px !important;\n}\n\nhtml[data-xydy-navigation=\"on\"] #douyin-header-menuCt .NQKIHxUe {\n width: 24px !important;\n height: 24px !important;\n margin: -3px 0 !important;\n transform: scale(.75);\n transform-origin: center;\n}\n\nhtml[data-xydy-navigation=\"on\"] #douyin-header-menuCt .phl13lpd {\n height: 12px !important;\n margin: 0 !important;\n font-size: 10px !important;\n line-height: 12px !important;\n}\n\n@media (prefers-reduced-motion: reduce) {\n html[data-xydy-navigation=\"on\"] #douyin-header-menuCt,\n html[data-xydy-navigation=\"on\"] .xydy-search-shell,\n html[data-xydy-navigation=\"on\"] .xydy-search-shell .qTaE0VU_,\n html[data-xydy-navigation=\"on\"] .xydy-search-shell [data-e2e=\"searchbar-button\"] {\n transition: none !important;\n }\n}\n\nhtml[data-xydy-navigation=\"on\"] .danmu {\n transition: margin-top 0.16s cubic-bezier(0.25, 1, 0.5, 1) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-immersive-switch-setting.immersive-switch {\n display: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard > #relatedVideoCard {\n margin-top: 22px !important;\n height: calc(100% - 22px) !important;\n padding-top: 0 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #douyin-right-container {\n padding: 0 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .dy-quick-container .dy-quick-player-content {\n position: absolute !important;\n inset: 0 0 0 160px !important;\n width: auto !important;\n height: auto !important;\n margin: 0 !important;\n padding: 0 !important;\n min-width: 0 !important;\n}\n\nhtml[data-xydy-styles=\"on\"][data-xydy-sidebar=\"on\"] .dy-quick-container .dy-quick-player-content {\n left: 0 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .dy-quick-container #quickPlayer {\n position: absolute !important;\n inset: 56px 0 0 !important;\n width: 100% !important;\n height: auto !important;\n margin: 0 !important;\n padding: 0 !important;\n border-radius: 0 !important;\n}\n\nhtml[data-xydy-styles=\"on\"][data-xydy-navigation=\"on\"] .dy-quick-container #quickPlayer {\n top: 0 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .ES4ZDMnf.N07M3gwz.isDark.nUy2mwhv.tC5Oyw9g {\n background: transparent !important;\n backdrop-filter: blur(5px) !important;\n -webkit-backdrop-filter: blur(5px) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .basePlayerContainer:not(.highlightPlayer) .xgplayer-controls {\n background-image: none !important;\n background: rgba(255, 255, 255, 0.06) !important;\n backdrop-filter: blur(8px) saturate(1.2) !important;\n -webkit-backdrop-filter: blur(8px) saturate(1.2) !important;\n border: 1px solid rgba(255, 255, 255, 0.08) !important;\n box-shadow: none !important;\n transition: background 0.18s ease, backdrop-filter 0.18s ease, border-color 0.18s ease !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .basePlayerContainer:not(.highlightPlayer) .xgplayer-controls:hover {\n background: rgba(255, 255, 255, 0.12) !important;\n backdrop-filter: blur(30px) saturate(180%) !important;\n -webkit-backdrop-filter: blur(30px) saturate(180%) !important;\n border-color: rgba(255, 255, 255, 0.15) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-controls.show {\n transform: translateY(0);\n}\n\nhtml[data-xydy-styles=\"on\"] video::-webkit-media-controls {\n display: none !important;\n opacity: 0 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] video::-webkit-media-controls-enclosure {\n display: none !important;\n opacity: 0 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .video-info-mask,\nhtml[data-xydy-styles=\"on\"] .UXyEyqbq.UdkDK3ea.DZKZZklc,\nhtml[data-xydy-styles=\"on\"] .L1TH4HdO.d6KxRih3.positionBox,\nhtml[data-xydy-styles=\"on\"] .L1TH4HdO.positionBox {\n display: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .IXMCDg0e:has(> .H_crvIqw):has(> .KpXu33iw) {\n display: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xg-video-container {\n height: 100% !important;\n margin: auto 0 !important;\n bottom: 0 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .nM3w4mVK.byAYwK4P.fullscreen_capture_feedback._z4WuFBP.NdwOHaIw {\n height: 100% !important;\n border-radius: 0 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .nM3w4mVK .kkbhJDRa {\n width: 100% !important;\n height: 100% !important;\n border-radius: 0 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #sliderVideo,\nhtml[data-xydy-styles=\"on\"] #sliderVideo::before,\nhtml[data-xydy-styles=\"on\"] #sliderVideo::after {\n border-radius: 0 !important;\n clip-path: none !important;\n -webkit-clip-path: none !important;\n mask: none !important;\n -webkit-mask: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #slider-card {\n border-radius: 0 !important;\n overflow: visible !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .PsHhivd9.sHGvkSIn,\nhtml[data-xydy-styles=\"on\"] .yZlWL2BG,\nhtml[data-xydy-styles=\"on\"] .vlXyJ9Hj,\nhtml[data-xydy-styles=\"on\"] .N3mRyy_g.popShadowAnimation,\nhtml[data-xydy-styles=\"on\"] .F_XLoeLO.c64lf7w4,\nhtml[data-xydy-styles=\"on\"] .ScTolygy.q1kuhAxH,\nhtml[data-xydy-styles=\"on\"] .eBcBNgnP.PHb7B2cG,\nhtml[data-xydy-styles=\"on\"] .k9soqkkm,\nhtml[data-xydy-styles=\"on\"] .lGxh4PDP.Q2nY9qA2.popShadowAnimation,\nhtml[data-xydy-styles=\"on\"] .v3wRIyhF.qoOxjH5x.UaYGQUZd.NqzE824S {\n\tbackground: rgba(255, 255, 255, 0.08) !important;\n\tbackdrop-filter: blur(30px) saturate(180%) !important;\n\t-webkit-backdrop-filter: blur(30px) saturate(180%) !important;\n\tborder-radius: 12px !important;\n\tborder: 1px solid rgba(255, 255, 255, 0.12) !important;\n\tbox-shadow: 0 10px 30px rgba(0, 0, 0, 0.4) !important;\n\tcolor: var(--xydy-text-main) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .PsHhivd9.sHGvkSIn *,\nhtml[data-xydy-styles=\"on\"] .yZlWL2BG *,\nhtml[data-xydy-styles=\"on\"] .vlXyJ9Hj *,\nhtml[data-xydy-styles=\"on\"] .N3mRyy_g.popShadowAnimation *,\nhtml[data-xydy-styles=\"on\"] .F_XLoeLO.c64lf7w4 *,\nhtml[data-xydy-styles=\"on\"] .ScTolygy.q1kuhAxH *,\nhtml[data-xydy-styles=\"on\"] .eBcBNgnP.PHb7B2cG *,\nhtml[data-xydy-styles=\"on\"] .k9soqkkm *,\nhtml[data-xydy-styles=\"on\"] .lGxh4PDP.Q2nY9qA2.popShadowAnimation *,\nhtml[data-xydy-styles=\"on\"] .v3wRIyhF.qoOxjH5x.UaYGQUZd.NqzE824S * {\n\tcolor: var(--xydy-text-main) !important;\n\ttext-shadow: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .PsHhivd9.sHGvkSIn,\nhtml[data-xydy-styles=\"on\"] .lGxh4PDP.Q2nY9qA2.popShadowAnimation {\n border-radius: 18px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .ncIQxKQq,\nhtml[data-xydy-styles=\"on\"] .v3wRIyhF.qoOxjH5x.UaYGQUZd.NqzE824S>li:first-child,\nhtml[data-xydy-styles=\"on\"] .v3wRIyhF.qoOxjH5x.UaYGQUZd.NqzE824S>ul:first-child {\n background: linear-gradient(180deg, rgba(255, 255, 255, 0.34), rgba(255, 255, 255, 0.14)) !important;\n border-bottom: 1px solid rgba(255, 255, 255, 0.34) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] ._zym1kAG.nAPRGU5n,\nhtml[data-xydy-styles=\"on\"] .K_ckXK2o,\nhtml[data-xydy-styles=\"on\"] .l1obMd7E.vd2YjL9i,\nhtml[data-xydy-styles=\"on\"] .vPbDjtUz,\nhtml[data-xydy-styles=\"on\"] ._ZNpPx3x {\n background: transparent !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .fdVOt4Dg,\nhtml[data-xydy-styles=\"on\"] .l1obMd7E.vd2YjL9i>div,\nhtml[data-xydy-styles=\"on\"] .K_ckXK2o>div {\n border-radius: 14px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .fdVOt4Dg:hover,\nhtml[data-xydy-styles=\"on\"] .l1obMd7E.vd2YjL9i>div:hover,\nhtml[data-xydy-styles=\"on\"] .K_ckXK2o>div:hover {\n background: rgba(255, 255, 255, 0.18) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .fdVOt4Dg [class*=\"top\"],\nhtml[data-xydy-styles=\"on\"] .fdVOt4Dg [class*=\"Top\"],\nhtml[data-xydy-styles=\"on\"] .fdVOt4Dg span,\nhtml[data-xydy-styles=\"on\"] .K_ckXK2o span,\nhtml[data-xydy-styles=\"on\"] .l1obMd7E.vd2YjL9i span {\n color: var(--xydy-text-subtle) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .fdVOt4Dg :is(div, span, p) {\n color: var(--xydy-text-main) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .fdVOt4Dg :is(div, span, p):has(> :is(svg, img)) {\n color: inherit !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .fdVOt4Dg :is(div, span, p) {\n text-shadow: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .fdVOt4Dg :is(div, span, p):where(:not(:first-child)) {\n color: var(--xydy-text-subtle) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .v3wRIyhF.qoOxjH5x.UaYGQUZd.NqzE824S {\n border-radius: 20px !important;\n overflow: hidden !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .v3wRIyhF.qoOxjH5x.UaYGQUZd.NqzE824S>ul,\nhtml[data-xydy-styles=\"on\"] .v3wRIyhF.qoOxjH5x.UaYGQUZd.NqzE824S>li,\nhtml[data-xydy-styles=\"on\"] .Q6VYnosf.userMenuPanelShadowAnimation,\nhtml[data-xydy-styles=\"on\"] .l1obMd7E.vd2YjL9i {\n background: transparent !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .v3wRIyhF.qoOxjH5x.UaYGQUZd.NqzE824S :is(div, span, p, a),\nhtml[data-xydy-styles=\"on\"] .Q6VYnosf.userMenuPanelShadowAnimation :is(div, span, p, a) {\n color: var(--xydy-text-main) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .v3wRIyhF.qoOxjH5x.UaYGQUZd.NqzE824S :is(.SgbdwJuv, .NeAI6YYW, .vPbDjtUz, ._ZNpPx3x),\nhtml[data-xydy-styles=\"on\"] .Q6VYnosf.userMenuPanelShadowAnimation :is(.SgbdwJuv, .NeAI6YYW, .vPbDjtUz, ._ZNpPx3x) {\n color: var(--xydy-text-subtle) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .v3wRIyhF.qoOxjH5x.UaYGQUZd.NqzE824S [class*=\"download\"],\nhtml[data-xydy-styles=\"on\"] .v3wRIyhF.qoOxjH5x.UaYGQUZd.NqzE824S [class*=\"Download\"] {\n background: var(--xydy-accent-bg) !important;\n border: 1px solid var(--xydy-accent-border) !important;\n border-radius: 999px !important;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.28) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .semi-button.semi-button-primary.semi-button-size-small.B7L9kG57 {\n background: rgba(180, 30, 45, 0.75) !important;\n backdrop-filter: blur(8px) saturate(120%) !important;\n -webkit-backdrop-filter: blur(8px) saturate(120%) !important;\n color: rgba(255, 255, 255, 0.95) !important;\n border: 1px solid rgba(255, 255, 255, 0.25) !important;\n border-radius: 999px !important;\n font-weight: 600;\n}\n\nhtml[data-xydy-styles=\"on\"] .semi-button.semi-button-primary.semi-button-size-small.B7L9kG57:hover {\n background: rgba(255, 77, 79, 0.9) !important;\n transform: translateY(-1px);\n box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-playswitch.recommend-out-switch-btn {\n visibility: hidden !important;\n opacity: 0 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] :is(.xgplayer-gamepad, .xgplayer-gamepad-button, [class*=\"gamepad\"], [class*=\"gamePad\"], [data-e2e*=\"gamepad\"], [data-e2e*=\"game-pad\"], [aria-label*=\"游戏手柄\"], [title*=\"游戏手柄\"], [aria-label*=\"小游戏\"], [title*=\"小游戏\"]) {\n display: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .dySwiperSlide .player-position-box-bottom div:has(> img[src*=\"/game_center/\"]) {\n display: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .fullscreen_capture_feedback {\n padding-right: 0 !important;\n}\n\nhtml.xydy-silent-menu :is(div[id=\"qgmiQqfW\"], #EGfMOP99, #euinefEt, .jQkpodjD) {\n opacity: 0 !important;\n pointer-events: none !important;\n animation: none !important;\n transition: none !important;\n}\n\n.xydy-context-icon { display: none; }\n\nhtml[data-xydy-styles=\"on\"] .jQkpodjD > .o6tvYzFd {\n box-sizing: border-box !important;\n width: 280px !important;\n min-width: 216px !important;\n max-width: calc(100vw - 16px) !important;\n max-height: calc(100dvh - 16px) !important;\n height: auto !important;\n padding: 8px !important;\n border: 1px solid rgba(255, 255, 255, .2) !important;\n border-radius: 18px !important;\n background: linear-gradient(145deg, rgba(45, 51, 65, .8), rgba(20, 25, 35, .76)) !important;\n backdrop-filter: blur(24px) saturate(1.35) !important;\n -webkit-backdrop-filter: blur(24px) saturate(1.35) !important;\n box-shadow: inset 0 1px rgba(255, 255, 255, .12), 0 18px 48px rgba(0, 0, 0, .3) !important;\n overflow-x: hidden !important;\n overflow-y: auto !important;\n overscroll-behavior: contain;\n scrollbar-width: thin;\n scrollbar-color: rgba(255, 255, 255, .2) transparent;\n transform-origin: var(--xydy-context-origin, left top);\n animation: xydy-context-panel-in 150ms ease both;\n}\n\nhtml[data-xydy-styles=\"on\"] .o6tvYzFd > :is(.wb906g24, a.kb8pfrOo, .xydy-context-settings) {\n position: relative !important;\n display: grid !important;\n grid-template-columns: 18px minmax(0, 1fr) auto !important;\n align-items: center !important;\n gap: 10px !important;\n box-sizing: border-box !important;\n width: 100% !important;\n height: auto !important;\n min-height: 36px !important;\n margin: 0 !important;\n padding: 7px 10px !important;\n border: 0 !important;\n border-radius: 11px !important;\n background: transparent !important;\n color: rgba(255, 255, 255, .92) !important;\n font-size: 13px !important;\n font-weight: 500 !important;\n line-height: 22px !important;\n text-decoration: none !important;\n cursor: pointer;\n text-align: left;\n transition: background-color 150ms ease, color 150ms ease, transform 150ms ease !important;\n animation: xydy-context-row-in 180ms cubic-bezier(.19, 1, .22, 1) backwards;\n animation-delay: calc(var(--xydy-menu-index, 0) * 15ms);\n}\n\nhtml[data-xydy-styles=\"on\"] .o6tvYzFd > :is(.wb906g24, a.kb8pfrOo, .xydy-context-settings):is(:hover, :focus-visible) {\n background: rgba(255, 255, 255, .15) !important;\n color: white !important;\n transform: translateX(1px);\n}\n\nhtml[data-xydy-styles=\"on\"] .o6tvYzFd > :is(.wb906g24, a.kb8pfrOo, .xydy-context-settings):active { background: rgba(255, 255, 255, .22) !important; }\n\nhtml[data-xydy-styles=\"on\"] .o6tvYzFd > .xydy-context-settings-divider {\n height: 1px !important;\n margin: 7px 9px !important;\n padding: 0 !important;\n background: rgba(255, 255, 255, .15) !important;\n pointer-events: none;\n}\n\nhtml[data-xydy-styles=\"on\"] .o6tvYzFd > .xydy-context-settings .xydy-context-settings-label { font-weight: 600 !important; }\n\nhtml[data-xydy-styles=\"on\"] .o6tvYzFd > :is(.wb906g24, a.kb8pfrOo, .xydy-context-settings)[data-xydy-context-group=\"true\"] { margin-top: 9px !important; }\n\nhtml[data-xydy-styles=\"on\"] .o6tvYzFd > :is(.wb906g24, a.kb8pfrOo, .xydy-context-settings)[data-xydy-context-group=\"true\"]::before {\n content: '';\n position: absolute;\n left: 9px;\n right: 9px;\n top: -5px;\n height: 1px;\n background: rgba(255, 255, 255, .12);\n pointer-events: none;\n}\n\nhtml[data-xydy-styles=\"on\"] .o6tvYzFd > :is(.wb906g24, a.kb8pfrOo, .xydy-context-settings)[data-xydy-context-action=\"report\"]:hover {\n background: rgba(255, 100, 125, .13) !important;\n color: #ffd0d9 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .o6tvYzFd .xydy-context-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n grid-column: 1;\n width: 18px;\n height: 18px;\n color: currentColor;\n opacity: .78;\n pointer-events: none;\n}\n\nhtml[data-xydy-styles=\"on\"] .o6tvYzFd :is(.Gq1zvxbB, .xydy-context-settings-label) {\n grid-column: 2;\n min-width: 0;\n margin: 0 !important;\n color: inherit !important;\n font-size: 13px !important;\n font-weight: 500 !important;\n line-height: 22px !important;\n white-space: nowrap;\n}\n\nhtml[data-xydy-styles=\"on\"] .o6tvYzFd .ccZxuS3y {\n display: inline-flex !important;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n grid-column: 3;\n min-width: 23px;\n height: 22px;\n margin: 0 !important;\n padding: 0 5px;\n border: 1px solid rgba(255, 255, 255, .11);\n border-radius: 6px;\n background: rgba(255, 255, 255, .055);\n color: rgba(255, 255, 255, .5) !important;\n font-size: 0 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .o6tvYzFd .ccZxuS3y::after {\n content: attr(data-xydy-key);\n font: 11px/1.2 \"Segoe UI\", sans-serif;\n}\n\n@keyframes xydy-context-panel-in { from { opacity: 0; } to { opacity: 1; } }\n@keyframes xydy-context-row-in {\n from { opacity: 0; transform: translateX(5px); }\n to { opacity: 1; transform: translateX(0); }\n}\n\n@media (prefers-reduced-motion: reduce) {\n html[data-xydy-styles=\"on\"] :is(.jQkpodjD > .o6tvYzFd, .o6tvYzFd > :is(.wb906g24, a.kb8pfrOo, .xydy-context-settings)) { animation: none !important; transition: none !important; }\n}\n\n/* Semi Popover & Dropdown Glassmorphism Styling */\nhtml[data-xydy-styles=\"on\"] :is(.semi-dropdown-wrapper, .semi-popover-content, ._o7id7Pe, .userMenuPanelShadowAnimation, .Q6VYnosf.userMenuPanelShadowAnimation, .IEv8oDS8.popShadowAnimation, .componentsEntrywrapper, .ASay5JTn, .MhqtMkwi, .Yq8ahEWU, [class*=\"dropdown-showing\"], [class*=\"dropdown-wrapper\"]) {\n background: rgba(255, 255, 255, 0.08) !important;\n backdrop-filter: blur(30px) saturate(180%) !important;\n -webkit-backdrop-filter: blur(30px) saturate(180%) !important;\n border: 1px solid rgba(255, 255, 255, 0.12) !important;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4) !important;\n\n /* Force inner containers to be transparent to show the frosted glass background */\n --dux-BGPopoverDefault: transparent !important;\n --dux-BGCardSolid: transparent !important;\n --dux-BGPrimary: transparent !important;\n --dux-BGPrimary2: transparent !important;\n --dux-BGCardGroup: transparent !important;\n --dux-BGPanelGray: transparent !important;\n --dux-BGPanelTone: transparent !important;\n --dux-BGPanelTint: transparent !important;\n --notice-header-bg-start: transparent !important;\n --notice-header-bg-end: transparent !important;\n \n /* Semi Design UI inner background tokens - override locally to show the blur */\n --semi-color-bg-0: transparent !important;\n --semi-color-bg-1: transparent !important;\n --semi-color-bg-2: transparent !important;\n --semi-color-bg-3: transparent !important;\n --semi-color-bg-4: transparent !important;\n \n /* Make hover and active states translucent */\n --dux-BGPopoverPressed: rgba(255, 255, 255, 0.08) !important;\n --notice-fill-hover: rgba(255, 255, 255, 0.08) !important;\n}\n\n/* Strip inner background colors on share, collect, more (three dots), quality, speed popup items for pure glassmorphism */\n/* NOTE: [class*=\"dropdown-wrapper\"] is intentionally excluded here to avoid overriding the outer wrapper's frosted glass background */\nhtml[data-xydy-styles=\"on\"] :is(.semi-dropdown, .semi-dropdown-content, .semi-dropdown-menu, .semi-dropdown-item, .semi-popover, .semi-popover-inner, [class*=\"dropdown-showing\"]) {\n background: transparent !important;\n background-color: transparent !important;\n box-shadow: none !important;\n border-color: rgba(255, 255, 255, 0.08) !important;\n}\n\n/* ========================================================================================= */\n/* Immersive Mode Specific Popups (Share, Collect, More) */\n/* These do NOT use standard Semi Design components. They use obfuscated classes like Wl7JZ1MY, lC5eOSqy */\n/* ========================================================================================= */\n\n/* Target the wrapper by matching structural placement in body and inner identifying components (like the copy link input) */\nhtml[data-xydy-styles=\"on\"] body > div:not(#root):not(#preact-border-shadow-host) > div:has(.semi-input-wrapper),\nhtml[data-xydy-styles=\"on\"] body > div:not(#root):not(#preact-border-shadow-host) > div > div:has(.semi-input-wrapper),\nhtml[data-xydy-styles=\"on\"] [class*=\"recommend-login-panel\"],\nhtml[data-xydy-styles=\"on\"] .n4FTI10b,\nhtml[data-xydy-styles=\"on\"] ._KRDPUZX,\nhtml[data-xydy-styles=\"on\"] .hurS2TXT {\n background: rgba(255, 255, 255, 0.08) !important;\n backdrop-filter: blur(30px) saturate(180%) !important;\n -webkit-backdrop-filter: blur(30px) saturate(180%) !important;\n border: 1px solid rgba(255, 255, 255, 0.12) !important;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4) !important;\n border-radius: 12px !important;\n}\n\n/* Keep original widths for teleported popups so they don't deform on document.body */\n/* NOTE: We no longer teleport popups, so these are removed to ensure native width flows */\n\n/* ========================================================================================= */\n/* Immersive Stacking Context Solvers (Bypass backdrop-filter bugs) */\n/* When dynamic popups are open inside the right panel, we temporarily strip filters and transforms */\n/* on their ancestors (.rDq18SJg, .gvcmX2Lf, .D0ZulesG) to let the browser render the blur. */\n/* ========================================================================================= */\nhtml[data-xydy-styles=\"on\"] .rDq18SJg:has(.n4FTI10b, ._KRDPUZX, .hurS2TXT),\nhtml[data-xydy-styles=\"on\"] .gvcmX2Lf:has(.n4FTI10b, ._KRDPUZX, .hurS2TXT),\nhtml[data-xydy-styles=\"on\"] .D0ZulesG.ej8hl0s8:has(.n4FTI10b, ._KRDPUZX, .hurS2TXT) {\n transform: none !important;\n filter: none !important;\n}\n\n/* Strip background color ONLY from the overlapping inner panel container .lC5eOSqy to show the outer blur */\n/* DO NOT touch any other descendant elements (buttons, inputs, hover states) to keep internal styles native */\nhtml[data-xydy-styles=\"on\"] .lC5eOSqy {\n background: transparent !important;\n background-color: transparent !important;\n box-shadow: none !important;\n}\n\n/* ========================================================================================= */\n/* Collect popup (._KRDPUZX) inner opaque containers - strip backgrounds to reveal blur */\n/* Classes identified by live DOM inspection: .TIxHFAzq (list area), .PL6IqKFH (row item), */\n/* .AyByLZ2h (thumbnail bg), .cwlyNJ6o (checkbox zone), .etjjie8s (footer area) */\n/* PRESERVED: .semi-checkbox-inner-display (red tick), .semi-button-primary (red save btn) */\n/* ========================================================================================= */\nhtml[data-xydy-styles=\"on\"] ._KRDPUZX .TIxHFAzq,\nhtml[data-xydy-styles=\"on\"] ._KRDPUZX .PL6IqKFH,\nhtml[data-xydy-styles=\"on\"] ._KRDPUZX .AyByLZ2h,\nhtml[data-xydy-styles=\"on\"] ._KRDPUZX .cwlyNJ6o,\nhtml[data-xydy-styles=\"on\"] ._KRDPUZX .etjjie8s {\n background: transparent !important;\n background-color: transparent !important;\n}\n\n/* Also strip the outer wrapper bg that was identified */\nhtml[data-xydy-styles=\"on\"] ._KRDPUZX .SoCg1WZL {\n background: transparent !important;\n background-color: transparent !important;\n}\n\n/* ========================================================================================= */\n/* Share popup (.n4FTI10b) inner opaque containers - strip backgrounds to reveal blur */\n/* Classes: .TUOAeWQT (inner list area), .kqYbiwxV (sub-container) */\n/* PRESERVED: .xu0OjnsQ.wv0hD3qc.uiL5gOiW (red circular share buttons) */\n/* ========================================================================================= */\nhtml[data-xydy-styles=\"on\"] .n4FTI10b .TUOAeWQT,\nhtml[data-xydy-styles=\"on\"] .n4FTI10b .kqYbiwxV,\nhtml[data-xydy-styles=\"on\"] .n4FTI10b .I2cladc1,\nhtml[data-xydy-styles=\"on\"] .n4FTI10b .UvaONlvz,\nhtml[data-xydy-styles=\"on\"] .n4FTI10b .sqaFjMkQ,\nhtml[data-xydy-styles=\"on\"] .n4FTI10b .wZ1j9v7T {\n background: transparent !important;\n background-color: transparent !important;\n}\n\n/* Restore translucent hover effect for clickable items (like share destinations) */\nhtml[data-xydy-styles=\"on\"] :is(.n4FTI10b, ._KRDPUZX, .hurS2TXT) {\n border-radius: 18px !important;\n color: var(--xydy-text-main) !important;\n --semi-color-text-0: var(--xydy-text-main);\n --semi-color-text-1: var(--xydy-text-main);\n --semi-color-text-2: var(--xydy-text-subtle);\n --semi-color-bg-0: transparent;\n --semi-color-bg-1: transparent;\n --semi-color-bg-2: transparent;\n}\n\nhtml[data-xydy-styles=\"on\"] :is(.n4FTI10b .otFjqQEX, ._KRDPUZX .PL6IqKFH, .hurS2TXT .r5aqUxRL) {\n background: transparent !important;\n border-radius: 12px !important;\n transition: background 160ms ease, box-shadow 160ms ease;\n}\n\nhtml[data-xydy-styles=\"on\"] :is(.n4FTI10b .otFjqQEX, ._KRDPUZX .PL6IqKFH, .hurS2TXT .r5aqUxRL):is(:hover, :focus-within) {\n background: rgba(255, 255, 255, 0.12) !important;\n box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] :is(.n4FTI10b .otFjqQEX, ._KRDPUZX .PL6IqKFH):has(input:checked) {\n background: rgba(255, 255, 255, 0.1) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .n4FTI10b :is(.WP9AZZAa, .TQChUZFG, .Wl7JZ1MY, .VzoNDwLw),\nhtml[data-xydy-styles=\"on\"] .hurS2TXT :is(.ovKeXnCn, .X49GcmaZ, .lY__ewZJ, .BF7YaXys) {\n background: transparent !important;\n box-shadow: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .hurS2TXT .ovKeXnCn {\n gap: 4px !important;\n padding: 10px 8px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .hurS2TXT .r5aqUxRL {\n flex: 1 1 0 !important;\n width: auto !important;\n padding: 8px 2px !important;\n min-width: 0 !important;\n box-sizing: border-box !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .hurS2TXT .CtbumKit {\n white-space: nowrap !important;\n font-size: 11px !important;\n line-height: 16px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .hurS2TXT .Au3ppGJ6 {\n background: rgba(255, 255, 255, 0.07) !important;\n border: 1px solid rgba(255, 255, 255, 0.12) !important;\n border-radius: 13px !important;\n box-sizing: border-box !important;\n color: var(--xydy-text-main) !important;\n transition: background 160ms ease, border-color 160ms ease;\n}\n\nhtml[data-xydy-styles=\"on\"] .hurS2TXT .r5aqUxRL:hover .Au3ppGJ6 {\n background: rgba(255, 255, 255, 0.16) !important;\n border-color: rgba(255, 255, 255, 0.3) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .hurS2TXT :is(.CtbumKit, .TajsRheG, .tKrkJj14),\nhtml[data-xydy-styles=\"on\"] ._KRDPUZX :is(.w5tzeLDK, .Z237Vhoq),\nhtml[data-xydy-styles=\"on\"] .n4FTI10b :is(.EnYt_IKl, .S874re0p) {\n color: var(--xydy-text-main) !important;\n text-shadow: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .hurS2TXT :is(.PX9SsZUz),\nhtml[data-xydy-styles=\"on\"] ._KRDPUZX .fB79ZcH0 {\n color: var(--xydy-text-subtle) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .hurS2TXT .X49GcmaZ,\nhtml[data-xydy-styles=\"on\"] ._KRDPUZX .etjjie8s,\nhtml[data-xydy-styles=\"on\"] .n4FTI10b .I2cladc1 {\n border-top: 1px solid rgba(255, 255, 255, 0.12) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .hurS2TXT .ihCkTQ8r,\nhtml[data-xydy-styles=\"on\"] .n4FTI10b .semi-input-wrapper,\nhtml[data-xydy-styles=\"on\"] .n4FTI10b .UvaONlvz {\n background: rgba(255, 255, 255, 0.08) !important;\n border: 1px solid rgba(255, 255, 255, 0.12) !important;\n border-radius: 10px !important;\n box-shadow: none !important;\n color: var(--xydy-text-main) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .n4FTI10b .semi-input {\n background: transparent !important;\n color: var(--xydy-text-main) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .n4FTI10b .semi-input-wrapper:focus-within {\n border-color: rgba(255, 255, 255, 0.45) !important;\n background: rgba(255, 255, 255, 0.14) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .n4FTI10b .UvaONlvz:not(:disabled):hover,\nhtml[data-xydy-styles=\"on\"] .hurS2TXT .ihCkTQ8r:hover {\n background: rgba(255, 255, 255, 0.18) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .W6qKIZ6x.popShadowAnimation {\n background: rgba(18, 23, 33, 0.48) !important;\n backdrop-filter: blur(30px) saturate(180%) !important;\n -webkit-backdrop-filter: blur(30px) saturate(180%) !important;\n border: 1px solid rgba(255, 255, 255, 0.22) !important;\n border-radius: 16px !important;\n box-shadow: var(--xydy-panel-shadow-soft) !important;\n color: var(--xydy-text-main) !important;\n gap: 12px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .W6qKIZ6x .FvfcGgNr {\n color: var(--xydy-text-main) !important;\n background: transparent !important;\n font-size: 13px !important;\n line-height: 1.5 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .W6qKIZ6x .qJAyV2xV {\n background: rgba(255, 255, 255, 0.12) !important;\n border: 1px solid rgba(255, 255, 255, 0.22) !important;\n border-radius: 10px !important;\n color: var(--xydy-text-main) !important;\n transition: background 160ms ease, border-color 160ms ease;\n}\n\nhtml[data-xydy-styles=\"on\"] .W6qKIZ6x .qJAyV2xV:hover {\n background: rgba(255, 255, 255, 0.23) !important;\n border-color: rgba(255, 255, 255, 0.42) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .W6qKIZ6x .oTiszHW4 {\n border-radius: 50% !important;\n opacity: 0.7;\n transition: background 160ms ease, opacity 160ms ease;\n}\n\nhtml[data-xydy-styles=\"on\"] .W6qKIZ6x .oTiszHW4:hover {\n background: rgba(255, 255, 255, 0.14) !important;\n opacity: 1;\n}\n\n/* Ensure round corners for search & suggestions panels */\nhtml[data-xydy-styles=\"on\"] :is(.MhqtMkwi, .Yq8ahEWU) {\n border-radius: 12px !important;\n overflow: hidden !important;\n}\n\nhtml:root[data-xydy-styles=\"on\"] :is(.MhqtMkwi, .Yq8ahEWU) :is(.y7JjSfUG, .rjLRxj9f)[data-index] {\n background: transparent !important;\n border-radius: 8px !important;\n box-shadow: none !important;\n transition: background 150ms ease, box-shadow 150ms ease;\n}\n\nhtml[data-xydy-styles=\"on\"] :is(.MhqtMkwi, .Yq8ahEWU) .rjLRxj9f > .gQHdTEA7 {\n background: transparent !important;\n}\n\nhtml:root[data-xydy-styles=\"on\"] :is(.MhqtMkwi, .Yq8ahEWU) :is(.y7JjSfUG, .rjLRxj9f)[data-index]:is(:hover, :focus-visible, .ttePjoSl, [aria-selected=\"true\"]) {\n background: rgba(255, 255, 255, 0.08) !important;\n box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12) !important;\n}\n\nhtml:root[data-xydy-styles=\"on\"][data-xydy-liquid-glass=\"on\"] :is(.MhqtMkwi, .Yq8ahEWU) :is(.y7JjSfUG, .rjLRxj9f)[data-index]:is(:hover, :focus-visible, .ttePjoSl, [aria-selected=\"true\"]) {\n background: linear-gradient(125deg, rgba(255, 255, 255, 0.16), rgba(255, 255, 255, 0.035) 65%, rgba(255, 255, 255, 0.08)) !important;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), inset 0 0 0 1px rgba(255, 255, 255, 0.16) !important;\n}\n\n\n\n/* Notification panel: each individual notification item overrides */\nhtml[data-xydy-styles=\"on\"] .v4ybwR9T.ToPeGBn_,\nhtml[data-xydy-styles=\"on\"] .IEv8oDS8.popShadowAnimation .SmkB6fzs {\n background: transparent !important;\n background-color: transparent !important;\n border-radius: 8px !important;\n transition: background 0.15s ease, background-color 0.15s ease !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .v4ybwR9T.ToPeGBn_:hover,\nhtml[data-xydy-styles=\"on\"] .IEv8oDS8.popShadowAnimation .SmkB6fzs:hover {\n background: rgba(255, 255, 255, 0.08) !important;\n background-color: rgba(255, 255, 255, 0.08) !important;\n}\n\n/* Notification panel inner containers transparent for glass effect */\nhtml[data-xydy-styles=\"on\"] .IEv8oDS8.popShadowAnimation .yg9odyl4,\nhtml[data-xydy-styles=\"on\"] .IEv8oDS8.popShadowAnimation .dXEFJgd3,\nhtml[data-xydy-styles=\"on\"] .IEv8oDS8.popShadowAnimation .sKMx4DKd,\nhtml[data-xydy-styles=\"on\"] .IEv8oDS8.popShadowAnimation .GjJ3iWT6 {\n background: transparent !important;\n}\n\n/* Avatar panel inner containers transparent for glass effect */\nhtml[data-xydy-styles=\"on\"] ._o7id7Pe .gf_raqC9,\nhtml[data-xydy-styles=\"on\"] ._o7id7Pe .mHmVfg4D,\nhtml[data-xydy-styles=\"on\"] ._o7id7Pe .trust-login-tips-info,\nhtml[data-xydy-styles=\"on\"] ._o7id7Pe > *,\nhtml[data-xydy-styles=\"on\"] .userMenuPanelShadowAnimation .gf_raqC9,\nhtml[data-xydy-styles=\"on\"] .userMenuPanelShadowAnimation .mHmVfg4D,\nhtml[data-xydy-styles=\"on\"] .userMenuPanelShadowAnimation .trust-login-tips-info,\nhtml[data-xydy-styles=\"on\"] .userMenuPanelShadowAnimation > * {\n background: transparent !important;\n background-color: transparent !important;\n}\n\n/* Avatar and Notification panel text colors to be white / light-gray */\nhtml[data-xydy-styles=\"on\"] :is(._o7id7Pe, .userMenuPanelShadowAnimation, .Q6VYnosf.userMenuPanelShadowAnimation, .IEv8oDS8.popShadowAnimation) :is(div, span, p, a) {\n color: var(--xydy-text-main) !important;\n text-shadow: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] :is(._o7id7Pe, .userMenuPanelShadowAnimation, .Q6VYnosf.userMenuPanelShadowAnimation, .IEv8oDS8.popShadowAnimation) :is(.SgbdwJuv, .NeAI6YYW, .vPbDjtUz, ._ZNpPx3x, [class*=\"desc\"], [class*=\"time\"], [class*=\"date\"]) {\n color: var(--xydy-text-subtle) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] ._o7id7Pe [class*=\"download\"],\nhtml[data-xydy-styles=\"on\"] ._o7id7Pe [class*=\"Download\"],\nhtml[data-xydy-styles=\"on\"] .userMenuPanelShadowAnimation [class*=\"download\"],\nhtml[data-xydy-styles=\"on\"] .userMenuPanelShadowAnimation [class*=\"Download\"] {\n background: var(--xydy-accent-bg) !important;\n border: 1px solid var(--xydy-accent-border) !important;\n border-radius: 999px !important;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.28) !important;\n}\n\n/* Avatar panel: thicker frosted glass to match message panel density */\nhtml[data-xydy-styles=\"on\"] ._o7id7Pe,\nhtml[data-xydy-styles=\"on\"] .userMenuPanelShadowAnimation,\nhtml[data-xydy-styles=\"on\"] .Q6VYnosf.userMenuPanelShadowAnimation {\n background: rgba(255, 255, 255, 0.12) !important;\n backdrop-filter: blur(26px) saturate(180%) !important;\n -webkit-backdrop-filter: blur(26px) saturate(180%) !important;\n}\n\n/* Specific inner fixes for IM and Avatar dropdowns */\nhtml[data-xydy-styles=\"on\"] .componentsEntrywrapper,\nhtml[data-xydy-styles=\"on\"] .ASay5JTn,\nhtml[data-xydy-styles=\"on\"] .gfJJECEm,\nhtml[data-xydy-styles=\"on\"] .imDark,\nhtml[data-xydy-styles=\"on\"] .imContainer {\n background-color: transparent !important;\n background-image: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .cCnb7mCE:has(#im-entry-vmok-popup-portal.JTaHbIgX) {\n width: 0 !important;\n min-width: 0 !important;\n flex: 0 0 0 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .JOMNV4X6:has(#im-entry-vmok-popup-portal.JTaHbIgX) {\n background: transparent !important;\n border-radius: 18px !important;\n position: fixed !important;\n top: 72px !important;\n right: 24px !important;\n bottom: auto !important;\n left: auto !important;\n width: min(380px, calc(100vw - 48px)) !important;\n height: min(680px, calc(100dvh - 96px)) !important;\n z-index: 2005 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #im-entry-vmok-popup-portal.coB4PJdn {\n display: none !important;\n background: transparent !important;\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n border: none !important;\n box-shadow: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #im-entry-vmok-popup-portal.JTaHbIgX {\n width: 100% !important;\n height: 100% !important;\n background: rgba(10, 10, 18, 0.68) !important;\n backdrop-filter: blur(30px) saturate(180%) !important;\n -webkit-backdrop-filter: blur(30px) saturate(180%) !important;\n border: 1px solid rgba(255, 255, 255, 0.14) !important;\n border-radius: 18px !important;\n box-shadow: 0 16px 48px rgba(0, 0, 0, 0.5) !important;\n overflow: hidden !important;\n box-sizing: border-box !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #im-entry-vmok-popup-portal.JTaHbIgX :is(.KTRSIMc5, .xR2NeiXU, .ASay5JTn, .componentsEntrywrapper) {\n width: 100% !important;\n height: 100% !important;\n max-height: 100% !important;\n margin: 0 !important;\n background: transparent !important;\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n border: none !important;\n box-shadow: none !important;\n box-sizing: border-box !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #im-entry-vmok-popup-portal.JTaHbIgX .StackLayoutpagespageRoot {\n background: transparent !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #im-entry-vmok-popup-portal.JTaHbIgX .StackLayoutStackLayoutV2wrapper > [data-stack-layer]:has(~ [data-stack-layer]) {\n visibility: hidden !important;\n opacity: 0 !important;\n pointer-events: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #im-entry-vmok-popup-portal.JTaHbIgX .StackLayoutStackTitleBartitleBar {\n background: rgba(255, 255, 255, 0.035) !important;\n background-image: none !important;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1) !important;\n box-shadow: none !important;\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #im-entry-vmok-popup-portal.JTaHbIgX :is(.StackLayoutStackTitleBarleftTitle, .StackLayoutStackChatHeadertitle) {\n color: rgba(255, 255, 255, 0.92) !important;\n font-weight: 600 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #im-entry-vmok-popup-portal.JTaHbIgX .StackLayoutStackTitleBartitleBar svg {\n border-radius: 8px !important;\n transition: background 0.15s ease;\n}\n\nhtml[data-xydy-styles=\"on\"] #im-entry-vmok-popup-portal.JTaHbIgX .StackLayoutStackTitleBartitleBar svg:hover {\n background: rgba(255, 255, 255, 0.1) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #im-entry-vmok-popup-portal.JTaHbIgX :is(.LeftPanelHeaderheader, .searchSearchInputsearch_header, .searchSearchInputinput_box) {\n background: transparent !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #im-entry-vmok-popup-portal.JTaHbIgX .searchSearchInputinput_box .semi-input-wrapper {\n background: rgba(255, 255, 255, 0.07) !important;\n border: 1px solid rgba(255, 255, 255, 0.12) !important;\n border-radius: 12px !important;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #im-entry-vmok-popup-portal.JTaHbIgX .searchSearchInputinput_box input {\n background: transparent !important;\n color: rgba(255, 255, 255, 0.9) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #im-entry-vmok-popup-portal.JTaHbIgX .searchSearchInputinput_box input::placeholder {\n color: rgba(255, 255, 255, 0.45) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .JOMNV4X6.xydy-message-minimized {\n visibility: hidden !important;\n opacity: 0 !important;\n pointer-events: none !important;\n}\n\n#xydy-message-orb {\n position: fixed;\n z-index: 2010;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 0;\n min-height: 0;\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n border: 1px solid rgba(255, 255, 255, 0.28);\n border-radius: 18px;\n background: linear-gradient(135deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.035) 60%), rgba(12, 17, 26, 0.62);\n color: rgba(255, 255, 255, 0.9);\n backdrop-filter: blur(26px) saturate(160%);\n -webkit-backdrop-filter: blur(26px) saturate(160%);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.35), 0 8px 28px rgba(0, 0, 0, 0.28);\n cursor: pointer;\n overflow: hidden;\n opacity: 1;\n transition: opacity 650ms ease;\n}\n\nhtml[data-xydy-liquid-glass=\"on\"] #xydy-message-orb {\n background: linear-gradient(135deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0.04) 50%, rgba(255, 255, 255, 0.16)), rgba(12, 17, 26, 0.24);\n box-shadow: inset 0 1px 1px rgba(255, 255, 255, 0.65), inset 0 -1px 0 rgba(255, 255, 255, 0.2), 0 8px 28px rgba(0, 0, 0, 0.25);\n}\n\n#xydy-message-orb svg {\n flex: 0 0 auto;\n opacity: 0;\n transition: opacity 180ms ease;\n pointer-events: none;\n}\n\n#xydy-message-orb:is([data-phase=\"moving\"], [data-phase=\"docked\"]) svg {\n opacity: 1;\n}\n\n#xydy-message-orb[data-revealed=\"false\"] {\n opacity: 0;\n pointer-events: none;\n}\n\n#xydy-message-orb:focus-visible {\n outline: 2px solid rgba(255, 255, 255, 0.8);\n outline-offset: -4px;\n}\n\n@media (prefers-reduced-motion: reduce) {\n #xydy-message-orb,\n #xydy-message-orb svg {\n transition-duration: 1ms;\n }\n}\n\nhtml[data-xydy-styles=\"on\"] .U8pIfXaJ {\n background: transparent !important;\n background-color: transparent !important;\n transition: background-color 0.15s ease !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .U8pIfXaJ:hover {\n background-color: rgba(255, 255, 255, 0.08) !important;\n}\n\n/* Global OLED Deep Dark Mode Skin Overrides */\nhtml[data-xydy-styles=\"on\"] {\n --dux-BGPrimary: #000000 !important;\n --dux-BGPrimary2: #000000 !important;\n --dux-BGCardGroup: #000000 !important;\n --dux-BGPanelGray: #000000 !important;\n --dux-BGCreation: #000000 !important;\n --dux-BGCreation2: #000000 !important;\n --dux-BGView: #000000 !important;\n --dux-BGViewSolid: #000000 !important;\n --dux-BGCardSolid: #0f0f11 !important;\n --semi-color-bg-0: #000000 !important;\n --semi-color-bg-1: #09090b !important;\n --semi-color-bg-2: #121214 !important;\n --semi-color-bg-3: #1a1a1f !important;\n --semi-color-bg-4: #222227 !important;\n \n --color-bg-b2: transparent !important; /* Force avatar items blue-gray background to transparent */\n}\n\nhtml[data-xydy-styles=\"on\"] [class*=\"semi-popover-arr\"],\nhtml[data-xydy-styles=\"on\"] [class*=\"semi-dropdown-arr\"],\nhtml[data-xydy-styles=\"on\"] .semi-popover-arrow,\nhtml[data-xydy-styles=\"on\"] [class*=\"userMenuPanelArrow\"] {\n display: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .semi-dropdown-item:hover,\nhtml[data-xydy-styles=\"on\"] .semi-dropdown-menu-item:hover {\n background-color: rgba(255, 255, 255, 0.08) !important;\n}\n\n/* Floating iOS-style Glassmorphism Player Control Bar */\nhtml[data-xydy-styles=\"on\"] .xgplayer .xgplayer-controls,\nhtml[data-xydy-styles=\"on\"] .xgplayer-pc .xgplayer-controls,\nhtml[data-xydy-styles=\"on\"] .xgplayer-is-fullscreen .xgplayer-controls,\nhtml[data-xydy-styles=\"on\"] .xgplayer-fullscreen .xgplayer-controls,\nhtml[data-xydy-styles=\"on\"] .xg-fullscreen .xgplayer-controls,\nhtml[data-xydy-styles=\"on\"] xg-controls.xgplayer-controls,\nhtml[data-xydy-styles=\"on\"] .xgplayer-controls {\n bottom: 20px !important;\n left: 50% !important;\n right: auto !important;\n transform: translateX(-50%) !important;\n width: calc(100% - 40px) !important;\n max-width: 1200px !important;\n height: 52px !important;\n background: rgba(255, 255, 255, 0.08) !important;\n background-image: none !important;\n backdrop-filter: blur(30px) saturate(180%) !important;\n -webkit-backdrop-filter: blur(30px) saturate(180%) !important;\n border: 1px solid rgba(255, 255, 255, 0.12) !important;\n border-radius: 26px !important;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5) !important;\n overflow: visible !important;\n padding: 0 12px !important;\n box-sizing: border-box !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer .xgplayer-controls::before,\nhtml[data-xydy-styles=\"on\"] .xgplayer .xgplayer-controls::after,\nhtml[data-xydy-styles=\"on\"] .xgplayer-pc .xgplayer-controls::before,\nhtml[data-xydy-styles=\"on\"] .xgplayer-pc .xgplayer-controls::after,\nhtml[data-xydy-styles=\"on\"] .xgplayer-is-fullscreen .xgplayer-controls::before,\nhtml[data-xydy-styles=\"on\"] .xgplayer-is-fullscreen .xgplayer-controls::after,\nhtml[data-xydy-styles=\"on\"] .xgplayer-fullscreen .xgplayer-controls::before,\nhtml[data-xydy-styles=\"on\"] .xgplayer-fullscreen .xgplayer-controls::after,\nhtml[data-xydy-styles=\"on\"] xg-controls.xgplayer-controls::before,\nhtml[data-xydy-styles=\"on\"] xg-controls.xgplayer-controls::after {\n display: none !important;\n background: transparent !important;\n background-image: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xg-inner-controls {\n background: transparent !important;\n background-color: transparent !important;\n background-image: none !important;\n width: 100% !important;\n left: 0 !important;\n right: 0 !important;\n padding: 0 12px !important;\n box-sizing: border-box !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xg-left-grid,\nhtml[data-xydy-styles=\"on\"] .xg-right-grid {\n height: 100% !important;\n display: flex !important;\n align-items: center !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-progress {\n bottom: 64px !important;\n left: 12px !important;\n right: 12px !important;\n width: calc(100% - 24px) !important;\n z-index: 14 !important;\n touch-action: none !important;\n user-select: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-recommend-tag {\n translate: 0 -12px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-shop-anchor {\n translate: 0 -14px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-shop-anchor > div {\n display: inline-flex !important;\n align-items: center !important;\n gap: 8px !important;\n max-width: min(320px, calc(100vw - 48px)) !important;\n padding: 6px 10px !important;\n border: 1px solid var(--xydy-panel-border) !important;\n border-radius: 14px !important;\n background: var(--xydy-panel-bg) !important;\n backdrop-filter: blur(16px) saturate(1.2) !important;\n -webkit-backdrop-filter: blur(16px) saturate(1.2) !important;\n box-shadow: var(--xydy-panel-shadow-soft) !important;\n color: var(--xydy-text-main) !important;\n text-shadow: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-shop-anchor > div > svg {\n flex-shrink: 0 !important;\n border-radius: 6px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-shop-anchor :is(.E_XpBG4T, .nreJijFE, .gcPXOPY1) {\n background: transparent !important;\n color: inherit !important;\n text-shadow: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-shop-anchor .gcPXOPY1 {\n color: var(--xydy-text-subtle) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-video-info-wrap,\nhtml[data-xydy-styles=\"on\"] .douyin-player-video-info-wrap,\nhtml[data-xydy-styles=\"on\"] .video-info-detail {\n bottom: 24px !important;\n transition: bottom 0.25s cubic-bezier(0.25, 1, 0.5, 1) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer:not(.xgplayer-inactive) .xgplayer-video-info-wrap,\nhtml[data-xydy-styles=\"on\"] .xgplayer:not(.xgplayer-inactive) .douyin-player-video-info-wrap,\nhtml[data-xydy-styles=\"on\"] .xgplayer:not(.xgplayer-inactive) .video-info-detail {\n bottom: 76px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] div[class*=\"immersive-player-switch-on-hide-interaction-area\"],\nhtml[data-xydy-styles=\"on\"] .gvcmX2Lf,\nhtml[data-xydy-styles=\"on\"] .rDq18SJg {\n bottom: 24px !important;\n transition: bottom 0.25s cubic-bezier(0.25, 1, 0.5, 1) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer:not(.xgplayer-inactive) div[class*=\"immersive-player-switch-on-hide-interaction-area\"],\nhtml[data-xydy-styles=\"on\"] .xgplayer:not(.xgplayer-inactive) .gvcmX2Lf,\nhtml[data-xydy-styles=\"on\"] .xgplayer:not(.xgplayer-inactive) .rDq18SJg {\n bottom: 76px !important;\n}\n\n/* ===== Sidebar Floating Glass Panel ===== */\n\nhtml[data-xydy-sidebar=\"on\"] #douyin-navigation,\nhtml[data-xydy-sidebar=\"on\"] [data-e2e=\"douyin-navigation\"]:not(#douyin-navigation *) {\n position: fixed !important;\n left: 8px !important;\n top: 50% !important;\n right: auto !important;\n bottom: auto !important;\n width: 160px !important;\n height: auto !important;\n min-height: 0 !important;\n max-height: calc(100dvh - 24px) !important;\n translate: 0 -50% !important;\n border-radius: 20px !important;\n z-index: 1001 !important;\n flex: none !important;\n overflow: visible !important;\n}\n\nhtml[data-xydy-sidebar=\"on\"] #douyin-navigation [data-e2e=\"douyin-navigation\"] {\n position: static !important;\n width: 100% !important;\n height: auto !important;\n min-height: 0 !important;\n max-height: calc(100dvh - 42px) !important;\n flex: none !important;\n margin: 0 !important;\n padding: 0 !important;\n translate: none !important;\n transform: none !important;\n overflow: hidden auto !important;\n scrollbar-width: thin;\n}\n\nhtml[data-xydy-sidebar=\"on\"] #douyin-navigation .AVblXapA,\nhtml[data-xydy-sidebar=\"on\"] [data-e2e=\"douyin-navigation\"] .AVblXapA {\n position: relative !important;\n left: auto !important;\n top: auto !important;\n width: 100% !important;\n height: auto !important;\n min-height: 0 !important;\n max-height: inherit !important;\n z-index: 1002 !important;\n display: flex !important;\n flex-direction: column !important;\n background: rgba(255, 255, 255, 0.08) !important;\n backdrop-filter: blur(30px) saturate(180%) !important;\n -webkit-backdrop-filter: blur(30px) saturate(180%) !important;\n border-radius: 20px !important;\n border: 1px solid rgba(255, 255, 255, 0.12) !important;\n box-shadow: 8px 0 32px rgba(2, 6, 23, 0.2) !important;\n padding: 8px !important;\n box-sizing: border-box !important;\n overflow: hidden !important;\n}\n\nhtml[data-xydy-sidebar=\"on\"] :is(#douyin-navigation, [data-e2e=\"douyin-navigation\"]) :is(.jgOh5s24, .QBGm3boE, .cXR8kOAg),\nhtml[data-xydy-sidebar=\"on\"] #douyin-navigation [data-e2e=\"douyin-navigation\"] > div {\n width: 100% !important;\n height: auto !important;\n min-height: 0 !important;\n max-height: none !important;\n margin: 0 !important;\n padding: 0 !important;\n flex: none !important;\n box-sizing: border-box !important;\n}\n\nhtml[data-xydy-sidebar=\"on\"] :is(#douyin-navigation, [data-e2e=\"douyin-navigation\"]) :is(footer, .PkTZC_CY, .Y9qfItNq, .kCzNsmN5:not(:has(a))) {\n display: none !important;\n}\n\nhtml[data-xydy-sidebar=\"on\"] #douyin-navigation .IWnT0pMe,\nhtml[data-xydy-sidebar=\"on\"] [data-e2e=\"douyin-navigation\"] .IWnT0pMe {\n display: none !important;\n}\n\nhtml[data-xydy-sidebar=\"on\"] #panel-menu,\nhtml[data-xydy-sidebar=\"on\"] #douyin-navigation pace-island,\nhtml[data-xydy-sidebar=\"on\"] [data-e2e=\"douyin-navigation\"] pace-island {\n display: none !important;\n}\n\nhtml[data-xydy-sidebar=\"on\"] #douyin-navigation > a:first-child,\nhtml[data-xydy-sidebar=\"on\"] #douyin-navigation > a.RZuwF26I {\n display: none !important;\n}\n\nhtml[data-xydy-sidebar=\"on\"] #douyin-navigation,\nhtml[data-xydy-sidebar=\"on\"] [data-e2e=\"douyin-navigation\"],\nhtml[data-xydy-sidebar=\"on\"] #douyin-navigation svg,\nhtml[data-xydy-sidebar=\"on\"] [data-e2e=\"douyin-navigation\"] svg {\n color: rgba(241, 245, 249, 0.94) !important;\n fill: currentColor !important;\n}\n\nhtml[data-xydy-sidebar=\"on\"].xydy-sidebar-hidden #douyin-navigation,\nhtml[data-xydy-sidebar=\"on\"].xydy-sidebar-hidden [data-e2e=\"douyin-navigation\"]:not(#douyin-navigation *) {\n transform: translateX(calc(-100% - 12px)) !important;\n transition: transform 0.22s cubic-bezier(0.25, 1, 0.5, 1) !important;\n}\n\nhtml[data-xydy-sidebar=\"on\"]:not(.xydy-sidebar-hidden) #douyin-navigation,\nhtml[data-xydy-sidebar=\"on\"]:not(.xydy-sidebar-hidden) [data-e2e=\"douyin-navigation\"]:not(#douyin-navigation *) {\n transform: translateX(0) !important;\n transition: transform 0.22s cubic-bezier(0.25, 1, 0.5, 1) !important;\n}\n\nhtml[data-xydy-sidebar=\"on\"] #douyin-right-container {\n flex: 1 1 auto !important;\n width: 100% !important;\n min-width: 0 !important;\n}\n\nhtml[data-xydy-sidebar=\"on\"] #dark {\n min-height: 100vh !important;\n}\n\nhtml[data-xydy-sidebar=\"on\"] .recommend-slidelist {\n height: 100% !important;\n}\nhtml[data-xydy-sidebar=\"on\"] .recommend-slidelist .fullscreen_capture_feedback {\n height: 100% !important;\n padding-bottom: 0 !important;\n}\nhtml[data-xydy-sidebar=\"on\"] .recommend-slidelist .fullscreen_capture_feedback > div {\n height: 100% !important;\n}\n\n/* Proximity Hover Panels Zen Mode */\nhtml[data-xydy-proximity=\"on\"] .dySwiperSlide .xgplayer-controls:not(.xydy-proximity-visible),\nhtml[data-xydy-proximity=\"on\"] .dySwiperSlide .xgplayer-progress:not(.xydy-proximity-visible),\nhtml[data-xydy-proximity=\"on\"] .dySwiperSlide .xgplayer-video-info-wrap:not(.xydy-proximity-visible),\nhtml[data-xydy-proximity=\"on\"] .dySwiperSlide .douyin-player-video-info-wrap:not(.xydy-proximity-visible),\nhtml[data-xydy-proximity=\"on\"] .dySwiperSlide .video-info-detail:not(.xydy-proximity-visible),\nhtml[data-xydy-proximity=\"on\"] .dySwiperSlide .xgplayer-recommend-tag:not(.xydy-proximity-visible),\nhtml[data-xydy-proximity=\"on\"] .dySwiperSlide .xgplayer-shop-anchor:not(.xydy-proximity-visible),\nhtml[data-xydy-proximity=\"on\"] .dySwiperSlide div[class*=\"immersive-player-switch-on-hide-interaction-area\"]:not(.xydy-proximity-visible),\nhtml[data-xydy-proximity=\"on\"] .dySwiperSlide .gvcmX2Lf:not(.xydy-proximity-visible),\nhtml[data-xydy-proximity=\"on\"] .dySwiperSlide .rDq18SJg:not(.xydy-proximity-visible) {\n opacity: 0 !important;\n pointer-events: none !important;\n transition: opacity 0.08s ease, visibility 0.08s ease !important;\n}\n\nhtml[data-xydy-proximity=\"on\"] .dySwiperSlide .xydy-proximity-visible {\n opacity: 1 !important;\n pointer-events: auto !important;\n transition: opacity 0.08s ease, visibility 0.08s ease !important;\n}\n\n/* Video player hover popups: playback speed, volume slider, video quality list, danmaku setting, emoji */\nhtml:root[data-xydy-reveal=\"on\"] #douyin-header {\n top: 0 !important;\n opacity: 1 !important;\n visibility: visible !important;\n pointer-events: auto !important;\n}\n\nhtml:root[data-xydy-reveal=\"on\"][data-xydy-navigation=\"on\"] #douyin-header :is(.xydy-search-shell, #douyin-header-menuCt) {\n top: 8px !important;\n}\n\nhtml:root[data-xydy-reveal=\"on\"][data-xydy-sidebar=\"on\"] #douyin-navigation,\nhtml:root[data-xydy-reveal=\"on\"][data-xydy-sidebar=\"on\"] [data-e2e=\"douyin-navigation\"]:not(#douyin-navigation *) {\n transform: translateX(0) !important;\n opacity: 1 !important;\n visibility: visible !important;\n pointer-events: auto !important;\n}\n\nhtml:root[data-xydy-reveal=\"on\"] body .dySwiperSlide :is(\n .xgplayer-controls, .xg-inner-controls, .xg-left-grid, .xg-right-grid, .xgplayer-progress,\n .douyin-player-controls, .douyin-player-controls-inner, .douyin-player-progress,\n .xgplayer-video-info-wrap, .douyin-player-video-info-wrap, .video-info-detail, .xgplayer-recommend-tag, .xgplayer-shop-anchor,\n .gvcmX2Lf, .rDq18SJg, [class*=\"immersive-player-switch-on-hide-interaction-area\"]\n) {\n opacity: 1 !important;\n visibility: visible !important;\n pointer-events: auto !important;\n}\n\nhtml:root[data-xydy-reveal=\"on\"] .dySwiperSlide :is(.xgplayer-controls, .xgplayer-progress, .douyin-player-controls, .douyin-player-progress) {\n display: block !important;\n}\n\nhtml:root[data-xydy-reveal=\"on\"] .dySwiperSlide :is(.xg-inner-controls, .douyin-player-controls-inner) {\n transform: none !important;\n}\n\nhtml:root[data-xydy-reveal=\"on\"][data-xydy-styles=\"on\"] .dySwiperSlide .xgplayer-controls {\n transform: translateX(-50%) !important;\n}\n\nhtml:root[data-xydy-reveal=\"on\"][data-xydy-styles=\"on\"] .dySwiperSlide :is(\n .xgplayer-video-info-wrap, .douyin-player-video-info-wrap, .video-info-detail,\n .gvcmX2Lf, .rDq18SJg, [class*=\"immersive-player-switch-on-hide-interaction-area\"]\n) {\n bottom: 76px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-slider,\nhtml[data-xydy-styles=\"on\"] .xgplayer-playclarity-setting .virtual,\nhtml[data-xydy-styles=\"on\"] .xgplayer-controls .xg-options-list,\nhtml[data-xydy-styles=\"on\"] .xg-spot-content,\nhtml[data-xydy-styles=\"on\"] .xgplayer-progress-point,\nhtml[data-xydy-styles=\"on\"] .danmu-setting-box,\nhtml[data-xydy-styles=\"on\"] .danmu-emoji-box {\n background: rgba(10, 10, 18, 0.68) !important;\n backdrop-filter: blur(30px) saturate(180%) !important;\n -webkit-backdrop-filter: blur(30px) saturate(180%) !important;\n border: 1px solid rgba(255, 255, 255, 0.25) !important;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3) !important;\n border-radius: 12px !important;\n}\n\n/* Playback Speed List (Mac-style context menu layout) */\nhtml[data-xydy-styles=\"on\"] .xgplayer-playrates {\n padding: 6px 4px !important;\n margin: 0 !important;\n list-style: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-playrates li {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n height: 32px !important;\n padding: 0 12px !important;\n margin: 4px 6px !important;\n border-radius: 6px !important;\n color: rgba(255, 255, 255, 0.68) !important; /* Muted unselected */\n font-size: 13px !important;\n cursor: pointer !important;\n background: transparent !important;\n transition: all 0.15s ease !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-playrates li:hover {\n background: rgba(255, 255, 255, 0.12) !important;\n color: #ffffff !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-playrates li.active {\n background: rgba(255, 255, 255, 0.22) !important;\n color: #ffffff !important;\n font-weight: 600 !important;\n}\n\n/* Video Quality Clarity List */\nhtml[data-xydy-styles=\"on\"] .xgplayer-playclarity-setting .virtual {\n padding: 6px 4px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-playclarity-setting .virtual > .item {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n height: 32px !important;\n padding: 0 12px !important;\n margin: 4px 6px !important;\n border-radius: 6px !important;\n color: rgba(255, 255, 255, 0.68) !important; /* Muted unselected */\n font-size: 13px !important;\n cursor: pointer !important;\n transition: all 0.15s ease !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-playclarity-setting .virtual > .item:hover {\n background: rgba(255, 255, 255, 0.12) !important;\n color: #ffffff !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-playclarity-setting .virtual > :is(.active, .selected) {\n background: rgba(255, 255, 255, 0.22) !important;\n color: #ffffff !important;\n font-weight: 600 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-playclarity-setting :is(.login-tooltip-slot, .smart-tooltip-slot) {\n background: transparent !important;\n border: none !important;\n box-shadow: none !important;\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-playclarity-setting :is(.login-tooltip-slot, .smart-tooltip-slot):empty {\n display: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] :is(.xgplayer-setting-content, .xgplayer-playratio-wrap, .xg-spot-text, .clarity-wrapper) {\n background: transparent !important;\n border: none !important;\n box-shadow: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-controls :is(.xgplayer-playratio-item, .xg-options-list > .option-item) {\n background: transparent !important;\n color: rgba(255, 255, 255, 0.75) !important;\n border-radius: 6px !important;\n transition: background 0.15s ease, color 0.15s ease !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-controls :is(.xgplayer-playratio-item, .xg-options-list > .option-item):hover {\n background: rgba(255, 255, 255, 0.12) !important;\n color: #fff !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xgplayer-controls :is(.xgplayer-playratio-item.select, .xg-options-list > .option-item.selected) {\n background: rgba(255, 255, 255, 0.2) !important;\n color: #fff !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xg-spot-content {\n overflow: hidden !important;\n}\n\n/* Danmaku Settings & Emoticon Panels Text styling */\nhtml[data-xydy-styles=\"on\"] .danmu-setting-box :is(span, p, div, label),\nhtml[data-xydy-styles=\"on\"] .danmu-emoji-box :is(span, p, div) {\n color: rgba(255, 255, 255, 0.95) !important;\n text-shadow: none !important;\n}\n\n/* Text Hierarchy inside Danmaku settings (gray subtext) */\nhtml[data-xydy-styles=\"on\"] .danmu-setting-box :is(.desc, .setting-desc, [class*=\"desc\"], [class*=\"value\"], [class*=\"tip\"]) {\n color: rgba(255, 255, 255, 0.6) !important;\n}\n\n/* Custom tooltips, settings, emoticons, and volume label overrides */\nhtml[data-xydy-styles=\"on\"] :is(.xg-tips, .xgTips, .xgplayer-tips, .xgplayer-tooltip, .semi-tooltip, .semi-tooltip-wrapper, .danmu-switch-box) {\n background: rgba(10, 10, 18, 0.68) !important;\n background-image: none !important;\n backdrop-filter: blur(30px) saturate(180%) !important;\n -webkit-backdrop-filter: blur(30px) saturate(180%) !important;\n border: 1px solid rgba(255, 255, 255, 0.3) !important;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;\n border-radius: 8px !important; /* Consistent 8px roundness */\n color: #ffffff !important; /* Main tooltip text color: white */\n text-shadow: none !important;\n}\n\n/* Reset inner content container of Semi Design tooltips to prevent nested borders/boxes */\nhtml[data-xydy-styles=\"on\"] :is(.semi-tooltip-wrapper, .danmu-switch-box) :is(.semi-tooltip-content, .semi-tooltip-inner) {\n background: transparent !important;\n background-color: transparent !important;\n border: none !important;\n box-shadow: none !important;\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n padding: 0 !important;\n border-radius: 0 !important;\n}\n\n/* Ensure all normal elements and spans inside the tooltip remain white */\nhtml[data-xydy-styles=\"on\"] :is(.xg-tips, .xgTips, .xgplayer-tips, .xgplayer-tooltip, .semi-tooltip, .semi-tooltip-wrapper, .danmu-switch-box) :is(p, div, span) {\n color: #ffffff !important;\n text-shadow: none !important;\n}\n\n/* ONLY the shortcut keycode text / span should be styled black on a white pill background */\nhtml:root[data-xydy-styles=\"on\"] :is(.xg-tips, .xgTips, .xgplayer-tips, .xgplayer-tooltip, .semi-tooltip, .semi-tooltip-wrapper, .danmu-switch-box) :is(.shortcutKey, [class*=\"shortcutKey\"], [class*=\"shortcut\"], .X6xG2EuS, .ZIbADYYv, kbd) {\n color: #000000 !important; /* Shortcut key letter color: black */\n -webkit-text-fill-color: #000000 !important;\n background-color: #ffffff !important; /* Pill background for contrast */\n border-radius: 4px !important;\n padding: 0 4px !important;\n margin-left: 6px !important;\n font-weight: bold !important;\n display: inline-block !important;\n text-shadow: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .semi-tooltip-wrapper {\n padding: 9px 12px !important;\n border-radius: 11px !important;\n font-size: 13px !important;\n line-height: 20px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .semi-tooltip-wrapper .jalx9Muz {\n display: flex !important;\n align-items: center !important;\n gap: 8px !important;\n}\n\nhtml:root[data-xydy-styles=\"on\"] .semi-tooltip-wrapper .ZIbADYYv {\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n flex: 0 0 auto !important;\n min-width: 20px !important;\n height: 20px !important;\n padding: 0 5px !important;\n margin-left: 0 !important;\n box-sizing: border-box !important;\n line-height: 20px !important;\n font-size: 12px !important;\n font-weight: 650 !important;\n border: 1px solid rgba(255, 255, 255, 0.5) !important;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12) !important;\n}\n\n/* Hide native black triangle arrows for a cleaner aesthetic */\nhtml[data-xydy-styles=\"on\"] :is(.semi-tooltip-wrapper, [class*=\"tooltip\"]) :is(.semi-tooltip-arrow, [class*=\"arrow\"]) {\n display: none !important;\n}\n\n/* Emoticon popup list background items */\nhtml[data-xydy-styles=\"on\"] .danmu-emoji-box .emoji-item:hover,\nhtml[data-xydy-styles=\"on\"] .danmu-emoji-box [class*=\"emoji\"]:hover {\n background-color: rgba(255, 255, 255, 0.22) !important;\n}\n\n/* Danmaku setting slider and checkbox background adjustments */\nhtml[data-xydy-styles=\"on\"] .danmu-setting-box :is(.semi-slider, .semi-checkbox, .semi-switch) {\n background-color: transparent !important;\n}\n\n/* Make volume indicator text background transparent */\nhtml[data-xydy-styles=\"on\"] .xgplayer-value-label {\n background: transparent !important;\n background-color: transparent !important;\n box-shadow: none !important;\n border: none !important;\n color: var(--xydy-text-main) !important;\n}\n\n/* --- Floating Frosted Glass Comment Panel Override --- */\n\n/* 1. Prevent the video player container from shrinking or shifting horizontally */\nhtml[data-xydy-styles=\"on\"] .playerContainer,\nhtml[data-xydy-styles=\"on\"] .playerContainer + :not(#chapterVideoSideCard) {\n width: 100% !important;\n max-width: 100% !important;\n flex: 1 1 100% !important;\n transform: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #chapterVideoSideCard {\n background: transparent !important;\n position: absolute !important;\n left: var(--xydy-chapter-left, 24px) !important;\n right: auto !important;\n top: auto !important;\n bottom: var(--xydy-chapter-bottom, 100px) !important;\n height: var(--xydy-chapter-height, 480px) !important;\n max-width: min(420px, calc(100% - 24px)) !important;\n transform: none !important;\n z-index: 2002 !important;\n overflow: hidden !important;\n border-radius: 16px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #chapterVideoCard {\n width: 100% !important;\n height: 100% !important;\n box-sizing: border-box !important;\n background: rgba(10, 10, 18, 0.68) !important;\n backdrop-filter: blur(30px) saturate(180%) !important;\n -webkit-backdrop-filter: blur(30px) saturate(180%) !important;\n border: 1px solid rgba(255, 255, 255, 0.14) !important;\n border-radius: 16px !important;\n overflow: hidden !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .playerContainer.xydy-chapter-mode ~ #chapterVideoSideCard {\n box-shadow: 0 16px 48px rgba(0, 0, 0, 0.5) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #chapterVideoCard :is(.WP7MMDl1, .vW0uEvei, .TnOGNqE_, .nUBMGNO_, .nLAfxDzk) {\n background: transparent !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #chapterVideoCard .WP7MMDl1 {\n display: flex !important;\n flex-direction: column !important;\n height: 100% !important;\n min-height: 0 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #chapterVideoCard .vW0uEvei {\n flex: 0 0 auto !important;\n padding: 12px 16px !important;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #chapterVideoCard .hqpyV2Ae {\n color: rgba(255, 255, 255, 0.9) !important;\n font-size: 14px !important;\n font-weight: 600 !important;\n letter-spacing: 0.5px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #chapterVideoCard .GMpBYXh8 {\n width: 28px !important;\n height: 28px !important;\n padding: 4px !important;\n box-sizing: border-box !important;\n border-radius: 50% !important;\n opacity: 0.65;\n cursor: pointer;\n transition: background 0.16s ease, opacity 0.16s ease;\n}\n\nhtml[data-xydy-styles=\"on\"] #chapterVideoCard .GMpBYXh8:hover {\n background: rgba(255, 255, 255, 0.12) !important;\n opacity: 1;\n}\n\nhtml[data-xydy-styles=\"on\"] #chapterVideoCard .GMpBYXh8 path {\n fill: rgba(255, 255, 255, 0.9) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #chapterVideoCard .TnOGNqE_ {\n flex: 1 1 auto !important;\n min-height: 0 !important;\n overflow-y: auto !important;\n overscroll-behavior: contain;\n padding: 12px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #chapterVideoCard .dc_4S0XF {\n background: rgba(255, 255, 255, 0.04) !important;\n border: 1px solid rgba(255, 255, 255, 0.07) !important;\n border-radius: 12px !important;\n margin-bottom: 8px !important;\n padding: 12px !important;\n transition: background 0.16s ease, border-color 0.16s ease;\n}\n\nhtml[data-xydy-styles=\"on\"] #chapterVideoCard .dc_4S0XF:hover {\n background: rgba(255, 255, 255, 0.1) !important;\n border-color: rgba(255, 255, 255, 0.18) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #chapterVideoCard .dc_4S0XF.yn7lfBVZ {\n background: rgba(255, 255, 255, 0.13) !important;\n border-color: rgba(255, 255, 255, 0.26) !important;\n box-shadow: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #chapterVideoCard .n4QS2Hrc {\n color: rgba(255, 255, 255, 0.55) !important;\n font-size: 12px !important;\n font-variant-numeric: tabular-nums;\n}\n\nhtml[data-xydy-styles=\"on\"] #chapterVideoCard ._MafKZXw {\n color: rgba(255, 255, 255, 0.9) !important;\n font-size: 14px !important;\n font-weight: 500 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #chapterVideoCard ::-webkit-scrollbar {\n width: 4px;\n}\n\nhtml[data-xydy-styles=\"on\"] #chapterVideoCard ::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.22);\n border-radius: 999px;\n}\n\nhtml[data-xydy-styles=\"on\"] #chapterVideoCard ::-webkit-scrollbar-track {\n background: transparent;\n}\n\nhtml[data-xydy-styles=\"on\"][data-xydy-liquid-glass=\"on\"] :is(\n #xydy-header-actions-background,\n #xydy-header-search-background,\n .jQkpodjD > .o6tvYzFd,\n .xgplayer-shop-anchor > div,\n .xydy-liquid-surface,\n .xgplayer-controls,\n .xgplayer-slider,\n .xgplayer-playclarity-setting .virtual,\n .xgplayer-controls .xg-options-list,\n .xg-spot-content,\n .xgplayer-progress-point,\n #douyin-navigation .AVblXapA,\n [data-e2e=\"douyin-navigation\"] .AVblXapA,\n #douyin-navigation:not(:has(.AVblXapA)),\n [data-e2e=\"douyin-navigation\"]:not(#douyin-navigation *):not(:has(.AVblXapA)),\n #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"]),\n #chapterVideoCard,\n #im-entry-vmok-popup-portal.JTaHbIgX,\n .IEv8oDS8.popShadowAnimation,\n .W6qKIZ6x.popShadowAnimation,\n .userMenuPanelShadowAnimation,\n ._o7id7Pe,\n .semi-dropdown-wrapper,\n .semi-popover-content,\n .n4FTI10b,\n ._KRDPUZX,\n .hurS2TXT,\n .danmu-setting-box,\n .danmu-emoji-box,\n .MhqtMkwi,\n .Yq8ahEWU,\n .lGxh4PDP.Q2nY9qA2.popShadowAnimation,\n .v3wRIyhF.qoOxjH5x.UaYGQUZd.NqzE824S,\n .semi-tooltip-wrapper,\n .xg-tips,\n .xgTips,\n .xgplayer-tips,\n .xgplayer-tooltip,\n .danmu-switch-box\n) {\n --xydy-liquid-backdrop: blur(2px) saturate(1.35);\n background:\n linear-gradient(135deg, rgba(255, 255, 255, 0.19), rgba(255, 255, 255, 0.025) 38%, rgba(255, 255, 255, 0.07) 78%, rgba(255, 255, 255, 0.14)),\n rgba(12, 17, 26, 0.2) !important;\n background-image:\n linear-gradient(135deg, rgba(255, 255, 255, 0.19), rgba(255, 255, 255, 0.025) 38%, rgba(255, 255, 255, 0.07) 78%, rgba(255, 255, 255, 0.14)) !important;\n backdrop-filter: var(--xydy-liquid-backdrop) !important;\n -webkit-backdrop-filter: var(--xydy-liquid-backdrop) !important;\n border-color: rgba(255, 255, 255, 0.32) !important;\n box-shadow:\n inset 0 1px 0 rgba(255, 255, 255, 0.55),\n inset 1px 0 0 rgba(255, 255, 255, 0.16),\n inset 0 -1px 0 rgba(255, 255, 255, 0.18),\n 0 12px 32px rgba(0, 0, 0, 0.25) !important;\n}\n\n/* 2. Position the comments side card as a floating drawer on the right overlaying the player */\nhtml[data-xydy-styles=\"on\"] .playerContainer[data-xydy-comments-transition=\"on\"] {\n transition: width .26s cubic-bezier(.22, 1, .36, 1), max-width .26s cubic-bezier(.22, 1, .36, 1) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .playerContainer[data-xydy-comments-avoid=\"on\"] {\n width: calc(100% - var(--xydy-comments-reserved)) !important;\n max-width: calc(100% - var(--xydy-comments-reserved)) !important;\n min-width: 0 !important;\n flex: 0 0 auto !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .playerContainer[data-xydy-comments-resizing=\"true\"] {\n transition: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .playerContainer[data-xydy-comments-avoid=\"on\"] :is(.slider-video, .basePlayerContainer, .xgplayer, .xg-video-container) {\n width: 100% !important;\n max-width: 100% !important;\n min-width: 0 !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .playerContainer[data-xydy-comments-avoid=\"on\"] :is(video, .focusPanel .dySwiperSlide > div > img.AWIwgv_K) {\n width: 100% !important;\n height: 100% !important;\n max-width: 100% !important;\n object-fit: contain !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard .xydy-comments-pin {\n position: absolute !important;\n top: 1px !important;\n right: 10px !important;\n display: grid !important;\n place-items: center !important;\n width: 26px !important;\n height: 23px !important;\n margin: 0 !important;\n padding: 0 !important;\n z-index: 1010 !important;\n border: 0 !important;\n border-radius: 7px !important;\n background: transparent !important;\n color: rgba(255, 255, 255, .58) !important;\n cursor: pointer !important;\n transition: color .16s ease, background .16s ease !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard .xydy-comments-pin svg {\n pointer-events: none;\n transform: rotate(35deg);\n transition: transform .22s cubic-bezier(.22, 1, .36, 1);\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard .xydy-comments-pin:hover {\n color: white !important;\n background: rgba(255, 255, 255, .13) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard .xydy-comments-pin[aria-pressed=\"true\"] {\n color: #c4e0ff !important;\n background: rgba(125, 180, 255, .18) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard .xydy-comments-pin[aria-pressed=\"true\"] svg { transform: none; }\nhtml[data-xydy-styles=\"on\"] #videoSideCard .xydy-comments-pin:focus-visible { outline: 2px solid #c4e0ff !important; }\nhtml[data-xydy-styles=\"on\"] #videoSideCard .xydy-comments-dock-resize { display: none; }\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard[data-xydy-comments-dock=\"on\"] {\n box-sizing: border-box !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard[data-xydy-comments-dock=\"on\"] > :is(.xydy-drag-handle, .xydy-resize-handle) { display: none !important; }\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard[data-xydy-comments-dock=\"on\"] > .xydy-comments-dock-resize {\n display: block !important;\n position: absolute !important;\n left: 0 !important;\n top: 30px !important;\n bottom: 12px !important;\n width: 9px !important;\n z-index: 1008 !important;\n touch-action: none;\n cursor: ew-resize;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard[data-xydy-comments-dock=\"on\"] > .xydy-comments-dock-resize::after {\n content: '';\n position: absolute;\n left: 2px;\n top: calc(50% - 22px);\n width: 3px;\n height: 44px;\n border-radius: 2px;\n background: rgba(255, 255, 255, .45);\n opacity: 0;\n transition: opacity .16s ease;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard[data-xydy-comments-dock=\"on\"] > .xydy-comments-dock-resize:is(:hover, :focus-visible)::after { opacity: 1; }\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard[data-xydy-comments-dock=\"on\"] .semi-tabs-bar {\n overflow-x: auto !important;\n scrollbar-width: none;\n flex-wrap: nowrap !important;\n justify-content: flex-start !important;\n gap: 12px !important;\n min-width: 0 !important;\n max-width: calc(100% - 40px) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard[data-xydy-comments-dock=\"on\"] .semi-tabs-tab {\n flex: 0 0 auto !important;\n margin: 0 !important;\n font-size: 14px !important;\n white-space: nowrap !important;\n}\n\n@media (prefers-reduced-motion: reduce) {\n html[data-xydy-styles=\"on\"] .playerContainer[data-xydy-comments-transition=\"on\"] { transition: none !important; }\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard[data-xydy-comments-state=\"idle\"] {\n display: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"]) {\n position: absolute !important;\n right: 24px !important;\n top: 76px !important;\n bottom: 84px !important;\n width: 420px !important;\n height: calc(100% - 160px) !important;\n z-index: 2001 !important;\n border-radius: 16px !important;\n background: rgba(10, 10, 18, 0.78) !important;\n backdrop-filter: blur(30px) saturate(180%) !important;\n -webkit-backdrop-filter: blur(30px) saturate(180%) !important;\n border: 1px solid rgba(255, 255, 255, 0.14) !important;\n box-shadow: 0 16px 48px rgba(0, 0, 0, 0.5) !important;\n overflow: hidden !important;\n overflow-y: auto !important;\n overscroll-behavior: contain !important;\n transition: transform 0.36s cubic-bezier(0.25, 1, 0.5, 1), opacity 0.28s ease !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"])[data-xydy-comments-mounted=\"true\"] {\n animation: xydy-comments-slide-in 0.36s cubic-bezier(0.25, 1, 0.5, 1) backwards !important;\n}\n\nhtml[data-xydy-styles=\"on\"].xydy-comments-force-hidden #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"]) {\n transform: translateX(calc(100% + 56px)) !important;\n opacity: 0 !important;\n pointer-events: none !important;\n}\n\n\n\n@keyframes xydy-comments-slide-in {\n from {\n transform: translateX(calc(100% + 56px));\n opacity: 0;\n }\n to {\n transform: translateX(0);\n opacity: 1;\n }\n}\n\n/* Visibility is controlled by Douyin natively — we only handle styling */\n\n/* 图文作品:让内容图片按比例撑满容器高度,消除底部空隙 */\nhtml[data-xydy-styles=\"on\"] [class*=\"imgBackground\"] img {\n height: 100% !important;\n width: auto !important;\n object-fit: contain !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .basePlayerContainer .focusPanel .dySwiperSlide > div > img.AWIwgv_K {\n height: 100% !important;\n width: auto !important;\n max-height: none !important;\n max-width: none !important;\n flex: 0 0 auto !important;\n align-self: center !important;\n margin: 0 auto !important;\n object-fit: contain !important;\n}\n\n.xydy-image-sweep {\n position: fixed;\n z-index: 2147480000;\n pointer-events: none;\n overflow: hidden;\n}\n\n.xydy-image-sweep::after {\n content: '';\n position: absolute;\n left: 0;\n top: -24%;\n width: 100%;\n height: 24%;\n background: linear-gradient(180deg, transparent 10%, rgba(223, 246, 255, .04) 40%, rgba(255, 255, 255, .2) 56%, rgba(216, 239, 255, .05) 68%, transparent);\n backdrop-filter: blur(.6px) brightness(1.08);\n -webkit-backdrop-filter: blur(.6px) brightness(1.08);\n animation: xydy-image-scan 280ms cubic-bezier(.35, 0, .55, 1) both;\n}\n\n@keyframes xydy-image-scan {\n from { transform: translateY(0); opacity: 0; }\n 15% { opacity: 1; }\n 85% { opacity: 1; }\n to { transform: translateY(525%); opacity: 0; }\n}\n\n.xydy-image-float {\n position: fixed !important;\n z-index: 2147480001 !important;\n border: 0 !important;\n border-radius: 16px;\n overflow: hidden;\n background: rgba(20, 24, 32, .3);\n box-shadow: 0 18px 55px rgba(0, 0, 0, .32), 0 0 0 1px rgba(255, 255, 255, .3);\n cursor: grab;\n user-select: none;\n touch-action: none;\n isolation: isolate;\n}\n\n.xydy-image-float:active { cursor: grabbing; }\n.xydy-image-float:focus-visible { outline: 2px solid rgba(167, 210, 255, .95); outline-offset: 3px; }\n\n.xydy-image-float > img {\n display: block !important;\n width: 100% !important;\n height: 100% !important;\n margin: 0 !important;\n object-fit: contain !important;\n pointer-events: auto !important;\n -webkit-user-drag: element;\n}\n\n.xydy-image-float-resolution,\n.xydy-image-float-close,\n.xydy-image-float-toolbar {\n position: absolute;\n opacity: 0;\n transition: opacity 180ms ease;\n color: white;\n font: 12px/1.4 sans-serif;\n}\n\n.xydy-image-float[data-ready=\"true\"] :is(.xydy-image-float-resolution, .xydy-image-float-close, .xydy-image-float-toolbar) { opacity: 1; }\n\n.xydy-image-float-resolution { top: 12px; left: 10px; text-shadow: 0 1px 5px rgba(0, 0, 0, .8); pointer-events: none; }\n\n.xydy-image-float-close {\n top: 7px;\n right: 7px;\n width: 25px;\n height: 25px;\n padding: 0;\n border: 1px solid rgba(255, 255, 255, .24);\n border-radius: 50%;\n background: rgba(20, 24, 32, .35);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n font-size: 19px;\n line-height: 23px;\n cursor: pointer;\n}\n\n.xydy-image-float-toolbar {\n display: flex;\n gap: 4px;\n left: 7px;\n right: 7px;\n bottom: 7px;\n padding: 4px;\n border: 1px solid rgba(255, 255, 255, .3);\n border-radius: 12px;\n background: rgba(35, 40, 49, .5);\n backdrop-filter: blur(18px) saturate(1.4);\n -webkit-backdrop-filter: blur(18px) saturate(1.4);\n}\n\nhtml[data-xydy-liquid-glass=\"on\"] .xydy-image-float-toolbar {\n background: linear-gradient(135deg, rgba(255, 255, 255, .3), rgba(34, 44, 60, .16));\n box-shadow: inset 0 1px rgba(255, 255, 255, .5), inset 0 -1px rgba(255, 255, 255, .15);\n backdrop-filter: blur(8px) saturate(1.6);\n -webkit-backdrop-filter: blur(8px) saturate(1.6);\n}\n\n.xydy-image-float-toolbar :is(a, button) {\n flex: 1;\n min-width: 0;\n margin: 0;\n padding: 6px 0;\n border: 0;\n border-radius: 8px;\n background: transparent;\n color: white;\n font: inherit;\n text-align: center;\n text-decoration: none;\n cursor: pointer;\n}\n\n.xydy-image-float-toolbar :is(a, button):hover { background: rgba(255, 255, 255, .2); }\n.xydy-image-float-toolbar button:disabled { opacity: .6; cursor: progress; }\n\n@media (prefers-reduced-motion: reduce) {\n .xydy-image-sweep { display: none; }\n .xydy-image-float * { transition: none !important; }\n}\n\n/* Make inner comment boxes and wrappers transparent so they blend into our frosted background */\n/* NOTE: #videoSideCard itself is NOT included here - its dark frosted background stays intact */\nhtml[data-xydy-styles=\"on\"] #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"]):not(.xydy-is-ai-tab) div:not(.xydy-drag-handle):not([class*=\"xydy-resize-handle\"]),\nhtml[data-xydy-styles=\"on\"] #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"]):not(.xydy-is-ai-tab) section,\nhtml[data-xydy-styles=\"on\"] #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"]):not(.xydy-is-ai-tab) ul,\nhtml[data-xydy-styles=\"on\"] #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"]):not(.xydy-is-ai-tab) li,\nhtml[data-xydy-styles=\"on\"] #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"]):not(.xydy-is-ai-tab) form,\nhtml[data-xydy-styles=\"on\"] #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"]):not(.xydy-is-ai-tab) input:not(.xydy-resize-handle),\nhtml[data-xydy-styles=\"on\"] #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"]):not(.xydy-is-ai-tab) [class*=\"comment\"],\nhtml[data-xydy-styles=\"on\"] #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"]):not(.xydy-is-ai-tab) [class*=\"Container\"],\nhtml[data-xydy-styles=\"on\"] #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"]):not(.xydy-is-ai-tab) [class*=\"Card\"] {\n background: transparent !important;\n background-color: transparent !important;\n box-shadow: none !important;\n border-color: rgba(255, 255, 255, 0.12) !important;\n}\n\nhtml:root[data-xydy-styles=\"on\"] #videoSideCard:is(.xydy-is-ai-tab, :has(iframe[src*=\"/search_ai_mobile/\"]), :has(#semiTabai_card[aria-selected=\"true\"])) {\n isolation: isolate;\n background: transparent !important;\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard:is(.xydy-is-ai-tab, :has(iframe[src*=\"/search_ai_mobile/\"]), :has(#semiTabai_card[aria-selected=\"true\"]))::before {\n content: \"\";\n position: absolute;\n inset: 0;\n z-index: -1;\n pointer-events: none;\n border-radius: inherit;\n background: rgba(10, 10, 18, 0.78);\n backdrop-filter: blur(30px) saturate(180%);\n -webkit-backdrop-filter: blur(30px) saturate(180%);\n}\n\nhtml[data-xydy-styles=\"on\"][data-xydy-liquid-glass=\"on\"] #videoSideCard:is(.xydy-is-ai-tab, :has(iframe[src*=\"/search_ai_mobile/\"]), :has(#semiTabai_card[aria-selected=\"true\"]))::before {\n background: linear-gradient(135deg, rgba(255, 255, 255, 0.19), rgba(255, 255, 255, 0.025) 38%, rgba(255, 255, 255, 0.07) 78%, rgba(255, 255, 255, 0.14)), rgba(12, 17, 26, 0.2);\n backdrop-filter: var(--xydy-liquid-backdrop);\n -webkit-backdrop-filter: var(--xydy-liquid-backdrop);\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard[data-xydy-comments-mounted=\"true\"] .comment-input-container {\n background: transparent !important;\n background-image: none !important;\n border: none !important;\n box-shadow: none !important;\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard .comment-input-linear-bg {\n display: none !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard[data-xydy-comments-mounted=\"true\"] .comment-input-container .comment-input-inner-container {\n min-height: 44px !important;\n box-sizing: border-box !important;\n padding: 10px 12px !important;\n background: rgba(255, 255, 255, 0.055) !important;\n background-image: none !important;\n border: 1px solid rgba(255, 255, 255, 0.14) !important;\n border-radius: 16px !important;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06) !important;\n backdrop-filter: none !important;\n -webkit-backdrop-filter: none !important;\n transition: background 180ms ease, border-color 180ms ease, box-shadow 180ms ease;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard[data-xydy-comments-mounted=\"true\"] .comment-input-container .comment-input-inner-container:focus-within {\n background-color: rgba(255, 255, 255, 0.085) !important;\n border-color: rgba(255, 255, 255, 0.28) !important;\n}\n\nhtml[data-xydy-styles=\"on\"][data-xydy-liquid-glass=\"on\"] #videoSideCard[data-xydy-comments-mounted=\"true\"] .comment-input-container .comment-input-inner-container {\n background: linear-gradient(125deg, rgba(255, 255, 255, 0.14), rgba(255, 255, 255, 0.025) 55%, rgba(255, 255, 255, 0.07)), rgba(10, 14, 22, 0.08) !important;\n border-color: rgba(255, 255, 255, 0.28) !important;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), inset 0 -1px 0 rgba(255, 255, 255, 0.07) !important;\n}\n\nhtml[data-xydy-styles=\"on\"][data-xydy-liquid-glass=\"on\"] #videoSideCard[data-xydy-comments-mounted=\"true\"] .comment-input-container .comment-input-inner-container:focus-within {\n border-color: rgba(255, 255, 255, 0.45) !important;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5), 0 0 0 2px rgba(255, 255, 255, 0.045) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard .comment-input-container :is(.RXtfhfhu, .public-DraftEditorPlaceholder-root) {\n color: rgba(255, 255, 255, 0.5) !important;\n font-size: 14px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard .comment-input-container .public-DraftEditor-content {\n color: rgba(255, 255, 255, 0.92) !important;\n caret-color: rgba(255, 255, 255, 0.95) !important;\n font-size: 14px !important;\n line-height: 1.6 !important;\n max-height: 160px;\n overflow-y: auto;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard .commentInput-right-ct .oWdMk9B9 > span {\n border-radius: 8px;\n cursor: pointer;\n transition: background 150ms ease;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard .commentInput-right-ct .oWdMk9B9 > span:hover {\n background: rgba(255, 255, 255, 0.1) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard .commentInput-right-ct svg {\n width: 28px !important;\n height: 28px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard .commentInput-right-ct svg path[fill=\"#2F3035\"] {\n fill: rgba(255, 255, 255, 0.72) !important;\n fill-opacity: 1 !important;\n}\n\n/* Custom scrollbars inside the floating comments drawer */\nhtml[data-xydy-styles=\"on\"] #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"]) ::-webkit-scrollbar {\n width: 4px !important;\n height: 4px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"]) ::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.22) !important;\n border-radius: 999px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"]) ::-webkit-scrollbar-track {\n background: transparent !important;\n}\n\n/* Remove messy tab bottom border fragments inside the comments panel */\nhtml[data-xydy-styles=\"on\"] #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"]) :is(.semi-tabs-tab, .semi-tabs-bar, [class*=\"semi-tabs\"]) {\n border-bottom: none !important;\n border-color: transparent !important;\n}\n\n/* --- Interactive Drag & Resize Extensions --- */\n\n/* Add spacing at the top of the card for the drag handle bar */\nhtml[data-xydy-styles=\"on\"] #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"]) {\n padding-top: 0 !important;\n}\n\n/* Draggable handle bar at the top center (iOS style) */\nhtml[data-xydy-styles=\"on\"] .xydy-drag-handle {\n position: absolute !important;\n top: 9px !important;\n left: 50% !important;\n transform: translateX(-50%) !important;\n width: 36px !important;\n height: 4px !important;\n border-radius: 2px !important;\n background: rgba(229, 231, 235, 0.85) !important; /* Solid gray-white filled pill */\n border: 1px solid rgba(0, 0, 0, 0.15) !important;\n cursor: grab !important;\n z-index: 1005 !important;\n transition: background 0.18s ease, width 0.18s ease !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xydy-drag-handle::before {\n content: \"\" !important;\n position: absolute !important;\n left: 50% !important;\n top: 50% !important;\n width: 96px !important;\n height: 34px !important;\n transform: translate(-50%, -50%) !important;\n background: transparent !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xydy-drag-handle:hover {\n background: rgba(243, 244, 246, 0.95) !important;\n width: 50px !important;\n}\n\nhtml[data-xydy-styles=\"on\"] .xydy-drag-handle:active {\n cursor: grabbing !important;\n background: #ffffff !important;\n}\n\n/* Invisible but hoverable 8-directional resize handles */\nhtml[data-xydy-styles=\"on\"] .xydy-resize-handle {\n position: absolute !important;\n z-index: 1004 !important;\n background: transparent !important;\n}\n\n/* Edge handles */\nhtml[data-xydy-styles=\"on\"] .xydy-resize-handle-n {\n top: 0 !important; left: 8px !important; right: 8px !important; height: 6px !important; cursor: n-resize !important;\n}\nhtml[data-xydy-styles=\"on\"] .xydy-resize-handle-s {\n bottom: 0 !important; left: 8px !important; right: 8px !important; height: 6px !important; cursor: s-resize !important;\n}\nhtml[data-xydy-styles=\"on\"] .xydy-resize-handle-e {\n right: 0 !important; top: 8px !important; bottom: 8px !important; width: 6px !important; cursor: e-resize !important;\n}\nhtml[data-xydy-styles=\"on\"] .xydy-resize-handle-w {\n left: 0 !important; top: 8px !important; bottom: 8px !important; width: 6px !important; cursor: w-resize !important;\n}\n\n/* Corner handles */\nhtml[data-xydy-styles=\"on\"] .xydy-resize-handle-nw {\n top: 0 !important; left: 0 !important; width: 12px !important; height: 12px !important; cursor: nw-resize !important; z-index: 1005 !important;\n}\nhtml[data-xydy-styles=\"on\"] .xydy-resize-handle-ne {\n top: 0 !important; right: 0 !important; width: 12px !important; height: 12px !important; cursor: ne-resize !important; z-index: 1005 !important;\n}\nhtml[data-xydy-styles=\"on\"] .xydy-resize-handle-sw {\n bottom: 0 !important; left: 0 !important; width: 12px !important; height: 12px !important; cursor: sw-resize !important; z-index: 1005 !important;\n}\nhtml[data-xydy-styles=\"on\"] .xydy-resize-handle-se {\n bottom: 0 !important; right: 0 !important; width: 12px !important; height: 12px !important; cursor: se-resize !important; z-index: 1005 !important;\n}\n\n/* Style the comment badges (like \"作者\", \"作者回复过\") as frosted glass badges */\nhtml[data-xydy-styles=\"on\"] #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"]) :is(.comment-item-tag, .semi-tag) {\n background: rgba(255, 255, 255, 0.15) !important;\n color: rgba(255, 255, 255, 0.9) !important;\n border-radius: 4px !important;\n padding: 2px 6px !important;\n font-size: 11px !important;\n font-weight: 500 !important;\n border: 1px solid rgba(255, 255, 255, 0.18) !important;\n display: inline-flex !important;\n align-items: center !important;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1) !important;\n}\n\nhtml[data-xydy-styles=\"on\"] #videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"]) :is(.comment-item-tag-text, .semi-tag-content, .text-no-shadow) {\n color: rgba(255, 255, 255, 0.88) !important;\n}\n\n#xydy-settings-dialog {\n all: initial;\n position: fixed;\n inset: 0;\n margin: 0;\n width: 100vw;\n height: 100dvh;\n max-width: none;\n max-height: none;\n box-sizing: border-box;\n border: 0;\n background: transparent;\n color: #fff;\n font: 14px/1.5 \"Segoe UI\", \"Microsoft YaHei\", sans-serif;\n overflow: hidden;\n isolation: isolate;\n opacity: 0;\n transition: opacity 0.2s ease;\n color-scheme: dark;\n}\n#xydy-settings-dialog:not([open]) { display: none; }\n#xydy-settings-dialog[open] { display: flex; justify-content: center; }\n#xydy-settings-dialog.xydy-settings-visible { opacity: 1; }\n#xydy-settings-dialog::backdrop { background: transparent; }\n#xydy-settings-dialog .xydy-settings-background {\n position: absolute;\n inset: 0;\n z-index: -1;\n pointer-events: none;\n background: linear-gradient(135deg, rgba(26,35,48,0.48), rgba(9,16,26,0.68));\n backdrop-filter: blur(30px) saturate(1.25);\n -webkit-backdrop-filter: blur(30px) saturate(1.25);\n}\nhtml:root[data-xydy-styles=\"on\"][data-xydy-liquid-glass=\"on\"] #xydy-settings-dialog[data-material=\"liquid\"] .xydy-settings-background {\n background: linear-gradient(135deg, rgba(255,255,255,0.09), rgba(255,255,255,0.015) 40%, rgba(255,255,255,0.04)), rgba(8,16,27,0.5) !important;\n backdrop-filter: var(--xydy-liquid-backdrop, blur(2px) saturate(1.35)) !important;\n -webkit-backdrop-filter: var(--xydy-liquid-backdrop, blur(2px) saturate(1.35)) !important;\n box-shadow: none !important;\n}\n#xydy-settings-dialog * { box-sizing: border-box; }\n#xydy-settings-dialog [hidden] { display: none !important; }\n#xydy-settings-dialog .xydy-settings-shell { display: flex; flex-direction: column; width: min(980px, calc(100% - 48px)); padding: 44px 0 28px; min-height: 0; transform: translateX(24px); transition: transform 0.26s cubic-bezier(0.2,0.8,0.2,1); }\n#xydy-settings-dialog.xydy-settings-visible .xydy-settings-shell { transform: none; }\n#xydy-settings-dialog :is(h2, h3, p) { margin: 0; color: inherit; }\n#xydy-settings-dialog h2 { font-size: 28px; font-weight: 700; line-height: 1.2; text-shadow: 0 8px 24px rgba(15,23,42,0.2); }\n#xydy-settings-dialog h3 { font-size: 11px; line-height: 1.2; font-weight: 500; color: rgba(255,255,255,0.52); letter-spacing: 0.16em; margin: 4px 0 12px; }\n#xydy-settings-dialog .xydy-settings-subheading { margin-top: 30px; }\n#xydy-settings-dialog .xydy-settings-hint { margin: -8px 0 16px; color: rgba(255,255,255,0.64); font-size: 13px; line-height: 1.6; }\n#xydy-settings-dialog .xydy-settings-colors { display: flex; flex-wrap: wrap; gap: 12px; }\n#xydy-settings-dialog [data-theme-color] { display: inline-flex; align-items: center; gap: 10px; padding: 10px 16px; }\n#xydy-settings-dialog [data-theme-color] > span { display: inline-grid; place-items: center; width: 23px; height: 23px; flex-shrink: 0; border-radius: 50%; background: var(--xydy-swatch); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.22); }\n#xydy-settings-dialog [data-theme-color].is-active { border-color: var(--xydy-swatch); background: rgba(255,255,255,0.14); box-shadow: 0 0 0 1px var(--xydy-swatch); color: #fff; }\n#xydy-settings-dialog [data-theme-color].is-active > span::after { content: \"✓\"; color: #fff; font-size: 14px; font-weight: 700; }\n#xydy-settings-dialog .xydy-settings-eyebrow { display: block; font-size: 11px; color: rgba(255,255,255,0.56); letter-spacing: 1px; margin-bottom: 8px; }\n#xydy-settings-dialog .xydy-settings-header { display: flex; align-items: center; justify-content: space-between; flex-shrink: 0; margin-bottom: 28px; }\n#xydy-settings-dialog button { appearance: none; font: inherit; font-size: 13px; color: rgba(255,255,255,0.88); background: rgba(255,255,255,0.08); border: 1px solid rgba(255,255,255,0.18); border-radius: 999px; padding: 10px 16px; cursor: pointer; transition: background-color 0.18s ease, color 0.18s ease, transform 0.18s ease; }\n#xydy-settings-dialog button:hover { background: rgba(255,255,255,0.16); color: #fff; }\n#xydy-settings-dialog button:focus-visible { outline: 2px solid rgba(255,255,255,0.8); outline-offset: 4px; }\n#xydy-settings-dialog .xydy-settings-close { font-size: 27px; line-height: 36px; width: 40px; height: 40px; padding: 0; }\n#xydy-settings-dialog .xydy-settings-tabs { display: flex; flex-wrap: wrap; gap: 26px; width: min(900px,100%); align-self: center; margin-bottom: 24px; flex-shrink: 0; }\n#xydy-settings-dialog [data-tab] { position: relative; padding: 0 0 12px; border: 0; border-radius: 0; background: transparent; color: rgba(255,255,255,0.62); font-size: 16px; font-weight: 600; line-height: 1.1; }\n#xydy-settings-dialog [data-tab]::after { content: \"\"; position: absolute; left: 0; bottom: 0; width: 100%; height: 3px; border-radius: 999px; background: rgba(255,255,255,0.92); box-shadow: 0 0 12px rgba(255,255,255,0.42); opacity: 0; transform: scaleX(0.45); transform-origin: left center; transition: opacity 0.18s ease, transform 0.22s ease; }\n#xydy-settings-dialog [data-tab]:hover { color: rgba(255,255,255,0.9); transform: translateY(-1px); background: transparent; }\n#xydy-settings-dialog [data-tab].is-active { color: rgba(255,255,255,0.98); }\n#xydy-settings-dialog [data-tab].is-active::after { opacity: 1; transform: scaleX(1); }\n#xydy-settings-dialog .xydy-settings-body { width: min(900px,100%); align-self: center; overflow-y: auto; overscroll-behavior: contain; min-height: 0; flex: 1; padding: 0 12px 24px 0; scrollbar-width: thin; scrollbar-color: rgba(255,255,255,0.24) transparent; }\n#xydy-settings-dialog [data-view]:not([hidden]) { animation: xydy-settings-panel-in 0.22s ease both; }\n#xydy-settings-dialog .xydy-settings-row { display: flex; gap: 24px; align-items: center; justify-content: space-between; min-height: 74px; padding: 14px 0; border-bottom: 1px solid rgba(255,255,255,0.14); }\n#xydy-settings-dialog strong { display: block; font-size: 15px; font-weight: 600; color: rgba(255,255,255,0.96); }\n#xydy-settings-dialog small { display: block; font-size: 12px; color: rgba(255,255,255,0.62); line-height: 1.5; margin-top: 5px; }\n#xydy-settings-dialog .xydy-settings-segment { display: inline-flex; gap: 6px; padding: 6px; border-radius: 999px; background: rgba(255,255,255,0.08); border: 1px solid rgba(255,255,255,0.14); backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px); flex-shrink: 0; }\nhtml:root[data-xydy-styles=\"on\"][data-xydy-liquid-glass=\"on\"] #xydy-settings-dialog[data-material=\"liquid\"] .xydy-settings-segment {\n background: linear-gradient(135deg, rgba(255,255,255,0.16), rgba(255,255,255,0.025) 45%, rgba(255,255,255,0.1)) !important;\n backdrop-filter: var(--xydy-liquid-backdrop, blur(2px) saturate(1.35)) !important;\n -webkit-backdrop-filter: var(--xydy-liquid-backdrop, blur(2px) saturate(1.35)) !important;\n}\n#xydy-settings-dialog .xydy-settings-segment button { min-width: 66px; padding: 8px 14px; border: 0; background: transparent; color: rgba(255,255,255,0.72); }\n#xydy-settings-dialog .xydy-settings-segment button:hover { color: rgba(255,255,255,0.92); transform: translateY(-1px); }\n#xydy-settings-dialog .xydy-settings-segment button.is-active { background: rgba(255,255,255,0.18); color: #fff; }\n#xydy-settings-dialog .xydy-settings-section-title { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; }\n#xydy-settings-dialog .xydy-settings-section-title h3 { margin: 0; }\n#xydy-settings-dialog .xydy-settings-lists { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; margin-bottom: 20px; }\n#xydy-settings-dialog .xydy-settings-lists label { min-width: 0; font-size: 15px; font-weight: 600; }\n#xydy-settings-dialog textarea { display: block; width: 100%; min-height: 190px; max-height: 40vh; resize: vertical; border: 1px solid rgba(255,255,255,0.18); border-radius: 16px; background: rgba(255,255,255,0.07); color: #fff; font: inherit; font-size: 13px; line-height: 1.6; padding: 14px 16px; margin-top: 14px; outline: none; }\n#xydy-settings-dialog textarea:focus { border-color: rgba(255,255,255,0.6); }\n#xydy-settings-dialog textarea::placeholder { color: rgba(255,255,255,0.42); }\n#xydy-settings-dialog .xydy-settings-shortcuts > div { display: flex; align-items: center; justify-content: space-between; gap: 20px; min-height: 64px; padding: 12px 0; border-bottom: 1px solid rgba(255,255,255,0.14); color: rgba(255,255,255,0.84); }\n#xydy-settings-dialog kbd { font: 14px \"Segoe UI\", sans-serif; font-weight: 600; color: #fff; flex-shrink: 0; }\n#xydy-settings-dialog .xydy-settings-footer { width: min(900px,100%); align-self: center; display: flex; align-items: center; justify-content: space-between; gap: 16px; padding-top: 18px; flex-shrink: 0; }\n#xydy-settings-dialog [data-status] { color: rgba(255,255,255,0.56); font-size: 12px; }\n#xydy-settings-dialog [data-error=\"true\"] { color: #ffb7bf; }\n@keyframes xydy-settings-panel-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }\n@media (max-width: 600px) {\n #xydy-settings-dialog .xydy-settings-shell { width: calc(100% - 32px); padding-top: 24px; padding-bottom: 20px; }\n #xydy-settings-dialog .xydy-settings-tabs { gap: 20px; }\n #xydy-settings-dialog .xydy-settings-row { gap: 16px; }\n #xydy-settings-dialog .xydy-settings-segment button { min-width: 48px; padding: 8px 10px; }\n #xydy-settings-dialog .xydy-settings-lists { grid-template-columns: 1fr; }\n}\n@media (prefers-reduced-motion: reduce) {\n #xydy-settings-dialog, #xydy-settings-dialog *, #xydy-settings-dialog *::after { transition: none !important; animation: none !important; }\n}";function install(){var n=document.head||document.documentElement;if(!n){requestAnimationFrame(install);return;}var first=document.createElement('style');first.type='text/css';first.textContent=t;n.appendChild(first);var second=document.createElement('style');second.id='xydy-userscript-css';second.textContent=t;n.appendChild(second);}install();})(); /* ===== src/shared/constants.js ===== */ (function bootstrapConstants(global) { const app = global.XYDYExtension = global.XYDYExtension || {}; const DEFAULT_SETTINGS = { features: { sidebar: true, styles: true, liquidGlass: false, navigation: true, live: true, hideElements: true, ads: true, mouse: true, imageFloat: true, loading: true, proximity: true, performance: false }, appearance: { themeColor: "original" }, sidebar: { hideRequested: false, locked: false, hoverDelay: 240, hoverWidth: 18 }, headerEntries: { hideAll: false, search: true, notifications: true, messages: true, profile: true, recharge: false, client: false, wallpaper: false, upload: false, cast: false, more: false }, live: { debounceDelay: 3000, pollMs: 1000 }, hideElements: { textsToHide: ["充值钻石", "客户端", "壁纸", "投屏", "更多", "投稿"] }, ads: { blockedKeywords: ["影视", "电影", "电视剧", "观影", "好剧", "狂飙"], blockedAuthors: ["@王者荣耀"], debounceDelay: 3000, stableTries: 6, stableGap: 80 }, mouse: { swipeThreshold: 200, clickMaxMove: 5, clickMaxTime: 300, longPressTime: 500 }, ui: { quickHelpAutoHideMs: 4200, blockNoticeMs: 2200, loadingMinMs: 250, loadingMaxMs: 12000 } }; const FEATURE_META = [ { key: "sidebar", label: "侧边栏自动隐藏", description: "控制左侧导航栏隐藏、悬停回弹和 Alt+1 锁定。" }, { key: "styles", label: "界面样式美化", description: "玻璃态 UI、播放器控制栏和页面细节样式优化。" }, { key: "liquidGlass", label: "液态玻璃效果", description: "开启边缘折射、轻微色散和流光高光;关闭恢复磨砂效果,需开启界面样式美化。" }, { key: "navigation", label: "顶部导航自动收起", description: "鼠标靠近顶部才显示头部导航,离开后自动收起。" }, { key: "proximity", label: "隐藏视频面板", description: "控制栏、信息栏(含推荐状态)和右侧组件在鼠标靠近时原地显示,离开后隐藏。" }, { key: "live", label: "直播卡片跳过", description: "检测当前直播卡片,静默选择“不想看直播”;菜单不可用时自动下翻。" }, { key: "hideElements", label: "杂项入口隐藏", description: "隐藏页面中的干扰入口;顶栏入口可在视觉效果中单独设置。" }, { key: "ads", label: "关键词与作者过滤", description: "命中作者或关键词后自动跳过当前视频。" }, { key: "mouse", label: "鼠标手势增强", description: "左滑点赞、右滑跳过、中键 X、长按 D。" }, { key: "imageFloat", label: "长按提取图文图片", description: "长按图文图片生成悬浮小图,松开后可拖出网页,也可点击保存源图。" }, { key: "loading", label: "启动遮罩", description: "页面刚进入时显示轻量加载遮罩,减少抖动观感。" }, { key: "performance", label: "调试日志", description: "在控制台输出模块启动和运行状态,方便排查。" } ]; const THEME_COLORS = [ { id: "original", label: "原生粉", color: "#fe2c55" }, { id: "blue", label: "晴空蓝", color: "#4b83f5" }, { id: "violet", label: "鸢尾紫", color: "#9872f5" }, { id: "teal", label: "薄荷青", color: "#18a995" }, { id: "amber", label: "琥珀金", color: "#d99624" }, { id: "rose", label: "蔷薇粉", color: "#e45c97" } ]; const HEADER_ENTRY_META = [ { key: "search", label: "搜索", description: "顶栏居中的搜索胶囊。" }, { key: "notifications", label: "通知", description: "点赞、评论和提及等互动通知。", selector: "headerEntryNotifications", texts: ["通知"] }, { key: "messages", label: "消息", description: "私信和好友聊天入口。", selector: "messageTrigger", texts: ["消息"] }, { key: "profile", label: "头像与账号菜单", description: "自己的头像、登录入口和账号菜单。", selector: "headerEntryProfile", texts: ["登录", "登录/注册"] }, { key: "recharge", label: "充值", description: "充钻石、抖币等充值入口。", texts: ["充钻石", "充值钻石", "充抖币", "充值"] }, { key: "client", label: "客户端", description: "下载抖音电脑客户端入口。", texts: ["客户端", "下载客户端"] }, { key: "wallpaper", label: "壁纸", description: "抖音壁纸入口。", texts: ["壁纸"] }, { key: "upload", label: "投稿", description: "投稿和创作入口。", texts: ["投稿", "创作中心", "创作者中心"] }, { key: "cast", label: "投屏", description: "页面提供投屏入口时显示。", texts: ["投屏"] }, { key: "more", label: "更多", description: "顶栏的更多入口。", texts: ["更多"] } ]; const SHORTCUTS = [ { key: "Alt + H", description: "显示全部界面组件,再按一次恢复自动隐藏。" }, { key: "Alt + X", description: "打开或关闭设置面板。" }, { key: "Alt + 1", description: "切换侧边栏锁定隐藏状态。" }, { key: "Alt + F", description: "静默触发“不感兴趣 / 不想看直播”。" }, { key: "鼠标左滑", description: "点赞当前视频。" }, { key: "鼠标右滑", description: "跳过当前视频。" }, { key: "鼠标中键", description: "触发 X 快捷键。" }, { key: "鼠标左键长按", description: "图文图片生成悬浮小图;普通视频持续按下 D,松开时释放。" } ]; const STORAGE = { commentsDockKey: "xydy_comments_dock", area: "local", key: "xydy_extension_settings", legacyFeaturePrefix: "xyDYTools_feature_", legacyAdsKeywordsKey: "xyDYTools_ads_keywords", legacyAdsAuthorsKey: "xyDYTools_ads_blockedAuthors", legacySidebarHideKey: "hide_sidebar", legacySidebarLockKey: "hide_sidebar_lock" }; const UI_IDS = { toastHost: "xydy-toast-host", loadingOverlay: "xydy-loading-overlay", quickHelp: "xydy-quick-help", messageOrb: "xydy-message-orb", headerActionsBackground: "xydy-header-actions-background", headerSearchBackground: "xydy-header-search-background" }; const SELECTORS = { commentsPanel: ["#videoSideCard"], contextMenuSurface: [".jQkpodjD > .o6tvYzFd"], contextMenuRows: [":scope > .wb906g24", ":scope > a.kb8pfrOo"], contextMenuLabel: [".Gq1zvxbB"], contextMenuShortcut: [".ccZxuS3y"], galleryImage: [".basePlayerContainer .focusPanel .dySwiperSlide > div > img.AWIwgv_K"], galleryImagePressSurface: [".basePlayerContainer .focusPanel .dySwiperSlide > button.puwYnuKX"], galleryImageExcluded: ["#xydy-settings-dialog", "#videoSideCard", "#chapterVideoCard", "#chapterVideoSideCard", ".xgplayer-controls", ".xgplayer-progress", ".douyin-player-controls", ".douyin-player-progress", "#douyin-header", "button", "a[href]", "input", "textarea", "select", "[role=button]", "[contenteditable=true]", "[data-e2e^=video-player-]", "[data-e2e=feed-comment-icon]"], /* * 这一组是 JS 会主动 query 的 DOM 选择器。 * 抖音一旦改了 DOM class 或 data-e2e,优先从这里改。 */ sidebar: ["#douyin-navigation", "[data-e2e=\"douyin-navigation\"]"], header: ["#douyin-header"], headerMenu: ["#douyin-header-menuCt"], headerMenuList: [".GLoxxgrP", "pace-island > div"], headerEntryLabel: [".phl13lpd", ".Q00TJtfx"], headerEntryNotifications: [".TftbcKo9"], headerEntryProfile: ["a[href*='/user/self']", ".RXVWNc2v"], headerSearchInput: ["[data-e2e=\"searchbar-input\"]"], headerSearchShell: [".GjgTnTzB"], headerSearchForm: [".GySDQyGR"], headerSearchButton: ["[data-e2e=\"searchbar-button\"]"], headerSearchPopup: [".MhqtMkwi", ".Yq8ahEWU"], liveIndicators: [ ".live-indicator", "[data-e2e=\"live-indicator\"]", "[class*=\"live-indicator\"]", "[class*=\"live-label\"]", "[class*=\"live-badge\"]", "[data-e2e*=\"live-indicator\"]", "[data-e2e*=\"live-badge\"]", "[data-e2e*=\"live-tag\"]", "[data-e2e*=\"live-status\"]", "[class*=\"live-status\"]", "[class*=\"live-tag\"]", "[aria-label*=\"直播\"]", "[title*=\"直播\"]" ], videoDescription: ["[data-e2e=\"video-desc\"]"], authorNickname: ["[data-e2e=\"feed-video-nickname\"]"], authorAvatar: ["[data-e2e=\"video-avatar\"]"], sideCardContent: ["#relatedVideoCard"], playerContainer: [".playerContainer"], videoSlide: [".dySwiperSlide"], chapterPanel: ["#chapterVideoSideCard", "#chapterVideoCard"], chapterClose: ["#chapterVideoCard .GMpBYXh8"], chapterAnchor: ["[data-e2e=\"chapter-container\"]", ".chapterContainer"], playerShopAnchor: [".xgplayer-shop-anchor"], messagePanel: ["#im-entry-vmok-popup-portal.JTaHbIgX"], messageHost: [".JOMNV4X6"], messageTrigger: ["[data-e2e=\"im-entry\"]"], liquidGlassSurfaces: [ "#xydy-header-actions-background", "#xydy-header-search-background", ".jQkpodjD > .o6tvYzFd", ".xgplayer-shop-anchor > div", "#xydy-settings-dialog[data-material=\"liquid\"] .xydy-settings-background", "#xydy-settings-dialog[data-material=\"liquid\"] .xydy-settings-segment", ".xgplayer-controls", ".xgplayer-slider", ".xgplayer-playclarity-setting .virtual", ".xgplayer-controls .xg-options-list", ".xg-spot-content", ".xgplayer-progress-point", "#douyin-navigation .AVblXapA", "[data-e2e=\"douyin-navigation\"] .AVblXapA", "#douyin-navigation:not(:has(.AVblXapA))", "[data-e2e=\"douyin-navigation\"]:not(#douyin-navigation *):not(:has(.AVblXapA))", "#videoSideCard:is([data-xydy-comments-state=\"loading\"], [data-xydy-comments-state=\"ready\"])", "#chapterVideoCard", "#im-entry-vmok-popup-portal.JTaHbIgX", ".IEv8oDS8.popShadowAnimation", ".W6qKIZ6x.popShadowAnimation", ".userMenuPanelShadowAnimation", "._o7id7Pe", ".semi-dropdown-wrapper", ".semi-popover-content", ".n4FTI10b", "._KRDPUZX", ".hurS2TXT", ".danmu-setting-box", ".danmu-emoji-box", ".MhqtMkwi", ".Yq8ahEWU", ".lGxh4PDP.Q2nY9qA2.popShadowAnimation", ".v3wRIyhF.qoOxjH5x.UaYGQUZd.NqzE824S", ".semi-tooltip-wrapper", ".xg-tips", ".xgTips", ".xgplayer-tips", ".xgplayer-tooltip", ".danmu-switch-box" ], hideCandidates: [".jenVD1aU", ".iQdAxsPk", ".xgplayer-playswitch", ".rechargeMountEl"], hideCandidateParent: [".Xu0nlrYh", "div"], wallpaperCandidates: [".xFzvM6nY", ".iQdAxsPk"], silentMenuItems: ["#EGfMOP99 [id=\"UizNwYcn\"]", "#euinefEt .iIX2tp2J", ".JyNO_DD4", ".jQkpodjD .Gq1zvxbB"], silentMenuMask: ["#EGfMOP99", "#euinefEt", "div[id=\"qgmiQqfW\"]", ".jQkpodjD"], liveSlides: [".dySwiperSlide"], video: ["video"], danmakuContainer: ["[data-e2e=danmaku-container]", ".danmakuContainer"], danmakuInput: [".danmakuInputContainer"], danmakuEditor: ["input", "textarea", "[contenteditable=true]"], proximityControls: [".xgplayer-controls", ".xgplayer-progress"], proximityInfo: [".xgplayer-video-info-wrap", ".douyin-player-video-info-wrap", ".video-info-detail"], proximityRight: ["div[class*=\"immersive-player-switch-on-hide-interaction-area\"]", ".gvcmX2Lf", ".rDq18SJg"] }; const SILENT_MENU_LABELS = { dislike: "不感兴趣", noLive: "不想看直播" }; app.constants = { APP_NAME: "xyDouYinTools", APP_VERSION: "1.0.0", DEFAULT_SETTINGS, FEATURE_META, THEME_COLORS, HEADER_ENTRY_META, SHORTCUTS, STORAGE, UI_IDS, SELECTORS, SILENT_MENU_LABELS }; })(globalThis); /* ===== src/shared/utils.js ===== */ (function bootstrapUtils(global) { const app = global.XYDYExtension = global.XYDYExtension || {}; const constants = app.constants; function clone(value) { return JSON.parse(JSON.stringify(value)); } function mergeDeep(base, patch) { if (Array.isArray(base)) { return Array.isArray(patch) ? patch.slice() : base.slice(); } if (!base || typeof base !== "object") { return patch === undefined ? base : patch; } const output = {}; const keys = new Set(Object.keys(base).concat(Object.keys(patch || {}))); keys.forEach((key) => { const baseValue = base[key]; const patchValue = patch ? patch[key] : undefined; if (patchValue === undefined) { output[key] = Array.isArray(baseValue) ? baseValue.slice() : (baseValue && typeof baseValue === "object" ? mergeDeep(baseValue, {}) : baseValue); return; } if (Array.isArray(baseValue)) { output[key] = Array.isArray(patchValue) ? patchValue.slice() : baseValue.slice(); return; } if (baseValue && typeof baseValue === "object" && patchValue && typeof patchValue === "object" && !Array.isArray(patchValue)) { output[key] = mergeDeep(baseValue, patchValue); return; } output[key] = patchValue; }); return output; } function normalizeText(value) { return String(value || "").replace(/\s+/g, " ").trim(); } function sleep(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } function queryFirst(selectors, root) { const scope = root || document; const list = Array.isArray(selectors) ? selectors : [selectors]; for (const selector of list) { const hit = scope.querySelector(selector); if (hit) { return hit; } } return null; } function queryAll(selectors, root) { const scope = root || document; const list = Array.isArray(selectors) ? selectors : [selectors]; const seen = new Set(); const hits = []; list.forEach((selector) => { scope.querySelectorAll(selector).forEach((node) => { if (!seen.has(node)) { seen.add(node); hits.push(node); } }); }); return hits; } function isVisible(element) { if (!element) { return false; } const style = getComputedStyle(element); if (style.display === "none" || style.visibility === "hidden" || Number(style.opacity) === 0) { return false; } const rect = element.getBoundingClientRect(); if (rect.width < 5 || rect.height < 5) { return false; } return rect.bottom > 0 && rect.top < window.innerHeight && rect.right > 0 && rect.left < window.innerWidth; } function pickBestVisible(selectors) { const elements = queryAll(selectors); let best = null; let bestScore = -Infinity; elements.forEach((element) => { if (!isVisible(element)) { return; } const rect = element.getBoundingClientRect(); const area = rect.width * rect.height; const score = (area * 0.001) + ((window.innerHeight - rect.bottom) * 0.5) + ((window.innerWidth - rect.left) * 0.05); if (score > bestScore) { best = element; bestScore = score; } }); return best; } function createElementFromHTML(html) { const wrapper = document.createElement("div"); wrapper.innerHTML = html.trim(); return wrapper.firstElementChild; } function ensureToastHost() { let host = document.getElementById(constants.UI_IDS.toastHost); if (host) { return host; } host = document.createElement("div"); host.id = constants.UI_IDS.toastHost; const mount = document.body || document.documentElement; mount.appendChild(host); return host; } function showToast(message, options) { const opts = Object.assign({ type: "info", duration: constants.DEFAULT_SETTINGS.ui.blockNoticeMs }, options || {}); const host = ensureToastHost(); const toast = document.createElement("div"); toast.className = "xydy-toast xydy-toast-" + opts.type; toast.textContent = message; host.appendChild(toast); requestAnimationFrame(() => { toast.classList.add("show"); }); setTimeout(() => { toast.classList.remove("show"); setTimeout(() => toast.remove(), 200); }, opts.duration); } function dispatchSyntheticKey(type, key, repeat) { const code = key.length === 1 ? "Key" + key.toUpperCase() : key; const normalizedKey = key.length === 1 ? key : key; const keyCode = key.length === 1 ? key.toUpperCase().charCodeAt(0) : (key === "ArrowDown" ? 40 : 0); const event = new KeyboardEvent(type, { key: normalizedKey, code, keyCode, which: keyCode, bubbles: true, cancelable: true, repeat: Boolean(repeat) }); document.dispatchEvent(event); } function tapSyntheticKey(key) { dispatchSyntheticKey("keydown", key, false); dispatchSyntheticKey("keyup", key, false); } function isPlainObject(value) { return Boolean(value) && typeof value === "object" && !Array.isArray(value); } function isImmersiveVideoPage() { const path = window.location.pathname; const allowedPaths = [ "/", "/recommend", "/video" ]; if (allowedPaths.some(p => path === p || path.startsWith(p + "/"))) { return !new URLSearchParams(window.location.search).has("modal_id"); } return false; } function isModalVideoPage() { return new URLSearchParams(window.location.search).has("modal_id"); } app.utils = { clone, mergeDeep, normalizeText, sleep, queryFirst, queryAll, isVisible, pickBestVisible, createElementFromHTML, showToast, isModalVideoPage, dispatchSyntheticKey, tapSyntheticKey, isPlainObject, isImmersiveVideoPage }; })(globalThis); /* ===== src/shared/storage.js ===== */ (function bootstrapStorage(global) { var app = global.XYDYExtension = global.XYDYExtension || {}; var constants = app.constants; var utils = app.utils; function normalizeBoolean(value, fallback) { if (typeof value === "boolean") { return value; } if (value === "true" || value === "1" || value === 1) { return true; } if (value === "false" || value === "0" || value === 0) { return false; } return fallback; } function normalizeStringArray(value, fallback) { if (!Array.isArray(value)) { return fallback.slice(); } return value .map((item) => utils.normalizeText(item)) .filter(Boolean); } function normalizeSettings(raw) { const merged = utils.mergeDeep(constants.DEFAULT_SETTINGS, raw || {}); Object.keys(constants.DEFAULT_SETTINGS.features).forEach((featureKey) => { merged.features[featureKey] = normalizeBoolean(merged.features[featureKey], constants.DEFAULT_SETTINGS.features[featureKey]); }); merged.sidebar.hideRequested = normalizeBoolean(merged.sidebar.hideRequested, constants.DEFAULT_SETTINGS.sidebar.hideRequested); merged.sidebar.locked = normalizeBoolean(merged.sidebar.locked, constants.DEFAULT_SETTINGS.sidebar.locked); merged.sidebar.hoverDelay = Number(merged.sidebar.hoverDelay) || constants.DEFAULT_SETTINGS.sidebar.hoverDelay; merged.sidebar.hoverWidth = Number(merged.sidebar.hoverWidth) || constants.DEFAULT_SETTINGS.sidebar.hoverWidth; const headerRaw = utils.isPlainObject(raw && raw.headerEntries) ? raw.headerEntries : {}; if (!utils.isPlainObject(merged.headerEntries)) merged.headerEntries = {}; Object.keys(constants.DEFAULT_SETTINGS.headerEntries).forEach((key) => { const fallback = key !== "hideAll" && !merged.features.hideElements ? true : constants.DEFAULT_SETTINGS.headerEntries[key]; merged.headerEntries[key] = normalizeBoolean(headerRaw[key], fallback); }); if (!utils.isPlainObject(merged.appearance)) merged.appearance = {}; if (!constants.THEME_COLORS.some(item => item.id === merged.appearance.themeColor)) { merged.appearance.themeColor = constants.DEFAULT_SETTINGS.appearance.themeColor; } merged.live.debounceDelay = Number(merged.live.debounceDelay) || constants.DEFAULT_SETTINGS.live.debounceDelay; merged.live.pollMs = Number(merged.live.pollMs) || constants.DEFAULT_SETTINGS.live.pollMs; const defaultTexts = constants.DEFAULT_SETTINGS.hideElements.textsToHide; const userTexts = normalizeStringArray(merged.hideElements.textsToHide, defaultTexts); merged.hideElements.textsToHide = Array.from(new Set([...userTexts, ...defaultTexts])); merged.ads.blockedKeywords = normalizeStringArray(merged.ads.blockedKeywords, constants.DEFAULT_SETTINGS.ads.blockedKeywords); merged.ads.blockedAuthors = normalizeStringArray(merged.ads.blockedAuthors, constants.DEFAULT_SETTINGS.ads.blockedAuthors); merged.ads.debounceDelay = Number(merged.ads.debounceDelay) || constants.DEFAULT_SETTINGS.ads.debounceDelay; merged.ads.stableTries = Number(merged.ads.stableTries) || constants.DEFAULT_SETTINGS.ads.stableTries; merged.ads.stableGap = Number(merged.ads.stableGap) || constants.DEFAULT_SETTINGS.ads.stableGap; merged.mouse.swipeThreshold = Number(merged.mouse.swipeThreshold) || constants.DEFAULT_SETTINGS.mouse.swipeThreshold; merged.mouse.clickMaxMove = Number(merged.mouse.clickMaxMove) || constants.DEFAULT_SETTINGS.mouse.clickMaxMove; merged.mouse.clickMaxTime = Number(merged.mouse.clickMaxTime) || constants.DEFAULT_SETTINGS.mouse.clickMaxTime; merged.mouse.longPressTime = Number(merged.mouse.longPressTime) || constants.DEFAULT_SETTINGS.mouse.longPressTime; merged.ui.quickHelpAutoHideMs = Number(merged.ui.quickHelpAutoHideMs) || constants.DEFAULT_SETTINGS.ui.quickHelpAutoHideMs; merged.ui.blockNoticeMs = Number(merged.ui.blockNoticeMs) || constants.DEFAULT_SETTINGS.ui.blockNoticeMs; merged.ui.loadingMinMs = Number(merged.ui.loadingMinMs) || constants.DEFAULT_SETTINGS.ui.loadingMinMs; merged.ui.loadingMaxMs = Number(merged.ui.loadingMaxMs) || constants.DEFAULT_SETTINGS.ui.loadingMaxMs; return merged; } function storageGet(key) { return new Promise(function(resolve) { resolve(JSON.parse(localStorage.getItem(key) || 'null')); }); } function storageSet(payload) { return new Promise(function(resolve) { Object.keys(payload).forEach(function(k) { localStorage.setItem(k, JSON.stringify(payload[k])); }); resolve(); }); } function splitLegacyList(value) { return String(value || "") .split(/[\n,,]+/g) .map((item) => utils.normalizeText(item)) .filter(Boolean); } function readLegacySettings() { try { const legacyStorage = window.localStorage; if (!legacyStorage) { return null; } const featurePatch = {}; let hasLegacyValue = false; Object.keys(constants.DEFAULT_SETTINGS.features).forEach((featureKey) => { const legacyValue = legacyStorage.getItem(constants.STORAGE.legacyFeaturePrefix + featureKey.toUpperCase()); if (legacyValue === "0" || legacyValue === "1") { featurePatch[featureKey] = legacyValue === "1"; hasLegacyValue = true; } }); const sidebarHide = legacyStorage.getItem(constants.STORAGE.legacySidebarHideKey); const sidebarLock = legacyStorage.getItem(constants.STORAGE.legacySidebarLockKey); if (sidebarHide !== null || sidebarLock !== null) { hasLegacyValue = true; } const blockedKeywords = splitLegacyList(legacyStorage.getItem(constants.STORAGE.legacyAdsKeywordsKey)); const blockedAuthors = splitLegacyList(legacyStorage.getItem(constants.STORAGE.legacyAdsAuthorsKey)); if (blockedKeywords.length || blockedAuthors.length) { hasLegacyValue = true; } if (!hasLegacyValue) { return null; } return normalizeSettings({ features: featurePatch, sidebar: { hideRequested: sidebarHide === "true", locked: sidebarLock === "true" }, ads: { blockedKeywords: blockedKeywords.length ? blockedKeywords : undefined, blockedAuthors: blockedAuthors.length ? blockedAuthors : undefined } }); } catch (error) { return null; } } async function getSettings() { const stored = await storageGet(constants.STORAGE.key); if (stored) { return normalizeSettings(stored); } const migrated = readLegacySettings(); const initial = migrated || normalizeSettings(constants.DEFAULT_SETTINGS); await storageSet({ [constants.STORAGE.key]: initial }); return initial; } async function saveSettings(nextSettings) { const normalized = normalizeSettings(nextSettings); await storageSet({ [constants.STORAGE.key]: normalized }); return normalized; } async function patchSettings(patch) { const current = await getSettings(); const next = normalizeSettings(utils.mergeDeep(current, patch || {})); await saveSettings(next); return next; } app.storage = { normalizeSettings: normalizeSettings, getSettings: getSettings, saveSettings: saveSettings, patchSettings: patchSettings }; })(typeof globalThis !== 'undefined' ? globalThis : window); /* ===== src/content/runtime.js ===== */ (function bootstrapRuntime(global) { const app = global.XYDYExtension = global.XYDYExtension || {}; const constants = app.constants; const storage = app.storage; const moduleDefinitions = []; const controllers = []; const eventBus = new EventTarget(); let currentSettings = null; let started = false; let storageListenerBound = false; function log(moduleName, message, details) { if (!currentSettings || !currentSettings.features.performance) { return; } if (details === undefined) { console.log("[xyDY][" + moduleName + "]", message); return; } console.log("[xyDY][" + moduleName + "]", message, details); } function applyGlobalRootFlags(settings) { const root = document.documentElement; if (!root) { return; } if (new URLSearchParams(window.location.search).has("modal_id")) { // modal_id 页面:还干净,移除所有扩展痕迹 Array.from(root.attributes).forEach(function(attr) { if (attr.name.startsWith("data-xydy")) { root.removeAttribute(attr.name); } }); root.className = root.className.split(/\s+/).filter(function(c) { return !c.startsWith("xydy-"); }).join(" "); // 清理扩展注入的 DOM 元素 document.querySelectorAll("#xydy-loading-overlay, #xydy-header-blur-bg, #xydy-quick-help, #xydy-sidebar-floating-overrides").forEach(function(el) { el.remove(); }); // 还原 xgplayer-controls 的内联样式 document.querySelectorAll(".xgplayer-controls").forEach(function(el) { el.style.removeProperty("background-image"); el.style.removeProperty("background"); }); // 还原视频 controls document.querySelectorAll('video[data-xydy-native-controls-patched="1"]').forEach(function(video) { video.controls = true; video.removeAttribute("data-xydy-native-controls-patched"); }); // 清理 header 上的内联样式 var header = document.querySelector("#douyin-header, [data-e2e='douyin-navigation']"); if (header) { header.style.removeProperty("position"); header.style.removeProperty("top"); header.style.removeProperty("left"); header.style.removeProperty("width"); header.style.removeProperty("z-index"); delete header.dataset.xydyNavBound; } return; } const allowed = app.utils.isImmersiveVideoPage(); const theme = constants.THEME_COLORS.find(item => item.id === settings.appearance.themeColor) || constants.THEME_COLORS[0]; const channels = [1, 3, 5].map(index => parseInt(theme.color.slice(index, index + 2), 16)); const shade = (amount) => channels.map(value => Math.round(value * amount)).join(', '); root.style.setProperty('--xydy-theme-rgb', channels.join(', ')); root.style.setProperty('--xydy-theme-hover-rgb', shade(0.86)); root.style.setProperty('--xydy-theme-active-rgb', shade(0.72)); root.style.setProperty('--xydy-theme-light-rgb', channels.map(value => Math.round(value + (255 - value) * 0.6)).join(', ')); root.dataset.xydyTheme = allowed && settings.features.styles && theme.id !== "original" ? "custom" : "original"; root.dataset.xydyHeaderEntries = allowed && location.host === "www.douyin.com" ? "on" : "off"; root.dataset.xydyHeaderHideAll = settings.headerEntries.hideAll ? "on" : "off"; root.dataset.xydyHeaderSearch = settings.headerEntries.search ? "on" : "off"; if (!allowed) { root.dataset.xydyStyles = "off"; root.dataset.xydyLiquidGlass = "off"; root.dataset.xydySidebar = "off"; root.dataset.xydyNavigation = "off"; root.dataset.xydyMouse = "off"; root.dataset.xydyLoading = "off"; return; } root.dataset.xydyStyles = settings.features.styles ? "on" : "off"; root.dataset.xydyLiquidGlass = settings.features.styles && settings.features.liquidGlass ? "on" : "off"; root.dataset.xydySidebar = settings.features.sidebar ? "on" : "off"; root.dataset.xydyNavigation = settings.features.navigation ? "on" : "off"; root.dataset.xydyMouse = settings.features.mouse ? "on" : "off"; root.dataset.xydyLoading = settings.features.loading ? "on" : "off"; // 侧栏关闭时清理模块注入的 class if (!settings.features.sidebar) { root.classList.remove("xydy-sidebar-hidden"); } // 导航关闭时还原 header if (!settings.features.navigation) { var h = document.getElementById("douyin-header"); if (h) { h.classList.add("show"); h.style.removeProperty("transform"); } } // 样式关闭时清理各模块注入的样式 if (!settings.features.styles) { var sv = document.getElementById("sliderVideo"); if (sv) { sv.style.removeProperty("overflow"); } } } function emit(type, detail) { eventBus.dispatchEvent(new CustomEvent(type, { detail })); } function on(type, handler) { eventBus.addEventListener(type, handler); return function dispose() { eventBus.removeEventListener(type, handler); }; } async function updateSettings(patch) { return reloadSettings(await storage.patchSettings(patch)); } function reloadSettings(nextSettings) { const previousSettings = currentSettings; currentSettings = storage.normalizeSettings(nextSettings); applyGlobalRootFlags(currentSettings); controllers.forEach((controller) => { if (typeof controller.onSettingsChange === "function") { controller.onSettingsChange(currentSettings, previousSettings); } }); emit("settings-changed", { current: currentSettings, previous: previousSettings }); return currentSettings; } function getContext() { return { app, constants, storage, utils: app.utils, getSettings: function getSettingsSnapshot() { return currentSettings; }, updateSettings, showToast: app.utils.showToast, log, on, emit }; } function bindStorageListener() { if (storageListenerBound) { return; } storageListenerBound = true; if (!chrome || !chrome.storage || !chrome.storage.onChanged) return; chrome.storage.onChanged.addListener((changes, areaName) => { if (areaName !== constants.STORAGE.area || !changes[constants.STORAGE.key]) { return; } const previousSettings = currentSettings; currentSettings = storage.normalizeSettings(changes[constants.STORAGE.key].newValue); applyGlobalRootFlags(currentSettings); controllers.forEach((controller) => { if (typeof controller.onSettingsChange === "function") { controller.onSettingsChange(currentSettings, previousSettings); } }); emit("settings-changed", { current: currentSettings, previous: previousSettings }); }); } let lastUrlPath = window.location.pathname + window.location.search; function bindPathChangeListener() { const observer = new MutationObserver(() => { const currentUrlPath = window.location.pathname + window.location.search; if (currentUrlPath !== lastUrlPath) { console.log("[xyDY] URL changed from " + lastUrlPath + " to " + currentUrlPath + ". Syncing settings and layout."); lastUrlPath = currentUrlPath; applyGlobalRootFlags(currentSettings); controllers.forEach((controller) => { if (typeof controller.onSettingsChange === "function") { controller.onSettingsChange(currentSettings, currentSettings); } }); } }); observer.observe(document.documentElement, { childList: true, subtree: true }); } async function start() { if (started) { return; } started = true; currentSettings = await storage.getSettings(); applyGlobalRootFlags(currentSettings); bindStorageListener(); bindPathChangeListener(); const context = getContext(); moduleDefinitions.forEach((definition) => { const controller = definition.create(context) || {}; controllers.push(controller); if (typeof controller.init === "function") { controller.init(); } log(definition.id || "module", "initialized"); }); } app.registerContentModule = function registerContentModule(definition) { moduleDefinitions.push(definition); }; app.runtime = { start, reloadSettings, emit, on, log, getSettings: function getCurrentSettings() { return currentSettings; } }; })(globalThis); /* ===== src/content/modules/loading-screen.js ===== */ (function registerLoadingScreenModule(global) { const app = global.XYDYExtension; const uiIds = app.constants.UI_IDS; app.registerContentModule({ id: "loading-screen", create: function createLoadingScreenModule(context) { let overlay = null; let shownAt = 0; let maxTimer = null; let bootReady = false; let domReady = document.readyState !== "loading"; let removeBootListener = null; let onReadyStateChange = null; function removeOverlay(reason) { if (!overlay) { return; } if (maxTimer) { clearTimeout(maxTimer); maxTimer = null; } const settings = context.getSettings(); const minShow = settings.ui.loadingMinMs; const elapsed = Date.now() - shownAt; const waitMore = Math.max(0, minShow - elapsed); setTimeout(() => { if (!overlay) { return; } overlay.classList.add("closing"); const el = overlay; setTimeout(() => { el.remove(); if (overlay === el) overlay = null; context.log("loading", "overlay removed", reason); }, 260); }, waitMore); } function maybeRemove(reason) { if (!bootReady) { return; } if (!domReady && document.readyState === "loading") { return; } removeOverlay(reason); } function ensureOverlay() { if (overlay || !context.getSettings().features.loading) { return; } overlay = document.getElementById(uiIds.loadingOverlay); if (overlay) { return; } overlay = document.createElement("div"); overlay.id = uiIds.loadingOverlay; overlay.innerHTML = [ "
替换按钮、未读角标、关注图标和搜索推荐等界面强调色。开启界面样式美化后生效,支持磨砂与液态玻璃。
单独选择各入口是否显示。全部隐藏后仍可按 Alt + X 打开设置。