Fix persistent blink: scanline animation still active via base.css cascade

Root cause: removing 'animation' from dashboard.css body::before did NOT disable
the scanline — it just stopped overriding base.css which still had
'animation: scanline 8s linear infinite'. CSS cascade means the base.css value
remained active. Fixed by setting 'animation: none' explicitly in dashboard.css.

Also fix base.css (used by all pages including ticket page):
- Set body::before animation: none (removes GPU compositing layer from scanline)
- Change corner-pulse/subtle-pulse/pulse-glow/pulse-red keyframes from text-shadow
  and box-shadow animations to opacity (GPU composited, zero CPU repaint overhead)
- Change exec-running-pulse from box-shadow to opacity
- Remove box-shadow from .lt-table tr:hover, .lt-card:hover, .lt-stat-card:hover
- Remove text-shadow/box-shadow/transform from .lt-btn:hover and variants
- Remove text-shadow from a:hover

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-19 12:12:44 -04:00
parent 328c103460
commit 68ff89b48c
2 changed files with 13 additions and 24 deletions

View File

@@ -175,7 +175,6 @@ a {
} }
a:hover { a:hover {
color: var(--terminal-amber); color: var(--terminal-amber);
text-shadow: var(--glow-amber);
} }
ul, ol { list-style: none; } ul, ol { list-style: none; }
@@ -200,7 +199,7 @@ body::before {
); );
pointer-events: none; pointer-events: none;
z-index: var(--z-overlay); z-index: var(--z-overlay);
animation: scanline 8s linear infinite; animation: none;
} }
/* Binary data-stream watermark — bottom-right corner */ /* Binary data-stream watermark — bottom-right corner */
@@ -650,7 +649,6 @@ pre {
} }
.lt-card:hover { .lt-card:hover {
border-color: var(--terminal-green); border-color: var(--terminal-green);
box-shadow: var(--box-glow-green);
} }
.lt-card-title { .lt-card-title {
@@ -701,13 +699,9 @@ pre {
background: var(--terminal-green-dim); background: var(--terminal-green-dim);
color: var(--terminal-amber); color: var(--terminal-amber);
border-color: var(--terminal-amber); border-color: var(--terminal-amber);
text-shadow: var(--glow-amber-intense);
box-shadow: var(--box-glow-amber);
transform: translateY(-2px);
} }
.lt-btn:active { .lt-btn:active {
transform: translateY(0); opacity: 0.85;
box-shadow: var(--box-glow-green);
} }
.lt-btn:disabled { .lt-btn:disabled {
opacity: 0.4; opacity: 0.4;
@@ -725,7 +719,6 @@ pre {
.lt-btn-primary::before { content: '> '; } .lt-btn-primary::before { content: '> '; }
.lt-btn-primary:hover { .lt-btn-primary:hover {
background: var(--terminal-amber-dim); background: var(--terminal-amber-dim);
box-shadow: var(--box-glow-amber);
} }
/* Red (destructive / danger) */ /* Red (destructive / danger) */
@@ -737,8 +730,6 @@ pre {
background: var(--terminal-red-dim); background: var(--terminal-red-dim);
color: var(--terminal-red); color: var(--terminal-red);
border-color: var(--terminal-red); border-color: var(--terminal-red);
text-shadow: var(--glow-red);
box-shadow: var(--box-glow-red);
} }
/* Small variant */ /* Small variant */
@@ -899,7 +890,6 @@ pre {
} }
.lt-table tbody tr:hover { .lt-table tbody tr:hover {
background: rgba(0, 255, 65, 0.06); background: rgba(0, 255, 65, 0.06);
box-shadow: inset 0 0 20px rgba(0, 255, 65, 0.05);
} }
/* Data table — compact, row-only separators, good for dense data */ /* Data table — compact, row-only separators, good for dense data */
@@ -1357,8 +1347,6 @@ pre {
} }
.lt-stat-card:hover { .lt-stat-card:hover {
border-color: var(--terminal-amber); border-color: var(--terminal-amber);
box-shadow: var(--box-glow-amber);
transform: translateY(-2px);
} }
.lt-stat-card.active { .lt-stat-card.active {
background: var(--terminal-amber-dim); background: var(--terminal-amber-dim);
@@ -1560,23 +1548,23 @@ pre {
} }
@keyframes corner-pulse { @keyframes corner-pulse {
0%, 100% { text-shadow: var(--glow-green); } 0%, 100% { opacity: 0.7; }
50% { text-shadow: var(--glow-green-intense); } 50% { opacity: 1; }
} }
@keyframes subtle-pulse { @keyframes subtle-pulse {
0%, 100% { text-shadow: var(--glow-amber); } 0%, 100% { opacity: 0.75; }
50% { text-shadow: var(--glow-amber-intense); } 50% { opacity: 1; }
} }
@keyframes pulse-glow { @keyframes pulse-glow {
0%, 100% { text-shadow: 0 0 5px currentColor, 0 0 10px currentColor; } 0%, 100% { opacity: 0.7; }
50% { text-shadow: 0 0 10px currentColor, 0 0 20px currentColor, 0 0 30px currentColor; } 50% { opacity: 1; }
} }
@keyframes pulse-red { @keyframes pulse-red {
0%, 100% { box-shadow: 0 0 0 0 rgba(255, 68, 68, 0.5); } 0%, 100% { opacity: 0.6; }
50% { box-shadow: 0 0 6px 3px rgba(255, 68, 68, 0.2); } 50% { opacity: 1; }
} }
@keyframes focus-pulse { @keyframes focus-pulse {
@@ -1615,8 +1603,8 @@ pre {
/* Item pulse for actively running tasks */ /* Item pulse for actively running tasks */
@keyframes exec-running-pulse { @keyframes exec-running-pulse {
0%, 100% { border-color: var(--terminal-green); } 0%, 100% { border-color: var(--terminal-green); opacity: 0.7; }
50% { border-color: var(--status-running); box-shadow: 0 0 8px rgba(255, 193, 7, 0.35); } 50% { border-color: var(--status-running); opacity: 1; }
} }
.lt-item-running { animation: exec-running-pulse 2s ease-in-out infinite; } .lt-item-running { animation: exec-running-pulse 2s ease-in-out infinite; }

View File

@@ -117,6 +117,7 @@ body::before {
); );
pointer-events: none; pointer-events: none;
z-index: var(--z-overlay); z-index: var(--z-overlay);
animation: none;
} }
/* Screen Flicker Effect */ /* Screen Flicker Effect */