MahjongGameDesigner / styles.py
Estazz's picture
Upload 20 files
a705843 verified
"""
样式文件 - 集中管理 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; }
"""