omniscient-reader / style.css
Aswini-Kumar's picture
fix: stop start screen title from being cut off on HF Spaces
d8765f4
Raw
History Blame Contribute Delete
38 kB
/* ═══════════════════════════════════════════════════════════════════
ORV SCENARIO SIMULATOR — STYLE.CSS
Apocalyptic Seoul · Manhwa Horror · System Window Aesthetic
═══════════════════════════════════════════════════════════════════ */
@import url('https://fonts.googleapis.com/css2?family=Cinzel:wght@400;600;700;900&family=Cinzel+Decorative:wght@400;700;900&family=IM+Fell+English:ital@0;1&display=swap');
/* ── ORV Design Tokens ─────────────────────────────────────────────
Palette: Warm ember/rose accent instead of gold.
• Backgrounds: Cold purple-black (Seoul after dark)
• Accent: Dusty rose / ember — warm but not gold
• Crimson: Dokkaebi text, meta-exposure danger
• Sage: HP — thin line between living and dead
• Indigo: Probability stability, system fabric
• Ember: Coins, constellation warmth, borders
─────────────────────────────────────────────────────────────────── */
:root {
/* Backgrounds */
--bg-void: #050508;
--bg-stone: #0a090f;
--bg-panel: #0f0d14;
--bg-panel-alt: #13101a;
--bg-inset: #060508;
/* Text */
--text-parch: #d8cbb0;
--text-aged: #9a8e78;
--text-worn: #605848;
--text-faded: #3a3430;
/* Ember / Rose — main UI accent (replaces gold) */
--ember-dark: #2a1018;
--ember-mid: #6a3040;
--ember: #904858;
--ember-bright: #c06878;
/* Crimson — Dokkaebi / Danger / Meta */
--crimson-dark: #3a0810;
--crimson-mid: #7a1a22;
--crimson: #a82030;
--crimson-bright: #cc2838;
/* Warm Copper — coins, constellation donations */
--copper-dark: #1a1008;
--copper-mid: #6a4818;
--copper: #b07830;
--copper-bright: #d8a048;
/* Sage — HP / Life */
--sage-dark: #0e2010;
--sage: #468030;
--sage-bright: #68b040;
/* Indigo — Probability Stability */
--indigo-dark: #0e0c20;
--indigo: #3a3880;
--indigo-bright: #6060a8;
/* Silver — neutral, inactive */
--silver: #808898;
/* Aliases for backward compat with inline HTML */
--sys-cyan: var(--ember);
--sys-cyan-dim: rgba(144,72,88,0.2);
--sys-red: var(--crimson-bright);
--sys-gold: var(--copper-bright);
--accent-gold: var(--copper);
--accent-cyan: var(--ember);
--accent-red: var(--crimson-mid);
--text-main: var(--text-parch);
--text-primary: var(--text-parch);
--text-secondary: var(--text-aged);
--text-muted: var(--text-worn);
--text-narrative: #ccc0a0;
--text-system: var(--ember);
--bg-glass: rgba(10,9,15,0.90);
--bg-glass-heavy: rgba(5,4,8,0.96);
--font-title: 'Cinzel Decorative', serif;
--font-heading: 'Cinzel', serif;
--font-body: 'IM Fell English', Georgia, serif;
--font-header: 'Cinzel', serif;
--font-sys: 'Cinzel', serif;
--font-story: 'IM Fell English', serif;
--font-system: 'Cinzel', serif;
}
/* ═══════════════════════════════════════════════════════════════════
GRADIO INTERNAL WRAPPER OVERRIDES
Safe overrides — don't use display:contents (breaks flex layout)
Target: stop Gradio's .block/.wrap/.gap from adding unwanted sizing
═══════════════════════════════════════════════════════════════════ */
/* Collapse Gradio's outer .gap row inside game-area to 0 padding/margin */
.game-area > .gap {
display: flex !important;
flex-direction: column !important;
gap: 0 !important;
padding: 0 !important;
margin: 0 !important;
min-height: 0 !important;
flex: 1;
}
/* Each gr.HTML block inside game-area — no extra padding, auto height */
.game-area .block {
padding: 0 !important;
margin: 0 !important;
border: none !important;
background: transparent !important;
box-shadow: none !important;
min-height: 0 !important;
height: auto !important;
}
/* The .wrap inside each .block — no height restriction */
.game-area .block > .wrap,
.game-area .block > div {
padding: 0 !important;
margin: 0 !important;
min-height: 0 !important;
height: auto !important;
}
/* The actual HTML output div inside each component */
.game-area .gradio-html,
.game-area [data-testid="html"] {
min-height: 0 !important;
height: auto !important;
width: 100% !important;
}
/* Suggestion separator */
.suggestion-section-label {
font-family: var(--font-heading);
font-size: 8px;
color: var(--text-worn);
text-transform: uppercase;
letter-spacing: 2px;
padding: 8px 16px 4px;
border-top: 1px solid rgba(106,48,64,0.2);
}
*, *::before, *::after { box-sizing: border-box; }
body, html {
margin: 0 !important;
padding: 0 !important;
background: var(--bg-void) !important;
color: var(--text-parch) !important;
font-family: var(--font-body) !important;
overflow-x: hidden;
}
gradio-app, .gradio-container {
background: var(--bg-void) !important;
max-width: 100% !important;
padding: 0 !important;
margin: 0 !important;
min-height: 100vh !important;
}
/* START SCREEN — fills full viewport, scrollable if content is taller */
.start-screen {
position: fixed !important;
inset: 0 !important;
z-index: 500 !important;
overflow-y: auto !important;
overflow-x: hidden !important;
width: 100vw !important;
max-width: 100vw !important;
/* Center content, but align-items:flex-start ensures top is always reachable */
align-items: center !important;
justify-content: flex-start !important;
padding-top: max(32px, 5vh) !important;
padding-bottom: 100px !important;
box-sizing: border-box !important;
}
/* Don't clip the body/html — was hiding the top of the title */
html, body {
overflow: auto !important;
height: 100% !important;
max-width: 100vw !important;
}
/* Hide Gradio toast/status notifications */
.toast-wrap,
.toast-body,
.svelte-toast,
[data-testid="toast"],
.status-tracker,
.progress-text,
.eta-bar {
display: none !important;
}
/* Flatten start-screen-container wrappers */
.start-screen-container,
.start-screen-container > .block,
.start-screen-container > div {
padding: 0 !important;
margin: 0 !important;
border: none !important;
background: transparent !important;
box-shadow: none !important;
height: auto !important;
max-width: 100% !important;
overflow: visible !important;
}
/* The actual Gradio start button — fixed at bottom-center, above the start screen */
.start-btn-visible,
#gradio-start-btn {
position: fixed !important;
bottom: 48px !important;
left: 50% !important;
transform: translateX(-50%) !important;
z-index: 1001 !important;
width: auto !important;
background: transparent !important;
border: none !important;
padding: 0 !important;
margin: 0 !important;
box-shadow: none !important;
}
/* ✅ Button styled with Cinzel font matching the rest of the UI */
.start-btn-visible,
#gradio-start-btn {
--button-primary-text-font-family: 'Cinzel', serif !important;
--button-secondary-text-font-family: 'Cinzel', serif !important;
--button-large-text-font-family: 'Cinzel', serif !important;
--font: 'Cinzel', serif !important;
}
.start-btn-visible button,
#gradio-start-btn button {
padding: 18px 64px !important;
background: linear-gradient(160deg, #1a0c12 0%, #2a101a 50%, #150a10 100%) !important;
color: #c06878 !important;
border: 1px solid #904858 !important;
cursor: pointer !important;
box-shadow: 0 0 30px rgba(144,72,88,0.3), inset 0 1px 0 rgba(192,104,120,0.15) !important;
transition: letter-spacing 0.3s ease, box-shadow 0.3s ease, color 0.3s ease !important;
border-radius: 0 !important;
line-height: 1 !important;
}
/* Target internal spans of the Gradio button to ensure font and spacing apply */
.start-btn-visible button,
.start-btn-visible button *,
#gradio-start-btn button,
#gradio-start-btn button * {
font-family: 'Cinzel', serif !important;
font-size: 14px !important;
font-weight: 700 !important;
letter-spacing: 5px !important;
text-transform: uppercase !important;
white-space: nowrap !important;
}
.start-btn-visible button:hover,
#gradio-start-btn button:hover {
box-shadow: 0 0 50px rgba(144,72,88,0.55), 0 0 100px rgba(122,26,34,0.2) !important;
color: #e8c8d0 !important;
letter-spacing: 7px !important;
border-color: #c06878 !important;
background: linear-gradient(160deg, #2a101a 0%, #3a1428 50%, #200e16 100%) !important;
}
/* Collapse the gr.HTML wrapper so it takes no space */
#cinematic-overlay-wrapper,
#cinematic-overlay-wrapper > .block,
#cinematic-overlay-wrapper > div {
padding: 0 !important;
margin: 0 !important;
border: none !important;
background: transparent !important;
min-height: 0 !important;
height: 0 !important;
overflow: visible !important;
}
/* ── CINEMATIC INTRO OVERLAY ── */
#orv-cinematic-overlay {
position: fixed;
inset: 0;
z-index: 9999;
background: #030305;
display: none;
flex-direction: column;
}
#orv-cinematic-overlay.active {
display: flex;
}
/* Video fills entire screen */
#orv-intro-video {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
z-index: 1;
}
/* Dark vignette over video for readability */
#orv-cinematic-vignette {
position: absolute;
inset: 0;
z-index: 2;
background:
radial-gradient(ellipse at 50% 50%, transparent 50%, rgba(3,3,5,0.6) 100%),
linear-gradient(180deg, rgba(3,3,5,0.15) 0%, transparent 30%, transparent 70%, rgba(3,3,5,0.5) 100%);
pointer-events: none;
}
/* Skip button — top right, hidden initially, fades in */
#orv-skip-btn {
position: absolute;
top: 28px;
right: 32px;
z-index: 10;
font-family: 'Cinzel', serif;
font-size: 11px;
font-weight: 700;
letter-spacing: 4px;
text-transform: uppercase;
color: rgba(200,180,180,0.5);
background: rgba(10,8,14,0.5);
border: 1px solid rgba(144,72,88,0.25);
padding: 10px 24px;
cursor: pointer;
opacity: 0;
transition: opacity 0.6s ease, color 0.3s ease, border-color 0.3s ease;
pointer-events: none;
backdrop-filter: blur(4px);
}
#orv-skip-btn.visible {
opacity: 1;
pointer-events: auto;
}
#orv-skip-btn:hover {
color: #e8c8d0;
border-color: #c06878;
background: rgba(20,12,18,0.7);
}
/* Progress bar — thin line at very bottom */
#orv-cinematic-progress {
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 3px;
z-index: 10;
background: rgba(255,255,255,0.05);
}
#orv-cinematic-progress-bar {
height: 100%;
width: 0%;
background: linear-gradient(90deg, #904858, #c06878);
transition: width 0.3s linear;
box-shadow: 0 0 8px rgba(144,72,88,0.5);
}
/* Loading text — bottom center */
#orv-cinematic-text {
position: absolute;
bottom: 28px;
left: 50%;
transform: translateX(-50%);
z-index: 10;
font-family: 'Cinzel', serif;
font-size: 11px;
font-weight: 600;
letter-spacing: 6px;
text-transform: uppercase;
color: #c06878;
animation: orv-cinematic-pulse 2.5s ease-in-out infinite;
text-shadow: 0 0 20px rgba(144,72,88,0.4);
white-space: nowrap;
}
@keyframes orv-cinematic-pulse {
0%, 100% { opacity: 0.35; }
50% { opacity: 1; }
}
footer, .built-with { display: none !important; }
/* When Gradio hides start_btn (visible=False), ensure fixed button disappears */
.start-btn-visible.hidden,
#gradio-start-btn[style*="display: none"],
#gradio-start-btn[style*="display:none"] {
display: none !important;
}
.gradio-container .gr-box,
.gradio-container .gr-panel,
.gradio-container .gr-form,
.gradio-container .gr-block {
background: transparent !important;
border: none !important;
box-shadow: none !important;
}
.contain,
.gradio-container .gr-padded,
.gradio-container .gr-group,
.gradio-container .form {
padding: 0 !important;
gap: 0 !important;
background: transparent !important;
border: none !important;
}
/* Scrollbars */
::-webkit-scrollbar { width: 4px; height: 4px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--ember-mid); }
::-webkit-scrollbar-thumb:hover { background: var(--ember); }
* { scrollbar-width: thin; scrollbar-color: var(--ember-mid) transparent; }
/* ═══════════════════════════════════════════════════════════════════
HEADER
═══════════════════════════════════════════════════════════════════ */
.game-header {
height: 46px !important;
background: #09080e !important;
border-bottom: 1px solid var(--ember-mid) !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
position: relative;
z-index: 10;
box-shadow: 0 2px 16px rgba(0,0,0,0.7);
flex-shrink: 0;
}
.game-header::after {
content: '';
position: absolute;
bottom: -1px; left: 25%; right: 25%;
height: 1px;
background: linear-gradient(90deg, transparent, var(--ember), transparent);
opacity: 0.4;
}
.scenario-header-inner {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
padding: 0 18px;
}
.scenario-header-text {
font-family: var(--font-title) !important;
font-size: 12px !important;
font-weight: 700 !important;
color: var(--ember-bright) !important;
letter-spacing: 3px;
text-shadow: 0 0 16px rgba(192,104,120,0.4);
text-transform: uppercase;
}
.scenario-header-left,
.scenario-header-right {
font-family: var(--font-heading);
font-size: 9px;
color: var(--text-worn);
letter-spacing: 1.5px;
text-transform: uppercase;
}
/* ═══════════════════════════════════════════════════════════════════
MAIN LAYOUT
═══════════════════════════════════════════════════════════════════ */
.game-container {
min-height: 100vh;
background: var(--bg-void) !important;
}
.game-main {
padding: 8px !important;
gap: 8px !important;
/* Let game-main fill the viewport between header and input bar */
flex: 1;
}
/* ── SIDE PANELS ── */
.player-panel, .constellation-panel {
background: var(--bg-panel) !important;
border: 1px solid rgba(106,48,64,0.35) !important;
border-top: 1px solid var(--ember-mid) !important;
padding: 12px !important;
display: flex !important;
flex-direction: column !important;
gap: 8px !important;
z-index: 5;
position: relative;
max-height: calc(100vh - 110px);
overflow-y: auto !important;
}
/* Corner ornaments */
.player-panel::before, .constellation-panel::before {
content: '';
position: absolute;
top: 0; left: 0;
width: 14px; height: 14px;
border-top: 2px solid var(--ember);
border-left: 2px solid var(--ember);
pointer-events: none; z-index: 2;
}
.player-panel::after, .constellation-panel::after {
content: '';
position: absolute;
bottom: 0; right: 0;
width: 14px; height: 14px;
border-bottom: 2px solid var(--ember);
border-right: 2px solid var(--ember);
pointer-events: none; z-index: 2;
}
/* ── CENTER AREA — CRITICAL: flex column with overflow-y auto ── */
.game-area {
display: flex !important;
flex-direction: column !important;
background: var(--bg-inset) !important;
border: 1px solid rgba(106,48,64,0.3) !important;
border-top: 1px solid var(--ember-mid) !important;
position: relative;
max-height: calc(100vh - 110px);
overflow-y: auto !important; /* ← SCROLLABLE so suggestions are reachable */
overflow-x: hidden;
}
.game-area::before {
content: '';
position: absolute;
top: 0; left: 0;
width: 14px; height: 14px;
border-top: 2px solid var(--ember);
border-left: 2px solid var(--ember);
pointer-events: none; z-index: 2;
}
.game-area::after {
content: '';
position: absolute;
bottom: 0; right: 0;
width: 14px; height: 14px;
border-bottom: 2px solid var(--ember);
border-right: 2px solid var(--ember);
pointer-events: none; z-index: 2;
}
/* ═══════════════════════════════════════════════════════════════════
SCENE IMAGE
═══════════════════════════════════════════════════════════════════ */
.scene-img-container {
width: 100%;
max-height: 180px;
overflow: hidden;
flex-shrink: 0;
position: relative;
}
.scene-img-container img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
filter: brightness(0.5) contrast(1.1) saturate(0.65);
}
.scene-img-container::after {
content: '';
position: absolute;
bottom: 0; left: 0; right: 0;
height: 60px;
background: linear-gradient(to bottom, transparent, var(--bg-inset));
pointer-events: none;
}
/* ═══════════════════════════════════════════════════════════════════
PORTRAIT
═══════════════════════════════════════════════════════════════════ */
.player-portrait {
width: 100%;
aspect-ratio: 3/4;
border: 1px solid rgba(106,48,64,0.45);
position: relative;
overflow: hidden;
}
.player-portrait::before {
content: '';
position: absolute; top: 0; left: 0;
width: 10px; height: 10px;
border-top: 2px solid var(--ember); border-left: 2px solid var(--ember);
z-index: 2;
}
.player-portrait::after {
content: '';
position: absolute; bottom: 0; right: 0;
width: 10px; height: 10px;
border-bottom: 2px solid var(--ember); border-right: 2px solid var(--ember);
z-index: 2;
}
.player-portrait img {
width: 100%; height: 100%;
object-fit: cover;
display: block;
filter: sepia(0.12) contrast(1.15) brightness(0.8) saturate(0.85);
}
/* ═══════════════════════════════════════════════════════════════════
STAT BARS
═══════════════════════════════════════════════════════════════════ */
.stat-bar { margin-bottom: 7px; }
.stat-bar-label {
display: flex; justify-content: space-between;
font-family: var(--font-heading); font-size: 8px;
color: var(--text-worn); text-transform: uppercase;
margin-bottom: 3px; letter-spacing: 2px;
}
.stat-bar-label span:last-child { color: var(--text-aged); }
.stat-bar-track {
width: 100%; height: 5px;
background: rgba(8,6,12,0.9);
border: 1px solid rgba(50,40,50,0.4);
overflow: hidden;
}
.stat-bar-fill {
height: 100%;
transition: width 0.7s cubic-bezier(0.4, 0, 0.2, 1);
}
/* HP — sage green */
.stat-bar-hp .stat-bar-fill {
background: linear-gradient(90deg, var(--sage-dark), var(--sage-bright));
}
/* Meta Exposure — blood crimson */
.stat-bar-meta .stat-bar-fill {
background: linear-gradient(90deg, var(--crimson-dark), var(--crimson-bright));
}
/* Probability Stability — deep indigo */
.stat-bar-stability .stat-bar-fill {
background: linear-gradient(90deg, var(--indigo-dark), var(--indigo-bright));
}
/* ═══════════════════════════════════════════════════════════════════
NARRATIVE
═══════════════════════════════════════════════════════════════════ */
.narrative-container {
flex: 1 1 auto;
overflow-y: auto;
min-height: 80px;
}
.narrative-text {
font-family: var(--font-body) !important;
font-size: 14px !important;
line-height: 1.95 !important;
color: var(--text-narrative) !important;
padding: 16px 20px !important;
font-style: italic;
}
/* Dokkaebi — crimson */
.dokkaebi-text {
font-family: var(--font-heading) !important;
color: var(--crimson) !important;
font-size: 11px !important;
letter-spacing: 0.5px;
border-left: 2px solid var(--crimson-mid) !important;
padding: 8px 14px !important;
margin: 6px 16px !important;
background: rgba(58,8,16,0.25) !important;
}
/* ═══════════════════════════════════════════════════════════════════
SYSTEM WINDOW
═══════════════════════════════════════════════════════════════════ */
.system-window {
background: var(--bg-panel);
border: 1px solid rgba(106,48,64,0.3);
padding: 14px;
position: relative;
}
.system-window::before {
content: '';
position: absolute; top: 0; left: 0;
width: 10px; height: 10px;
border-top: 2px solid var(--ember); border-left: 2px solid var(--ember);
pointer-events: none;
}
.system-window::after {
content: '';
position: absolute; bottom: 0; right: 0;
width: 10px; height: 10px;
border-bottom: 2px solid var(--ember); border-right: 2px solid var(--ember);
pointer-events: none;
}
/* ═══════════════════════════════════════════════════════════════════
SUGGESTION BUTTONS — ember/rose accent, clearly visible
═══════════════════════════════════════════════════════════════════ */
.suggestion-btn {
display: flex !important;
align-items: flex-start !important;
gap: 10px !important;
width: 100% !important;
text-align: left !important;
margin: 0 0 5px 0 !important;
padding: 10px 14px !important;
background: rgba(18,12,20,0.7) !important;
border: 1px solid var(--ember-mid) !important;
border-left: 2px solid var(--ember) !important;
color: #d0b0a0 !important;
font-family: var(--font-body) !important;
font-size: 13px !important;
font-style: italic !important;
cursor: pointer !important;
transition: all 0.18s ease !important;
line-height: 1.5 !important;
flex-shrink: 0; /* never collapse */
}
.suggestion-btn:hover {
border-color: var(--ember-bright) !important;
border-left-color: var(--ember-bright) !important;
color: #e0c8b8 !important;
background: rgba(40,18,28,0.8) !important;
box-shadow: 0 0 12px rgba(192,104,120,0.15) !important;
}
.suggestion-btn:active {
transform: scale(0.995) !important;
}
/* ═══════════════════════════════════════════════════════════════════
STAR STREAM / CONSTELLATION PANEL
═══════════════════════════════════════════════════════════════════ */
.constellation-chat {
display: flex; flex-direction: column; gap: 6px;
}
.chat-message {
background: rgba(5,4,8,0.5);
border: 1px solid rgba(50,40,50,0.3);
border-left: 2px solid var(--ember-mid);
padding: 6px 10px;
font-family: var(--font-heading);
font-size: 10px;
letter-spacing: 0.3px;
transition: border-left-color 0.3s;
}
.chat-message[data-mood="positive"] { border-left-color: var(--sage); }
.chat-message[data-mood="negative"] { border-left-color: var(--crimson-mid); }
.chat-message .constellation-name {
color: var(--ember); font-weight: 700; display: block;
margin-bottom: 2px; font-size: 8px; letter-spacing: 2px; text-transform: uppercase;
}
.chat-message .constellation-reaction {
color: var(--text-aged); font-size: 10px; line-height: 1.4;
}
.chat-donation {
color: var(--copper-bright); font-weight: 700; margin-top: 2px;
font-size: 10px;
text-shadow: 0 0 5px rgba(216,160,72,0.3);
}
/* ═══════════════════════════════════════════════════════════════════
INPUT BAR
═══════════════════════════════════════════════════════════════════ */
.input-bar {
padding: 8px 12px !important;
background: #09080e !important;
border-top: 1px solid var(--ember-mid) !important;
margin: 0 !important;
position: relative;
z-index: 5;
flex-shrink: 0;
}
.game-input { flex: 1 !important; }
.game-input textarea,
.game-input input[type="text"] {
background: rgba(5,4,8,0.9) !important;
border: 1px solid rgba(106,48,64,0.4) !important;
color: var(--text-parch) !important;
font-family: var(--font-body) !important;
font-size: 13px !important;
font-style: italic !important;
padding: 10px 14px !important;
height: 42px !important;
min-height: 42px !important;
transition: border-color 0.2s;
caret-color: var(--ember-bright);
resize: none !important;
}
.game-input textarea:focus,
.game-input input[type="text"]:focus {
border-color: var(--ember) !important;
outline: none !important;
box-shadow: 0 0 8px rgba(144,72,88,0.2) !important;
}
.game-input textarea::placeholder { color: var(--text-worn) !important; font-style: italic; }
/* ACT button — ember accent */
.act-button {
background: rgba(42,16,24,0.7) !important;
border: 1px solid var(--ember) !important;
color: var(--ember-bright) !important;
font-family: var(--font-heading) !important;
font-size: 10px !important;
font-weight: 700 !important;
text-transform: uppercase !important;
letter-spacing: 3px !important;
height: 42px !important;
padding: 0 20px !important;
cursor: pointer !important;
transition: all 0.2s ease !important;
white-space: nowrap !important;
}
.act-button:hover {
background: rgba(60,24,35,0.9) !important;
box-shadow: 0 0 18px rgba(192,104,120,0.25) !important;
letter-spacing: 4px !important;
color: #e0a0b0 !important;
}
/* Stance radio */
.input-bar label,
.input-bar .gr-radio-group label {
font-family: var(--font-heading) !important;
color: var(--text-worn) !important;
border: 1px solid rgba(60,40,50,0.5) !important;
padding: 3px 8px !important;
cursor: pointer !important;
font-size: 8px !important;
text-transform: uppercase;
letter-spacing: 1.5px;
background: transparent !important;
transition: all 0.15s;
}
.input-bar .gr-radio-group input:checked + label,
.input-bar .gr-radio-group label:hover {
border-color: var(--ember) !important;
color: var(--ember-bright) !important;
background: rgba(42,16,24,0.35) !important;
}
/* ═══════════════════════════════════════════════════════════════════
BADGES / TITLES / MISC
═══════════════════════════════════════════════════════════════════ */
.title-badge {
display: inline-block;
background: rgba(144,72,88,0.08);
border: 1px solid rgba(106,48,64,0.5);
color: var(--ember);
font-family: var(--font-heading);
font-size: 8px; padding: 2px 6px; margin: 2px;
letter-spacing: 1px; text-transform: uppercase;
}
.skill-name {
font-family: var(--font-heading);
font-size: 10px; color: var(--text-aged); letter-spacing: 0.5px;
margin-bottom: 3px;
}
.bracket-text { font-family: var(--font-heading); color: var(--ember); opacity: 0.8; font-size: 11px; letter-spacing: 1px; }
.gold-divider { width: 100%; height: 1px; background: linear-gradient(90deg, transparent, var(--ember-mid), transparent); margin: 5px 0; }
.text-secondary { color: var(--text-aged) !important; }
.text-primary { color: var(--text-parch) !important; }
.text-muted { color: var(--text-worn) !important; }
/* ═══════════════════════════════════════════════════════════════════
PHASE EFFECTS
═══════════════════════════════════════════════════════════════════ */
body.phase-combat .game-area { box-shadow: 0 0 28px rgba(122,26,34,0.12) inset; }
body.phase-combat .scenario-header-text { color: var(--crimson) !important; text-shadow: 0 0 12px rgba(168,32,48,0.5) !important; }
body.phase-combat .player-panel,
body.phase-combat .constellation-panel,
body.phase-combat .game-area { border-top-color: var(--crimson-mid) !important; }
body.phase-combat .shop-accordion { pointer-events: none; opacity: 0.3; filter: grayscale(80%); }
/* ═══════════════════════════════════════════════════════════════════
META DANGER
═══════════════════════════════════════════════════════════════════ */
@keyframes pulseBlood {
0%,100% { box-shadow: none; }
50% { box-shadow: 0 0 18px rgba(168,32,48,0.18) inset; }
}
body.meta-warning .game-area { animation: pulseBlood 3s infinite; }
body.meta-critical .game-area { animation: pulseBlood 1.5s infinite; }
.meter-danger { animation: pulseBlood 1s infinite !important; }
/* ═══════════════════════════════════════════════════════════════════
OVERLAYS
═══════════════════════════════════════════════════════════════════ */
.fullscreen-overlay {
position: fixed; inset: 0; z-index: 9999;
display: flex; flex-direction: column;
align-items: center; justify-content: center;
background: rgba(5,4,8,0.94);
}
.scenario-announcement {
text-align: center;
max-width: 600px; padding: 36px;
background: var(--bg-panel);
border: 1px solid var(--ember-mid);
position: relative;
}
.scenario-announcement::before {
content: ''; position: absolute; top: 0; left: 0;
width: 18px; height: 18px;
border-top: 2px solid var(--ember); border-left: 2px solid var(--ember);
}
.scenario-announcement::after {
content: ''; position: absolute; bottom: 0; right: 0;
width: 18px; height: 18px;
border-bottom: 2px solid var(--ember); border-right: 2px solid var(--ember);
}
/* ═══════════════════════════════════════════════════════════════════
JS EFFECT ELEMENTS
═══════════════════════════════════════════════════════════════════ */
.coin-particle {
position: fixed; width: 5px; height: 5px;
background: var(--copper-bright); border-radius: 50%;
pointer-events: none; z-index: 10000;
box-shadow: 0 0 4px var(--copper);
animation: coinFall 1.5s ease-in forwards;
}
.damage-flash-overlay {
position: fixed; inset: 0;
background: rgba(122,26,34,0.25);
pointer-events: none; z-index: 9998;
animation: damageFlash 0.5s ease-out forwards;
}
@keyframes damageFlash { 0% { opacity: 1; } 100% { opacity: 0; } }
/* ═══════════════════════════════════════════════════════════════════
SHOP ACCORDION
═══════════════════════════════════════════════════════════════════ */
.shop-accordion {
background: transparent !important;
border: 1px solid rgba(106,48,64,0.3) !important;
border-radius: 0 !important;
}
.shop-accordion > .label-wrap,
.shop-accordion summary {
font-family: var(--font-heading) !important;
color: var(--ember) !important; font-size: 9px !important;
letter-spacing: 2px !important; text-transform: uppercase;
background: transparent !important;
border-color: rgba(106,48,64,0.3) !important; padding: 6px 10px !important;
}
/* GRADIO DROPDOWN */
.gradio-container select,
.gradio-container .dropdown {
background: rgba(5,4,8,0.9) !important;
border: 1px solid rgba(106,48,64,0.35) !important;
color: var(--text-parch) !important;
font-family: var(--font-heading) !important;
font-size: 11px !important;
}
/* Typewriter cursor */
.typewriter-cursor {
display: inline-block;
color: var(--ember);
animation: blink 0.8s step-end infinite;
}
@keyframes blink { 0%,100% { opacity: 1; } 50% { opacity: 0; } }
/* ═══════════════════════════════════════════════════════════════════
RESPONSIVE BREAKPOINTS
═══════════════════════════════════════════════════════════════════ */
@media (max-width: 1100px) {
.game-main { flex-wrap: wrap !important; }
.constellation-panel {
max-height: 200px !important;
min-width: unset !important;
width: 100% !important;
flex: 1 1 100% !important;
order: 3;
}
.player-panel { flex: 0 0 180px !important; }
.game-area { flex: 1 1 260px !important; }
}
@media (max-width: 700px) {
.game-main {
flex-direction: column !important;
padding: 4px !important;
gap: 4px !important;
}
.player-panel {
flex: none !important;
max-height: none !important;
width: 100% !important;
flex-direction: row !important;
flex-wrap: wrap !important;
}
.player-portrait {
width: 90px !important;
aspect-ratio: 3/4 !important;
flex-shrink: 0;
}
.game-area {
max-height: none !important;
width: 100% !important;
}
.scene-img-container { max-height: 130px !important; }
.constellation-panel {
max-height: 160px !important;
width: 100% !important;
}
.scenario-header-left,
.scenario-header-right { display: none !important; }
.scenario-header-text { font-size: 10px !important; letter-spacing: 1.5px !important; }
.input-bar { flex-wrap: wrap !important; padding: 6px !important; }
.act-button { width: 100% !important; }
.narrative-text { font-size: 13px !important; padding: 12px 14px !important; }
}
@media (max-width: 420px) {
.scenario-header-text { font-size: 9px !important; letter-spacing: 1px !important; }
.game-header { height: 36px !important; }
.narrative-text { font-size: 12px !important; }
.suggestion-btn { font-size: 11px !important; padding: 8px 10px !important; }
}