|
113 | 113 | .skeleton { position: relative; background-color: var(--card); border-radius: var(--radius); overflow: hidden; } |
114 | 114 | .skeleton::after { content: ""; position: absolute; top: 0; right: 0; bottom: 0; left: 0; transform: translateX(-100%); background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); animation: skeleton-shimmer 1.5s infinite; } |
115 | 115 | @keyframes skeleton-shimmer { 100% { transform: translateX(100%); } } |
116 | | - @media (prefers-color-scheme: dark) { .skeleton::after { background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent); } } |
117 | 116 | .skeleton-card { background: var(--card); border-radius: var(--radius); box-shadow: var(--shadow); overflow: hidden; height: 100%; display: flex; flex-direction: column; } |
118 | 117 | .skeleton-img { width: 100%; aspect-ratio: 16/10; } |
119 | 118 | .skeleton-title { height: 20px; width: 80%; margin: 1rem 1rem 0.5rem 1rem; } |
|
136 | 135 | .stat-card {min-width:100px;} |
137 | 136 | } |
138 | 137 |
|
139 | | - @media (prefers-color-scheme: dark) { |
140 | | - :root { --primary:#029CDF; --primary-hover: #0276a8; --secondary: #bf6b0b; --secondary-hover: #9c5b06; --bg: #121212; --card: #1e1e1e; --dark: #d4d5d6; --gray: #2d2d2d; --text: #e4e6eb; --border: #333333; --shadow: 0 2px 6px rgba(0,0,0,0.2); } |
141 | | - body { background-color: var(--bg); color: var(--text); background-image: url('img/crossword_pattern.png'); background-blend-mode: soft-light; opacity: 1; } |
142 | | - header, .filter-bar, footer { background-color: var(--card); border-color: var(--border); } |
143 | | - .card, .stat-card, .filter-dropdown { background-color: var(--card); box-shadow: var(--shadow); } |
144 | | - .search-bar input, .sort-select, .category-select { background-color: var(--bg); color: var(--text); border-color: var(--border); } |
145 | | - .search-bar input::placeholder { color: #909090; } |
146 | | - .filter-btn { background-color: transparent; color: var(--text); border-color: var(--border); } |
147 | | - .filter-btn:hover:not(.active):not(.random-btn) { border-color: var(--primary); } |
148 | | - .filter-btn.active { background-color: var(--primary); color: white; } |
149 | | - .filter-btn.random-btn { background-color: var(--secondary); color: white; } |
150 | | - .section-title, .card-title { color: var(--dark); } |
151 | | - .card-desc { color: #b0b3b8; } |
152 | | - .card-btn.game { background-color: var(--primary); color: white; } |
153 | | - .card-btn.tool { background-color: var(--secondary); color: white; } |
154 | | - .view-btn { color: var(--primary); } |
155 | | - .view-btn:hover, .view-btn.active { color: var(--secondary); } |
156 | | - .footer-link { color: #b0b3b8; } |
157 | | - .footer-link:hover { color: var(--primary); } |
158 | | - .empty-state { color: #b0b3b8; } |
159 | | - .empty-state svg { color: var(--border); } |
160 | | - .back-to-top { background-color: var(--primary); color: white; } |
161 | | - .pill.game { background: rgba(77, 132, 163, 0.3); color: var(--primary); } |
162 | | - .pill.tool { background: rgba(245, 168, 73, 0.3); color: var(--secondary); } |
163 | | - .skeleton { background: linear-gradient(90deg, var(--card) 0%, var(--gray) 50%, var(--card) 100%); } |
164 | | - .skeleton-card { background-color: var(--card); } |
165 | | - .skeleton-stat-card { background-color: var(--card); } |
166 | | - } |
167 | | - |
168 | 138 | .svg-inline--fa {display: inline-block;vertical-align: -0.125em;overflow: visible;} |
169 | 139 | #themeToggleBtn:focus-visible {outline: 2px solid var(--primary);} |
170 | 140 | .theme-icon-light, .theme-icon-dark {pointer-events: none;} |
171 | 141 | .light-mode { --primary: #0276a8; --primary-hover: #015f87; --secondary: #bf6b0b; --secondary-hover: #9c5b06; --bg: #f8f9fa; --card: #fff; --dark: #1e272e; --gray: #e2e6ea; --text: #1e272e; --border: #dee2e6; --shadow: 0 2px 6px rgba(0,0,0,0.08); } |
| 142 | + .light-mode body { background-color: var(--bg); color: var(--text); background-image: url('img/crossword_pattern.png'); } |
172 | 143 | .dark-mode { --primary: #029CDF; --primary-hover: #0276a8; --secondary: #bf6b0b; --secondary-hover: #9c5b06; --bg: #121212; --card: #1e1e1e; --dark: #d4d5d6; --gray: #2d2d2d; --text: #e4e6eb; --border: #333333; --shadow: 0 2px 6px rgba(0,0,0,0.2); } |
| 144 | + .dark-mode body { background-color: var(--bg); color: var(--text); background-image: url('img/crossword_pattern.png'); background-blend-mode: soft-light; opacity: 1; } |
| 145 | + .dark-mode header, .dark-mode .filter-bar, .dark-mode footer { background-color: var(--card); border-color: var(--border); } |
| 146 | + .dark-mode .card, .dark-mode .stat-card, .dark-mode .filter-dropdown { background-color: var(--card); box-shadow: var(--shadow); } |
| 147 | + .dark-mode .search-bar input, .dark-mode .sort-select, .dark-mode .category-select { background-color: var(--bg); color: var(--text); border-color: var(--border); } |
| 148 | + .dark-mode .search-bar input::placeholder { color: #909090; } |
| 149 | + .dark-mode .filter-btn { background-color: transparent; color: var(--text); border-color: var(--border); } |
| 150 | + .dark-mode .filter-btn:hover:not(.active):not(.random-btn) { border-color: var(--primary); } |
| 151 | + .dark-mode .filter-btn.active { background-color: var(--primary); color: white; } |
| 152 | + .dark-mode .filter-btn.random-btn { background-color: var(--secondary); color: white; } |
| 153 | + .dark-mode .section-title, .dark-mode .card-title { color: var(--dark); } |
| 154 | + .dark-mode .card-desc { color: #b0b3b8; } |
| 155 | + .dark-mode .card-btn.game { background-color: var(--primary); color: white; } |
| 156 | + .dark-mode .card-btn.tool { background-color: var(--secondary); color: white; } |
| 157 | + .dark-mode .view-btn { color: var(--primary); } |
| 158 | + .dark-mode .view-btn:hover, .dark-mode .view-btn.active { color: var(--secondary); } |
| 159 | + .dark-mode .footer-link { color: #b0b3b8; } |
| 160 | + .dark-mode .footer-link:hover { color: var(--primary); } |
| 161 | + .dark-mode .empty-state { color: #b0b3b8; } |
| 162 | + .dark-mode .empty-state svg { color: var(--border); } |
| 163 | + .dark-mode .back-to-top { background-color: var(--primary); color: white; } |
| 164 | + .dark-mode .pill.game { background: rgba(77, 132, 163, 0.3); color: var(--primary); } |
| 165 | + .dark-mode .pill.tool { background: rgba(245, 168, 73, 0.3); color: var(--secondary); } |
| 166 | + .dark-mode .skeleton { background: linear-gradient(90deg, var(--card) 0%, var(--gray) 50%, var(--card) 100%); } |
| 167 | + .dark-mode .skeleton-card { background-color: var(--card); } |
| 168 | + .dark-mode .skeleton-stat-card { background-color: var(--card); } |
173 | 169 | .light-mode .theme-icon-light { display: none; } |
174 | 170 | .light-mode .theme-icon-dark { display: inline-block !important; } |
175 | 171 | .dark-mode .theme-icon-dark { display: none; } |
@@ -302,34 +298,34 @@ <h3>No results found</h3> |
302 | 298 | <script> |
303 | 299 | const themeToggleBtn = document.getElementById('themeToggleBtn'); |
304 | 300 | const THEME_STORAGE_KEY = 'gptgames-theme'; |
305 | | - |
306 | | - function initTheme() { |
307 | | - const savedTheme = localStorage.getItem(THEME_STORAGE_KEY); |
308 | | - if (savedTheme === 'dark') { |
309 | | - document.documentElement.classList.add('dark-mode'); |
310 | | - document.documentElement.classList.remove('light-mode'); |
311 | | - } else if (savedTheme === 'light') { |
312 | | - document.documentElement.classList.add('light-mode'); |
313 | | - document.documentElement.classList.remove('dark-mode'); |
| 301 | + const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); |
| 302 | + |
| 303 | + function setTheme(theme, save) { |
| 304 | + const isDark = theme === 'dark'; |
| 305 | + document.documentElement.classList.toggle('dark-mode', isDark); |
| 306 | + document.documentElement.classList.toggle('light-mode', !isDark); |
| 307 | + if (save) { |
| 308 | + localStorage.setItem(THEME_STORAGE_KEY, theme); |
314 | 309 | } |
315 | 310 | } |
316 | 311 |
|
317 | | - themeToggleBtn.addEventListener('click', function() { |
| 312 | + function initTheme() { |
318 | 313 | const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; |
319 | | - const isDarkMode = document.documentElement.classList.contains('dark-mode') || |
320 | | - (prefersDark && !document.documentElement.classList.contains('light-mode')); |
| 314 | + const preferredTheme = localStorage.getItem(THEME_STORAGE_KEY) || (prefersDark ? 'dark' : 'light'); |
| 315 | + setTheme(preferredTheme, false); |
| 316 | + } |
321 | 317 |
|
322 | | - if (isDarkMode) { |
323 | | - document.documentElement.classList.remove('dark-mode'); |
324 | | - document.documentElement.classList.add('light-mode'); |
325 | | - localStorage.setItem(THEME_STORAGE_KEY, 'light'); |
326 | | - } else { |
327 | | - document.documentElement.classList.remove('light-mode'); |
328 | | - document.documentElement.classList.add('dark-mode'); |
329 | | - localStorage.setItem(THEME_STORAGE_KEY, 'dark'); |
| 318 | + darkModeMediaQuery.addEventListener('change', (e) => { |
| 319 | + if (!localStorage.getItem(THEME_STORAGE_KEY)) { |
| 320 | + setTheme(e.matches ? 'dark' : 'light', false); |
330 | 321 | } |
331 | 322 | }); |
332 | 323 |
|
| 324 | + themeToggleBtn.addEventListener('click', function() { |
| 325 | + const isDarkMode = document.documentElement.classList.contains('dark-mode'); |
| 326 | + setTheme(isDarkMode ? 'light' : 'dark', true); |
| 327 | + }); |
| 328 | + |
333 | 329 | initTheme(); |
334 | 330 | </script> |
335 | 331 | <script> |
@@ -821,7 +817,6 @@ <h3 class="card-title" title="${item.title}">${item.title}</h3> |
821 | 817 | window.scrollTo({top: 0, behavior: 'smooth'}); |
822 | 818 | }); |
823 | 819 |
|
824 | | - // Initialize |
825 | 820 | fetchData(); |
826 | 821 | </script> |
827 | 822 | <script src="timeline.js"></script> |
|
0 commit comments