688688 transform : scale (0.8 );
689689 /* Scale down iframes on very small screens */
690690 }
691+
692+ }
693+
694+ /* App Grid */
695+ .app-grid {
696+ display : grid;
697+ grid-template-columns : repeat (auto-fill, minmax (500px , 1fr ));
698+ gap : 2rem ;
699+ margin-top : 2rem ;
700+ }
701+
702+ .app-card {
703+ background : rgba (255 , 255 , 255 , 0.05 );
704+ border-radius : 1rem ;
705+ overflow : hidden;
706+ display : flex;
707+ flex-direction : column;
708+ border : 1px solid rgba (255 , 255 , 255 , 0.1 );
709+ transition : transform 0.3s ease, box-shadow 0.3s ease;
710+ }
711+
712+ .app-card : hover {
713+ transform : translateY (-5px );
714+ box-shadow : 0 10px 30px rgba (0 , 0 , 0 , 0.3 );
715+ border-color : rgba (255 , 255 , 255 , 0.2 );
716+ }
717+
718+ .app-header {
719+ padding : 1rem ;
720+ background : rgba (0 , 0 , 0 , 0.2 );
721+ display : flex;
722+ justify-content : space-between;
723+ align-items : center;
724+ border-bottom : 1px solid rgba (255 , 255 , 255 , 0.05 );
725+ }
726+
727+ .app-title {
728+ margin : 0 ;
729+ font-size : 1.1rem ;
730+ font-weight : 700 ;
731+ }
732+
733+ .app-author {
734+ font-size : 0.8rem ;
735+ color : var (--cp-text );
736+ }
737+
738+ .app-body {
739+ display : flex;
740+ padding : 1rem ;
741+ gap : 1.5rem ;
742+ flex : 1 ;
743+ }
744+
745+ .app-image {
746+ width : 240px ;
747+ height : 396px ;
748+ /* Ratio close to 320x528 approx 0.75 scale */
749+ background-size : cover;
750+ background-position : center;
751+ border-radius : 2px ;
752+ flex-shrink : 0 ;
753+ background-color : # 333 ;
754+ }
755+
756+ .app-details {
757+ flex : 1 ;
758+ display : flex;
759+ flex-direction : column;
760+ }
761+
762+ .app-description {
763+ font-size : 0.9rem ;
764+ color : var (--cp-text );
765+ margin-bottom : 1rem ;
766+ flex : 1 ;
767+ display : -webkit-box;
768+ -webkit-line-clamp : 14 ;
769+ line-clamp : 14 ;
770+ -webkit-box-orient : vertical;
771+ overflow : hidden;
772+ }
773+
774+ .app-actions {
775+ display : flex;
776+ gap : 0.5rem ;
777+ flex-wrap : wrap;
778+ }
779+
780+ .app-btn {
781+ padding : 0.5rem 1rem ;
782+ font-size : 0.8rem ;
783+ text-align : center;
784+ flex : 1 ;
785+ min-width : 80px ;
786+ }
787+
788+ @media (max-width : 600px ) {
789+ .app-grid {
790+ grid-template-columns : 1fr ;
791+ }
792+
793+ .app-body {
794+ flex-direction : column;
795+ }
796+
797+ .app-image {
798+ width : 100% ;
799+ height : 300px ;
800+ background-position : top center;
801+ }
691802 }
692803 </ style >
693804 < script src ="https://analytics.ahrefs.com/analytics.js " data-key ="Kb2nywKkyR+dD+Av2GmerQ " async > </ script >
@@ -707,6 +818,7 @@ <h1>ClassPad with <span class="python-text">Python</span> 🐍</h1>
707818 < div class ="hero-buttons ">
708819 < a href ="#download " class ="btn btn-primary "> Get It Now!</ a >
709820 < a href ="#learn-more " class ="btn btn-secondary "> Learn More</ a >
821+ < a href ="store/ " class ="btn btn-secondary "> Apps</ a >
710822 </ div >
711823 </ div >
712824 < div class ="hero-image ">
@@ -884,6 +996,7 @@ <h2 class="section-title">Games & Apps</h2>
884996 < p class ="section-subtitle "> An expanding ecosystem of Python-powered experiences</ p >
885997 </ div >
886998 < div class ="features-grid ">
999+ <!-- Classic Games -->
8871000 < div class ="feature-card ">
8881001 < div class ="feature-icon ">
8891002 < svg width ="24 " height ="24 " viewBox ="0 0 24 24 " fill ="none " xmlns ="http://www.w3.org/2000/svg ">
@@ -899,8 +1012,10 @@ <h2 class="section-title">Games & Apps</h2>
8991012 < h3 class ="feature-title "> Classic Games</ h3 >
9001013 < p class ="feature-description "> Enjoy Python ports of timeless classics like Snake, optimized for the
9011014 ClassPad's screen and controls.</ p >
1015+ < a href ="store/index.html?type=classic " class ="feature-link "> Browse Classic Games →</ a >
9021016 </ div >
9031017
1018+ <!-- Educational Tools -->
9041019 < div class ="feature-card ">
9051020 < div class ="feature-icon ">
9061021 < svg width ="24 " height ="24 " viewBox ="0 0 24 24 " fill ="none " xmlns ="http://www.w3.org/2000/svg ">
@@ -914,36 +1029,26 @@ <h3 class="feature-title">Classic Games</h3>
9141029 < h3 class ="feature-title "> Educational Tools</ h3 >
9151030 < p class ="feature-description "> Powerful math and science applications that uses Python's
9161031 computational capabilities for advanced calculations and visualizations.</ p >
1032+ < a href ="store/index.html?type=education " class ="feature-link "> Browse Education Apps →</ a >
9171033 </ div >
9181034
1035+ <!-- App Store -->
9191036 < div class ="feature-card ">
9201037 < div class ="feature-icon ">
9211038 < svg width ="24 " height ="24 " viewBox ="0 0 24 24 " fill ="none " xmlns ="http://www.w3.org/2000/svg ">
9221039 < path d ="M20 7L12 3L4 7M20 7L12 11M20 7V17L12 21M12 11L4 7M12 11V21M4 7V17L12 21 "
9231040 stroke ="currentColor " stroke-width ="2 " stroke-linecap ="round " stroke-linejoin ="round " />
9241041 </ svg >
9251042 </ div >
926- < h3 class ="feature-title "> Coming Soon: App Store</ h3 >
927- < p class ="feature-description "> An official ClassPad Python App Store is launching soon, making it
928- easier than ever to discover and install new programs.</ p >
1043+ < h3 class ="feature-title "> App Store</ h3 >
1044+ < p class ="feature-description "> Discover and install new programs from our official App Store
1045+ repository.</ p >
1046+ < a href ="store/index.html " class ="feature-link "> Browse All Apps →</ a >
9291047 </ div >
9301048 </ div >
9311049 </ div >
9321050 </ section >
9331051
934- <!-- Apps Table Section -->
935- < section class ="section dark-section ">
936- < div class ="container ">
937- < div class ="section-header ">
938- < h2 class ="section-title "> Available Apps & Games</ h2 >
939- < p class ="section-subtitle "> Explore the growing collection of Python applications</ p >
940- </ div >
941- < div id ="apps-container ">
942- < div class ="loading "> Loading apps...</ div >
943- </ div >
944- </ div >
945- </ section >
946-
9471052 <!-- Wiki Section -->
9481053 < section class ="section dark-section ">
9491054 < div class ="container ">
@@ -1069,80 +1174,6 @@ <h2 class="cta-title">Need Help?</h2>
10691174 window . location . href = '/python/install-guide?version=' + version ;
10701175 } , 500 ) ;
10711176 }
1072-
1073- document . addEventListener ( 'DOMContentLoaded' , function ( ) {
1074- fetch ( 'apps.json' ) // Adjust path if hosted elsewhere
1075- . then ( response => {
1076- if ( ! response . ok ) {
1077- throw new Error ( 'Failed to load app data' ) ;
1078- }
1079- return response . json ( ) ;
1080- } )
1081- . then ( data => {
1082- renderAppsTable ( data ) ;
1083- } )
1084- . catch ( error => {
1085- console . error ( 'Error loading app data:' , error ) ;
1086- const container = document . getElementById ( 'apps-container' ) ;
1087- container . innerHTML = '<div class="loading">Failed to load apps.</div>' ;
1088- } ) ;
1089- } ) ;
1090-
1091- function renderAppsTable ( apps ) {
1092- const container = document . getElementById ( 'apps-container' ) ;
1093-
1094- if ( apps . length === 0 ) {
1095- container . innerHTML = '<div class="loading">No apps available yet. Check back soon!</div>' ;
1096- return ;
1097- }
1098-
1099- let tableHTML = `
1100- <table class="apps-table">
1101- <thead>
1102- <tr>
1103- <th>Name</th>
1104- <th>Author</th>
1105- <th>Release Date</th>
1106- <th>Description</th>
1107- <th>Installation</th>
1108- <th>Download</th>
1109- </tr>
1110- </thead>
1111- <tbody>
1112- ` ;
1113-
1114- // Add placeholder for app store
1115- tableHTML += `
1116- <tr>
1117- <td>Store (Coming Soon)</td>
1118- <td>ClassPad.Dev Team</td>
1119- <td>TBD</td>
1120- <td>Browse and install apps to your ClassPad</td>
1121- <td>N/A</td>
1122- <td><a href="/app-store">Learn More</a></td>
1123- </tr>
1124- ` ;
1125-
1126- apps . forEach ( app => {
1127- tableHTML += `
1128- <tr>
1129- <td>${ app . name } </td>
1130- <td>${ app . author } </td>
1131- <td>${ app . releaseDate } </td>
1132- <td>${ app . description } </td>
1133- <td><a href="${ app . installation } ">Guide</a></td>
1134- <td><a href="${ app . download } ">Download</a></td>
1135- </tr>
1136- ` ;
1137- } ) ;
1138-
1139- tableHTML += `
1140- </tbody>
1141- </table>
1142- ` ;
1143-
1144- container . innerHTML = tableHTML ;
1145- }
11461177 </ script >
11471178
11481179</ body >
0 commit comments