chatverse-retro / style.css
C50BARZ's picture
Build a retro chat app
69c6940 verified
/* Retro Terminal Theme */
:root {
--primary: #00ff00;
--primary-dark: #00cc00;
--secondary: #0a0a0a;
--accent: #00ff88;
--text-primary: #00ff00;
--text-secondary: #a0a0a0;
--text-muted: #505050;
--bg-dark: #000000;
--bg-darker: #050505;
--bg-light: #1a1a1a;
--border-color: #00ff00;
}
[data-theme="light"] {
--primary: #00cc00;
--primary-dark: #009900;
--secondary: #f0f0f0;
--accent: #00cc66;
--text-primary: #00cc00;
--text-secondary: #404040;
--text-muted: #a0a0a0;
--bg-dark: #ffffff;
--bg-darker: #f5f5f5;
--bg-light: #e0e0e0;
--border-color: #00cc00;
}
/* CRT Effect */
.retro-bg {
background:
radial-gradient(ellipse at center, var(--bg-darker) 0%, var(--bg-dark) 100%),
repeating-linear-gradient(
0deg,
transparent,
transparent 2px,
rgba(0, 255, 0, 0.03) 2px,
rgba(0, 255, 0, 0.03) 4px
);
background-blend-mode: multiply;
position: relative;
color: var(--text-primary);
font-family: 'Courier New', monospace;
}
.crt-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background:
radial-gradient(ellipse at center, transparent 0%, rgba(0, 0, 0, 0.3) 100%),
repeating-linear-gradient(
0deg,
rgba(0, 255, 0, 0.05) 0px,
transparent 1px,
transparent 2px,
rgba(0, 255, 0, 0.05) 3px
);
pointer-events: none;
z-index: 1000;
mix-blend-mode: screen;
}
.scanlines {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: repeating-linear-gradient(
0deg,
transparent,
transparent 1px,
rgba(0, 255, 0, 0.03) 1px,
rgba(0, 255, 0, 0.03) 2px
);
pointer-events: none;
z-index: 1001;
animation: scanlines 8s linear infinite;
}
@keyframes scanlines {
0% { transform: translateY(0); }
100% { transform: translateY(10px); }
}
/* Glitch Effect */
.glitch {
position: relative;
color: var(--text-primary);
font-size: 1.5rem;
font-weight: bold;
text-transform: uppercase;
}
.glitch::before,
.glitch::after {
content: attr(data-text);
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.glitch::before {
animation: glitch-1 0.5s infinite;
color: #ff00ff;
z-index: -1;
}
.glitch::after {
animation: glitch-2 0.5s infinite;
color: #00ffff;
z-index: -2;
}
@keyframes glitch-1 {
0%, 100% { transform: translate(0); }
20% { transform: translate(-2px, 2px); }
40% { transform: translate(-2px, -2px); }
60% { transform: translate(2px, 2px); }
80% { transform: translate(2px, -2px); }
}
@keyframes glitch-2 {
0%, 100% { transform: translate(0); }
20% { transform: translate(2px, 2px); }
40% { transform: translate(2px, -2px); }
60% { transform: translate(-2px, 2px); }
80% { transform: translate(-2px, -2px); }
}
/* Custom Scrollbar */
::-webkit-scrollbar {
width: 10px;
}
::-webkit-scrollbar-track {
background: var(--bg-darker);
border: 1px solid var(--border-color);
}
::-webkit-scrollbar-thumb {
background: var(--primary);
border: 1px solid var(--primary-dark);
}
::-webkit-scrollbar-thumb:hover {
background: var(--primary-dark);
}
/* Message Animations */
.message-group {
opacity: 0;
transform: translateY(20px);
animation: messageAppear 0.3s ease-out forwards;
}
@keyframes messageAppear {
to {
opacity: 1;
transform: translateY(0);
}
}
/* Button Press Effects */
.retro-button {
position: relative;
background: var(--primary);
color: var(--bg-dark);
border: none;
padding: 0.75rem 1.5rem;
font-family: 'Press Start 2P', cursive;
font-size: 0.75rem;
cursor: pointer;
transition: all 0.1s;
box-shadow: 0 4px 0 var(--primary-dark);
}
.retro-button:hover {
transform: translateY(-2px);
box-shadow: 0 6px 0 var(--primary-dark);
}
.retro-button:active {
transform: translateY(4px);
box-shadow: 0 0 0 var(--primary-dark);
}
/* Input Focus Effects */
.retro-input:focus {
animation: pulse 1.5s infinite;
}
@keyframes pulse {
0%, 100% { box-shadow: 0 0 15px var(--primary); }
50% { box-shadow: 0 0 25px var(--primary); }
}
/* Theme Transition */
* {
transition: background-color 0.3s, color 0.3s, border-color 0.3s;
}
/* Mobile Responsive */
@media (max-width: 768px) {
.sidebar-collapsed {
transform: translateX(-100%);
}
.sidebar-expanded {
transform: translateX(0);
}
.mobile-hidden {
display: none;
}
.mobile-full {
width: 100%;
}
}
/* Loading Animation */
.loading-dots {
display: inline-block;
}
.loading-dots::after {
content: '';
animation: dots 1.5s infinite;
}
@keyframes dots {
0%, 20% { content: '.'; }
40% { content: '..'; }
60%, 100% { content: '...'; }
}
/* Status Indicators */
.status-online {
background: var(--primary);
box-shadow: 0 0 10px var(--primary);
}
.status-away {
background: #ffaa00;
box-shadow: 0 0 10px #ffaa00;
}
.status-offline {
background: var(--text-muted);
}
/* Hover Effects */
.hover-glow:hover {
filter: brightness(1.2);
text-shadow: 0 0 10px var(--primary);
}
/* Terminal Cursor */
.terminal-cursor::after {
content: '_';
animation: blink 1s infinite;
}
@keyframes blink {
0%, 50% { opacity: 1; }
51%, 100% { opacity: 0; }
}