/* ============================================ DreamLand — Fantasy RPG Theme with GSAP ============================================ */ /* --- Global SVG Icon Alignment Fix --- */ svg { display: inline-block; vertical-align: middle; position: relative; top: -1px; flex-shrink: 0; } /* When inside flex containers */ span > svg, div > svg, a > svg, button > svg, p > svg, h1 > svg, h2 > svg, h3 > svg { vertical-align: middle; margin-right: 2px; } /* --- CSS Variables --- */ :root { --bg-deep: #080812; --bg-dark: #0f0f1a; --bg-card: #16162a; --bg-input: #1a1a2e; --border: #2a2a4a; --border-glow: #6c5ce7; --text: #e0e0e0; --text-dim: #8888aa; --accent-purple: #b8a9ff; --accent-blue: #4a9eff; --accent-green: #50c878; --accent-gold: #ffd700; --accent-red: #ff6b6b; --accent-orange: #ff9f43; --glow-purple: rgba(184, 169, 255, 0.3); --glow-blue: rgba(74, 158, 255, 0.3); --glow-green: rgba(80, 200, 120, 0.3); --font-display: 'Georgia', 'Noto Serif SC', serif; --font-body: 'Segoe UI', 'Noto Sans SC', sans-serif; } /* --- Dynamic Animated Background --- */ .gradio-container { background: radial-gradient(ellipse at 15% 25%, rgba(108,92,231,0.08) 0%, transparent 50%), radial-gradient(ellipse at 85% 75%, rgba(74,158,255,0.06) 0%, transparent 50%), radial-gradient(ellipse at 50% 50%, rgba(184,169,255,0.03) 0%, transparent 60%), var(--bg-deep) !important; animation: bg-shift 20s ease-in-out infinite alternate; } @keyframes bg-shift { 0% { background-position: 0% 0%, 100% 100%, 50% 50%; } 33% { background-position: 20% 30%, 80% 70%, 40% 60%; } 66% { background-position: 10% 50%, 90% 40%, 60% 30%; } 100% { background-position: 5% 15%, 95% 85%, 55% 45%; } } /* Floating particle effect via pseudo-element */ .gradio-container::before { content: ''; position: fixed; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 0; background: radial-gradient(1.5px 1.5px at 10% 15%, rgba(184,169,255,0.5), transparent), radial-gradient(1px 1px at 25% 45%, rgba(74,158,255,0.4), transparent), radial-gradient(1.5px 1.5px at 40% 20%, rgba(184,169,255,0.3), transparent), radial-gradient(1px 1px at 55% 65%, rgba(255,215,0,0.3), transparent), radial-gradient(1.5px 1.5px at 70% 35%, rgba(74,158,255,0.4), transparent), radial-gradient(1px 1px at 85% 55%, rgba(184,169,255,0.5), transparent), radial-gradient(1px 1px at 15% 75%, rgba(108,92,231,0.4), transparent), radial-gradient(1.5px 1.5px at 35% 85%, rgba(74,158,255,0.3), transparent), radial-gradient(1px 1px at 60% 10%, rgba(184,169,255,0.4), transparent), radial-gradient(1.5px 1.5px at 80% 80%, rgba(255,215,0,0.3), transparent), radial-gradient(1px 1px at 50% 40%, rgba(184,169,255,0.35), transparent), radial-gradient(1.5px 1.5px at 92% 15%, rgba(108,92,231,0.3), transparent); animation: float-particles 30s linear infinite; } @keyframes float-particles { 0% { transform: translateY(0) translateX(0); opacity: 0.6; } 25% { transform: translateY(-15px) translateX(8px); opacity: 0.8; } 50% { transform: translateY(-5px) translateX(-5px); opacity: 0.5; } 75% { transform: translateY(-20px) translateX(12px); opacity: 0.7; } 100% { transform: translateY(0) translateX(0); opacity: 0.6; } } /* Ensure content is above the background */ .gradio-container > * { position: relative; z-index: 1; } .gradio-container { background: var(--bg-deep) !important; color: var(--text) !important; font-family: var(--font-body) !important; max-width: 100% !important; padding: 0 !important; } /* Force dark background on ALL containers */ .gradio-container .app, .gradio-container .main, .gradio-container .contain, .gradio-container .panel, .gradio-container .block, .gradio-container .form, .gradio-container .column, .gradio-container .row, .gradio-container .group, .gradio-container .accordion, .gradio-container [class*="container"], .gradio-container [class*="panel"], .gradio-container [class*="block"] { background: transparent !important; border-color: var(--border) !important; box-shadow: none !important; } /* Dropdown / Select override */ .gradio-container select, .gradio-container [class*="dropdown"], .gradio-container input[type="text"], .gradio-container input.combobox, .gradio-container .wrap>input, .gradio-container .wrap>select { background: var(--bg-input) !important; color: var(--text) !important; border: 1px solid var(--border) !important; border-radius: 8px !important; } /* Dropdown menu popup */ .gradio-container [class*="dropdown"] [class*="menu"], .gradio-container [class*="options"], .gradio-container [class*="popup"] { background: var(--bg-card) !important; border: 1px solid var(--border) !important; color: var(--text) !important; } /* --- Starfield Background (CSS-only, no canvas) --- */ .dl-starfield { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; z-index: 0; pointer-events: none; background: radial-gradient(1px 1px at 10% 20%, rgba(184,169,255,0.8), transparent), radial-gradient(1px 1px at 30% 60%, rgba(184,169,255,0.6), transparent), radial-gradient(1.5px 1.5px at 50% 10%, rgba(74,158,255,0.7), transparent), radial-gradient(1px 1px at 70% 40%, rgba(184,169,255,0.5), transparent), radial-gradient(1px 1px at 90% 80%, rgba(255,215,0,0.4), transparent), radial-gradient(1.5px 1.5px at 15% 75%, rgba(74,158,255,0.6), transparent), radial-gradient(1px 1px at 45% 35%, rgba(184,169,255,0.7), transparent), radial-gradient(1px 1px at 65% 15%, rgba(184,169,255,0.5), transparent), radial-gradient(1.5px 1.5px at 85% 55%, rgba(74,158,255,0.4), transparent), radial-gradient(1px 1px at 25% 90%, rgba(184,169,255,0.6), transparent), radial-gradient(1px 1px at 55% 70%, rgba(255,215,0,0.3), transparent), radial-gradient(1.5px 1.5px at 80% 25%, rgba(184,169,255,0.5), transparent); animation: starfield-twinkle 4s ease-in-out infinite alternate; } @keyframes starfield-twinkle { 0% { opacity: 0.6; } 50% { opacity: 1; } 100% { opacity: 0.7; } } /* --- Hero Section --- */ .hero-section { position: relative; text-align: center; padding: 50px 20px 30px; z-index: 1; } .hero-title { font-family: var(--font-display); font-size: 3.2rem; font-weight: 700; background: linear-gradient(135deg, var(--accent-purple), var(--accent-blue), var(--accent-gold)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; letter-spacing: 2px; margin-bottom: 10px; animation: fade-in-up 1s ease-out forwards; } .hero-subtitle { font-size: 1rem; color: var(--text-dim); letter-spacing: 1px; animation: fade-in-up 0.8s ease-out 0.3s forwards; opacity: 0; } .hero-tagline { display: inline-flex; gap: 20px; margin-top: 16px; animation: fade-in-up 0.6s ease-out 0.6s forwards; opacity: 0; } @keyframes fade-in-up { to { opacity: 1; transform: translateY(0); } } .hero-tag { display: inline-flex; align-items: center; gap: 5px; padding: 4px 14px; border: 1px solid var(--border); border-radius: 20px; font-size: 0.75rem; color: var(--text-dim); background: rgba(255,255,255,0.03); white-space: nowrap; } .hero-tag svg { display: inline-block; vertical-align: middle; flex-shrink: 0; } /* --- Glowing Divider (reset
defaults) --- */ .glow-divider, hr.glow-divider { border: none !important; height: 1px !important; background: linear-gradient(90deg, transparent, var(--accent-purple), var(--accent-blue), var(--accent-purple), transparent) !important; margin: 0 auto 20px !important; width: 50% !important; opacity: 0 !important; animation: glow-breathe 3s ease-in-out 1.5s infinite !important; box-shadow: 0 0 8px var(--glow-purple); } @keyframes glow-breathe { 0% { opacity: 0.3; box-shadow: 0 0 4px var(--glow-purple); } 50% { opacity: 1; box-shadow: 0 0 16px var(--glow-purple), 0 0 30px rgba(108,92,231,0.15); } 100% { opacity: 0.3; box-shadow: 0 0 4px var(--glow-purple); } } /* --- Tab Bar --- */ .tab-nav, [role="tablist"] { display: flex !important; justify-content: center !important; gap: 4px !important; background: rgba(15, 15, 26, 0.95) !important; backdrop-filter: blur(10px); border-bottom: 1px solid var(--border) !important; padding: 8px 16px !important; } .tab-nav button, [role="tab"] { color: var(--text-dim) !important; background: transparent !important; border: none !important; border-bottom: 2px solid transparent !important; padding: 10px 20px !important; font-size: 0.85rem !important; font-family: var(--font-body) !important; transition: all 0.2s ease !important; cursor: pointer !important; opacity: 1 !important; border-radius: 8px 8px 0 0 !important; } .tab-nav button:hover, [role="tab"]:hover { color: var(--accent-purple) !important; background: rgba(184, 169, 255, 0.06) !important; } .tab-nav button.selected, [role="tab"][aria-selected="true"] { color: var(--accent-purple) !important; border-bottom-color: var(--accent-purple) !important; background: rgba(184, 169, 255, 0.08) !important; } /* --- Content Area --- */ .tab-content { position: relative; z-index: 1; padding: 24px; min-height: 60vh; } /* --- Input Card --- */ .dream-input-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: 16px; padding: 28px; position: relative; overflow: hidden; transition: border-color 0.3s; } .dream-input-card:focus-within { border-color: var(--accent-purple); box-shadow: 0 0 30px var(--glow-purple); } .dream-input-card::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 2px; background: linear-gradient(90deg, transparent, var(--accent-purple), var(--accent-blue), transparent); animation: shimmer 3s ease-in-out infinite; } @keyframes shimmer { 0% { left: -100%; } 100% { left: 100%; } } .dream-input-label { font-family: var(--font-display); font-size: 1.2rem; color: var(--accent-purple); margin-bottom: 12px; display: flex; align-items: center; gap: 8px; } /* --- Input / Textarea --- */ .gradio-container textarea, .gradio-container input[type="text"] { background: var(--bg-input) !important; border: 1px solid var(--border) !important; color: var(--text) !important; border-radius: 8px !important; font-family: var(--font-body) !important; font-size: 0.95rem !important; padding: 12px !important; } .gradio-container textarea:focus, .gradio-container input[type="text"]:focus { border-color: var(--accent-purple) !important; box-shadow: 0 0 12px var(--glow-purple) !important; outline: none !important; } .gradio-container textarea::placeholder, .gradio-container input::placeholder { color: var(--text-dim) !important; } /* Legacy overrides already handled above */ /* --- Submit Button --- */ .submit-btn { background: linear-gradient(135deg, #6c5ce7, #a855f7, #6c5ce7) !important; background-size: 200% 200% !important; animation: gradient-shift 3s ease infinite !important; border: none !important; color: white !important; font-family: var(--font-display) !important; font-size: 1.1rem !important; font-weight: 600 !important; letter-spacing: 1px !important; padding: 14px 36px !important; border-radius: 12px !important; cursor: pointer !important; position: relative !important; overflow: hidden !important; transition: all 0.3s ease !important; width: 100% !important; margin-top: 16px !important; } @keyframes gradient-shift { 0%, 100% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } } .submit-btn:hover { transform: translateY(-2px) !important; box-shadow: 0 8px 30px rgba(108, 92, 231, 0.5) !important; } .submit-btn:active { transform: translateY(0) !important; } .submit-btn::after { content: ''; position: absolute; top: 50%; left: 50%; width: 0; height: 0; background: rgba(255,255,255,0.2); border-radius: 50%; transform: translate(-50%, -50%); transition: width 0.6s, height 0.6s; } .submit-btn:active::after { width: 300px; height: 300px; } /* --- Loading Overlay --- */ .loading-overlay { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; background: rgba(8, 8, 18, 0.92); backdrop-filter: blur(8px); z-index: 9999; display: none; flex-direction: column; align-items: center; justify-content: center; opacity: 0; } .loading-overlay.active { display: flex; } .crystal-spinner { width: 60px; height: 60px; position: relative; margin-bottom: 24px; } .crystal-spinner .facet { position: absolute; width: 100%; height: 100%; border: 2px solid var(--accent-purple); border-radius: 12px; animation: crystal-spin 2s ease-in-out infinite; } .crystal-spinner .facet:nth-child(2) { animation-delay: -0.5s; border-color: var(--accent-blue); transform: rotate(45deg); } .crystal-spinner .facet:nth-child(3) { animation-delay: -1s; border-color: var(--accent-gold); transform: rotate(90deg); } @keyframes crystal-spin { 0%, 100% { transform: rotate(0deg) scale(1); opacity: 1; } 50% { transform: rotate(180deg) scale(0.8); opacity: 0.5; } } .loading-text { font-family: var(--font-display); font-size: 1.2rem; color: var(--accent-purple); letter-spacing: 3px; } .loading-dots { display: inline-block; } .loading-dots span { animation: dot-pulse 1.5s ease-in-out infinite; opacity: 0; } .loading-dots span:nth-child(2) { animation-delay: 0.3s; } .loading-dots span:nth-child(3) { animation-delay: 0.6s; } @keyframes dot-pulse { 0%, 100% { opacity: 0; } 50% { opacity: 1; } } /* --- Result Cards --- */ .result-section { opacity: 0; } .result-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: 16px; padding: 24px; margin-bottom: 16px; position: relative; overflow: hidden; } .result-card::before { content: ''; position: absolute; top: 0; left: 0; width: 4px; height: 100%; border-radius: 4px 0 0 4px; } .result-card.location-card::before { background: var(--accent-blue); } .result-card.npc-card::before { background: var(--accent-green); } .result-card.quest-card::before { background: var(--accent-gold); } .result-card .card-icon { font-size: 1.5rem; margin-bottom: 8px; display: inline-block; } .result-card .card-title { font-family: var(--font-display); font-size: 1.3rem; margin-bottom: 8px; } .result-card.location-card .card-title { color: var(--accent-blue); } .result-card.npc-card .card-title { color: var(--accent-green); } .result-card.quest-card .card-title { color: var(--accent-gold); } .result-card .card-body { color: var(--text); line-height: 1.7; font-size: 0.95rem; } .result-card .card-dialog { border-left: 3px solid var(--accent-green); background: rgba(80, 200, 120, 0.05); padding: 10px 16px; margin-top: 12px; border-radius: 0 8px 8px 0; color: #a0d0a0; font-style: italic; } /* --- Dream Summary Header --- */ .dream-summary { text-align: center; margin-bottom: 24px; } .dream-summary .summary-title { font-family: var(--font-display); font-size: 1.4rem; color: var(--accent-purple); margin-bottom: 8px; } .dream-summary .emotions { display: flex; justify-content: center; gap: 8px; flex-wrap: wrap; } .emotion-tag { display: inline-block; padding: 3px 12px; border: 1px solid var(--accent-purple); border-radius: 12px; font-size: 0.8rem; color: var(--accent-purple); background: rgba(184, 169, 255, 0.08); } /* --- World Stats Bar --- */ .world-stats { display: flex; justify-content: center; gap: 24px; padding: 12px; background: var(--bg-card); border-radius: 12px; margin-bottom: 16px; border: 1px solid var(--border); } .stat-item { display: flex; align-items: center; gap: 6px; font-size: 0.85rem; color: var(--text-dim); } .stat-value { font-weight: 700; color: var(--accent-purple); } /* --- History Cards --- */ .history-entry { background: var(--bg-card); border: 1px solid var(--border); border-radius: 12px; padding: 16px 20px; margin-bottom: 12px; border-left: 3px solid var(--accent-purple); transition: all 0.3s ease; } .history-entry:hover { border-color: var(--accent-purple); box-shadow: 0 0 20px var(--glow-purple); } /* --- Scrollbar --- */ ::-webkit-scrollbar { width: 6px; } ::-webkit-scrollbar-track { background: var(--bg-deep); } ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: var(--accent-purple); } /* --- Gradio Component Overrides --- */ .gradio-container .prose { color: var(--text) !important; } .contain { background: transparent !important; border: none !important; } /* Image upload area */ .gr-image { border: 2px dashed var(--border) !important; border-radius: 12px !important; background: var(--bg-input) !important; transition: border-color 0.3s !important; } .gr-image:hover { border-color: var(--accent-purple) !important; } /* --- Responsive --- */ @media (max-width: 768px) { .hero-title { font-size: 2rem; } .hero-subtitle { font-size: 0.9rem; } .tab-nav button { padding: 10px 14px !important; font-size: 0.8rem !important; } .result-card { padding: 16px; } } /* --- CSS Animations (no JS needed) --- */ @keyframes card-in { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } @keyframes slide-in { from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); } } /* --- Save Slot Cards --- */ .slot-card { flex: 1; min-width: 110px; padding: 12px; background: #16162a; border: 1px solid #2a2a4a; border-radius: 10px; text-align: center; cursor: pointer; transition: all 0.2s ease; } /* --- Slot Card Buttons --- */ .slot-card-btn, button.slot-card-btn { width: 100% !important; background: #14142a !important; border: 1px solid #2a2a4a !important; color: #ccc !important; border-radius: 10px !important; padding: 14px 20px !important; text-align: left !important; font-family: Georgia, serif !important; font-size: 0.95rem !important; margin-bottom: 6px !important; transition: all 0.2s ease !important; } .slot-card-btn:hover, button.slot-card-btn:hover { border-color: #b8a9ff !important; background: rgba(184, 169, 255, 0.06) !important; transform: translateY(-1px) !important; box-shadow: 0 4px 12px rgba(184, 169, 255, 0.1) !important; } .slot-card-btn.active, button.slot-card-btn.active { border: 2px solid #b8a9ff !important; background: linear-gradient(135deg, rgba(184,169,255,0.1), rgba(108,92,231,0.06)) !important; box-shadow: 0 0 12px rgba(184, 169, 255, 0.15) !important; } /* --- Slot Buttons as Cards Grid --- */ .slot-grid { display: grid !important; grid-template-columns: repeat(5, 1fr) !important; gap: 10px !important; margin-bottom: 20px !important; } .slot-grid > button, .slot-grid > div { width: 100% !important; min-width: 0 !important; } .slot-card:hover { border-color: var(--accent-purple); background: rgba(184, 169, 255, 0.06); transform: translateY(-2px); box-shadow: 0 4px 12px rgba(184, 169, 255, 0.1); } .slot-card.active { border: 2px solid var(--accent-purple); background: rgba(184, 169, 255, 0.08); box-shadow: 0 0 15px var(--glow-purple); } .slot-card .slot-label { font-weight: 600; font-size: 0.85rem; margin-bottom: 4px; } .slot-card .slot-info { font-size: 0.7rem; color: #555; } /* --- General Button Improvements --- */ button.primary, button.lg.primary { background: linear-gradient(135deg, #6c5ce7, #a855f7) !important; border: none !important; color: white !important; font-weight: 600 !important; border-radius: 10px !important; padding: 10px 24px !important; transition: all 0.2s ease !important; cursor: pointer !important; } button.primary:hover, button.lg.primary:hover { transform: translateY(-1px) !important; box-shadow: 0 4px 15px rgba(108, 92, 231, 0.4) !important; } button.secondary { background: rgba(42, 42, 74, 0.5) !important; border: 1px solid #3a3a5a !important; color: var(--text-dim) !important; border-radius: 8px !important; transition: all 0.2s ease !important; } button.secondary:hover { border-color: var(--accent-purple) !important; color: var(--accent-purple) !important; background: rgba(184, 169, 255, 0.06) !important; } /* --- Accordion Improvements --- */ .accordion-header, .label-wrap { background: rgba(22, 22, 42, 0.5) !important; border: 1px solid #2a2a4a !important; border-radius: 8px !important; } /* Dropdowns handled in reset section above */ /* --- Gradio Container Global Fix --- */ .gradio-container { max-width: 100% !important; } .contain, .panel { background: transparent !important; border: none !important; box-shadow: none !important; } /* --- Row Alignment Fix --- */ .row, .gr-row, [class*="row"] { display: flex !important; align-items: flex-end !important; gap: 8px !important; flex-wrap: nowrap !important; } .row > *, .gr-row > * { flex-shrink: 0; } /* Ensure textbox and button stay in same row */ .row .textbox, .row textarea { flex: 1; min-width: 0; } .row button { white-space: nowrap; flex-shrink: 0; }