nemotron-speech-streaming / gemini_live.css
gnumanth's picture
Fix: Fullscreen Layout & Audio Loop Heartbeat
488f8b8
:root {
--bg-color: #0b0f14;
--text-primary: #ffffff;
--btn-hold: #2d3135;
--btn-end: #ea4335;
}
/* RESET EVERYTHING */
body,
html,
.gradio-container {
background-color: var(--bg-color) !important;
margin: 0 !important;
padding: 0 !important;
width: 100vw !important;
height: 100vh !important;
overflow: hidden !important;
}
/* Hide all Gradio native elements (footer, noise, logos) */
footer,
.footer,
.svelte-1t38q2d,
.icon-button,
.wrap.svelte-1t38q2d {
display: none !important;
}
/* Force our container to be a fixed overlay */
.gemini-live-container {
position: fixed !important;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: var(--bg-color);
z-index: 9999;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
}
/* Clean up internal Gradio wrappers */
.gemini-live-container>div {
background: transparent !important;
border: none !important;
box-shadow: none !important;
width: 100%;
}
/* --- HEADER --- */
.header-bar {
position: absolute;
top: 40px;
left: 0;
width: 100%;
display: flex;
justify-content: center;
z-index: 50;
pointer-events: none;
}
.live-indicator {
background: rgba(45, 49, 53, 0.5);
padding: 8px 16px;
border-radius: 20px;
display: flex;
align-items: center;
gap: 8px;
color: #fff;
font-size: 14px;
font-weight: 500;
backdrop-filter: blur(10px);
}
.live-icon {
width: 16px;
height: 16px;
fill: #fff;
}
/* --- TRANSCRIPT --- */
.transcript-area {
position: absolute;
top: 40%;
left: 50%;
transform: translate(-50%, -50%);
width: 90%;
max-width: 600px;
text-align: center;
z-index: 40;
pointer-events: none;
}
.live-transcript {
font-size: 28px;
color: #fff;
line-height: 1.4;
font-family: 'Google Sans', sans-serif;
text-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);
}
.transcript-history {
font-size: 16px;
color: rgba(255, 255, 255, 0.5);
margin-bottom: 20px;
}
/* --- BOTTOM VISUALIZER --- */
.visualizer-area {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 350px;
z-index: 10;
pointer-events: none;
overflow: hidden;
background: linear-gradient(to top, #1e252f 0%, transparent 100%);
}
.wave-glow {
position: absolute;
bottom: -80px;
left: 50%;
transform: translateX(-50%);
width: 150%;
height: 300px;
background: radial-gradient(50% 50% at 50% 50%, rgba(66, 133, 244, 0.5) 0%, rgba(0, 0, 0, 0) 100%);
filter: blur(40px);
animation: pulse-wave 4s ease-in-out infinite alternate;
}
@keyframes pulse-wave {
0% {
opacity: 0.5;
transform: translateX(-50%) scale(1);
}
100% {
opacity: 0.8;
transform: translateX(-50%) scale(1.1);
}
}
/* --- CONTROLS --- */
.controls-bar {
position: absolute;
bottom: 50px;
left: 0;
width: 100%;
display: flex;
justify-content: center;
gap: 60px;
z-index: 60;
}
.control-btn {
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
cursor: pointer;
position: relative;
width: 80px;
}
.btn-circle {
width: 72px;
height: 72px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
transition: transform 0.1s;
}
.btn-circle:active {
transform: scale(0.95);
}
.btn-hold .btn-circle {
background-color: var(--btn-hold);
}
.btn-end .btn-circle {
background-color: var(--btn-end);
}
.btn-label {
font-size: 14px;
color: rgba(255, 255, 255, 0.7);
}
.icon-hold {
width: 24px;
height: 24px;
background: #fff;
mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24px' viewBox='0 -960 960 960' width='24px'%3E%3Cpath d='M560-200v-560h160v560H560Zm-320 0v-560h160v560H240Z'/%3E%3C/svg%3E") no-repeat center;
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24px' viewBox='0 -960 960 960' width='24px'%3E%3Cpath d='M560-200v-560h160v560H560Zm-320 0v-560h160v560H240Z'/%3E%3C/svg%3E") no-repeat center;
}
.icon-end {
width: 24px;
height: 24px;
background: #fff;
mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24px' viewBox='0 -960 960 960' width='24px'%3E%3Cpath d='m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z'/%3E%3C/svg%3E") no-repeat center;
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24px' viewBox='0 -960 960 960' width='24px'%3E%3Cpath d='m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z'/%3E%3C/svg%3E") no-repeat center;
}
/* Audio Overlay on Hold Button */
.audio-interface {
position: absolute !important;
top: 0;
left: 0;
width: 100% !important;
height: 100% !important;
opacity: 0 !important;
cursor: pointer;
z-index: 100;
}