PluginProbe
AI Builder – Generate pages, blocks, images & translate with AI / 2.1.4
AI Builder – Generate pages, blocks, images & translate with AI v2.1.4
2.7.10 2.7.9 2.7.8 2.0.8 2.0.9 2.1.0 2.1.1 2.1.10 2.1.11 2.1.12 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.3.0 2.3.10 All 122 releases
ai-builder / admin / pages / credits.php

credits.php in AI Builder – Generate pages, blocks, images & translate with AI 2.1.4, at admin/pages/credits.php

711 lines 28.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if (!defined('ABSPATH'))
3 exit; // Exit if accessed directly
4
5 // Vérifier si l'utilisateur a un token JWT
6 $jwt_token = get_option('aibui_jwt_token', '');
7 if (empty($jwt_token)) {
8 echo '<div class="ai-auth-container"><div class="ai-message error">' . esc_html__('Please sign in to access your credits.', 'ai-builder') . '</div></div>';
9 return;
10 }
11 ?>
12
13 <div class="ai-credits-container ai-fade-in">
14 <!-- Header -->
15 <div class="ai-credits-header">
16 <h1>AI Credits & Subscription</h1>
17 <p>Manage your AI credits and subscription plan</p>
18 </div>
19
20 <!-- Current Status -->
21 <div class="ai-status-section">
22 <div class="ai-status-card">
23 <div class="ai-status-icon">
24 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
25 <circle cx="12" cy="12" r="10" stroke="currentColor" stroke-width="2" />
26 <path d="M12 6V12L16 14" stroke="currentColor" stroke-width="2" stroke-linecap="round"
27 stroke-linejoin="round" />
28 </svg>
29 </div>
30 <div class="ai-status-content">
31 <h3>Current Credits</h3>
32 <div class="ai-credits-display" id="current-credits">
33 <span class="ai-loading" style="display: none;"></span>
34 Loading...
35 </div>
36 </div>
37 </div>
38
39 <div class="ai-status-card">
40 <div class="ai-status-icon">
41 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
42 <path d="M12 2L2 7L12 12L22 7L12 2Z" stroke="currentColor" stroke-width="2"
43 stroke-linejoin="round" />
44 <path d="M2 17L12 22L22 17" stroke="currentColor" stroke-width="2" stroke-linejoin="round" />
45 <path d="M2 12L12 17L22 12" stroke="currentColor" stroke-width="2" stroke-linejoin="round" />
46 </svg>
47 </div>
48 <div class="ai-status-content">
49 <h3>Subscription Plan</h3>
50 <div class="ai-plan-display" id="current-plan">
51 <span class="ai-loading" style="display: none;"></span>
52 Loading...
53 </div>
54 </div>
55 </div>
56 </div>
57
58 <!-- Subscription Management -->
59 <div class="ai-section">
60 <div class="ai-section-header">
61 <h2>Subscription Management</h2>
62 <p>Choose the perfect plan for your AI needs</p>
63 </div>
64
65 <div class="ai-subscription-actions" id="subscription-plans-container">
66 <!-- Plan Essential -->
67 <div class="ai-plan-card-wrapper" data-plan="essential">
68 <div class="ai-plan-card ai-plan-essential">
69 <div class="ai-plan-badge">Essential</div>
70 <div class="ai-plan-header">
71 <div class="ai-plan-title">
72 <h3>Essential</h3>
73 </div>
74 </div>
75
76 <div class="ai-plan-features">
77 <div class="ai-feature-item">
78 <div class="ai-feature-icon">
79 <svg width="18" height="18" viewBox="0 0 24 24" fill="none"
80 xmlns="http://www.w3.org/2000/svg">
81 <path d="M20 6L9 17L4 12" stroke="currentColor" stroke-width="2.5"
82 stroke-linecap="round" stroke-linejoin="round" />
83 </svg>
84 </div>
85 <span class="ai-feature-text">750 credits every month</span>
86 </div>
87
88 <div class="ai-feature-item">
89 <div class="ai-feature-icon">
90 <svg width="18" height="18" viewBox="0 0 24 24" fill="none"
91 xmlns="http://www.w3.org/2000/svg">
92 <path d="M20 6L9 17L4 12" stroke="currentColor" stroke-width="2.5"
93 stroke-linecap="round" stroke-linejoin="round" />
94 </svg>
95 </div>
96 <span class="ai-feature-text">Generation of pages, blocks, images & texts</span>
97 </div>
98
99 <div class="ai-feature-item">
100 <div class="ai-feature-icon">
101 <svg width="18" height="18" viewBox="0 0 24 24" fill="none"
102 xmlns="http://www.w3.org/2000/svg">
103 <path d="M20 6L9 17L4 12" stroke="currentColor" stroke-width="2.5"
104 stroke-linecap="round" stroke-linejoin="round" />
105 </svg>
106 </div>
107 <span class="ai-feature-text">Extra credits available on demand</span>
108 </div>
109 </div>
110
111 <div class="ai-plan-header">
112 <div class="ai-plan-title">
113 <div class="ai-plan-price">
114 <span class="ai-price-amount">$9</span>
115 <span class="ai-price-period">/month</span>
116 </div>
117 <span class="ai-price-credit">$0.012 per credit</span>
118 </div>
119 </div>
120
121 <div class="ai-plan-cta">
122 <button type="button" class="ai-cta-btn ai-plan-btn" data-subscription-type="essential">
123 <span class="ai-loading" style="display: none;"></span>
124 <span class="btn-text">Choose Essential</span>
125 </button>
126 </div>
127 </div>
128 </div>
129
130 <!-- Plan Premium -->
131 <div class="ai-plan-card-wrapper" data-plan="premium">
132 <div class="ai-plan-card ai-plan-premium ai-plan-popular">
133 <div class="ai-plan-badge ai-plan-badge-popular">Most Popular</div>
134 <div class="ai-plan-header">
135 <div class="ai-plan-title">
136 <h3>Premium</h3>
137 </div>
138 </div>
139
140 <div class="ai-plan-features">
141 <div class="ai-feature-item">
142 <div class="ai-feature-icon">
143 <svg width="18" height="18" viewBox="0 0 24 24" fill="none"
144 xmlns="http://www.w3.org/2000/svg">
145 <path d="M20 6L9 17L4 12" stroke="currentColor" stroke-width="2.5"
146 stroke-linecap="round" stroke-linejoin="round" />
147 </svg>
148 </div>
149 <span class="ai-feature-text">2000 credits every month</span>
150 </div>
151
152 <div class="ai-feature-item">
153 <div class="ai-feature-icon">
154 <svg width="18" height="18" viewBox="0 0 24 24" fill="none"
155 xmlns="http://www.w3.org/2000/svg">
156 <path d="M20 6L9 17L4 12" stroke="currentColor" stroke-width="2.5"
157 stroke-linecap="round" stroke-linejoin="round" />
158 </svg>
159 </div>
160 <span class="ai-feature-text">Generation of pages, blocks, images & texts</span>
161 </div>
162
163 <div class="ai-feature-item">
164 <div class="ai-feature-icon">
165 <svg width="18" height="18" viewBox="0 0 24 24" fill="none"
166 xmlns="http://www.w3.org/2000/svg">
167 <path d="M20 6L9 17L4 12" stroke="currentColor" stroke-width="2.5"
168 stroke-linecap="round" stroke-linejoin="round" />
169 </svg>
170 </div>
171 <span class="ai-feature-text">Extra credits available on demand</span>
172 </div>
173 </div>
174
175 <div class="ai-plan-header">
176 <div class="ai-plan-title">
177 <div class="ai-plan-price">
178 <span class="ai-price-amount">$19</span>
179 <span class="ai-price-period">/month</span>
180 </div>
181 <span class="ai-price-credit">$0.009 per credit</span>
182 </div>
183 </div>
184
185 <div class="ai-plan-cta">
186 <button type="button" class="ai-cta-btn ai-plan-btn" data-subscription-type="premium">
187 <span class="ai-loading" style="display: none;"></span>
188 <span class="btn-text">Choose Premium</span>
189 </button>
190 </div>
191 </div>
192 </div>
193
194 <!-- Plan Creator -->
195 <div class="ai-plan-card-wrapper" data-plan="creator">
196 <div class="ai-plan-card ai-plan-creator">
197 <div class="ai-plan-badge">Creator</div>
198 <div class="ai-plan-header">
199 <div class="ai-plan-title">
200 <h3>Creator</h3>
201 </div>
202 </div>
203
204 <div class="ai-plan-features">
205 <div class="ai-feature-item">
206 <div class="ai-feature-icon">
207 <svg width="18" height="18" viewBox="0 0 24 24" fill="none"
208 xmlns="http://www.w3.org/2000/svg">
209 <path d="M20 6L9 17L4 12" stroke="currentColor" stroke-width="2.5"
210 stroke-linecap="round" stroke-linejoin="round" />
211 </svg>
212 </div>
213 <span class="ai-feature-text">6000 credits every month</span>
214 </div>
215
216 <div class="ai-feature-item">
217 <div class="ai-feature-icon">
218 <svg width="18" height="18" viewBox="0 0 24 24" fill="none"
219 xmlns="http://www.w3.org/2000/svg">
220 <path d="M20 6L9 17L4 12" stroke="currentColor" stroke-width="2.5"
221 stroke-linecap="round" stroke-linejoin="round" />
222 </svg>
223 </div>
224 <span class="ai-feature-text">Generation of pages, blocks, images & texts</span>
225 </div>
226
227 <div class="ai-feature-item">
228 <div class="ai-feature-icon">
229 <svg width="18" height="18" viewBox="0 0 24 24" fill="none"
230 xmlns="http://www.w3.org/2000/svg">
231 <path d="M20 6L9 17L4 12" stroke="currentColor" stroke-width="2.5"
232 stroke-linecap="round" stroke-linejoin="round" />
233 </svg>
234 </div>
235 <span class="ai-feature-text">Extra credits available on demand</span>
236 </div>
237 </div>
238
239 <div class="ai-plan-header">
240 <div class="ai-plan-title">
241 <div class="ai-plan-price">
242 <span class="ai-price-amount">$49</span>
243 <span class="ai-price-period">/month</span>
244 </div>
245 <span class="ai-price-credit">$0.008 per credit</span>
246 </div>
247 </div>
248
249 <div class="ai-plan-cta">
250 <button type="button" class="ai-cta-btn ai-plan-btn" data-subscription-type="creator">
251 <span class="ai-loading" style="display: none;"></span>
252 <span class="btn-text">Choose Creator</span>
253 </button>
254 </div>
255 </div>
256 </div>
257 </div>
258
259 <div class="ai-section-header" style="margin-bottom: 120px;">
260 </div>
261
262 <!-- Cancel Subscription Button (shown when user has active subscription) -->
263 <div class="ai-action-card" id="cancel-subscription-card" style="display: none; margin-top: 24px;">
264 <div class="ai-action-icon">
265 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
266 <path d="M12 2V6" stroke="currentColor" stroke-width="2" stroke-linecap="round"
267 stroke-linejoin="round" />
268 <path d="M12 18V22" stroke="currentColor" stroke-width="2" stroke-linecap="round"
269 stroke-linejoin="round" />
270 <path d="M4.93 4.93L7.76 7.76" stroke="currentColor" stroke-width="2" stroke-linecap="round"
271 stroke-linejoin="round" />
272 <path d="M16.24 16.24L19.07 19.07" stroke="currentColor" stroke-width="2" stroke-linecap="round"
273 stroke-linejoin="round" />
274 <path d="M2 12H6" stroke="currentColor" stroke-width="2" stroke-linecap="round"
275 stroke-linejoin="round" />
276 <path d="M18 12H22" stroke="currentColor" stroke-width="2" stroke-linecap="round"
277 stroke-linejoin="round" />
278 <path d="M4.93 19.07L7.76 16.24" stroke="currentColor" stroke-width="2" stroke-linecap="round"
279 stroke-linejoin="round" />
280 <path d="M16.24 7.76L19.07 4.93" stroke="currentColor" stroke-width="2" stroke-linecap="round"
281 stroke-linejoin="round" />
282 </svg>
283 </div>
284 <div class="ai-action-content">
285 <h3>Manage Subscription</h3>
286 <p>Cancel your subscription or change your plan</p>
287 <button type="button" class="ai-danger-btn" id="subscription-btn">
288 <span class="ai-loading" style="display: none;"></span>
289 <span class="btn-text">Cancel Subscription</span>
290 </button>
291 </div>
292 </div>
293 </div>
294
295
296
297 <!-- Credit Purchase -->
298 <div class="ai-section" id="credit-purchase-section">
299 <div class="ai-section-header">
300 <h2></h2>
301 <p></p>
302 </div>
303
304 <div class="ai-credit-actions">
305 <div class="ai-action-card" id="credit-purchase-card">
306 <div class="ai-action-icon">
307 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
308 <path d="M12 1V23" stroke="currentColor" stroke-width="2" stroke-linecap="round"
309 stroke-linejoin="round" />
310 <path
311 d="M17 5H9.5C8.57174 5 7.6815 5.36875 7.02513 6.02513C6.36875 6.6815 6 7.57174 6 8.5C6 9.42826 6.36875 10.3185 7.02513 10.9749C7.6815 11.6313 8.57174 12 9.5 12H14.5C15.4283 12 16.3185 12.3687 16.9749 13.0251C17.6313 13.6815 18 14.5717 18 15.5C18 16.4283 17.6313 17.3185 16.9749 17.9749C16.3185 18.6313 15.4283 19 14.5 19H6"
312 stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
313 </svg>
314 </div>
315 <div class="ai-action-content">
316 <h3>Purchase 750 Credits</h3>
317 <p>Buy credits immediately, pay once.</p>
318
319 <!-- Message pour utilisateurs sans abonnement -->
320 <div id="subscription-required-message" class="ai-subscription-required" style="display: none;">
321 <div class="ai-warning-icon">
322 <svg width="20" height="20" viewBox="0 0 24 24" fill="none"
323 xmlns="http://www.w3.org/2000/svg">
324 <path
325 d="M10.29 3.86L1.82 18A2 2 0 0 0 3.54 21H20.46A2 2 0 0 0 22.18 18L13.71 3.86A2 2 0 0 0 10.29 3.86Z"
326 stroke="currentColor" stroke-width="2" stroke-linecap="round"
327 stroke-linejoin="round" />
328 <path d="M12 9V13" stroke="currentColor" stroke-width="2" stroke-linecap="round"
329 stroke-linejoin="round" />
330 <circle cx="12" cy="17" r="1" stroke="currentColor" stroke-width="2" />
331 </svg>
332 </div>
333 <div class="ai-warning-content">
334 <strong>Active subscription required</strong>
335 <p>You need an active subscription to purchase additional credits. Get a subscription first
336 to unlock this feature.</p>
337 </div>
338 </div>
339
340 <button type="button" class="ai-primary-btn" id="buy-credits-btn" onclick="handleCreditPurchase()">
341 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
342 <path d="M12 2V6" stroke="currentColor" stroke-width="2" stroke-linecap="round"
343 stroke-linejoin="round" />
344 <path d="M12 18V22" stroke="currentColor" stroke-width="2" stroke-linecap="round"
345 stroke-linejoin="round" />
346 <path d="M4.93 4.93L7.76 7.76" stroke="currentColor" stroke-width="2" stroke-linecap="round"
347 stroke-linejoin="round" />
348 <path d="M16.24 16.24L19.07 19.07" stroke="currentColor" stroke-width="2"
349 stroke-linecap="round" stroke-linejoin="round" />
350 <path d="M2 12H6" stroke="currentColor" stroke-width="2" stroke-linecap="round"
351 stroke-linejoin="round" />
352 <path d="M18 12H22" stroke="currentColor" stroke-width="2" stroke-linecap="round"
353 stroke-linejoin="round" />
354 <path d="M4.93 19.07L7.76 16.24" stroke="currentColor" stroke-width="2"
355 stroke-linecap="round" stroke-linejoin="round" />
356 <path d="M16.24 7.76L19.07 4.93" stroke="currentColor" stroke-width="2"
357 stroke-linecap="round" stroke-linejoin="round" />
358 </svg>
359 Buy Credits
360 </button>
361 </div>
362 </div>
363 </div>
364 </div>
365
366 <!-- Account Management -->
367 <div class="ai-section">
368 <div class="ai-section-header">
369 <h2>Account Management</h2>
370 <p>Manage your billing and account settings</p>
371 </div>
372
373 <div class="ai-account-actions">
374 <div class="ai-action-card">
375 <div class="ai-action-icon">
376 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
377 <path
378 d="M20 21V19C20 17.9391 19.5786 16.9217 18.8284 16.1716C18.0783 15.4214 17.0609 15 16 15H8C6.93913 15 5.92172 15.4214 5.17157 16.1716C4.42143 16.9217 4 17.9391 4 19V21"
379 stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
380 <circle cx="12" cy="7" r="4" stroke="currentColor" stroke-width="2" stroke-linecap="round"
381 stroke-linejoin="round" />
382 </svg>
383 </div>
384 <div class="ai-action-content">
385 <h3>Stripe Account</h3>
386 <p>Access your Stripe dashboard for billing management</p>
387 <button type="button" class="ai-secondary-btn" onclick="handleStripeAccount()">
388 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
389 <path d="M18 13V19A2 2 0 0 1 16 21H8A2 2 0 0 1 6 19V13" stroke="currentColor"
390 stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
391 <path d="M12 3V15" stroke="currentColor" stroke-width="2" stroke-linecap="round"
392 stroke-linejoin="round" />
393 <path d="M9 6L12 3L15 6" stroke="currentColor" stroke-width="2" stroke-linecap="round"
394 stroke-linejoin="round" />
395 </svg>
396 View Stripe Account
397 </button>
398 </div>
399 </div>
400 </div>
401 </div>
402
403 <!-- Messages -->
404 <div id="message-container"></div>
405 </div>
406
407 <!-- Confirmation Modal -->
408 <div id="confirmation-modal" class="ai-modal" style="display: none;">
409 <div class="ai-modal-content">
410 <div class="ai-modal-header">
411 <h3>Cancel Subscription</h3>
412 <button type="button" class="ai-modal-close" onclick="closeModal()">×</button>
413 </div>
414 <div class="ai-modal-body">
415 <p>Are you sure you want to cancel your subscription? You will lose access to monthly credits at the end of
416 your current billing period.</p>
417 </div>
418 <div class="ai-modal-footer">
419 <button type="button" class="ai-secondary-btn" onclick="closeModal()">Keep Subscription</button>
420 <button type="button" class="ai-danger-btn" onclick="confirmCancelSubscription()">
421 <span class="ai-loading" style="display: none;"></span>
422 Yes, Cancel Subscription
423 </button>
424 </div>
425 </div>
426 </div>
427
428 <style>
429 /* Subscription Plans Container */
430 .ai-subscription-actions {
431 display: grid;
432 grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
433 gap: 24px;
434 margin-bottom: 24px;
435 }
436
437 .ai-plan-card-wrapper {
438 position: relative;
439 }
440
441 /* Modern Plan Card Styles */
442 .ai-plan-card {
443 --plan-accent: #4f46e5;
444 background: #ffffff;
445 border-radius: 16px;
446 padding: 32px;
447 color: #0f172a;
448 box-shadow: 0 18px 30px rgba(15, 23, 42, 0.07);
449 border: 1px solid #e4e8ef;
450 position: relative;
451 overflow: hidden;
452 transition: all 0.3s ease;
453 height: 100%;
454 display: flex;
455 flex-direction: column;
456 }
457
458 .ai-plan-card:hover {
459 transform: translateY(-4px);
460 box-shadow: 0 24px 45px rgba(15, 23, 42, 0.12);
461 }
462
463 .ai-plan-card::before {
464 content: '';
465 position: absolute;
466 top: 0;
467 left: 16px;
468 right: 16px;
469 height: 3px;
470 border-radius: 999px;
471 background: linear-gradient(90deg, var(--plan-accent), rgba(79, 70, 229, 0.1));
472 }
473
474 .ai-plan-card>* {
475 position: relative;
476 z-index: 1;
477 }
478
479 /* Plan Badge */
480 .ai-plan-badge {
481 position: absolute;
482 top: 18px;
483 right: 18px;
484 background: rgba(15, 23, 42, 0.08);
485 color: #0f172a;
486 padding: 6px 14px;
487 border-radius: 999px;
488 font-size: 11px;
489 font-weight: 600;
490 text-transform: uppercase;
491 letter-spacing: 0.6px;
492 }
493
494 .ai-plan-badge-popular {
495 background: rgba(79, 70, 229, 0.12);
496 color: #4338ca;
497 }
498
499 /* Plan Colors */
500 .ai-plan-essential {
501 --plan-accent: #1d4ed8;
502 }
503
504 .ai-plan-premium {
505 --plan-accent: #7c3aed;
506 }
507
508 .ai-plan-creator {
509 --plan-accent: #db2777;
510 }
511
512 .ai-plan-popular {
513 box-shadow: 0 24px 45px rgba(76, 29, 149, 0.18);
514 border-color: rgba(76, 29, 149, 0.2);
515 }
516
517 .ai-plan-header {
518 text-align: center;
519 margin-bottom: 24px;
520 }
521
522 .ai-plan-header:first-of-type {
523 margin-top: 16px;
524 }
525
526 .ai-plan-title h3 {
527 font-size: 26px;
528 font-weight: 600;
529 margin: 0 0 6px 0;
530 color: #0f172a;
531 }
532
533 .ai-plan-price {
534 display: flex;
535 align-items: baseline;
536 justify-content: center;
537 gap: 4px;
538 }
539
540 .ai-price-amount {
541 font-size: 38px;
542 font-weight: 600;
543 color: #0f172a;
544 margin-top: 12px;
545 }
546
547 .ai-price-period {
548 font-size: 16px;
549 font-weight: 500;
550 color: #6b7280;
551 }
552
553 .ai-plan-features {
554 margin-bottom: 24px;
555 flex-grow: 1;
556 }
557
558 .ai-feature-item {
559 display: flex;
560 align-items: center;
561 gap: 12px;
562 margin-bottom: 16px;
563 padding: 12px 16px;
564 background: #f8fafc;
565 border-radius: 12px;
566 border: 1px solid #e2e8f0;
567 transition: all 0.3s ease;
568 }
569
570 .ai-feature-item:hover {
571 border-color: rgba(79, 70, 229, 0.4);
572 transform: translateX(4px);
573 }
574
575 .ai-feature-icon {
576 flex-shrink: 0;
577 width: 32px;
578 height: 32px;
579 background: rgba(79, 70, 229, 0.12);
580 border-radius: 50%;
581 display: flex;
582 align-items: center;
583 justify-content: center;
584 color: var(--plan-accent);
585 border: 1px solid rgba(79, 70, 229, 0.2);
586 }
587
588 .ai-feature-text {
589 font-size: 16px;
590 font-weight: 500;
591 color: #0f172a;
592 line-height: 1.4;
593 }
594
595 .ai-plan-cta {
596 text-align: center;
597 }
598
599 .ai-cta-btn {
600 background: var(--plan-accent);
601 color: #fff;
602 border: 2px solid var(--plan-accent);
603 padding: 14px 28px;
604 border-radius: 12px;
605 font-size: 16px;
606 font-weight: 600;
607 display: inline-flex;
608 align-items: center;
609 justify-content: center;
610 gap: 8px;
611 cursor: pointer;
612 transition: all 0.3s ease;
613 box-shadow: 0 10px 25px rgba(79, 70, 229, 0.25);
614 text-transform: none;
615 letter-spacing: 0;
616 width: 100%;
617 backdrop-filter: none;
618 }
619
620 .ai-cta-btn:hover {
621 background: #fff;
622 color: var(--plan-accent);
623 transform: translateY(-2px);
624 box-shadow: 0 12px 30px rgba(15, 23, 42, 0.12);
625 }
626
627 .ai-cta-btn:active {
628 transform: translateY(0);
629 }
630
631 .ai-cta-btn:disabled {
632 opacity: 0.6;
633 cursor: not-allowed;
634 transform: none;
635 }
636
637 .ai-plan-btn.current-plan {
638 background: rgba(79, 70, 229, 0.08);
639 border-color: rgba(79, 70, 229, 0.2);
640 cursor: default;
641 }
642
643 .ai-plan-btn.current-plan:hover {
644 transform: none;
645 }
646
647 /* Action Card Container */
648 .ai-action-card {
649 background: white;
650 border-radius: 16px;
651 padding: 32px;
652 box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);
653 border: 1px solid rgba(0, 0, 0, 0.06);
654 transition: all 0.3s ease;
655 }
656
657 .ai-action-card:hover {
658 transform: translateY(-4px);
659 box-shadow: 0 16px 48px rgba(0, 0, 0, 0.12);
660 }
661
662 /* Current Plan Indicator */
663 .ai-plan-card-wrapper[data-current-plan="true"] .ai-plan-card {
664 border: 3px solid rgba(255, 255, 255, 0.8);
665 box-shadow: 0 0 0 4px rgba(255, 255, 255, 0.3), 0 24px 48px rgba(102, 126, 234, 0.3);
666 }
667
668 /* Responsive Design */
669 @media (max-width: 768px) {
670 .ai-subscription-actions {
671 grid-template-columns: 1fr;
672 }
673
674 .ai-plan-card {
675 padding: 24px;
676 }
677
678 .ai-price-amount {
679 font-size: 36px;
680 }
681
682 .ai-feature-item {
683 padding: 10px 12px;
684 }
685
686 .ai-cta-btn {
687 padding: 12px 24px;
688 font-size: 15px;
689 }
690
691 .ai-plan-badge {
692 font-size: 10px;
693 padding: 4px 8px;
694 }
695 }
696
697 /* Animation for loading states */
698 .ai-loading {
699 animation: spin 1s linear infinite;
700 }
701
702 @keyframes spin {
703 from {
704 transform: rotate(0deg);
705 }
706
707 to {
708 transform: rotate(360deg);
709 }
710 }
711 </style>