game-views: per-view gear menus (SCROLL filter / ATLAS sources / disabled stubs); reelhouse POST placeholder DRY
All checks were successful
ci/woodpecker/push/pyswiss Pipeline was successful
ci/woodpecker/push/main Pipeline was successful

Each reelhouse view now has its own gear. The single #id_room_menu swaps panes by the active view (room-views.js owns this now — removed from room-scroll.js, which keeps only the title reel):

- hex → default NVM/DEL/BYE; SCROLL → the Frame/Redact log filter; ATLAS → a new source-checkbox pane (.room-menu-atlas / #id_atlas_source_form).
- YARN/POST/PULSE → no menu yet: the gear goes .gear-disabled (opacity 0.6) and an active click is swallowed by a capture-phase listener that flashes a --priRd fa-ban (the burger inactive-flash cadence) instead of opening anything.

ATLAS gear: a checkbox per other reelhouse view (Scroll/Post wired + checked; Yarn/Pulse disabled — struck label, an ✗ in a custom box matching the enabled ✓; starting-majuscule labels, capslock stays reel-only). OK persists to localStorage + re-runs buildAtlasFeed, which now gates each source on atlasSources() (scroll→provenance, post→post).

Also: the reelhouse POST composer drops its bespoke 'Speak at the table' placeholder for the canonical 'Enter a post line' (same as the billboard New Post applet's _form.html + post.html).

Verified: 11 carousel FTs (incl. the new per-view-gear FT) + 310 epic ITs (incl. the atlas-menu IT; room_gate shares _room_gear, unaffected) + the scroll-gear regression FTs + Jasmine, all green.

[[project-room-game-views-carousel]] [[feedback-applet-menu-needs-extend]]
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Disco DeDisco
2026-06-02 15:34:34 -04:00
parent 9754f6a54c
commit 73644e226b
7 changed files with 224 additions and 19 deletions

View File

@@ -350,6 +350,68 @@ html.sea-open #id_aperture_fill {
display: contents;
}
// ── Per-view gear states (room-views.js) ──────────────────────────────────
// On YARN/POST/PULSE the reelhouse gear has no menu yet → dimmed; an active
// click flashes a --priRd fa-ban (same cadence/colour as the burger inactive
// sub-btns) instead of opening anything.
.gear-btn.gear-disabled { opacity: 0.6; }
.gear-btn.gear-flash-ban {
color: rgba(var(--priRd), 1);
box-shadow:
0 0 0.5rem 0.1rem rgba(var(--priRd), 0.75),
0 0 1.2rem 0.3rem rgba(var(--priRd), 0.35);
// Swap the gear glyph for fa-ban (FA solid \f05e) for the duration of the
// flash — the "nothing here" signal, mirroring the burger fan.
.fa-gear::before { content: "\f05e"; }
}
// ── ATLAS gear: source checkboxes ─────────────────────────────────────────
// Custom boxes so the disabled (no-model-yet) sources can show an ✗ that reads
// like the enabled ✓ — same box, different mark — with a struck, dimmed label.
// Labels stay lowercase (capslock is reel-only).
.room-menu-atlas {
.atlas-source-form { display: flex; flex-direction: column; gap: 0.3rem; }
.atlas-source {
display: flex;
align-items: center;
gap: 0.4rem;
text-transform: none;
cursor: pointer;
input[type="checkbox"] {
appearance: none;
-webkit-appearance: none;
margin: 0;
width: 1em;
height: 1em;
flex-shrink: 0;
border: 0.1rem solid rgba(var(--terUser), 0.7);
border-radius: 0.15rem;
display: inline-grid;
place-content: center;
cursor: pointer;
line-height: 1;
&::before { content: ""; font-size: 0.8em; }
&:checked::before { content: ""; color: rgba(var(--terUser), 1); }
}
// Disabled source (yarn/pulse — no backing model): dim + struck NAME
// (not the box, so the ✗ stays legible) + an ✗ in the box.
&:has(input:disabled) {
opacity: 0.55;
cursor: default;
input[type="checkbox"] {
cursor: default;
border-color: rgba(var(--secUser), 0.7);
&::before { content: ""; color: rgba(var(--secUser), 1); }
}
.atlas-source-name { text-decoration: line-through; }
}
}
}
.gate-backdrop {
position: fixed;
inset: 0;