new apps.epic app migrations for token expiration & cooldown; reject token renamed to return token everywhere; new mapps.epic.models & .views for expiration & cooldown; new apps.dash.views to manage stacking of like Token types not just in the kit bag but in the Gameboard's Game Kit applet & in the Dashwallet's Tokens applet; Free Tokens now display correctly in kit bag; apps.lyric.admin now ensures superuser cannot grant Free Tokens without an expiration date; corresponding tests in .tests.integrated.test_admin.TokenAdminFormTest; screendumps occurring for every test, regardless of passfail status, after one fail fixed in FTs.base; FTs.test_gatekeeper.GameKitInsertTest.test_free_token_insert_via_kit_consumed_on_confirm, for test purposes only, ensures starting Free Token deleted before fresh one assigned w. full 7d expiration battery

This commit is contained in:
Disco DeDisco
2026-03-15 16:08:34 -04:00
parent 18ba242647
commit 2e24175ec8
16 changed files with 244 additions and 69 deletions

View File

@@ -32,6 +32,11 @@ $gate-line: 2px;
gap: 0.5rem;
}
// Scroll-lock when gate is open. Uses html (not body) to avoid CSS overflow
// propagation quirk on Linux headless Firefox where body overflow:hidden can
// disrupt pointer events on position:fixed descendants.
// NOTE: may be superfluous — root cause of CI kit-btn failures turned out to be
// game-kit.js missing from git (was in gitignored STATIC_ROOT only).
html:has(.gate-overlay) {
overflow: hidden;
}
@@ -68,6 +73,9 @@ body:has(.gate-overlay) {
overflow-y: auto;
overscroll-behavior: contain;
-webkit-overflow-scrolling: touch;
// Prevents backdrop from intercepting clicks on position:fixed elements
// (e.g. #id_kit_btn) in Linux headless Firefox.
// NOTE: may be superfluous — see html:has comment above.
pointer-events: none;
}
@@ -152,7 +160,7 @@ body:has(.gate-overlay) {
0 0 0.6rem rgba(var(--terUser), 0.5),
0 0 1.4rem rgba(var(--terUser), 0.2),
;
.token-reject-btn { text-shadow: 0 0 0.5rem rgba(var(--terUser), 0.8); }
.token-return-btn { text-shadow: 0 0 0.5rem rgba(var(--terUser), 0.8); }
&:hover {
border-color: rgba(var(--terUser), 1);
@@ -195,7 +203,7 @@ body:has(.gate-overlay) {
}
}
.token-reject-btn {
.token-return-btn {
position: absolute;
inset: 0;
background: transparent;
@@ -232,7 +240,7 @@ body:has(.gate-overlay) {
line-height: 1.3;
}
.token-reject-label {
.token-return-label {
font-size: 0.55em;
text-transform: uppercase;
letter-spacing: 0.06em;