@ -155,10 +155,13 @@ watch(visibleAreas, (newAreas, oldAreas) => {
} , 300 + ( index * 150 ) ) / / S t a g g e r : 3 0 0 m s , 4 5 0 m s , 6 0 0 m s , . . .
} )
/ / C l e a r a l l h i g h l i g h t s a f t e r a n i m a t i o n
setTimeout ( ( ) => {
newlyAddedAreaIds . value = [ ]
} , 2000 )
/ / C l e a r a l l h i g h l i g h t s a f t e r a n i m a t i o n c o m p l e t e s ( i n c l u d i n g f a d e - o u t )
/ / A n i m a t i o n t i m e l i n e : g l o w + p u l s e 2 x ( ~ 1 . 4 s ) + f a d e - o u t ( 0 . 6 s ) = 2 . 0 s
/ / W a i t 2 . 1 s t o e n s u r e f a d e - o u t c o m p l e t e s b e f o r e r e m o v i n g c l a s s
/ / T E M P O R A R I L Y D I S A B L E D F O R T E S T I N G
/ / s e t T i m e o u t ( ( ) = > {
/ / n e w l y A d d e d A r e a I d s . v a l u e = [ ]
/ / } , 2 1 0 0 )
}
previousAreaIds . value = newAreaIds
@ -295,22 +298,35 @@ function setTabRef(areaId: string, el: any) {
transition : all 0.5 s cubic - bezier ( 0.4 , 0 , 0.2 , 1 ) ;
}
/* Highlight animation for newly added tabs */
/* Highlight animation for newly added tabs - 2x blink then stay transparent */
@ keyframes highlight - glow {
0 % ,
100 % {
0 % {
box - shadow : 0 0 0 0 rgba ( 233 , 30 , 133 , 0 ) ;
}
/* First blink */
25 % {
box - shadow : 0 0 20 px 4 px rgba ( 233 , 30 , 133 , 0.6 ) ,
0 0 40 px 8 px rgba ( 201 , 125 , 255 , 0.4 ) ;
}
50 % {
box - shadow : 0 0 0 0 rgba ( 233 , 30 , 133 , 0 ) ;
}
/* Second blink */
75 % {
box - shadow : 0 0 20 px 4 px rgba ( 233 , 30 , 133 , 0.6 ) ,
0 0 40 px 8 px rgba ( 201 , 125 , 255 , 0.4 ) ;
}
/* Stay transparent after 2nd blink */
100 % {
box - shadow : 0 0 0 0 rgba ( 233 , 30 , 133 , 0 ) ;
}
}
@ keyframes highlight - pulse {
0 % ,
100 % {
transform : scale ( 1 ) ;
@ -321,9 +337,35 @@ function setTabRef(areaId: string, el: any) {
}
}
/* Background gradient - stay visible during blinks, then fade out slowly */
@ keyframes highlight - background {
0 % {
background : linear - gradient ( 135 deg , rgba ( 233 , 30 , 133 , 0.2 ) , rgba ( 201 , 125 , 255 , 0.2 ) ) ;
}
/* Stay visible during first blink */
25 % {
background : linear - gradient ( 135 deg , rgba ( 233 , 30 , 133 , 0.2 ) , rgba ( 201 , 125 , 255 , 0.2 ) ) ;
}
/* Start fading slowly after first blink (over 1s instead of 0.5s) */
50 % {
background : linear - gradient ( 135 deg , rgba ( 233 , 30 , 133 , 0.2 ) , rgba ( 201 , 125 , 255 , 0.2 ) ) ;
}
/* Fade to transparent gradually */
100 % {
background : transparent ;
}
}
. tab - highlight {
animation : highlight - glow 1 s ease - in - out 2 ,
highlight - pulse 0.5 s ease - in - out 2 ;
background : linear - gradient ( 135 deg , rgba ( 233 , 30 , 133 , 0.2 ) , rgba ( 201 , 125 , 255 , 0.2 ) ) ! important ;
/* Initial background state (will be animated) */
background : linear - gradient ( 135 deg , rgba ( 233 , 30 , 133 , 0.2 ) , rgba ( 201 , 125 , 255 , 0.2 ) ) ;
/* Animations */
animation : highlight - glow 2 s ease - in - out 1 forwards ,
highlight - pulse 0.5 s ease - in - out 2 ,
highlight - background 2 s ease - in - out 1 forwards ;
}
< / style >