style(astal-menu): unfullscreen glyphs, animated takeover, CyberQueer TUIs

- Expand/collapse controls now use consistent fullscreen ()/unfullscreen ()
  glyphs: the quad "Back" and the taskbar-panel "Back" became  buttons (matching
  the appdrawer's - toggle).
- The taskbar panel takeover now plays the same bouncy quad-pop scale as the quads
  when it expands, so every expansion in the menu is animated.
- monitor-manager (curses) and timer-pick (bash TUI) now use the CyberQueer accent
  palette (red #E40046 + violet #5018dd, true-colour with ANSI fallback) instead of
  cyan/green, matching the rest of the config.
- Added a .stepper-value style for the Columns count stepper.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SUN7gg6GGfnToghMijLm5Y
main
Amir Alexander Abdelbaki 2026-07-07 13:43:11 +02:00
parent 48e32e7eea
commit 4c747221f2
4 changed files with 36 additions and 8 deletions

View File

@ -107,6 +107,14 @@ drawingarea {
.quad-action:active,
button:checked.quad-action { background: @accent; color: @bg; border-color: @accent; }
/* Columns count stepper value (between the / + pills) */
.stepper-value {
min-width: 34px;
font-weight: bold;
color: @accent;
font-feature-settings: "tnum";
}
/* A MenuButton (the settings cog) wraps an inner `button` node that would render a
* second ring inside the outer .quad-action pill flatten it so only one border
* shows. */

View File

@ -68,7 +68,8 @@ class QuadGrid(Gtk.Overlay):
self._takeover_reveal.set_valign(Gtk.Align.FILL)
self._takeover_holder = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
self._takeover_holder.add_css_class("quad-expanded")
self._takeover_reveal.set_child(bordered(self._takeover_holder, radius=16, fill_bg=True))
self._takeover_card = bordered(self._takeover_holder, radius=16, fill_bg=True)
self._takeover_reveal.set_child(self._takeover_card)
self.add_overlay(self._takeover_reveal)
self._takeover_reveal.set_visible(False)
@ -80,8 +81,9 @@ class QuadGrid(Gtk.Overlay):
A Back row is prepended so the covered quads can be restored."""
header = Gtk.CenterBox()
header.add_css_class("expanded-header")
back = Gtk.Button(label=" Back")
back = Gtk.Button(label="") # nf-fa-compress (unfullscreen)
back.add_css_class("quad-action")
back.set_tooltip_text("Collapse")
back.connect("clicked", lambda *_: on_back())
header.set_start_widget(back)
self._takeover_holder.append(header)
@ -90,6 +92,9 @@ class QuadGrid(Gtk.Overlay):
def show_takeover(self) -> None:
self._takeover_reveal.set_visible(True)
self._takeover_card.add_css_class("quad-pop") # same bouncy scale as a quad
GLib.timeout_add(340, lambda: (self._takeover_card.remove_css_class("quad-pop"),
GLib.SOURCE_REMOVE)[1])
self._takeover_reveal.set_reveal_child(True)
self.grid.add_css_class("dimmed")
@ -156,8 +161,9 @@ class QuadGrid(Gtk.Overlay):
def _expanded_header(self, title: str) -> Gtk.Widget:
header = Gtk.CenterBox()
header.add_css_class("expanded-header")
back = Gtk.Button(label=" Back") # nf arrow
back = Gtk.Button(label="") # nf-fa-compress (unfullscreen)
back.add_css_class("quad-action")
back.set_tooltip_text("Collapse")
back.connect("clicked", lambda *_: self.request_collapse())
header.set_start_widget(back)
lbl = Gtk.Label(label=title)

View File

@ -347,8 +347,20 @@ class App:
def _init_colors(self):
curses.start_color()
curses.use_default_colors()
# 1 = selected (cyan bold)
curses.init_pair(1, curses.COLOR_CYAN, -1)
# Match the rest of the config (CyberQueer): accent red #E40046 for the
# selection, electric violet #5018dd for headers/help. Define them as true
# RGB when the terminal allows (kitty does); otherwise fall back to the
# nearest ANSI colour so the tool still works on a basic console.
accent, violet = curses.COLOR_CYAN, curses.COLOR_GREEN
if curses.COLORS >= 256 and curses.can_change_color():
try:
curses.init_color(16, 894, 0, 275) # #E40046
curses.init_color(17, 314, 94, 867) # #5018dd
accent, violet = 16, 17
except curses.error:
pass
# 1 = selected (accent red, bold)
curses.init_pair(1, accent, -1)
# 2 = normal (white)
curses.init_pair(2, curses.COLOR_WHITE, -1)
# 3 = mirror target (yellow)
@ -357,8 +369,8 @@ class App:
curses.init_pair(4, curses.COLOR_BLACK + 8 if curses.COLORS >= 16 else curses.COLOR_WHITE, -1)
# 5 = status bar (reversed)
curses.init_pair(5, -1, -1)
# 6 = help (green)
curses.init_pair(6, curses.COLOR_GREEN, -1)
# 6 = help / headers (violet)
curses.init_pair(6, violet, -1)
def _get_scale(self, pane_cols: int, pane_rows: int) -> float:
"""Return cached scale; recompute only on resize or when a monitor escapes the viewport."""

View File

@ -13,7 +13,9 @@ hide() { printf "${CSI}?25l"; }
show() { printf "${CSI}?25h"; }
b="${CSI}1m" ; d="${CSI}2m" ; r="${CSI}0m"
cy="${CSI}96m"; gn="${CSI}92m"
# CyberQueer accents to match the rest of the config: red #E40046, violet #5018dd
# (24-bit truecolor; kitty renders these exactly).
cy="${CSI}38;2;228;0;70m" ; gn="${CSI}38;2;80;24;221m"
yl="${CSI}93m"; wh="${CSI}97m"; gy="${CSI}90m"
rv="${CSI}7m"