whung99
feat: deploy Oppy with Google API integration
0d37119
@import url('https://fonts.googleapis.com/css2?family=Google+Sans:wght@400;500;700&family=Google+Sans+Text:wght@400;500&display=swap');
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background: #ffffff;
color: #1f1f1f;
font-family: 'Google Sans', 'Segoe UI', Roboto, sans-serif;
min-height: 100vh;
}
:root {
/* Gemini palette */
--gemini-blue: #4285f4;
--gemini-purple: #a142f4;
--gemini-pink: #f439a0;
--gemini-cyan: #24c1e0;
--gemini-red: #ea4335;
--gemini-yellow: #fbbc04;
--gemini-green: #34a853;
/* UI tokens — light theme */
--bg: #ffffff;
--card-bg: #f8f9fa;
--surface: #f1f3f4;
--border: #e0e0e0;
--text: #1f1f1f;
--text-dim: #5f6368;
--text-faint: #9aa0a6;
/* Legacy aliases */
--green: var(--gemini-green);
--red: var(--gemini-red);
--orange: var(--gemini-yellow);
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.5; }
}
@keyframes slideIn {
from { transform: translateX(-20px); opacity: 0; }
to { transform: translateX(0); opacity: 1; }
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
/* Orb animations */
@keyframes breathe {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.06); }
}
@keyframes listenPulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.08); }
}
@keyframes ripple {
0% { transform: scale(1); opacity: 0.5; }
100% { transform: scale(2.2); opacity: 0; }
}
@keyframes thinkSpin {
0% { filter: hue-rotate(0deg); transform: scale(1); }
50% { filter: hue-rotate(60deg); transform: scale(1.04); }
100% { filter: hue-rotate(0deg); transform: scale(1); }
}
@keyframes orbSpin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
@keyframes speakPulse {
0%, 100% { transform: scaleY(1) scaleX(1); }
30% { transform: scaleY(1.08) scaleX(0.97); }
70% { transform: scaleY(0.95) scaleX(1.04); }
}
@keyframes geminiGradient {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
/* Avatar animations */
@keyframes blink {
0% { transform: scaleY(0); }
50% { transform: scaleY(1); }
100% { transform: scaleY(0); }
}
@keyframes eyeSpin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
@keyframes mouthBar {
0% { height: 20%; }
100% { height: 90%; }
}
::-webkit-scrollbar {
width: 6px;
}
::-webkit-scrollbar-track {
background: #ffffff;
}
::-webkit-scrollbar-thumb {
background: #dadce0;
border-radius: 3px;
}