AnimaStudio / styles.py
lulavc
fix: move theme/css from gr.Blocks() to demo.launch() for Gradio 6.x compatibility
43f8b96
"""Gradio theme and CSS for AnimaStudio."""
import gradio as gr
THEME = gr.themes.Soft(
primary_hue="purple",
secondary_hue="pink",
neutral_hue="slate",
)
CSS = """
/* ── Global ─────────────────────────────────────── */
.gradio-container {
max-width: 1380px !important;
margin: 0 auto !important;
}
/* ── Header ──────────────────────────────────────── */
.as-header {
text-align: center;
padding: 2.4rem 1rem 2rem;
border-radius: 1.5rem;
margin-bottom: 1.5rem;
background: linear-gradient(135deg, #1a0b2e 0%, #2d1b4e 40%, #1a1040 70%, #0d0b1e 100%);
border: 1px solid rgba(168,85,247,0.25);
box-shadow: 0 4px 60px rgba(168,85,247,0.1), inset 0 1px 0 rgba(255,255,255,0.05);
position: relative;
overflow: hidden;
}
.as-header::before {
content: '';
position: absolute;
top: -50%; left: -50%;
width: 200%; height: 200%;
background: radial-gradient(ellipse at center, rgba(168,85,247,0.08) 0%, transparent 60%);
pointer-events: none;
}
.as-header h1 {
font-size: 3.2rem !important;
font-weight: 900 !important;
margin: 0 0 0.6rem !important;
line-height: 1.05 !important;
background: linear-gradient(90deg, #e879f9 0%, #a855f7 40%, #f472b6 80%, #fb923c 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
letter-spacing: -0.035em;
}
.as-header .tagline {
color: #94a3b8 !important;
font-size: 1.0rem !important;
margin: 0 0 1rem !important;
}
.as-header .badges {
display: flex;
justify-content: center;
gap: 0.5rem;
flex-wrap: wrap;
}
/* ── Badges ───────────────────────────────────────── */
.badge {
display: inline-flex;
align-items: center;
gap: 0.3rem;
padding: 0.25rem 0.75rem;
border-radius: 999px;
font-size: 0.78rem;
font-weight: 600;
background: rgba(255,255,255,0.06);
border: 1px solid rgba(255,255,255,0.1);
color: #cbd5e1;
}
.badge-purple { border-color: rgba(168,85,247,0.4); color: #a855f7; background: rgba(168,85,247,0.08); }
.badge-pink { border-color: rgba(244,114,182,0.4); color: #f472b6; background: rgba(244,114,182,0.08); }
.badge-cyan { border-color: rgba(34,211,238,0.4); color: #22d3ee; background: rgba(34,211,238,0.08); }
.badge-gold { border-color: rgba(251,191,36,0.4); color: #fbbf24; background: rgba(251,191,36,0.08); }
.badge-teal { border-color: rgba(20,184,166,0.4); color: #14b8a6; background: rgba(20,184,166,0.08); }
/* ── Language selector ────────────────────────────── */
#lang-selector .wrap { gap: 4px !important; justify-content: center !important; }
#lang-selector label span { font-size: 0.9rem !important; }
#lang-selector { margin-bottom: 0.5rem !important; }
/* ── Generate Button ──────────────────────────────── */
#gen-btn {
background: linear-gradient(135deg, #a855f7 0%, #ec4899 100%) !important;
border: none !important;
font-size: 1.15rem !important;
font-weight: 700 !important;
padding: 0.85rem 1rem !important;
border-radius: 0.85rem !important;
color: white !important;
box-shadow: 0 4px 24px rgba(168,85,247,0.4) !important;
transition: all 0.2s ease !important;
letter-spacing: 0.02em !important;
width: 100% !important;
}
#gen-btn:hover {
transform: translateY(-2px) !important;
box-shadow: 0 8px 32px rgba(168,85,247,0.55) !important;
}
#gen-btn:active { transform: translateY(0) !important; }
/* ── Dub Button ────────────────────────────────────── */
#dub-btn {
background: linear-gradient(135deg, #06b6d4 0%, #a855f7 100%) !important;
border: none !important;
font-size: 1.15rem !important;
font-weight: 700 !important;
padding: 0.85rem 1rem !important;
border-radius: 0.85rem !important;
color: white !important;
box-shadow: 0 4px 24px rgba(6,182,212,0.4) !important;
transition: all 0.2s ease !important;
letter-spacing: 0.02em !important;
width: 100% !important;
}
#dub-btn:hover {
transform: translateY(-2px) !important;
box-shadow: 0 8px 32px rgba(6,182,212,0.55) !important;
}
#dub-btn:active { transform: translateY(0) !important; }
/* ── Output Video ─────────────────────────────────── */
#output-video, #dub-output-video {
border-radius: 1rem !important;
overflow: hidden !important;
background: #0f172a !important;
min-height: 420px !important;
}
/* ── Footer ───────────────────────────────────────── */
.as-footer {
text-align: center;
padding: 1.2rem 0 0.5rem;
color: #475569;
font-size: 0.82rem;
border-top: 1px solid #1e293b;
margin-top: 1rem;
}
.as-footer a { color: #a855f7 !important; text-decoration: none !important; }
.as-footer a:hover { text-decoration: underline !important; }
/* ── Mobile ───────────────────────────────────────── */
@media (max-width: 768px) {
.as-header h1 { font-size: 2rem !important; }
.badges { gap: 0.35rem !important; }
}
"""