""" 样式文件 - 集中管理 CSS 样式 (强制深色主题) """ MAHJONG_THEME_CSS = """ html, body{ background-color:#0b1220 !important; color-scheme: dark !important; } /* ===== 仅添加强制深色主题的关键代码 ===== */ :root { color-scheme: dark !important; } @media (prefers-color-scheme: light) { :root { color-scheme: dark !important; } } /* 修复HuggingFace可能添加的滤镜效果 */ .gradio-container { filter: none !important; -webkit-filter: none !important; } /* ===== Mahjong 主题配色 ===== */ :root{ --felt:#0f5132; /* 青 jade */ --felt-2:#09301d; --felt-light:#1c7d4f; --wood:#5e4430; --wood-2:#3f2f21; --paper:#f8f3e7; --ink:#f3f4f6; --muted:#cbd5e1; --accent: #ffcc4d; /* HERO 渐变(青→竹→朱) */ --hero-left:#041b16; --hero-mid:#0c6244; --hero-right:#b7452f; } body, .gradio-container{ background: radial-gradient(1200px 800px at 15% -20%, #143828 0%, #0a1f18 45%, #050c0a 100%) !important; } /* 顶部 HERO:左深右浅的线性渐变,白字清晰 */ .hero{ position:relative; background: linear-gradient(90deg, var(--hero-left) 0%, var(--hero-mid) 48%, var(--hero-right) 100%); color:#fff; /* 固定白字 */ text-shadow: 0 2px 6px rgba(0,0,0,.35); border-radius:20px; padding:18px 16px; box-shadow: 0 10px 28px rgba(0,0,0,.25), inset 0 -3px 0 rgba(255,255,255,.25); margin-bottom: 10px; } /* Hero 右上角麻将牌组 */ .hero-icons{ position:absolute; top:12px; right:18px; display:flex; gap:8px; } .hero-icons .hero-photo{ width:40px; height:50px; border-radius:8px; background: linear-gradient(180deg, #fdf9f0 0%, #efe4cf 55%, #d9c4a3 100%); box-shadow: 0 4px 0 rgba(0,0,0,.35), inset 0 0 0 1px rgba(255,255,255,.8); border:1px solid rgba(0,0,0,.28); background-color:#fdf9f0; background-size:cover; background-position:center; background-repeat:no-repeat; } /* 左侧设置卡片(半透明) */ .side-card{ background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.12); border-radius:16px; padding:14px; box-shadow: 0 4px 14px rgba(0,0,0,.18); backdrop-filter: blur(3px); color:var(--ink); } .side-card h3{ margin:0 0 8px 0; } /* 麻将桌容器:木框 + 翡翠台呢 + 竹纹 */ .table{ position:relative; background: radial-gradient(900px 600px at 35% 10%, rgba(255,255,255,.08) 0%, transparent 60%), radial-gradient(1200px 800px at 35% 10%, var(--felt) 0%, var(--felt-2) 60%, #041912 100%); border-radius:22px; border: 12px solid transparent; background-clip: padding-box; box-shadow: inset 0 0 50px rgba(0,0,0,.35), 0 20px 60px rgba(0,0,0,.35); } .table:before{ /* 木质外框 */ content:""; position:absolute; inset:-14px; border-radius:28px; background: linear-gradient(90deg, var(--wood), var(--wood-2)); z-index:-1; box-shadow: 0 8px 28px rgba(0,0,0,.45), inset 0 0 8px rgba(255,255,255,.1); } .table:after{ /* 低透竹纹 */ content:""; position:absolute; inset:0; background-image: linear-gradient(120deg, rgba(255,255,255,.05) 15%, transparent 30%), linear-gradient(300deg, rgba(0,0,0,.12) 20%, transparent 40%); background-size: 140px 140px; pointer-events:none; } /* 聊天组件细节:头像更小、气泡更易读 */ .custom-chatbot .message{ font-size:16px; line-height:1.6; color:var(--ink); word-break:break-word; } .custom-chatbot .message.user{ background: rgba(255,255,255,.08) !important; } .custom-chatbot .message.bot{ background: rgba(0,0,0,.20) !important; } /* 按钮:麻将牌风格 */ .gradio-container button.gr-button{ border:2px solid rgba(255,255,255,.35); color:#193c2a; font-weight:700; letter-spacing:.3px; background: linear-gradient(180deg, var(--paper) 0%, #efe6d2 60%, #dccdb0 100%); border-radius:18px; box-shadow: 0 6px 0 rgba(0,0,0,.35), inset 0 0 0 2px rgba(255,255,255,.6); padding:10px 20px; transition: transform .08s ease, box-shadow .08s ease; } .gradio-container button.gr-button:hover{ transform: translateY(-1px); } .gradio-container button.gr-button:active{ transform: translateY(2px); box-shadow: 0 3px 0 rgba(0,0,0,.45), inset 0 0 0 2px rgba(255,255,255,.6); } /* 输入框在桌面里更融洽 */ .table .gr-textbox textarea{ background: rgba(0,0,0,.20) !important; color:#e5e7eb !important; border-radius:12px !important; border:1px solid rgba(255,255,255,.18) !important; } /* 小提示文字颜色 */ .hint{ color:var(--muted); font-size:12px; } @media (max-width: 820px){ .custom-chatbot .avatar, .custom-chatbot .message .avatar{ width: 62px !important; height: 62px !important; } .custom-chatbot .avatar-image{ width:58px !important; height:58px !important; } } /* === 修复 ChatInterface 内嵌发送/停止按钮在深色主题下不可见的问题 === */ :where(.gradio-container) button[aria-label="submit"], :where(.gradio-container) button[aria-label="stop"]{ display: inline-flex !important; align-items: center; justify-content: center; opacity: 1 !important; visibility: visible !important; pointer-events: auto !important; border: 1px solid rgba(255,255,255,.22) !important; background: rgba(255,255,255,.09) !important; color: #fff !important; border-radius: 10px !important; height: 36px !important; width: 36px !important; cursor: pointer !important; } /* 保证输入框容器能正确容纳右侧内嵌按钮 */ :where(.gradio-container) .gr-chat-interface .gr-textbox{ position: relative; } :where(.gradio-container) .gr-chat-interface .gr-textbox textarea{ padding-right: 48px !important; } /* === Chatbot 头像尺寸 & 对齐(稳定版)=== */ /* 放大 Chatbot 头像(统一设置) */ .custom-chatbot .avatar, .custom-chatbot .message .avatar{ width: 88px !important; height: 88px !important; min-width: 88px !important; min-height: 88px !important; border-radius: 9999px !important; overflow: hidden !important; border: 2px solid #ffffffcc !important; box-shadow: 0 2px 6px rgba(0,0,0,.25) !important; flex-shrink: 0 !important; align-self: flex-start !important; } /* 控制头像尺寸(命中 gradio v4/5 的 DOM 结构) */ .custom-chatbot .avatar-image { width: 82px !important; height: 82px !important; border-radius: 50% !important; /* 保持圆形 */ object-fit: cover !important; } /* 可选:调整气泡和头像的间距 */ .custom-chatbot .message { gap: 12px !important; /* 改成更大/更小 */ } /* 头像图片填充容器,不变形 */ .custom-chatbot .avatar > img, .custom-chatbot .avatar-image{ width: 100% !important; height: 100% !important; object-fit: cover !important; object-position: 50% 50% !important; display: block !important; border: 0 !important; background: transparent !important; } /* 头像与气泡的间距与对齐(可选) */ .custom-chatbot .message{ gap: 12px !important; align-items: flex-start !important; } .custom-chatbot .message .message-content{ margin-top: 2px !important; } """