Files
dostalgia/frontend/src/app.css
T
David Alvarez 3ae6f43ccb
Build & Deploy / build-and-deploy (push) Successful in 50s
feat: responsive mobile UI across all pages
Global:
- Viewport meta already present; added -webkit-text-size-adjust: 100%
- Container padding reduces to 12px on mobile (was 24px)
- Smaller heading sizes (h1: 1.5rem, h2: 1.25rem)
- Buttons get min-height 40px for touch targets
- Inputs forced to 16px font-size to prevent iOS zoom
- Thinner scrollbar on mobile

Header:
- Logo text shrinks to 1rem on mobile, icon to 28px
- Header padding reduces to 12px

Library:
- Toolbar stacks vertically on mobile, full-width inputs
- Grid forced to 2 columns on narrow screens (480px), reduced gap

GameCard:
- Smaller info text, padding, badge on 480px screens

GameDetail:
- Cover section capped at 200px width on mobile
- Media thumbnails shrink to 160x90
- Scrape header stacks vertically with full-width buttons
- Edit rows stack vertically on mobile

Play:
- DOS container caps at 50vh on mobile, smaller border-radius
- Overlay text/icon sizes reduced, more compact layout
2026-05-26 17:22:15 +02:00

245 lines
7.7 KiB
CSS

/* ═══════════════════════════════════════════════════════════════
DOSTALGIA — Phosphor Dark Theme
Inspired by classic green-screen CRT monitors (IBM 5151)
═══════════════════════════════════════════════════════════════ */
:root {
/* Phosphor greens — from brightest glow to darkest trace */
--phosphor: #33ff33;
--phosphor-glow: #66ff66;
--phosphor-dim: #22aa22;
--phosphor-dark: #116611;
--phosphor-burn: #0a330a;
/* Backgrounds */
--bg: #0a0a0a;
--bg-elevated: #111111;
--surface: #1a1a1a;
--surface-hover: #222222;
--surface-active: #2a2a2a;
/* Borders */
--border: #2a2a2a;
--border-glow: #33ff3340;
/* Text */
--text: #cccccc;
--text-bright: #e8e8e8;
--text-dim: #777777;
/* Sizing */
--max-width: 1200px;
--header-height: 64px;
--radius: 8px;
--radius-sm: 4px;
/* Typography */
--font-mono: "Press Start 2P", monospace;
--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
}
/* ═══════════════════════════════════════════════════════════════
RESET & BASE
═══════════════════════════════════════════════════════════════ */
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
font-size: 16px;
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: 100%;
}
body {
font-family: var(--font-sans);
background: var(--bg);
color: var(--text);
min-height: 100vh;
line-height: 1.6;
}
a {
color: var(--phosphor);
text-decoration: none;
}
a:hover {
color: var(--phosphor-glow);
text-shadow: 0 0 8px var(--phosphor-glow);
}
img {
max-width: 100%;
display: block;
}
/* ═══════════════════════════════════════════════════════════════
TYPOGRAPHY
═══════════════════════════════════════════════════════════════ */
h1, h2, h3, h4 {
color: var(--text-bright);
font-weight: 700;
line-height: 1.3;
}
h1 { font-size: 2rem; }
h2 { font-size: 1.5rem; }
h3 { font-size: 1.2rem; }
/* ═══════════════════════════════════════════════════════════════
BUTTONS
═══════════════════════════════════════════════════════════════ */
.btn {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 10px 20px;
border: 1px solid var(--phosphor-dim);
border-radius: var(--radius-sm);
background: transparent;
color: var(--phosphor);
font-family: var(--font-sans);
font-size: 0.9rem;
font-weight: 600;
cursor: pointer;
transition: all 0.15s ease;
}
.btn:hover {
background: var(--phosphor-burn);
border-color: var(--phosphor);
box-shadow: 0 0 12px var(--phosphor-dark);
}
.btn:active {
transform: scale(0.97);
}
.btn-primary {
background: var(--phosphor-dark);
border-color: var(--phosphor);
color: var(--phosphor-glow);
}
.btn-primary:hover {
background: var(--phosphor-dim);
color: var(--bg);
}
.btn-danger {
border-color: #cc3333;
color: #cc3333;
}
.btn-danger:hover {
background: #331111;
border-color: #ff4444;
color: #ff4444;
box-shadow: 0 0 12px #331111;
}
/* ═══════════════════════════════════════════════════════════════
INPUTS
═══════════════════════════════════════════════════════════════ */
input,
textarea,
select {
background: var(--surface);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
color: var(--text);
padding: 10px 14px;
font-family: var(--font-sans);
font-size: 0.9rem;
transition: border-color 0.15s;
}
input:focus,
textarea:focus,
select:focus {
outline: none;
border-color: var(--phosphor-dim);
box-shadow: 0 0 0 3px var(--border-glow);
}
input::placeholder {
color: var(--text-dim);
}
/* ═══════════════════════════════════════════════════════════════
LAYOUT UTILITIES
═══════════════════════════════════════════════════════════════ */
.container {
max-width: var(--max-width);
margin: 0 auto;
padding: 0 24px;
}
@media (max-width: 640px) {
.container { padding: 0 12px; }
}
/* ═══════════════════════════════════════════════════════════════
RESPONSIVE TOUCH ADJUSTMENTS
═══════════════════════════════════════════════════════════════ */
@media (max-width: 640px) {
h1 { font-size: 1.5rem; }
h2 { font-size: 1.25rem; }
.btn { padding: 8px 14px; font-size: 0.85rem; min-height: 40px; }
input, textarea, select { font-size: 16px; } /* prevents iOS zoom */
}
/* ═══════════════════════════════════════════════════════════════
SCROLLBAR
═══════════════════════════════════════════════════════════════ */
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: var(--bg);
}
::-webkit-scrollbar-thumb {
background: var(--surface-hover);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--phosphor-dark);
}
/* ═══════════════════════════════════════════════════════════════
ANIMATIONS
═══════════════════════════════════════════════════════════════ */
@keyframes scanline {
0% { transform: translateY(0); }
100% { transform: translateY(4px); }
}
@keyframes flicker {
0%, 100% { opacity: 1; }
50% { opacity: 0.97; }
}
@keyframes phosphor-pulse {
0%, 100% { text-shadow: 0 0 4px var(--phosphor-dim); }
50% { text-shadow: 0 0 12px var(--phosphor), 0 0 24px var(--phosphor-dark); }
}
/* Subtle CRT effect on hover cards */
.crt-hover {
position: relative;
}
.crt-hover::after {
content: "";
position: absolute;
inset: 0;
background: repeating-linear-gradient(
0deg,
transparent,
transparent 2px,
rgba(51, 255, 51, 0.015) 2px,
rgba(51, 255, 51, 0.015) 4px
);
pointer-events: none;
opacity: 0;
transition: opacity 0.3s;
}
.crt-hover:hover::after {
opacity: 1;
}