class-studys 6.0.0 → 7.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/index.html +30 -3
- package/package.json +1 -1
package/index.html
CHANGED
|
@@ -344,6 +344,22 @@ main { max-width: 1220px; margin: 0 auto; padding: 0 22px 60px; display: grid; g
|
|
|
344
344
|
z-index: 1;
|
|
345
345
|
}
|
|
346
346
|
.game-card:hover .game-cover img { transform: scale(1.06); }
|
|
347
|
+
|
|
348
|
+
/* featured game — wide rectangle, front & center */
|
|
349
|
+
.game-card.featured { grid-column: span 2; }
|
|
350
|
+
.game-card.featured .game-cover { height: 210px; }
|
|
351
|
+
.game-card.featured .game-name { font-size: 1.3rem; }
|
|
352
|
+
.game-card.featured .game-desc { -webkit-line-clamp: 3; font-size: 0.9rem; }
|
|
353
|
+
.game-card.featured .game-tools { top: 42px; }
|
|
354
|
+
.best-badge {
|
|
355
|
+
position: absolute; top: 10px; left: 10px; z-index: 4;
|
|
356
|
+
background: linear-gradient(135deg, var(--accent), var(--accent2));
|
|
357
|
+
color: var(--on-accent); font-size: 0.62rem; font-weight: 900;
|
|
358
|
+
letter-spacing: 1.5px; text-transform: uppercase;
|
|
359
|
+
padding: 4px 12px; border-radius: 99px;
|
|
360
|
+
box-shadow: 0 0 18px color-mix(in srgb, var(--accent) 60%, transparent);
|
|
361
|
+
animation: pulse 2.2s ease-in-out infinite;
|
|
362
|
+
}
|
|
347
363
|
.cover-fallback {
|
|
348
364
|
position: absolute; inset: 0; display: grid; place-items: center;
|
|
349
365
|
font-size: 3rem; font-weight: 900;
|
|
@@ -1041,6 +1057,13 @@ const THEME_PRESETS = {
|
|
|
1041
1057
|
};
|
|
1042
1058
|
|
|
1043
1059
|
const DEFAULT_GAMES = [
|
|
1060
|
+
{
|
|
1061
|
+
id: 'duck-math', name: 'DUCK MATH',
|
|
1062
|
+
url: 'https://unpkg.com/ignite-goober@1.1.4/index.html#/class/drift-king',
|
|
1063
|
+
cover: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRJFXWvY3bIWxbR2SZEnbZaVFRYqFzZJZlOo4SYkWOexg&s',
|
|
1064
|
+
desc: 'the absolute best. quack and calculate.',
|
|
1065
|
+
tags: ['featured','math','racing'], color: '#ffb26b', featured: true,
|
|
1066
|
+
},
|
|
1044
1067
|
{
|
|
1045
1068
|
id: 'Cookie Clicker', name: 'Cookie Clicker TEST',
|
|
1046
1069
|
url: 'https://unpkg.com/edcube-cookie-clicker@5.0.0/index.html',
|
|
@@ -1512,7 +1535,7 @@ const DEMO_MOVIES = [
|
|
|
1512
1535
|
wrap.innerHTML = '';
|
|
1513
1536
|
state.games.forEach((g) => {
|
|
1514
1537
|
const card = document.createElement('div');
|
|
1515
|
-
card.className = 'game-card';
|
|
1538
|
+
card.className = 'game-card' + (g.featured ? ' featured' : '');
|
|
1516
1539
|
card.style.setProperty('--gcolor', g.color || '#ff6b1a');
|
|
1517
1540
|
card.dataset.id = g.id;
|
|
1518
1541
|
const cover = g.cover ? '<img src="' + esc(g.cover) + '" alt="" loading="lazy" onerror="this.remove()">' : '';
|
|
@@ -1523,6 +1546,7 @@ const DEMO_MOVIES = [
|
|
|
1523
1546
|
'</div>';
|
|
1524
1547
|
card.innerHTML =
|
|
1525
1548
|
'<div class="game-cover">' +
|
|
1549
|
+
(g.featured ? '<span class="best-badge">★ absolute best</span>' : '') +
|
|
1526
1550
|
(g.cover ? '' : '<div class="cover-fallback">' + esc(g.name.slice(0, 2).toUpperCase()) + '</div>') + cover +
|
|
1527
1551
|
(g.local ? '<span class="local-dot">OFFLINE</span>' : '') + tools +
|
|
1528
1552
|
'<button class="game-play" data-act="play" title="play">▶</button>' +
|
|
@@ -1598,6 +1622,9 @@ const DEMO_MOVIES = [
|
|
|
1598
1622
|
? 'https://somesite.com/game — proxied automatically'
|
|
1599
1623
|
: 'https://drive.google.com/file/d/…/view';
|
|
1600
1624
|
$('form-parse-hint').textContent = '';
|
|
1625
|
+
// editing an existing game: hide the URL field so links stay private
|
|
1626
|
+
// (only the cover image + name/desc/tags can be changed)
|
|
1627
|
+
$('form-link').closest('.form-field').classList.toggle('hidden', mode === 'game' && !!item);
|
|
1601
1628
|
$('form-modal').classList.remove('hidden');
|
|
1602
1629
|
setTimeout(() => $('form-name').focus(), 60);
|
|
1603
1630
|
}
|
|
@@ -1622,11 +1649,11 @@ const DEMO_MOVIES = [
|
|
|
1622
1649
|
const link = $('form-link').value.trim();
|
|
1623
1650
|
if (!name) { toast('give it a name'); return; }
|
|
1624
1651
|
if (mode === 'game') {
|
|
1625
|
-
if (!link) { toast('paste a game URL — it plays through the tunnel'); return; }
|
|
1626
1652
|
const id = state.formEditId || uid().replace('m', 'g');
|
|
1627
1653
|
const old = state.overrides[id] || {};
|
|
1654
|
+
if (!link && !old.url) { toast('paste a game URL — it plays through the tunnel'); return; }
|
|
1628
1655
|
state.overrides[id] = Object.assign({}, old, {
|
|
1629
|
-
id, name, url: link, desc,
|
|
1656
|
+
id, name, url: link || old.url, desc,
|
|
1630
1657
|
tags: genre ? genre.split(',').map((t) => t.trim()).filter(Boolean) : ['custom'],
|
|
1631
1658
|
cover: poster || undefined, color: old.color || pickColor(name),
|
|
1632
1659
|
});
|