From ff7b71792f69ad825314bf336dfae0f32d1b0955 Mon Sep 17 00:00:00 2001 From: Disco DeDisco Date: Sun, 15 Mar 2026 16:39:14 -0400 Subject: [PATCH] narrow desktop breakpoint constraint relaxed somewhat to accomodate more fringe-case window aspect ratios; #id_gear_btn now, like #id_kit_btn, restyles to contain --quaUser rgb value when menu is active; dashboard.html include ordering switched for #id_dash_applet_menu & #id_gear_btn, to fix an issue causing the menu to overlay the btn instead of the other way around --- .../applets/static/apps/scripts/applets.js | 6 ++- .../dashboard/static/apps/scripts/game-kit.js | 25 ++++++++-- src/static_src/scss/_applets.scss | 5 ++ src/static_src/scss/_game-kit.scss | 47 ++++++------------- src/static_src/scss/_room.scss | 2 +- src/static_src/scss/_wallet-tokens.scss | 11 +++++ src/templates/apps/dashboard/home.html | 2 +- .../core/_partials/_kit_bag_panel.html | 31 ++++++++---- 8 files changed, 79 insertions(+), 50 deletions(-) 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 %}
- {% include "apps/applets/_partials/_gear.html" with menu_id="id_dash_applet_menu" %} {% include "apps/dashboard/_partials/_applets.html" %} + {% include "apps/applets/_partials/_gear.html" with menu_id="id_dash_applet_menu" %}
{% endif %} {% endblock content %} diff --git a/src/templates/core/_partials/_kit_bag_panel.html b/src/templates/core/_partials/_kit_bag_panel.html index b9faa43..2b53b3c 100644 --- a/src/templates/core/_partials/_kit_bag_panel.html +++ b/src/templates/core/_partials/_kit_bag_panel.html @@ -5,7 +5,7 @@ {% for token in tokens %} {% if token.token_type == "coin" or token.token_type == "pass" %}
{% endif %} - {{ token.tooltip_name }} +
+

{{ token.tooltip_name }}

+

{{ token.tooltip_description }}

+ {% if token.tooltip_shoptalk %} + {{ token.tooltip_shoptalk }} + {% endif %} +

{{ token.tooltip_expiry }}

+
{% endif %} {% endfor %} @@ -26,28 +33,32 @@
{% if free_token %}
- - {{ free_token.tooltip_name }}{% if free_count > 1 %} (×{{ free_count }}){% endif %} - +
+

{{ free_token.tooltip_name }}{% if free_count > 1 %} (×{{ free_count }}){% endif %}

+

{{ free_token.tooltip_description }}

+

{{ free_token.tooltip_expiry }}

+
{% endif %} {% if tithe_token %}
- - {{ tithe_token.tooltip_name }}{% if tithe_count > 1 %} (×{{ tithe_count }}){% endif %} - +
+

{{ tithe_token.tooltip_name }}{% if tithe_count > 1 %} (×{{ tithe_count }}){% endif %}

+

{{ tithe_token.tooltip_description }}

+

{{ tithe_token.tooltip_expiry }}

+
{% endif %}