diff --git a/src/apps/applets/static/apps/scripts/applets.js b/src/apps/applets/static/apps/scripts/applets.js index 282b379..62ef4b5 100644 --- a/src/apps/applets/static/apps/scripts/applets.js +++ b/src/apps/applets/static/apps/scripts/applets.js @@ -6,7 +6,9 @@ const initGearMenus = () => { e.stopPropagation(); const menu = document.getElementById(menuId); if (!menu) return; - menu.style.display = menu.style.display === 'none' ? 'block' : 'none'; + const opening = menu.style.display === 'none' || menu.style.display === ''; + menu.style.display = opening ? 'block' : 'none'; + gear.classList.toggle('active', opening); }); document.addEventListener('click', (e) => { @@ -14,6 +16,7 @@ const initGearMenus = () => { if (!menu || menu.style.display === 'none') return; if (e.target.closest('.applet-menu-cancel') || !menu.contains(e.target)) { menu.style.display = 'none'; + gear.classList.remove('active'); } }); }) @@ -33,5 +36,6 @@ document.body.addEventListener('htmx:afterSwap', (e) => { document.querySelectorAll('.gear-btn').forEach(gear => { const menu = document.getElementById(gear.dataset.menuTarget); if (menu) menu.style.display = 'none'; + gear.classList.remove('active'); }); }); \ No newline at end of file diff --git a/src/apps/dashboard/static/apps/scripts/game-kit.js b/src/apps/dashboard/static/apps/scripts/game-kit.js index ed42b29..748b0e6 100644 --- a/src/apps/dashboard/static/apps/scripts/game-kit.js +++ b/src/apps/dashboard/static/apps/scripts/game-kit.js @@ -9,8 +9,10 @@ }); btn.addEventListener('click', function () { - if (dialog.open) { - dialog.close(); + if (btn.classList.contains('active')) { + dialog.removeAttribute('open'); + btn.classList.remove('active'); + clearSelection(); return; } fetch(btn.dataset.kitUrl, { @@ -61,9 +63,9 @@ }); function attachCardListeners() { - dialog.querySelectorAll('.kit-card').forEach(function (card) { + dialog.querySelectorAll('.token[data-token-id]').forEach(function (card) { card.addEventListener('click', function () { - dialog.querySelectorAll('.kit-card.selected').forEach(function (c) { + dialog.querySelectorAll('.token[data-token-id].selected').forEach(function (c) { c.classList.remove('selected'); }); card.classList.add('selected'); @@ -71,6 +73,21 @@ var slot = document.querySelector('.token-slot'); if (slot) slot.classList.add('ready'); }); + + card.addEventListener('mouseenter', function () { + var tooltip = card.querySelector('.token-tooltip'); + if (!tooltip) return; + var rect = card.getBoundingClientRect(); + tooltip.style.position = 'fixed'; + tooltip.style.bottom = (window.innerHeight - rect.top + 8) + 'px'; + tooltip.style.left = rect.left + 'px'; + tooltip.style.display = 'block'; + }); + + card.addEventListener('mouseleave', function () { + var tooltip = card.querySelector('.token-tooltip'); + if (tooltip) tooltip.style.display = ''; + }); }); } diff --git a/src/static_src/scss/_applets.scss b/src/static_src/scss/_applets.scss index daec6d1..26e0d67 100644 --- a/src/static_src/scss/_applets.scss +++ b/src/static_src/scss/_applets.scss @@ -15,6 +15,11 @@ border-radius: 50%; background-color: rgba(var(--priUser), 1); border: 0.15rem solid rgba(var(--secUser), 1); + + &.active { + color: rgba(var(--quaUser), 1); + border-color: rgba(var(--quaUser), 1); + } } // ── Applet menu (shared structure) ───────────────────────── diff --git a/src/static_src/scss/_game-kit.scss b/src/static_src/scss/_game-kit.scss index 906b0c9..b49ba08 100644 --- a/src/static_src/scss/_game-kit.scss +++ b/src/static_src/scss/_game-kit.scss @@ -66,54 +66,35 @@ .kit-bag-label { font-size: 0.55rem; text-transform: uppercase; + text-decoration: underline; letter-spacing: 0.12em; color: rgba(var(--secUser), 0.35); writing-mode: vertical-rl; text-orientation: mixed; transform: rotate(180deg); + padding: 0 0.25rem 0 0.5rem; } .kit-bag-row { display: flex; flex-direction: row; - gap: 0.4rem; + gap: 0.75rem; } -.kit-card { - display: flex; - flex-direction: column; - align-items: center; - gap: 0.15rem; - padding: 0.3rem 0.4rem; - border: 0.1rem solid rgba(var(--terUser), 0.35); - border-radius: 0.4rem; - cursor: pointer; - min-width: 3rem; - transition: border-color 0.15s, box-shadow 0.15s; +#id_kit_bag_dialog { + .token { + font-size: 1.5rem; + cursor: pointer; + transition: filter 0.15s; + padding: 0 0.125rem; + + &:hover .token-tooltip { display: none; } // JS positions these as fixed + - i { - font-size: 1.1rem; - color: rgba(var(--terUser), 0.7); } - .kit-card-label { - font-size: 0.5rem; - color: rgba(var(--secUser), 0.45); - text-align: center; - white-space: nowrap; - } - - &:hover { - border-color: rgba(var(--terUser), 0.7); - } - - &.selected { - border-color: rgba(var(--terUser), 1); - box-shadow: - 0 0 0.4rem rgba(var(--terUser), 0.5), - 0 0 1rem rgba(var(--terUser), 0.2) - ; - i { color: rgba(var(--terUser), 1); } + .token-tooltip { + z-index: 9999; } } diff --git a/src/static_src/scss/_room.scss b/src/static_src/scss/_room.scss index 34cb9d7..a89eeff 100644 --- a/src/static_src/scss/_room.scss +++ b/src/static_src/scss/_room.scss @@ -327,7 +327,7 @@ body:has(.gate-overlay) { } // Narrow viewport — scale down, 2×3 slot grid (portrait mobile + narrow desktop) -@media (max-width: 550px) { +@media (max-width: 700px) { .gate-modal { padding: 1.25rem 1.5rem; diff --git a/src/static_src/scss/_wallet-tokens.scss b/src/static_src/scss/_wallet-tokens.scss index d039908..29f9209 100644 --- a/src/static_src/scss/_wallet-tokens.scss +++ b/src/static_src/scss/_wallet-tokens.scss @@ -16,6 +16,17 @@ font-size: 0.95rem; margin: 0 0 0.3rem 0; color: rgba(var(--terUser), 1); + display: flex; + justify-content: space-between; + align-items: baseline; + gap: 0.5rem; + + .token-count { + font-size: 0.75rem; + opacity: 0.65; + font-weight: normal; + flex-shrink: 0; + } } p { diff --git a/src/templates/apps/dashboard/home.html b/src/templates/apps/dashboard/home.html index 95859c5..f711792 100644 --- a/src/templates/apps/dashboard/home.html +++ b/src/templates/apps/dashboard/home.html @@ -11,8 +11,8 @@ {% block content %} {% if user.is_authenticated %}
{{ token.tooltip_description }}
+ {% if token.tooltip_shoptalk %} + {{ token.tooltip_shoptalk }} + {% endif %} +{{ token.tooltip_expiry }}
+{{ free_token.tooltip_description }}
+{{ free_token.tooltip_expiry }}
+{{ tithe_token.tooltip_description }}
+{{ tithe_token.tooltip_expiry }}
+