// ==UserScript== // @name 珠宝AI 移动端适配 // @namespace https://zbai.art/ // @version 0.7.5-fixed // @description 将 zbai.art 首页、模板页与 PC 图片创作工作区适配为手机浏览器可用的纵向布局。修复立即创作点击问题。 // @author Codex // @match https://zbai.art/* // @match https://www.zbai.art/* // @match https://jew.haistudio.ai/* // @run-at document-start // @grant none // ==/UserScript== (function () { 'use strict'; const STYLE_ID = 'zbai-mobile-adapter-style'; const CLASS_READY = 'zbai-mobile-adapted'; const SHEET_ID = 'zbai-mobile-bottom-sheet'; const BADGE_ID = 'zbai-mobile-adapter-badge'; const WORK_PREVIEW_ID = 'zbai-work-preview-overlay'; const WORK_FALLBACK_ID = 'zbai-work-detail-fallback'; const STYLE_PANEL_ID = 'zbai-style-panel'; const HIDDEN_ATTR = 'data-zbai-mobile-hidden'; const MOBILE_QUERY = '(max-width: 768px), (pointer: coarse), (max-device-width: 820px)'; const HISTORY_URL = 'https://zbai.art/index/mine-homepage'; const HOME_TOOL_ACTIONS = [ { key: 'image', label: '图片创作', nativeLabel: '图片创作', eyebrow: 'Image', href: '/create/module/image', fallbackHref: '/create', desc: '生成首饰海报、商品图和创意画面' }, { key: 'video', label: '视频创作', nativeLabel: '视频创作', eyebrow: 'Video', href: '/create/module/video', fallbackHref: '/video_create_video', desc: '制作运镜展示、旋转视频和短片素材' }, ]; const TEMPLATE_ACTIONS = [ { label: '珠宝海报', href: '/create/ai-effects/jewelry-poster', tag: '海报', desc: '快速生成东方美学商品海报' }, { label: '道具展示', href: '/create/ai-effects/jewelry-display', tag: '展示', desc: '为首饰匹配托盘、布景与道具' }, { label: '社交媒体图', href: '/create/ai-effects/social-media', tag: '种草', desc: '小红书、朋友圈风格内容图' }, { label: '大片模特', href: '/create/ai-effects/jewelry-models-display', tag: '模特', desc: '真人佩戴与商业大片画面' }, { label: '珠宝纯净图', href: '/create/ai-effects/jewelry-background', tag: '底图', desc: '白底、黑底和纯净背景图' }, { label: '精致摄影', href: '/create/ai-effects/finephotograph', tag: '摄影', desc: '高级光影、倒影和质感摄影' }, { label: '布料与珠宝', href: '/create/ai-effects/jewelry-cloth', tag: '布料', desc: '丝绸、天鹅绒等材质布景' }, { label: '珠宝多视角', href: '/create/ai-effects/jewelry-multiview', tag: '视角', desc: '多角度展示结构与细节' }, { label: '珠宝详情页', href: '/create/ai-effects/product-details-page', tag: '详情', desc: '电商详情页视觉图' }, { label: '珠宝视频', href: '/create/ai-effects/jewelry-360-display', tag: '视频', desc: '旋转展示与火彩展示视频' }, { label: '运镜展示', href: '/create/ai-effects/jewvideo2', tag: '运镜', desc: '短视频场景与动态运镜' }, ]; const selectors = { root: '#pictureEditor', textArea: 'textarea.textarea-buttons, textarea.ant-input', modelWrap: '.ChooseModelWithDetails_ChooseModelWithDetails__m_Cbs', }; window.__ZBAI_MOBILE_ADAPTER_VERSION__ = '0.7.5-fixed'; const media = window.matchMedia(MOBILE_QUERY); function isMobile() { const physicalWidth = Math.min(window.screen.width || window.innerWidth, window.screen.height || window.innerHeight); const hasTouch = navigator.maxTouchPoints > 0 || 'ontouchstart' in window; return media.matches || window.innerWidth <= 768 || (hasTouch && physicalWidth <= 820); } function injectStyles() { let style = document.getElementById(STYLE_ID); const shouldAppend = !style; if (!style) style = document.createElement('style'); style.id = STYLE_ID; style.textContent = ` @media (max-width: 768px), (pointer: coarse), (max-device-width: 820px) { html[data-zbai-mobile="1"], html[data-zbai-mobile="1"] body#haimeta { width: 100vw !important; min-width: 0 !important; min-height: 100dvh !important; overflow-x: hidden !important; -webkit-text-size-adjust: 100% !important; } html[data-zbai-mobile="1"][data-zbai-page="editor"], html[data-zbai-mobile="1"][data-zbai-page="editor"] body#haimeta { height: 100dvh !important; overflow: hidden !important; overscroll-behavior: none !important; } html[data-zbai-mobile="1"] #haimeta *, html[data-zbai-mobile="1"] #haimeta *::before, html[data-zbai-mobile="1"] #haimeta *::after { box-sizing: border-box !important; } html[data-zbai-mobile="1"] img, html[data-zbai-mobile="1"] video, html[data-zbai-mobile="1"] canvas { opacity: 1 !important; filter: none !important; -webkit-filter: none !important; mix-blend-mode: normal !important; background-blend-mode: normal !important; image-rendering: auto !important; } html[data-zbai-mobile="1"] [data-zbai-mobile-hidden="1"] { display: none !important; visibility: hidden !important; pointer-events: none !important; } html[data-zbai-mobile="1"] #zbai-mobile-home-shell [data-zbai-mobile-hidden="1"], html[data-zbai-mobile="1"] #zbai-mobile-history-shell [data-zbai-mobile-hidden="1"] { display: revert !important; visibility: visible !important; pointer-events: auto !important; } html[data-zbai-mobile="1"], html[data-zbai-mobile="1"] body { overflow-x: hidden !important; } html[data-zbai-mobile="1"] #zbai-account-bar { position: fixed !important; right: 10px !important; top: calc(8px + env(safe-area-inset-top, 0px)) !important; z-index: 10038 !important; display: inline-grid !important; grid-template-columns: minmax(0, auto) auto auto !important; align-items: center !important; gap: 6px !important; width: auto !important; max-width: min(68vw, 290px) !important; min-height: 34px !important; padding: 5px 7px !important; border-radius: 17px !important; background: rgba(255,255,255,.88) !important; box-shadow: 0 4px 14px rgba(20,24,38,.08) !important; backdrop-filter: blur(10px) !important; -webkit-backdrop-filter: blur(10px) !important; color: #202333 !important; font: 600 12px/18px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; } html[data-zbai-mobile="1"] #zbai-account-bar .zbai-account-info { min-width: 0 !important; max-width: 116px !important; overflow: hidden !important; text-overflow: ellipsis !important; white-space: nowrap !important; } html[data-zbai-mobile="1"] #zbai-account-bar button { min-width: 48px !important; height: 26px !important; border: 0 !important; border-radius: 13px !important; padding: 0 9px !important; background: #eef0f7 !important; color: #202333 !important; font: 700 12px/26px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; } html[data-zbai-mobile="1"] #zbai-account-bar [data-action="history"] { display: none !important; } html[data-zbai-mobile="1"] #zbai-history-button { position: fixed !important; right: 12px !important; top: calc(60px + env(safe-area-inset-top, 0px)) !important; z-index: 10042 !important; min-width: 64px !important; height: 32px !important; border: 1px solid rgba(255,255,255,.56) !important; border-radius: 16px !important; padding: 0 10px !important; background: rgba(17,18,13,.88) !important; color: #fff !important; box-shadow: 0 8px 22px rgba(20,24,38,.16) !important; font: 800 12px/32px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; touch-action: manipulation !important; } html[data-zbai-mobile="1"][data-zbai-page="home"] #root { display: none !important; } html[data-zbai-mobile="1"][data-zbai-page="home"][data-zbai-login-open="1"] #root { display: block !important; } html[data-zbai-mobile="1"][data-zbai-page="home"][data-zbai-login-open="1"] #zbai-mobile-home-shell { display: none !important; } html[data-zbai-mobile="1"] #zbai-mobile-home-shell { display: block !important; position: fixed !important; inset: 0 !important; z-index: 10025 !important; width: 100vw !important; height: 100dvh !important; min-height: 100dvh !important; padding: calc(14px + env(safe-area-inset-top, 0px)) 14px calc(190px + env(safe-area-inset-bottom, 0px)) !important; background: radial-gradient(circle at 18% 0%, rgba(219,196,139,.18), transparent 30%), linear-gradient(180deg, #f7f8fb 0%, #eef1f7 100%) !important; color: #151821 !important; overflow-x: hidden !important; overflow-y: auto !important; overscroll-behavior-y: contain !important; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; } html[data-zbai-mobile="1"] .zbai-mobile-topbar { display: grid !important; grid-template-columns: auto minmax(0,1fr) auto !important; align-items: center !important; gap: 10px !important; min-height: 42px !important; margin-bottom: 16px !important; } html[data-zbai-mobile="1"] .zbai-mobile-menu-button { width: 38px !important; height: 38px !important; border: 0 !important; border-radius: 19px !important; display: grid !important; place-items: center !important; background: rgba(255,255,255,.86) !important; color: #151821 !important; box-shadow: 0 8px 22px rgba(21,24,33,.08) !important; font: 900 22px/38px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; touch-action: manipulation !important; } html[data-zbai-mobile="1"] .zbai-mobile-brand { display: flex !important; align-items: center !important; min-width: 0 !important; gap: 8px !important; font-weight: 800 !important; } html[data-zbai-mobile="1"] .zbai-mobile-brand img { width: auto !important; max-width: min(168px,48vw) !important; max-height: 34px !important; object-fit: contain !important; } html[data-zbai-mobile="1"] .zbai-mobile-auth { display: inline-flex !important; align-items: center !important; gap: 6px !important; max-width: 58vw !important; min-height: 34px !important; padding: 4px !important; border-radius: 18px !important; background: rgba(255,255,255,.78) !important; box-shadow: 0 8px 24px rgba(21,24,33,.08) !important; backdrop-filter: blur(14px) !important; -webkit-backdrop-filter: blur(14px) !important; } html[data-zbai-mobile="1"] .zbai-mobile-auth-info { display: none !important; max-width: 88px !important; overflow: hidden !important; text-overflow: ellipsis !important; white-space: nowrap !important; padding-left: 6px !important; color: #4d5363 !important; font: 700 11px/16px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; } html[data-zbai-mobile="1"] .zbai-mobile-auth[data-logged-in="1"] .zbai-mobile-auth-info { display: block !important; } html[data-zbai-mobile="1"] .zbai-mobile-pill-button { height: 30px !important; border: 0 !important; border-radius: 15px !important; padding: 0 13px !important; background: #11120d !important; color: #fff !important; font: 800 13px/30px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; white-space: nowrap !important; touch-action: manipulation !important; } html[data-zbai-mobile="1"] .zbai-mobile-pill-button[data-action="history"] { background: #eef0f7 !important; color: #202333 !important; } html[data-zbai-mobile="1"] .zbai-mobile-section-title { margin: 20px 0 12px !important; display: flex !important; align-items: baseline !important; justify-content: space-between !important; gap: 8px !important; width: 100% !important; min-height: 30px !important; visibility: visible !important; } html[data-zbai-mobile="1"] .zbai-mobile-section-title strong { font: 900 24px/30px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; } html[data-zbai-mobile="1"] .zbai-mobile-section-title small { color: #6f7584 !important; font: 700 12px/18px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; } html[data-zbai-mobile="1"] .zbai-mobile-tool-grid, html[data-zbai-mobile="1"] .zbai-mobile-template-grid { display: grid !important; visibility: visible !important; grid-template-columns: repeat(2,minmax(0,1fr)) !important; gap: 12px !important; } html[data-zbai-mobile="1"] .zbai-mobile-tool-card, html[data-zbai-mobile="1"] .zbai-mobile-template-card { position: relative !important; display: block !important; visibility: visible !important; width: 100% !important; height: auto !important; border: 1px solid rgba(255,255,255,.72) !important; border-radius: 18px !important; background: rgba(255,255,255,.84) !important; color: #141722 !important; box-shadow: 0 12px 30px rgba(38,45,65,.08) !important; overflow: hidden !important; text-align: left !important; touch-action: manipulation !important; cursor: pointer !important; pointer-events: auto !important; -webkit-tap-highlight-color: transparent !important; } html[data-zbai-mobile="1"] .zbai-mobile-tool-card { min-height: 124px !important; padding: 18px !important; } html[data-zbai-mobile="1"] .zbai-mobile-template-card { min-height: 104px !important; padding: 14px !important; } html[data-zbai-mobile="1"] .zbai-mobile-tool-card small, html[data-zbai-mobile="1"] .zbai-mobile-template-card small { display: block !important; color: #757b89 !important; font: 800 12px/17px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; } html[data-zbai-mobile="1"] .zbai-mobile-tool-card strong { display: block !important; margin-top: 8px !important; font: 900 22px/27px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; } html[data-zbai-mobile="1"] .zbai-mobile-tool-card span { display: block !important; margin-top: 8px !important; color: #5b6070 !important; font: 600 12px/18px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; } html[data-zbai-mobile="1"] .zbai-mobile-template-tag { display: inline-flex !important; align-items: center !important; height: 22px !important; padding: 0 8px !important; border-radius: 11px !important; background: rgba(17,18,13,.07) !important; color: #606676 !important; font: 800 11px/22px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; } html[data-zbai-mobile="1"] .zbai-mobile-template-card strong { display: block !important; margin-top: 10px !important; color: #171a22 !important; font: 900 17px/22px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; } html[data-zbai-mobile="1"] .zbai-mobile-template-card small { margin-top: 5px !important; display: -webkit-box !important; -webkit-line-clamp: 2 !important; -webkit-box-orient: vertical !important; overflow: hidden !important; } html[data-zbai-mobile="1"][data-zbai-page="home"] #zbai-account-bar, html[data-zbai-mobile="1"][data-zbai-page="editor"] #zbai-account-bar, html[data-zbai-mobile="1"][data-zbai-page="history"] #zbai-account-bar, html[data-zbai-mobile="1"][data-zbai-page="home"] #zbai-history-button, html[data-zbai-mobile="1"][data-zbai-page="history"] #zbai-history-button { display: none !important; } html[data-zbai-mobile="1"][data-zbai-page="editor"] #root, html[data-zbai-mobile="1"][data-zbai-page="editor"] .PageContainer_haimetaApp__qfjGd, html[data-zbai-mobile="1"][data-zbai-page="editor"] .PageContainer_indexContent__5aBHJ, html[data-zbai-mobile="1"][data-zbai-page="editor"] #pictureEditor { width: 100vw !important; min-width: 0 !important; max-width: 100vw !important; height: 100dvh !important; min-height: 100dvh !important; overflow: hidden !important; } html[data-zbai-mobile="1"][data-zbai-page="editor"] #pictureEditor { display: flex !important; flex-direction: column !important; transform: none !important; margin: 0 !important; left: 0 !important; right: auto !important; } html[data-zbai-mobile="1"] .picture-editor-header { height: calc(52px + env(safe-area-inset-top,0px)) !important; min-height: calc(52px + env(safe-area-inset-top,0px)) !important; padding-top: env(safe-area-inset-top,0px) !important; position: sticky !important; top: 0 !important; z-index: 80 !important; background: var(--Background-1-Normal,#f4f5fb) !important; } html[data-zbai-mobile="1"] #picture-editor-header { height: 52px !important; min-height: 52px !important; padding: 0 10px !important; display: grid !important; grid-template-columns: minmax(0,1fr) auto !important; align-items: center !important; gap: 8px !important; } html[data-zbai-mobile="1"] .picture-editor-header .center { display: none !important; } html[data-zbai-mobile="1"] .picture-editor-header .left { width: auto !important; min-width: 0 !important; max-width: 100% !important; position: static !important; transform: none !important; overflow: hidden !important; } html[data-zbai-mobile="1"] .picture-editor-header .left img { max-height: 30px !important; width: auto !important; } html[data-zbai-mobile="1"] .picture-editor-header .right { width: auto !important; min-width: 0 !important; max-width: 46vw !important; position: static !important; display: flex !important; align-items: center !important; justify-content: flex-end !important; gap: 8px !important; overflow: hidden !important; } html[data-zbai-mobile="1"] .picture-editor-content { height: calc(100dvh - 52px - env(safe-area-inset-top,0px)) !important; width: 100vw !important; min-width: 0 !important; display: flex !important; flex-direction: column !important; overflow: hidden !important; position: relative !important; transform: none !important; margin: 0 !important; padding: 0 !important; left: 0 !important; right: auto !important; } html[data-zbai-mobile="1"] .picture-editor-content-left-drawer, html[data-zbai-mobile="1"] .PictureEditorHistoryDrawer_container__fn3Ud, html[data-zbai-mobile="1"] .TaskSide_record__JuEDU { display: none !important; } html[data-zbai-mobile="1"] .picture-editor-content-box { width: 100vw !important; min-width: 0 !important; height: 100% !important; margin: 0 !important; left: auto !important; right: auto !important; transform: none !important; display: flex !important; flex-direction: column !important; overflow: hidden !important; position: relative !important; } html[data-zbai-mobile="1"] .picture-editor-content-render { width: 100vw !important; min-width: 0 !important; flex: 0 0 auto !important; min-height: 104px !important; max-height: 28dvh !important; height: 18dvh !important; padding: 6px 10px !important; margin: 0 !important; left: 0 !important; right: auto !important; transform: none !important; display: flex !important; align-items: center !important; justify-content: center !important; overflow: auto !important; -webkit-overflow-scrolling: touch !important; } html[data-zbai-mobile="1"] .picture-editor-content-render:has(img:not([src*="loading"])), html[data-zbai-mobile="1"] .picture-editor-content-render:has(canvas), html[data-zbai-mobile="1"] .picture-editor-content-render:has(video) { height: 34dvh !important; max-height: 42dvh !important; } html[data-zbai-mobile="1"] .picture-editor-content-render > * { max-width: 100% !important; max-height: 100% !important; } html[data-zbai-mobile="1"] .picture-editor-content-control { width: 100vw !important; min-width: 0 !important; max-width: 100vw !important; flex: 1 1 auto !important; max-height: none !important; min-height: 0 !important; height: auto !important; margin: 0 !important; left: 0 !important; right: auto !important; transform: none !important; padding: 12px 12px calc(180px + env(safe-area-inset-bottom,0px)) !important; overflow-y: auto !important; -webkit-overflow-scrolling: touch !important; border-radius: 18px 18px 0 0 !important; background: var(--Background-2-Normal,#f1f2f8) !important; box-shadow: 0 -10px 30px rgba(20,24,38,.08) !important; } html[data-zbai-mobile="1"] .PictureEditorControl_PictureEditorControl__T6FHN { width: 100% !important; min-width: 0 !important; height: auto !important; padding: 12px 0 0 !important; } html[data-zbai-mobile="1"] .control-config { width: 100% !important; height: auto !important; display: flex !important; flex-direction: column !important; gap: 12px !important; } html[data-zbai-mobile="1"] .control-config > div, html[data-zbai-mobile="1"] .option-need-margin { width: 100% !important; margin: 0 !important; } html[data-zbai-mobile="1"] .control-config-title { width: 100% !important; height: auto !important; min-height: 24px !important; margin: 0 0 8px !important; line-height: 24px !important; position: relative !important; z-index: 1 !important; white-space: normal !important; word-break: keep-all !important; transform: none !important; translate: none !important; } html[data-zbai-mobile="1"] .control-config-input { width: 100% !important; min-width: 0 !important; margin-top: 6px !important; position: relative !important; z-index: 1 !important; transform: none !important; translate: none !important; } html[data-zbai-mobile="1"] #multifunctional-input { width: 100% !important; height: auto !important; } html[data-zbai-mobile="1"] .MultifunctionalInput_multifunctionalInput__NHcuq { width: 100% !important; min-height: 108px !important; height: auto !important; } html[data-zbai-mobile="1"] .MultifunctionalInput_multifunctionalInput__NHcuq .bg-1, html[data-zbai-mobile="1"] .MultifunctionalInput_multifunctionalInput__NHcuq .bg-2 { display: none !important; } html[data-zbai-mobile="1"] .Input_input__A9sVA, html[data-zbai-mobile="1"] .input-box, html[data-zbai-mobile="1"] textarea.textarea-buttons, html[data-zbai-mobile="1"] textarea.ant-input { width: 100% !important; } html[data-zbai-mobile="1"] textarea.textarea-buttons, html[data-zbai-mobile="1"] textarea.ant-input { min-height: 92px !important; max-height: 160px !important; font-size: 16px !important; line-height: 1.45 !important; } html[data-zbai-mobile="1"] .ChooseModelWithDetails_ChooseModelWithDetails__m_Cbs, html[data-zbai-mobile="1"] .ChooseModelWithDetails_selectBox__HoIuc, html[data-zbai-mobile="1"] .ChooseModelWithDetails_selectItem__7NA37 { width: 100% !important; min-height: 56px !important; height: auto !important; } html[data-zbai-mobile="1"] .ChooseSizeBase_chooseSizeBase__KgHNI, html[data-zbai-mobile="1"] .choose-size-base-shape { width: 100% !important; overflow-x: auto !important; overflow-y: hidden !important; display: flex !important; gap: 8px !important; -webkit-overflow-scrolling: touch !important; scroll-snap-type: x proximity !important; } html[data-zbai-mobile="1"] .choose-size-base-shape > div, html[data-zbai-mobile="1"] .shape-item, html[data-zbai-mobile="1"] .shape-item .item { flex: 0 0 64px !important; width: 64px !important; height: 60px !important; scroll-snap-align: start !important; } html[data-zbai-mobile="1"] .ControlBottom_controlBottom__gooOU, html[data-zbai-mobile="1"] .generate-button-container, html[data-zbai-mobile="1"] .control-buttons { width: 100% !important; height: auto !important; min-height: 50px !important; margin-top: 10px !important; position: relative !important; bottom: auto !important; z-index: 2 !important; background: var(--Background-2-Normal,#f1f2f8) !important; transform: none !important; box-shadow: none !important; pointer-events: auto !important; touch-action: manipulation !important; } html[data-zbai-mobile="1"] .generate-button-container button { width: 100% !important; min-height: 52px !important; border-radius: 16px !important; background: #11120d !important; color: #fff !important; box-shadow: 0 14px 34px rgba(17,18,13,.18) !important; pointer-events: auto !important; touch-action: manipulation !important; font-size: 15px !important; } html[data-zbai-mobile="1"] .generate-button-container button *, html[data-zbai-mobile="1"] .ControlBottom_controlBottom__gooOU button *, html[data-zbai-mobile="1"] .generate-button-container [class*="score" i], html[data-zbai-mobile="1"] .generate-button-container [class*="cost" i], html[data-zbai-mobile="1"] .generate-button-container i { display: inline-flex !important; opacity: 1 !important; visibility: visible !important; color: inherit !important; } html[data-zbai-mobile="1"] .ChooseNumber_ChooseNumber__J1uo_, html[data-zbai-mobile="1"] .choose-number-content { width: 100% !important; } html[data-zbai-mobile="1"] .choose-number-content { display: grid !important; grid-template-columns: auto minmax(120px,1fr) !important; align-items: center !important; gap: 12px !important; } html[data-zbai-mobile="1"] .choose-number-options { justify-self: end !important; width: min(160px,48vw) !important; } html[data-zbai-mobile="1"] .fixed.top-0.left-0.w-screen.h-screen { padding: env(safe-area-inset-top,0px) 12px env(safe-area-inset-bottom,0px) !important; align-items: center !important; } html[data-zbai-mobile="1"] .LoginModal_LoginModal__O59AS { width: calc(100vw - 24px) !important; max-width: 420px !important; min-width: 0 !important; max-height: calc(100dvh - 48px - env(safe-area-inset-top,0px) - env(safe-area-inset-bottom,0px)) !important; overflow-y: auto !important; border-radius: 18px !important; } html[data-zbai-mobile="1"][data-zbai-login-open="1"] .fixed.top-0.left-0.w-screen.h-screen, html[data-zbai-mobile="1"][data-zbai-login-open="1"] .LoginModal_LoginModal__O59AS, html[data-zbai-mobile="1"][data-zbai-login-open="1"] [class*="LoginModal"] { display: flex !important; visibility: visible !important; opacity: 1 !important; pointer-events: auto !important; } html[data-zbai-mobile="1"][data-zbai-login-open="1"] .LoginModal_LoginModal__O59AS, html[data-zbai-mobile="1"][data-zbai-login-open="1"] [class*="LoginModal"] { display: block !important; } html[data-zbai-mobile="1"] #zbai-mobile-bottom-sheet { position: fixed !important; inset: 0 !important; z-index: 10075 !important; display: flex !important; align-items: flex-end !important; justify-content: center !important; background: rgba(12,14,20,.42) !important; } html[data-zbai-mobile="1"] #zbai-mobile-bottom-sheet[hidden] { display: none !important; } html[data-zbai-mobile="1"] .zbai-mobile-sheet-panel { width: 100vw !important; max-height: min(72dvh,560px) !important; overflow-y: auto !important; padding: 12px 14px calc(18px + env(safe-area-inset-bottom,0px)) !important; border-radius: 18px 18px 0 0 !important; background: #fff !important; color: #2e3241 !important; box-shadow: 0 -14px 38px rgba(20,24,38,.18) !important; } html[data-zbai-mobile="1"] .zbai-mobile-sheet-title { display: flex !important; align-items: center !important; justify-content: space-between !important; gap: 12px !important; min-height: 40px !important; font-size: 16px !important; font-weight: 700 !important; } html[data-zbai-mobile="1"] .zbai-mobile-sheet-close { width: 36px !important; height: 36px !important; border-radius: 18px !important; background: rgba(166,172,225,.18) !important; color: inherit !important; } html[data-zbai-mobile="1"] .zbai-mobile-sheet-list { display: grid !important; gap: 8px !important; margin-top: 8px !important; } html[data-zbai-mobile="1"] .zbai-mobile-sheet-option { width: 100% !important; min-height: 48px !important; padding: 10px 12px !important; text-align: left !important; border-radius: 12px !important; background: rgba(166,172,225,.12) !important; color: inherit !important; } html[data-zbai-mobile="1"] .zbai-mobile-sheet-option strong, html[data-zbai-mobile="1"] .zbai-mobile-sheet-option small { display: block !important; } html[data-zbai-mobile="1"] .zbai-mobile-sheet-option small { margin-top: 2px !important; opacity: .68 !important; } html[data-zbai-mobile="1"] .zbai-mobile-back-button { position: fixed !important; left: 10px !important; top: calc(9px + env(safe-area-inset-top,0px)) !important; z-index: 10040 !important; width: 34px !important; height: 34px !important; border-radius: 17px !important; border: 1px solid rgba(10,10,11,.08) !important; background: rgba(255,255,255,.88) !important; color: #222637 !important; box-shadow: 0 4px 16px rgba(20,24,38,.12) !important; backdrop-filter: blur(10px) !important; -webkit-backdrop-filter: blur(10px) !important; font: 28px/30px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; text-align: center !important; padding: 0 0 3px !important; } html[data-zbai-mobile="1"] #zbai-style-panel { position: fixed !important; inset: 0 !important; z-index: 10088 !important; display: flex !important; align-items: flex-end !important; justify-content: center !important; padding: 0 8px calc(72px + env(safe-area-inset-bottom,0px)) !important; background: rgba(18,20,28,.34) !important; box-sizing: border-box !important; } html[data-zbai-mobile="1"] #zbai-style-panel[hidden] { display: none !important; } html[data-zbai-mobile="1"] .zbai-style-panel-card { width: min(100%,430px) !important; height: min(68dvh,560px) !important; max-height: calc(100dvh - 116px - env(safe-area-inset-bottom,0px)) !important; display: flex !important; flex-direction: column !important; overflow: hidden !important; border-radius: 22px !important; background: #fff !important; color: #151821 !important; box-shadow: 0 22px 54px rgba(18,20,28,.26) !important; } html[data-zbai-mobile="1"] .zbai-style-panel-head { flex: 0 0 auto !important; display: flex !important; align-items: center !important; justify-content: space-between !important; gap: 10px !important; padding: 10px 12px 8px !important; border-bottom: 1px solid rgba(24,28,40,.07) !important; } html[data-zbai-mobile="1"] .zbai-style-panel-head strong { font: 900 16px/22px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; } html[data-zbai-mobile="1"] .zbai-style-panel-close { width: 32px !important; height: 32px !important; border: 0 !important; border-radius: 17px !important; background: #eef0f7 !important; color: #151821 !important; font: 900 22px/32px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; } html[data-zbai-mobile="1"] .zbai-style-panel-cats { flex: 0 0 auto !important; display: flex !important; gap: 8px !important; padding: 8px 12px !important; overflow-x: auto !important; overflow-y: hidden !important; -webkit-overflow-scrolling: touch !important; } html[data-zbai-mobile="1"] .zbai-style-panel-cat { flex: 0 0 auto !important; height: 28px !important; border: 0 !important; border-radius: 15px !important; padding: 0 12px !important; background: #eef0f7 !important; color: #2e3241 !important; font: 800 12px/28px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; } html[data-zbai-mobile="1"] .zbai-style-panel-list { flex: 1 1 auto !important; min-height: 0 !important; display: grid !important; grid-template-columns: repeat(2,minmax(0,1fr)) !important; gap: 8px !important; padding: 0 12px 12px !important; overscroll-behavior: contain !important; touch-action: pan-y !important; overflow-y: auto !important; overflow-x: hidden !important; -webkit-overflow-scrolling: touch !important; } html[data-zbai-mobile="1"] .zbai-style-panel-item { min-width: 0 !important; border: 0 !important; border-radius: 14px !important; padding: 0 !important; background: #f3f5fa !important; overflow: hidden !important; text-align: left !important; color: #151821 !important; } html[data-zbai-mobile="1"] .zbai-style-panel-item img, html[data-zbai-mobile="1"] .zbai-style-panel-placeholder { display: block !important; width: 100% !important; aspect-ratio: 1 / 1 !important; object-fit: cover !important; background: #edf0f7 !important; } html[data-zbai-mobile="1"] .zbai-style-panel-placeholder { display: grid !important; place-items: center !important; color: #8a91a2 !important; font: 900 26px/1 -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; } html[data-zbai-mobile="1"] .zbai-style-panel-item span { display: block !important; padding: 6px 8px 7px !important; overflow: hidden !important; text-overflow: ellipsis !important; white-space: nowrap !important; font: 800 12px/17px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; } html[data-zbai-mobile="1"] .zbai-mobile-style-launcher { height: 30px !important; border: 0 !important; border-radius: 15px !important; padding: 0 12px !important; background: #11120d !important; color: #fff !important; font: 800 13px/30px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif !important; white-space: nowrap !important; } html[data-zbai-mobile="1"][data-zbai-page="editor"] [data-zbai-inline-style-chooser="1"], html[data-zbai-mobile="1"][data-zbai-page="editor"] [data-zbai-inline-style-chooser="1"] .choose-style-container { position: relative !important; left: auto !important; right: auto !important; top: auto !important; bottom: auto !important; width: 100% !important; min-width: 0 !important; max-width: 100% !important; height: auto !important; max-height: none !important; overflow: visible !important; transform: none !important; translate: none !important; margin: 0 !important; box-sizing: border-box !important; z-index: auto !important; box-shadow: none !important; } html[data-zbai-mobile="1"][data-zbai-page="editor"] [data-zbai-inline-style-chooser="1"] .choose-style-title { position: relative !important; left: auto !important; right: auto !important; top: auto !important; width: 100% !important; max-width: 100% !important; min-width: 0 !important; display: flex !important; align-items: center !important; justify-content: space-between !important; gap: 12px !important; padding: 0 0 8px !important; transform: none !important; translate: none !important; box-sizing: border-box !important; } html[data-zbai-mobile="1"][data-zbai-page="editor"] [data-zbai-inline-style-chooser="1"] .choose-style-content { width: 100% !important; max-width: 100% !important; max-height: min(58dvh,560px) !important; overflow-y: auto !important; overflow-x: hidden !important; padding-right: 2px !important; overscroll-behavior: contain !important; -webkit-overflow-scrolling: touch !important; } html[data-zbai-mobile="1"][data-zbai-page="editor"] [data-zbai-inline-style-chooser="1"] .template-list { display: grid !important; grid-template-columns: repeat(2,minmax(0,1fr)) !important; gap: 10px !important; width: 100% !important; max-width: 100% !important; overflow: visible !important; } html[data-zbai-mobile="1"][data-zbai-page="editor"] [data-zbai-inline-style-chooser="1"] .template-item-wrap, html[data-zbai-mobile="1"][data-zbai-page="editor"] [data-zbai-inline-style-chooser="1"] .item { width: 100% !important; min-width: 0 !important; max-width: 100% !important; display: block !important; } html[data-zbai-mobile="1"][data-zbai-page="editor"] [data-zbai-inline-style-chooser="1"] .item-img { width: 100% !important; aspect-ratio: 1 / 1 !important; overflow: hidden !important; border-radius: 10px !important; } html[data-zbai-mobile="1"][data-zbai-page="editor"] [data-zbai-inline-style-chooser="1"] .item-img img { width: 100% !important; height: 100% !important; object-fit: cover !important; } html[data-zbai-mobile="1"] #zbai-work-preview-overlay, html[data-zbai-mobile="1"] #zbai-work-detail-fallback { position: fixed !important; inset: 0 !important; z-index: 10090 !important; display: flex !important; flex-direction: column !important; width: 100vw !important; height: 100dvh !important; padding: calc(12px + env(safe-area-inset-top,0px)) 12px calc(16px + env(safe-area-inset-bottom,0px)) !important; background: rgba(244,246,251,.98) !important; color: #151821 !important; overflow: hidden !important; box-sizing: border-box !important; } html[data-zbai-mobile="1"] #zbai-work-preview-overlay[hidden] { display: none !important; } } `; if (shouldAppend) { const target = document.head || document.documentElement; target.appendChild(style); } } function enableMobileFlag() { document.documentElement.dataset.zbaiMobile = isMobile() ? '1' : '0'; } function ensureViewport() { if (!isMobile()) return; let viewport = document.querySelector('meta[name="viewport"]'); if (!viewport) { viewport = document.createElement('meta'); viewport.name = 'viewport'; (document.head || document.documentElement).appendChild(viewport); } viewport.setAttribute('content', 'width=device-width, initial-scale=1, maximum-scale=1, viewport-fit=cover'); } function getPageType() { if (location.pathname === '/mobile/work-detail') return 'work-detail'; if (document.querySelector('.introduction-area, [class*="introductionArea"]')) return 'work-detail'; if (location.pathname === '/index/mine-homepage') return 'history'; if (document.querySelector(selectors.root)) return 'editor'; if (document.querySelector('main.index-main, #index-main-content--right')) return 'home'; return location.pathname.startsWith('/create/') || /\/create\//.test(location.pathname) ? 'editor' : 'home'; } function updatePageType() { document.documentElement.dataset.zbaiPage = getPageType(); } function isVisibleElement(node) { if (!(node instanceof HTMLElement)) return false; const rect = node.getBoundingClientRect(); return rect.width > 0 && rect.height > 0; } function getText(node) { return (node && node.textContent ? node.textContent : '').replace(/\s+/g, ' ').trim(); } function getElementText(node) { return getText(node).replace(/\s+/g, ''); } function normalizeSpaceText(value) { return (value || '').replace(/\s+/g, ' ').trim(); } function normalizeActionText(text) { return String(text || '').replace(/\s+/g, ''); } function escapeHtml(value) { return String(value).replace(/[&<>"']/g, (char) => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', }[char])); } function getFirst(selector, root = document) { return root.querySelector(selector); } function isMobileShellNode(node) { return node instanceof HTMLElement && !!node.closest('#zbai-mobile-home-shell, #zbai-mobile-history-shell, #zbai-history-button, #zbai-account-bar, #zbai-mobile-adapter-badge'); } function hideNode(node) { if (node instanceof HTMLElement && !isMobileShellNode(node)) { node.setAttribute(HIDDEN_ATTR, '1'); } } function findDismissRoot(node) { let current = node instanceof HTMLElement ? node : null; let fallback = current; while (current && current !== document.body && current !== document.documentElement) { const style = window.getComputedStyle(current); const className = String(current.className || ''); if ( style.position === 'fixed' || style.position === 'sticky' || /modal|dialog|drawer|popup|popover|toast|vip|member|pricing|upgrade|pay/i.test(className) ) { fallback = current; } current = current.parentElement; } return fallback; } function dismissMobileBlockers() { if (!isMobile() || !document.body) return; const blockerPatterns = [ /Bestexperiencedondesktop/i, /Bestsupportedondesktop/i, /请使用电脑端/i, /电脑端体验更佳/i, ]; const upgradeDialogPatterns = [ /我要升级/, /连续包月.*连续包年/, /入门版.*个人版.*专业版/, /作者.*连续包/, /viewmore/i, ]; const upgradeButtonPatterns = [/^升级$/, /^我要升级$/]; const allowUpgradeDismiss = document.documentElement.dataset.zbaiPage !== 'history'; const nodes = [...document.body.querySelectorAll('body *')]; nodes.forEach((node) => { if (!(node instanceof HTMLElement) || node.hasAttribute(HIDDEN_ATTR) || !isVisibleElement(node)) return; const compactText = getElementText(node); if (!compactText) return; if (compactText.length < 160 && blockerPatterns.some((pattern) => pattern.test(compactText))) { hideNode(findDismissRoot(node)); return; } if (allowUpgradeDismiss && upgradeDialogPatterns.some((pattern) => pattern.test(compactText))) { const root = findDismissRoot(node); const rect = root.getBoundingClientRect(); const rootStyle = window.getComputedStyle(root); const rootClass = String(root.className || ''); const looksLikeOverlay = rootStyle.position === 'fixed' || rootStyle.position === 'sticky' || /modal|dialog|drawer|popup|popover|toast|vip|member|pricing|upgrade|pay/i.test(rootClass); if (looksLikeOverlay && (rect.width >= window.innerWidth * 0.45 || rect.height >= window.innerHeight * 0.28)) { hideNode(root); } return; } if (allowUpgradeDismiss && upgradeButtonPatterns.some((pattern) => pattern.test(compactText))) { const tag = node.tagName.toLowerCase(); const role = node.getAttribute('role'); if (tag === 'button' || tag === 'a' || role === 'button' || node.onclick) { hideNode(node); } } }); if (document.querySelector(`[${HIDDEN_ATTR}="1"]`)) { document.documentElement.style.removeProperty('overflow'); if (document.body) document.body.style.removeProperty('overflow'); } } function cleanupLegacyMobileArtifacts() { if (!isMobile() || !document.body) return; const legacyExactText = new Set([ '关闭移动面板', '手机脚本已启用', '珠宝AI手机快捷操作', ]); [...document.body.querySelectorAll('button, [role="button"], div, span')].forEach((node) => { if (!(node instanceof HTMLElement) || node.hasAttribute(HIDDEN_ATTR) || isMobileShellNode(node)) return; const text = normalizeSpaceText(node.innerText || node.textContent); if (!text) return; if (legacyExactText.has(text)) { hideNode(findDismissRoot(node)); return; } if ( text === '登录' && !node.closest('#picture-editor-header, .picture-editor-header, .LoginModal_LoginModal__O59AS, [class*="LoginModal"]') && window.getComputedStyle(node).position === 'fixed' ) { hideNode(findDismissRoot(node)); } }); } function navigateTo(path) { if (!path) return; const url = new URL(path, window.location.origin); window.location.assign(url.href); } function openHomeTool(key) { const action = HOME_TOOL_ACTIONS.find((item) => item.key === key); if (!action) return; if (action.href) { navigateTo(action.href); return; } navigateTo(action.fallbackHref); } function runMobileAction(action) { if (action === 'login') return clickLoginButton(); if (action === 'logout') return clickLogoutButton(); if (action === 'history') return goHistoryRecord(); if (action === 'menu') { openHomeMenu(); return true; } return false; } function openHomeMenu() { openSheet('快捷入口', [ { title: '图片创作', desc: '进入图片创作工作区', onSelect: () => openHomeTool('image') }, { title: '视频创作', desc: '进入视频创作工作区', onSelect: () => openHomeTool('video') }, { title: '历史记录', desc: '查看已生成内容', onSelect: () => goHistoryRecord() }, { title: '登录 / 账号', desc: '打开原网页登录入口', onSelect: () => clickLoginButton() }, ]); } function ensureMobileHomeShell() { let shell = document.getElementById('zbai-mobile-home-shell'); if (!shell) { shell = document.createElement('main'); shell.id = 'zbai-mobile-home-shell'; shell.innerHTML = `