2a5a11e78d
Fixes three critical mobile UI issues: 1. Theme Button Transparency (FIXED) - Changed theme button from 50% to full opacity on mobile - Updated _themes.css with rgba(x, y, z, 1) for all theme modes - Added opacity: 1 !important to mobile media query 2. Info Button Color Differentiation (FIXED) - Changed info button from green (#27ae60) to blue (#3498db) - Now visually distinct from green back-to-top button - Updated all states: default, hover, at-bottom 3. Button Layout Reorganization (FIXED) - Added .is-mobile-device rules for 5-button layout (no shortcuts) - Buttons centered without gap: Download, Print, Theme, Info, Back-to-top - Total width: 290px (5 buttons + 4 gaps) vs 350px (6 buttons) Files modified: - static/css/01-foundation/_themes.css - Primary theme button fix - static/css/04-interactive/_scroll-behavior.css - Info color + layout - static/css/color-theme.css - Mobile device positioning sync - tests/mjs/53-final-mobile-fixes-test.mjs - Comprehensive validation Test results: ✅ Shortcuts hidden on real mobile (iPhone user agent) ✅ 5 buttons evenly spaced with no gap (60px spacing) ✅ Info button blue (52, 152, 219) vs back-to-top green (39, 174, 96) ✅ Theme button full opacity (alpha: 1, opacity: 1)
334 lines
11 KiB
CSS
334 lines
11 KiB
CSS
/* ==============================================================================
|
|
COLOR THEME SYSTEM
|
|
============================================================================== */
|
|
/*
|
|
IMPORTANT: This is the COLOR theme system (light/dark/auto)
|
|
This is SEPARATE from the LAYOUT theme (.theme-clean)
|
|
|
|
- COLOR theme: Controls backgrounds, text colors, shadows
|
|
- LAYOUT theme (.theme-clean): Controls sidebars, layout structure
|
|
|
|
Both systems work independently and can be combined.
|
|
*/
|
|
|
|
/* ==============================================================================
|
|
LIGHT THEME (DEFAULT)
|
|
============================================================================== */
|
|
:root {
|
|
/* Page Background - Softer version of dark theme */
|
|
--page-bg: #b8bbbe;
|
|
|
|
/* TEST: Woven Fabric Pattern - Light (TESTING - can be removed later) */
|
|
--page-bg-pattern: repeating-linear-gradient(0deg, rgba(75, 85, 99, 0.08), rgba(75, 85, 99, 0.08) 2px, transparent 2px, transparent 6px),
|
|
repeating-linear-gradient(90deg, rgba(107, 114, 128, 0.06), rgba(107, 114, 128, 0.06) 2px, transparent 2px, transparent 6px),
|
|
repeating-linear-gradient(0deg, rgba(55, 65, 81, 0.04), rgba(55, 65, 81, 0.04) 1px, transparent 1px, transparent 12px),
|
|
repeating-linear-gradient(90deg, rgba(55, 65, 81, 0.04), rgba(55, 65, 81, 0.04) 1px, transparent 1px, transparent 12px);
|
|
|
|
/* Paper/Card Backgrounds */
|
|
--paper-bg: #ffffff;
|
|
--paper-secondary-bg: #f5f5f5;
|
|
|
|
/* Text Colors */
|
|
--text-primary: #1a1a1a;
|
|
--text-secondary: #333333;
|
|
--text-muted: #666666;
|
|
--text-light: #999999;
|
|
|
|
/* Action Bar & Navigation */
|
|
--action-bar-bg: #2b2b2b;
|
|
--action-bar-text: #ffffff;
|
|
--action-bar-text-muted: rgba(255, 255, 255, 0.85);
|
|
|
|
/* Borders & Dividers */
|
|
--border-color: #ffffff;
|
|
--border-light: #e0e0e0;
|
|
|
|
/* Shadows */
|
|
--shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.1);
|
|
--shadow-md: 0 2px 8px rgba(0, 0, 0, 0.15);
|
|
--shadow-lg: 0 4px 24px rgba(0, 0, 0, 0.06);
|
|
|
|
/* Interactive Elements */
|
|
--button-bg: transparent;
|
|
--button-bg-hover: rgba(0, 0, 0, 0.05);
|
|
--button-bg-active: rgba(0, 0, 0, 0.1);
|
|
|
|
/* Accent Colors (unchanged in dark mode) */
|
|
--accent-blue: #0066cc;
|
|
--accent-green: #27ae60;
|
|
|
|
/* Sidebar (for non-clean theme) */
|
|
--sidebar-bg: #d1d4d2;
|
|
|
|
/* Legacy CV content variables - theme-aware overrides */
|
|
--text-dark: #1a1a1a; /* Dark text for light background */
|
|
--text-gray: #333333; /* Secondary text for light background */
|
|
}
|
|
|
|
/* ==============================================================================
|
|
DARK THEME
|
|
============================================================================== */
|
|
[data-color-theme="dark"] {
|
|
/* Page Background - Original background */
|
|
--page-bg: rgb(82, 86, 89);
|
|
|
|
/* TEST: Diagonal Grid with Green Glow (TESTING - can be removed later) */
|
|
--page-bg-pattern: repeating-linear-gradient(45deg, rgba(0, 255, 128, 0.1) 0, rgba(0, 255, 128, 0.1) 1px, transparent 1px, transparent 20px),
|
|
repeating-linear-gradient(-45deg, rgba(0, 255, 128, 0.1) 0, rgba(0, 255, 128, 0.1) 1px, transparent 1px, transparent 20px);
|
|
|
|
/* Paper/Card Backgrounds */
|
|
--paper-bg: #1a1a1a;
|
|
--paper-secondary-bg: #2a2a2a;
|
|
|
|
/* Text Colors */
|
|
--text-primary: #e0e0e0;
|
|
--text-secondary: #d0d0d0;
|
|
--text-muted: #b0b0b0;
|
|
--text-light: #808080;
|
|
|
|
/* Action Bar & Navigation */
|
|
--action-bar-bg: #1a1a1a;
|
|
--action-bar-text: #e0e0e0;
|
|
--action-bar-text-muted: rgba(224, 224, 224, 0.85);
|
|
|
|
/* Borders & Dividers */
|
|
--border-color: #404040;
|
|
--border-light: #333333;
|
|
|
|
/* Shadows */
|
|
--shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3);
|
|
--shadow-md: 0 2px 8px rgba(0, 0, 0, 0.4);
|
|
--shadow-lg: 0 4px 16px rgba(0, 0, 0, 0.6);
|
|
|
|
/* Interactive Elements */
|
|
--button-bg: transparent;
|
|
--button-bg-hover: rgba(255, 255, 255, 0.05);
|
|
--button-bg-active: rgba(255, 255, 255, 0.1);
|
|
|
|
/* Accent Colors - slightly brighter in dark mode */
|
|
--accent-blue: #3399ff;
|
|
--accent-green: #2ecc71;
|
|
|
|
/* Sidebar (for non-clean theme) */
|
|
--sidebar-bg: #2a2a2a;
|
|
|
|
/* Legacy CV content variables - theme-aware overrides */
|
|
--text-dark: #e0e0e0; /* Light text for dark background */
|
|
--text-gray: #d0d0d0; /* Secondary text for dark background */
|
|
}
|
|
|
|
/* ==============================================================================
|
|
AUTO THEME - Follows System Preference
|
|
============================================================================== */
|
|
@media (prefers-color-scheme: dark) {
|
|
[data-color-theme="auto"] {
|
|
/* Page Background - Original background */
|
|
--page-bg: rgb(82, 86, 89);
|
|
|
|
/* TEST: Diagonal Grid with Green Glow (TESTING - can be removed later) */
|
|
--page-bg-pattern: repeating-linear-gradient(45deg, rgba(0, 255, 128, 0.1) 0, rgba(0, 255, 128, 0.1) 1px, transparent 1px, transparent 20px),
|
|
repeating-linear-gradient(-45deg, rgba(0, 255, 128, 0.1) 0, rgba(0, 255, 128, 0.1) 1px, transparent 1px, transparent 20px);
|
|
|
|
/* Paper/Card Backgrounds */
|
|
--paper-bg: #1a1a1a;
|
|
--paper-secondary-bg: #2a2a2a;
|
|
|
|
/* Text Colors */
|
|
--text-primary: #e0e0e0;
|
|
--text-secondary: #d0d0d0;
|
|
--text-muted: #b0b0b0;
|
|
--text-light: #808080;
|
|
|
|
/* Action Bar & Navigation */
|
|
--action-bar-bg: #1a1a1a;
|
|
--action-bar-text: #e0e0e0;
|
|
--action-bar-text-muted: rgba(224, 224, 224, 0.85);
|
|
|
|
/* Borders & Dividers */
|
|
--border-color: #404040;
|
|
--border-light: #333333;
|
|
|
|
/* Shadows */
|
|
--shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3);
|
|
--shadow-md: 0 2px 8px rgba(0, 0, 0, 0.4);
|
|
--shadow-lg: 0 4px 16px rgba(0, 0, 0, 0.6);
|
|
|
|
/* Interactive Elements */
|
|
--button-bg: transparent;
|
|
--button-bg-hover: rgba(255, 255, 255, 0.05);
|
|
--button-bg-active: rgba(255, 255, 255, 0.1);
|
|
|
|
/* Accent Colors - slightly brighter in dark mode */
|
|
--accent-blue: #3399ff;
|
|
--accent-green: #2ecc71;
|
|
|
|
/* Sidebar (for non-clean theme) */
|
|
--sidebar-bg: #2a2a2a;
|
|
|
|
/* Legacy CV content variables - theme-aware overrides */
|
|
--text-dark: #e0e0e0; /* Light text for dark background */
|
|
--text-gray: #d0d0d0; /* Secondary text for dark background */
|
|
}
|
|
}
|
|
|
|
/* ==============================================================================
|
|
THEME SWITCHER BUTTON STYLES - Dynamic colors based on theme mode
|
|
============================================================================== */
|
|
.color-theme-switcher {
|
|
position: fixed;
|
|
bottom: 14rem; /* Middle position - between print (18rem) and shortcuts (10rem) */
|
|
left: 2rem;
|
|
width: 50px;
|
|
height: 50px;
|
|
background: var(--black-bar);
|
|
color: white;
|
|
border: none;
|
|
border-radius: 50%;
|
|
cursor: pointer;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
|
transition: all 0.3s ease;
|
|
z-index: 999;
|
|
opacity: 0.6;
|
|
}
|
|
|
|
/* Dynamic colors ONLY on hover based on active theme mode */
|
|
.color-theme-switcher:hover[data-theme-mode="light"] {
|
|
background: #d4b200 !important; /* Bright sun yellow (gold) for light mode */
|
|
}
|
|
|
|
.color-theme-switcher:hover[data-theme-mode="dark"] {
|
|
background: #013c77 !important; /* Dark nighty blue for dark mode */
|
|
}
|
|
|
|
.color-theme-switcher:hover[data-theme-mode="auto"] {
|
|
background: #9b59b6 !important; /* Purple for auto mode (mix of both) */
|
|
}
|
|
|
|
.color-theme-switcher:hover {
|
|
opacity: 1 !important;
|
|
transform: translateY(-3px);
|
|
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.4);
|
|
}
|
|
|
|
/* At-bottom state - dynamic colors based on theme mode (matches hover) */
|
|
.color-theme-switcher.at-bottom[data-theme-mode="light"] {
|
|
opacity: 1;
|
|
background: #d4b200 !important; /* Bright sun yellow (gold) for light mode */
|
|
}
|
|
|
|
.color-theme-switcher.at-bottom[data-theme-mode="dark"] {
|
|
opacity: 1;
|
|
background: #013c77 !important; /* Dark nighty blue for dark mode */
|
|
}
|
|
|
|
.color-theme-switcher.at-bottom[data-theme-mode="auto"] {
|
|
opacity: 1;
|
|
background: #9b59b6 !important; /* Purple for auto mode */
|
|
}
|
|
|
|
.color-theme-switcher iconify-icon {
|
|
color: white !important;
|
|
transition: color 0.3s ease;
|
|
}
|
|
|
|
.color-theme-switcher:hover iconify-icon {
|
|
color: white !important;
|
|
}
|
|
|
|
/* Hide the internal theme buttons - we'll cycle through on click */
|
|
.theme-option-btn {
|
|
display: none;
|
|
}
|
|
|
|
/* ==============================================================================
|
|
ICON COLOR PRESERVATION
|
|
============================================================================== */
|
|
/* Ensure all iconify icons keep their intended colors across themes */
|
|
|
|
/* Section icons - keep their brand colors */
|
|
.section-icon iconify-icon,
|
|
.project-icon iconify-icon,
|
|
.course-icon iconify-icon,
|
|
.default-project-icon iconify-icon {
|
|
color: inherit !important;
|
|
}
|
|
|
|
/* Toggle switch icons - keep their state-specific colors */
|
|
/* Note: Already defined in main.css with !important - just ensure they're not overridden */
|
|
|
|
/* Hamburger menu and site icons */
|
|
.site-icon iconify-icon,
|
|
.site-icon-mobile iconify-icon {
|
|
color: white !important;
|
|
}
|
|
|
|
/* CV content icons */
|
|
.cv-paper iconify-icon {
|
|
color: inherit !important;
|
|
}
|
|
|
|
/* Error toast icon */
|
|
.error-icon iconify-icon {
|
|
color: #dc3545 !important;
|
|
}
|
|
|
|
/* Mobile adjustments */
|
|
@media (max-width: 900px) {
|
|
.color-theme-switcher {
|
|
position: fixed !important;
|
|
bottom: 1.5rem !important;
|
|
left: auto !important;
|
|
right: auto !important;
|
|
width: 50px !important;
|
|
height: 50px !important;
|
|
opacity: 1 !important; /* Full opacity on mobile (no transparency with blur bar) */
|
|
transform: none !important;
|
|
/* Desktop mobile view: 6 buttons with shortcuts */
|
|
/* Download, Print, Shortcuts, Theme, Info, Back-to-top */
|
|
/* Total width: 6 * 50px + 5 * 10px = 350px */
|
|
left: calc(50% + 5px) !important; /* Fourth button */
|
|
}
|
|
|
|
/* REAL MOBILE DEVICES: 5 buttons without shortcuts */
|
|
/* Download, Print, Theme, Info, Back-to-top */
|
|
/* Total width: 5 * 50px + 4 * 10px = 290px */
|
|
.is-mobile-device .color-theme-switcher {
|
|
left: calc(50% - 25px) !important; /* Third button (no gap) */
|
|
}
|
|
|
|
/* Show theme colors at full opacity on mobile (no transparency with blur bar) */
|
|
.color-theme-switcher[data-theme-mode="light"] {
|
|
background: rgba(212, 178, 0, 1) !important; /* Gold - full opacity */
|
|
opacity: 1 !important; /* Override base opacity */
|
|
}
|
|
|
|
.color-theme-switcher[data-theme-mode="dark"] {
|
|
background: rgba(1, 60, 119, 1) !important; /* Blue - full opacity */
|
|
opacity: 1 !important; /* Override base opacity */
|
|
}
|
|
|
|
.color-theme-switcher[data-theme-mode="auto"] {
|
|
background: rgba(155, 89, 182, 1) !important; /* Purple - full opacity */
|
|
opacity: 1 !important; /* Override base opacity */
|
|
}
|
|
|
|
/* Full color opacity on hover */
|
|
.color-theme-switcher:hover[data-theme-mode="light"] {
|
|
background: rgba(212, 178, 0, 1) !important; /* Full gold opacity */
|
|
transform: translateY(-3px) !important;
|
|
}
|
|
|
|
.color-theme-switcher:hover[data-theme-mode="dark"] {
|
|
background: rgba(1, 60, 119, 1) !important; /* Full blue opacity */
|
|
transform: translateY(-3px) !important;
|
|
}
|
|
|
|
.color-theme-switcher:hover[data-theme-mode="auto"] {
|
|
background: rgba(155, 89, 182, 1) !important; /* Full purple opacity */
|
|
transform: translateY(-3px) !important;
|
|
}
|
|
}
|