stem-lab-toolkit 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/admin.html ADDED
@@ -0,0 +1,131 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Admin — MM Games</title>
7
+ <link rel="stylesheet" href="./css/style.css">
8
+ <style>
9
+ .admin-wrap { max-width: 1100px; margin: 0 auto; padding: 32px 24px 80px; }
10
+ .page-title { font-size: 1.4rem; font-weight: 700; letter-spacing: -0.02em; margin-bottom: 4px; }
11
+ .page-sub { color: var(--muted); font-size: 0.875rem; margin-bottom: 32px; }
12
+ .overflow-x { overflow-x: auto; }
13
+ .thumb-preview { width: 56px; height: 42px; object-fit: cover; border-radius: 4px; background: var(--surface); }
14
+ .thumb-ph { width: 56px; height: 42px; border-radius: 4px; background: #e0e7ff; display:flex; align-items:center; justify-content:center; font-size:1.2rem; }
15
+ .gotd-star { color: #f59e0b; font-size: 1rem; }
16
+ </style>
17
+ </head>
18
+ <body>
19
+
20
+ <header class="site-header">
21
+ <div class="header-inner">
22
+ <a href="./browse.html" class="logo-link">
23
+ <img src="./assets/logo.png" alt="" class="logo-img" onerror="this.style.display='none'">
24
+ <span>MM Games</span>
25
+ </a>
26
+ <nav class="site-nav">
27
+ <a href="./browse.html">Browse</a>
28
+ <a href="./admin.html" class="active">Admin</a>
29
+ </nav>
30
+ </div>
31
+ </header>
32
+
33
+ <div class="admin-wrap">
34
+ <div class="page-title">Admin Panel</div>
35
+ <div class="page-sub">Manage games and site settings</div>
36
+
37
+ <!-- Stats -->
38
+ <div class="card">
39
+ <div class="card-title">Site Stats</div>
40
+ <div class="stats-grid" id="stats-grid">
41
+ <div class="stat-card"><div class="stat-value" id="stat-total">—</div><div class="stat-label">Total Games</div></div>
42
+ <div class="stat-card"><div class="stat-value" id="stat-visible">—</div><div class="stat-label">Visible</div></div>
43
+ <div class="stat-card"><div class="stat-value" id="stat-action">—</div><div class="stat-label">Action</div></div>
44
+ <div class="stat-card"><div class="stat-value" id="stat-sports">—</div><div class="stat-label">Sports</div></div>
45
+ <div class="stat-card"><div class="stat-value" id="stat-racing">—</div><div class="stat-label">Racing</div></div>
46
+ <div class="stat-card"><div class="stat-value" id="stat-puzzle">—</div><div class="stat-label">Puzzle</div></div>
47
+ <div class="stat-card"><div class="stat-value" id="stat-multi">—</div><div class="stat-label">Multiplayer</div></div>
48
+ <div class="stat-card"><div class="stat-value" id="stat-casual">—</div><div class="stat-label">Casual</div></div>
49
+ </div>
50
+ </div>
51
+
52
+ <!-- Add game -->
53
+ <div class="card">
54
+ <div class="card-title">Add New Game</div>
55
+ <form id="add-form">
56
+ <div class="form-grid">
57
+ <div class="form-group">
58
+ <label>Game Name</label>
59
+ <input type="text" id="f-name" placeholder="e.g. Bubble Shooter" required>
60
+ </div>
61
+ <div class="form-group">
62
+ <label>Slug</label>
63
+ <input type="text" id="f-slug" placeholder="e.g. bubble-shooter" required>
64
+ </div>
65
+ <div class="form-group">
66
+ <label>Category</label>
67
+ <select id="f-category">
68
+ <option>Action</option>
69
+ <option>Sports</option>
70
+ <option>Racing</option>
71
+ <option>Multiplayer</option>
72
+ <option>Puzzle</option>
73
+ <option>Casual</option>
74
+ </select>
75
+ </div>
76
+ <div class="form-group">
77
+ <label>Embed Type</label>
78
+ <select id="f-embedtype">
79
+ <option value="gamedistribution">GameDistribution</option>
80
+ <option value="gamepix">GamePix</option>
81
+ </select>
82
+ </div>
83
+ <div class="form-group">
84
+ <label>Game ID <span style="font-weight:400;text-transform:none;">(GameDistribution 32-char ID)</span></label>
85
+ <input type="text" id="f-gameid" placeholder="e.g. aea879e7468e4e579dd96dfd8c66e4be">
86
+ </div>
87
+ <div class="form-group">
88
+ <label>Embed URL <span style="font-weight:400;text-transform:none;">(GamePix only)</span></label>
89
+ <input type="url" id="f-embedurl" placeholder="https://gamepix.com/play/...">
90
+ </div>
91
+ <div class="form-group full">
92
+ <label>Thumbnail URL</label>
93
+ <input type="url" id="f-thumb" placeholder="https://img.gamedistribution.com/GAME_ID-512x384.jpeg">
94
+ </div>
95
+ </div>
96
+ <div style="margin-top:16px; display:flex; gap:10px; align-items:center;">
97
+ <button type="submit" class="btn btn-primary">Add Game</button>
98
+ <span class="feedback" id="add-feedback"></span>
99
+ </div>
100
+ </form>
101
+ </div>
102
+
103
+ <!-- Games table -->
104
+ <div class="card">
105
+ <div class="card-title" style="margin-bottom:16px;">All Games</div>
106
+ <div class="overflow-x">
107
+ <table class="admin-table" id="games-table">
108
+ <thead>
109
+ <tr>
110
+ <th>Thumb</th>
111
+ <th>Name</th>
112
+ <th>Slug</th>
113
+ <th>Category</th>
114
+ <th>Type</th>
115
+ <th>GOTD</th>
116
+ <th>Visible</th>
117
+ <th>Actions</th>
118
+ </tr>
119
+ </thead>
120
+ <tbody id="table-body">
121
+ <tr><td colspan="8" style="color:var(--muted); text-align:center; padding:32px;">Loading…</td></tr>
122
+ </tbody>
123
+ </table>
124
+ </div>
125
+ <div class="feedback" id="table-feedback" style="margin-top:12px;"></div>
126
+ </div>
127
+ </div>
128
+
129
+ <script src="./js/admin.js"></script>
130
+ </body>
131
+ </html>