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.
Files changed (2) hide show
  1. package/index.html +30 -3
  2. 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">&#9733; 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">&#9654;</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
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "class-studys",
3
- "version": "6.0.0",
3
+ "version": "7.0.0",
4
4
  "description": "IGNITE OS — Advanced proxy-enabled gaming platform with comprehensive filter bypass system",
5
5
  "main": "index.html",
6
6
  "files": [