From 2aec2d8f444f71bc00afa2a5b7cbb90482a9bf89 Mon Sep 17 00:00:00 2001
From: th
Date: Sat, 11 Apr 2026 18:48:54 +0200
Subject: [PATCH] theme: exempt status-indicator animations from anim-speed
override
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cursor blink, card-bar-pulse, sync spinner and the chat unread blink all
have deliberate cadences — letting body.anim-fast/anim-slow speed them up
turns them into unreadable strobes (or the sync icon spinning at 100ms).
Higher-specificity rules pin each one to its natural duration via
!important.
Co-Authored-By: Claude Opus 4.6 (1M context)
---
public/css/style.css | 23 +++++++++++++++++++++++
public/plugins/chat/chat.css | 7 +++++++
2 files changed, 30 insertions(+)
diff --git a/public/css/style.css b/public/css/style.css
index 703bd30..d310af2 100644
--- a/public/css/style.css
+++ b/public/css/style.css
@@ -107,6 +107,29 @@ body.anim-slow *, body.anim-slow *::before, body.anim-slow *::after {
transition-duration: 400ms !important;
animation-duration: 600ms !important;
}
+/* Blink / pulse animations are status indicators with deliberate cadences
+ (cursor, overdue bar, unread chat button, new collab bucket 3-pulse).
+ Speeding them up makes them useless strobes, so they ignore the global
+ anim-* override via higher-specificity rules. */
+body.anim-fast .cursor-blink::after,
+body.anim-slow .cursor-blink::after {
+ animation: blink 1s step-end infinite !important;
+ animation-duration: 1s !important;
+}
+body.anim-fast .card-bar-pulse,
+body.anim-slow .card-bar-pulse {
+ animation: pulse-glow 2s ease-in-out infinite !important;
+ animation-duration: 2s !important;
+}
+body.anim-fast .board-card:has(.card-bar-pulse) .card-bar-pulse ~ * .text-t-danger,
+body.anim-slow .board-card:has(.card-bar-pulse) .card-bar-pulse ~ * .text-t-danger {
+ animation-duration: 2s !important;
+}
+body.anim-fast .card-spinner,
+body.anim-slow .card-spinner {
+ animation: spin 0.8s linear infinite !important;
+ animation-duration: 0.8s !important;
+}
/* ── Theme preview (settings) ── */
.theme-preview {
diff --git a/public/plugins/chat/chat.css b/public/plugins/chat/chat.css
index f48d86f..75f2167 100644
--- a/public/plugins/chat/chat.css
+++ b/public/plugins/chat/chat.css
@@ -332,3 +332,10 @@
#chat-footer-btn.blinking {
animation: chatBlink 1.2s ease-in-out infinite;
}
+/* Ignore the global anim-speed override — the unread blink has a
+ deliberate cadence that becomes an unreadable strobe when sped up. */
+body.anim-fast #chat-footer-btn.blinking,
+body.anim-slow #chat-footer-btn.blinking {
+ animation: chatBlink 1.2s ease-in-out infinite !important;
+ animation-duration: 1.2s !important;
+}
|