1+ @keyframes pulse {
2+ 0% { transform : scale (1 ); }
3+ 50% { transform : scale (1.05 ); }
4+ 100% { transform : scale (1 ); }
5+ }
6+
7+ @keyframes float {
8+ 0% { transform : translateY (0px ); }
9+ 50% { transform : translateY (-10px ); }
10+ 100% { transform : translateY (0px ); }
11+ }
12+
13+ .loading-pulse {
14+ animation : pulse 2s infinite ease-in-out;
15+ }
16+
17+ .loading-float {
18+ animation : float 3s infinite ease-in-out;
19+ }
20+
21+ .scenario-running-indicator {
22+ position : fixed;
23+ top : 6rem ;
24+ right : 2rem ;
25+ background : rgba (255 , 193 , 7 , 0.1 );
26+ border : 2px solid # ffc107 ;
27+ border-radius : 1rem ;
28+ padding : 1rem 1.5rem ;
29+ display : flex;
30+ align-items : center;
31+ gap : 1rem ;
32+ box-shadow : 0 4px 12px rgba (0 , 0 , 0 , 0.1 );
33+ z-index : 1000 ;
34+ backdrop-filter : blur (8px );
35+ }
36+
37+ .scenario-running-indicator .spinner {
38+ width : 1.5rem ;
39+ height : 1.5rem ;
40+ border : 3px solid rgba (255 , 193 , 7 , 0.3 );
41+ border-top-color : # ffc107 ;
42+ border-radius : 50% ;
43+ animation : spin 1s linear infinite;
44+ }
45+
46+ @keyframes spin {
47+ to { transform : rotate (360deg ); }
48+ }
49+
50+ .progress-bar {
51+ width : var (--progress-width );
52+ }
53+
54+ .bg-success-subtle {
55+ background-color : rgba (25 , 135 , 84 , 0.1 );
56+ }
57+
58+ .bg-warning-subtle {
59+ background-color : rgba (255 , 193 , 7 , 0.1 );
60+ }
61+
62+ .bg-danger-subtle {
63+ background-color : rgba (220 , 53 , 69 , 0.1 );
64+ }
65+
66+ .bg-primary-subtle {
67+ background-color : rgba (13 , 110 , 253 , 0.1 );
68+ }
69+
70+ /* Smooth transitions */
71+ .btn , .badge , .card {
72+ transition : all 0.2s ease-in-out;
73+ }
74+
75+ .btn : hover {
76+ transform : translateY (-1px );
77+ box-shadow : 0 4px 6px rgba (0 , 0 , 0 , 0.1 );
78+ }
79+
80+ # table-scenarios .btn i {
81+ display : flex;
82+ align-items : center;
83+ justify-content : center;
84+ width : 100% ;
85+ height : 100% ;
86+ }
87+
88+ /* Table styles */
89+ .table > : not (caption ) > * > * {
90+ padding : 1rem ;
91+ }
92+
93+ .table tbody tr {
94+ transition : background-color 0.2s ease;
95+ }
96+
97+ .table tbody tr : hover {
98+ background-color : rgba (0 , 0 , 0 , 0.02 );
99+ }
100+
101+ /* Card styles */
102+ .card {
103+ border-radius : 0.5rem ;
104+ transition : transform 0.2s ease, box-shadow 0.2s ease;
105+ }
106+
107+ .card : hover {
108+ transform : translateY (-2px );
109+ box-shadow : 0 8px 16px rgba (0 , 0 , 0 , 0.1 ) !important ;
110+ }
111+
112+ .card-header {
113+ border-bottom : 1px solid rgba (0 , 0 , 0 , 0.05 );
114+ }
115+
116+ /* Progress bar */
117+ .progress {
118+ height : 0.75rem ;
119+ border-radius : 1rem ;
120+ background-color : rgba (0 , 0 , 0 , 0.05 );
121+ }
122+
123+ .progress-bar {
124+ border-radius : 1rem ;
125+ transition : width 0.6s ease;
126+ }
127+
128+ /* Tooltips */
129+ [title ] {
130+ position : relative;
131+ }
132+
133+ [title ]: hover ::after {
134+ content : attr (title);
135+ position : absolute;
136+ bottom : 100% ;
137+ left : 50% ;
138+ transform : translateX (-50% );
139+ background-color : rgba (0 , 0 , 0 , 0.8 );
140+ color : white;
141+ padding : 0.5rem 0.75rem ;
142+ border-radius : 0.375rem ;
143+ font-size : 0.875rem ;
144+ white-space : nowrap;
145+ z-index : 1000 ;
146+ margin-bottom : 0.5rem ;
147+ opacity : 0 ;
148+ pointer-events : none;
149+ transition : opacity 0.2s ease, transform 0.2s ease;
150+ }
151+
152+ [title ]: hover ::after {
153+ opacity : 1 ;
154+ transform : translateX (-50% ) translateY (-0.25rem );
155+ }
156+
157+ /* Icon styles */
158+ .fa {
159+ font-size : 1rem ;
160+ }
161+
162+ .fa-3x {
163+ font-size : 3rem ;
164+ }
165+
166+ /* Button styles */
167+ .btn-sm {
168+ padding : 0.4rem 0.6rem ;
169+ }
170+
171+ .btn-outline-primary : hover {
172+ background-color : var (--bs-primary );
173+ color : white;
174+ }
175+
176+ /* Badge styles */
177+ .badge {
178+ font-weight : 500 ;
179+ }
180+
181+ /* Textarea styles */
182+ textarea .form-control {
183+ border-radius : 0.375rem ;
184+ border : 1px solid rgba (0 , 0 , 0 , 0.1 );
185+ transition : border-color 0.2s ease, box-shadow 0.2s ease;
186+ }
187+
188+ textarea .form-control : focus {
189+ border-color : var (--bs-primary );
190+ box-shadow : 0 0 0 0.2rem rgba (13 , 110 , 253 , 0.25 );
191+ }
192+
193+ /* Empty state styles */
194+ .empty-state-container {
195+ max-width : 500px ;
196+ margin : 0 auto;
197+ }
198+
199+ .empty-state-container i {
200+ display : inline-block;
201+ margin-bottom : 1.5rem ;
202+ color : var (--bs-primary );
203+ opacity : 0.9 ;
204+ }
205+
206+ .empty-state-container h3 {
207+ font-size : 1.75rem ;
208+ margin-bottom : 1rem ;
209+ }
210+
211+ .empty-state-container p {
212+ font-size : 1.1rem ;
213+ line-height : 1.6 ;
214+ color : # 6c757d ;
215+ }
216+
217+ /* Button styles */
218+ .btn-lg {
219+ padding : 0.75rem 1.5rem ;
220+ font-size : 1.1rem ;
221+ }
222+
223+ .btn-lg i {
224+ font-size : 1.2rem ;
225+ }
226+
227+ /* Card hover effect */
228+ .card {
229+ transition : transform 0.3s ease, box-shadow 0.3s ease;
230+ }
231+
232+ .card : hover {
233+ transform : translateY (-5px );
234+ box-shadow : 0 12px 24px rgba (0 , 0 , 0 , 0.1 ) !important ;
235+ }
236+
237+ /* Progress bar animation */
238+ .progress-bar {
239+ position : relative;
240+ overflow : hidden;
241+ }
242+
243+ .progress-bar ::after {
244+ content : '' ;
245+ position : absolute;
246+ top : 0 ;
247+ left : 0 ;
248+ right : 0 ;
249+ bottom : 0 ;
250+ background : linear-gradient (
251+ 90deg ,
252+ rgba (255 , 255 , 255 , 0 ) 0% ,
253+ rgba (255 , 255 , 255 , 0.2 ) 50% ,
254+ rgba (255 , 255 , 255 , 0 ) 100%
255+ );
256+ animation : progress-shine 2s infinite;
257+ }
258+
259+ @keyframes progress-shine {
260+ 0% { transform : translateX (-100% ); }
261+ 100% { transform : translateX (100% ); }
262+ }
0 commit comments