1515 < title > GPTGames: Collection of AI-Generated HTML Games and Utilities</ title >
1616 < style >
1717 : root {
18- --primary : # 029CDF ; --primary-hover : # 0276a8 ; --secondary : # f0932b ; --secondary-hover : # d97e0c ;
19- --bg : # f8f9fa ; --card : # fff ; --dark : # 2f3640 ; --gray : # e2e6ea ; --text : # 1e272e ; --border : # dee2e6 ;
18+ --primary : # 0276a8 ; --primary-hover : # 015f87 ; --secondary : # d97e0c ; --secondary-hover : # b56908 ;
19+ --bg : # f8f9fa ; --card : # fff ; --dark : # 1e272e ; --gray : # e2e6ea ; --text : # 1e272e ; --border : # dee2e6 ;
2020 --shadow : 0 2px 6px rgba (0 , 0 , 0 , 0.08 ); --radius : 8px ; --transition : all 0.2s ease;
2121 }
2222 * {margin : 0 ; padding : 0 ; box-sizing : border-box;}
109109 .filter-item : hover {background : var (--gray );}
110110 .filter-item .active {background : var (--primary ); color : white;}
111111 .clear-search {position : absolute; right : 2.5rem ; top : 50% ; transform : translateY (-50% ); color : # 6c757d ; cursor : pointer; font-size : 0.8rem ; display : none;}
112+ .visually-hidden {position : absolute; width : 1px ; height : 1px ; margin : -1px ; padding : 0 ; overflow : hidden; clip : rect (0 , 0 , 0 , 0 ); border : 0 ;}
112113 .skeleton { position : relative; background-color : var (--card ); border-radius : var (--radius ); overflow : hidden; }
113114 .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; }
114115 @keyframes skeleton-shimmer { 100% { transform : translateX (100% ); } }
122123 .skeleton-stat-card { background : var (--card ); border-radius : var (--radius ); padding : 1rem ; box-shadow : var (--shadow ); min-width : 150px ; text-align : center; flex-grow : 1 ; max-width : 220px ; }
123124 .skeleton-stat-number { height : 28px ; width : 60% ; margin : 0 auto 0.5rem auto; }
124125 .skeleton-stat-label { height : 16px ; width : 80% ; margin : 0 auto; }
125-
126126 @media (max-width : 768px ) {
127127 .header-content {flex-wrap : wrap; height : auto; padding : 1rem ;}
128128 .search-bar {width : 100% ; margin-top : 1rem ; order : 3 ;}
175175< body >
176176< header >
177177 < div class ="container header-content ">
178- < a href ="/ " class ="logo " title ='...with emphasis on "Games". '> < img src ="img/logo.svg " width ="20 " height ="20 "> GPTGames</ a >
178+ < a href ="/ " class ="logo " title ='...with emphasis on "Games". '>
179+ < img src ="img/logo.svg " width ="20 " height ="20 " alt ="GPTGames Logo "> GPTGames
180+ </ a >
179181 < div class ="search-bar ">
182+ < label for ="searchInput " class ="visually-hidden "> Search games & tools</ label >
180183 < input type ="search " id ="searchInput " placeholder ="Search games & tools " aria-label ="Search ">
181- < span class ="clear-search " id ="clearSearch " title ="Clear search "> ✕</ span >
182- < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 512 512 " width ="1em " height ="1em " fill ="currentColor " class ="svg-inline--fa ">
184+ < span class ="clear-search " id ="clearSearch " title ="Clear search " aria-label =" Clear search " > ✕</ span >
185+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 512 512 " width ="1em " height ="1em " fill ="currentColor " class ="svg-inline--fa " aria-hidden =" true " >
183186 < path d ="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z "/>
184187 </ svg >
185188 </ div >
186189 < div class ="view-controls ">
187- < button class ="view-btn active tooltip " id ="gridViewBtn " data-tooltip ="Grid View ">
188- < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 512 512 " width ="1em " height ="1em " fill ="currentColor " class ="svg-inline--fa ">
190+ < button class ="view-btn active tooltip " id ="gridViewBtn " data-tooltip ="Grid View " aria-label =" Grid View " >
191+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 512 512 " width ="1em " height ="1em " fill ="currentColor " class ="svg-inline--fa " aria-hidden =" true " >
189192 < path d ="M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zm88 64l0 64-88 0 0-64 88 0zm56 0l88 0 0 64-88 0 0-64zm240 0l0 64-88 0 0-64 88 0zM64 224l88 0 0 64-88 0 0-64zm232 0l0 64-88 0 0-64 88 0zm64 0l88 0 0 64-88 0 0-64zM152 352l0 64-88 0 0-64 88 0zm56 0l88 0 0 64-88 0 0-64zm240 0l0 64-88 0 0-64 88 0z "/>
190193 </ svg >
191194 </ button >
192- < button class ="view-btn tooltip " id ="listViewBtn " data-tooltip ="List View ">
193- < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 512 512 " width ="1em " height ="1em " fill ="currentColor " class ="svg-inline--fa ">
195+ < button class ="view-btn tooltip " id ="listViewBtn " data-tooltip ="List View " aria-label =" List View " >
196+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 512 512 " width ="1em " height ="1em " fill ="currentColor " class ="svg-inline--fa " aria-hidden =" true " >
194197 < path d ="M40 48C26.7 48 16 58.7 16 72l0 48c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24L40 48zM192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L192 64zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-288 0zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l288 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-288 0zM16 232l0 48c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-48 0c-13.3 0-24 10.7-24 24zM40 368c-13.3 0-24 10.7-24 24l0 48c0 13.3 10.7 24 24 24l48 0c13.3 0 24-10.7 24-24l0-48c0-13.3-10.7-24-24-24l-48 0z "/>
195198 </ svg >
196199 </ button >
208211 < button class ="filter-btn " data-filter ="featured "> Featured</ button >
209212 < button class ="filter-btn " data-filter ="new "> New</ button >
210213
211- < select id ="categoryFilter " class ="category-select ">
214+ < label for ="categoryFilter " class ="visually-hidden "> Select Category</ label >
215+ < select id ="categoryFilter " class ="category-select " aria-label ="Filter by category ">
212216 < option value ="all "> All Categories</ option >
213217 < option value ="puzzle "> Puzzles</ option >
214218 < option value ="arcade "> Arcade</ option >
220224 < option value ="utility "> Utilities</ option >
221225 </ select >
222226
223- < select id ="sortSelect " class ="sort-select ">
227+ < label for ="sortSelect " class ="visually-hidden "> Sort By</ label >
228+ < select id ="sortSelect " class ="sort-select " aria-label ="Sort items ">
224229 < option value ="featured "> Featured First</ option >
225230 < option value ="newest "> Newest First</ option >
226231 < option value ="oldest "> Oldest First</ option >
227232 < option value ="az "> A-Z</ option >
228233 < option value ="za "> Z-A</ option >
229234 </ select >
230235
231- < button class ="filter-btn random-btn " id ="randomBtn ">
232- < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 640 512 " width ="1em " height ="1em " fill ="currentColor " class ="svg-inline--fa ">
236+ < button class ="filter-btn random-btn " id ="randomBtn " aria-label =" Random item " >
237+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 640 512 " width ="1em " height ="1em " fill ="currentColor " class ="svg-inline--fa " aria-hidden =" true " >
233238 < path d ="M274.9 34.3c-28.1-28.1-73.7-28.1-101.8 0L34.3 173.1c-28.1 28.1-28.1 73.7 0 101.8L173.1 413.7c28.1 28.1 73.7 28.1 101.8 0L413.7 274.9c28.1-28.1 28.1-73.7 0-101.8L274.9 34.3zM200 224a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM96 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM224 376a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM352 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM224 120a24 24 0 1 1 0-48 24 24 0 1 1 0 48zm96 328c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-192c0-35.3-28.7-64-64-64l-114.3 0c11.6 36 3.1 77-25.4 105.5L320 413.8l0 34.2zM480 328a24 24 0 1 1 0 48 24 24 0 1 1 0-48z "/>
234239 </ svg > I'm Feeling Lucky</ button >
235240 </ div >
236241 </ div >
237242</ div >
238243
239244< main class ="container ">
240- < div class ="stats " id ="statsContainer ">
241- <!-- Skeleton stats will be placed here -->
242- </ div >
245+ < div class ="stats " id ="statsContainer "> </ div >
243246
244247 < section class ="main-section ">
245248 < div class ="section-header ">
246249 < h2 class ="section-title " id ="mainTitle "> Featured Games & Tools</ h2 >
247250 </ div >
248- < div class ="grid-view " id ="mainGrid ">
249- <!-- Skeleton cards will be placed here -->
250- </ div >
251+ < div class ="grid-view " id ="mainGrid "> </ div >
251252 < div class ="loading " id ="loadingIndicator ">
252253 < div class ="spinner "> </ div >
253254 < p > Loading more items...</ p >
254255 </ div >
255256 < div class ="empty-state " id ="emptyState " style ="display:none ">
256- < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 512 512 " width ="1em " height ="1em " fill ="currentColor " class ="svg-inline--fa ">
257+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 512 512 " width ="1em " height ="1em " fill ="currentColor " class ="svg-inline--fa " aria-hidden =" true " >
257258 < path d ="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z "/>
258259 </ svg >
259260 < h3 > No results found</ h3 >
@@ -267,12 +268,12 @@ <h3>No results found</h3>
267268 < div > © < span id ="currentYear "> </ span > GPTGames</ div >
268269 < div class ="footer-links ">
269270 < a href ="https://github.com/TobiasMue91/tobiasmue91.github.io " target ="_blank " rel ="noopener noreferrer " class ="footer-link ">
270- < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 496 512 " width ="1em " height ="1em " fill ="currentColor " class ="svg-inline--fa ">
271+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 496 512 " width ="1em " height ="1em " fill ="currentColor " class ="svg-inline--fa " aria-hidden =" true " >
271272 < path d ="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3 .3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5 .3-6.2 2.3zm44.2-1.7c-2.9 .7-4.9 2.6-4.6 4.9 .3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3 .7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3 .3 2.9 2.3 3.9 1.6 1 3.6 .7 4.3-.7 .7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3 .7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3 .7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z "/>
272273 </ svg > GitHub
273274 </ a >
274275 < a href ="https://www.reddit.com/user/tobias_mueller " target ="_blank " rel ="noopener noreferrer " class ="footer-link ">
275- < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 512 512 " width ="1em " height ="1em " fill ="currentColor " class ="svg-inline--fa ">
276+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 512 512 " width ="1em " height ="1em " fill ="currentColor " class ="svg-inline--fa " aria-hidden =" true " >
276277 < path d ="M0 256C0 114.6 114.6 0 256 0S512 114.6 512 256s-114.6 256-256 256L37.1 512c-13.7 0-20.5-16.5-10.9-26.2L75 437C28.7 390.7 0 326.7 0 256zM349.6 153.6c23.6 0 42.7-19.1 42.7-42.7s-19.1-42.7-42.7-42.7c-20.6 0-37.8 14.6-41.8 34c-34.5 3.7-61.4 33-61.4 68.4l0 .2c-37.5 1.6-71.8 12.3-99 29.1c-10.1-7.8-22.8-12.5-36.5-12.5c-33 0-59.8 26.8-59.8 59.8c0 24 14.1 44.6 34.4 54.1c2 69.4 77.6 125.2 170.6 125.2s168.7-55.9 170.6-125.3c20.2-9.6 34.1-30.2 34.1-54c0-33-26.8-59.8-59.8-59.8c-13.7 0-26.3 4.6-36.4 12.4c-27.4-17-62.1-27.7-100-29.1l0-.2c0-25.4 18.9-46.5 43.4-49.9l0 0c4.4 18.8 21.3 32.8 41.5 32.8zM177.1 246.9c16.7 0 29.5 17.6 28.5 39.3s-13.5 29.6-30.3 29.6s-31.4-8.8-30.4-30.5s15.4-38.3 32.1-38.3zm190.1 38.3c1 21.7-13.7 30.5-30.4 30.5s-29.3-7.9-30.3-29.6c-1-21.7 11.8-39.3 28.5-39.3s31.2 16.6 32.1 38.3zm-48.1 56.7c-10.3 24.6-34.6 41.9-63 41.9s-52.7-17.3-63-41.9c-1.2-2.9 .8-6.2 3.9-6.5c18.4-1.9 38.3-2.9 59.1-2.9s40.7 1 59.1 2.9c3.1 .3 5.1 3.6 3.9 6.5z "/>
277278 </ svg > Reddit
278279 </ a >
@@ -281,7 +282,7 @@ <h3>No results found</h3>
281282</ footer >
282283
283284< button class ="back-to-top " id ="backToTop " aria-label ="Back to top ">
284- < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 384 512 " width ="1em " height ="1em " fill ="currentColor " class ="svg-inline--fa ">
285+ < svg xmlns ="http://www.w3.org/2000/svg " viewBox ="0 0 384 512 " width ="1em " height ="1em " fill ="currentColor " class ="svg-inline--fa " aria-hidden =" true " >
285286 < path d ="M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2 160 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-306.7L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z "/>
286287 </ svg >
287288</ button >
@@ -423,7 +424,7 @@ <h3 class="card-title" title="${item.title}">${item.title}</h3>
423424 <div class="card-description-container">
424425 <p class="card-desc${ isListView ? '' : ' truncated' } " title="${ item . description || '' } ">${ item . description || '' } </p>
425426 ${ ! isListView && item . description && item . description . length > 60 ?
426- `<button class="read-more" data-id="${ item . id } ">Read more</button>` : '' }
427+ `<button class="read-more" data-id="${ item . id } " aria-label="Read more about ${ item . title } " >Read more</button>` : '' }
427428 </div>
428429 <a href="${ item . url } " class="card-btn ${ item . type } ">${ item . type === 'game' ? 'Play Game' : 'Use Tool' } </a>
429430 </div>
0 commit comments