1<!DOCTYPE html> 2<html> 3 4<head> 5 6 <title>Pocket Girl - The AI that fulfills all your fantasies...</title> 7 8 <meta charset="utf-8"> 9 <meta http-equiv="x-ua-compatible" content="ie=edge"> 10 11 <meta name="robots" content="index, follow" /> 12 13 <meta name="author" content="PocketGirl AI"> 14 <meta name="description" content="Discover our Pocket Girls, these AIs that will fulfill your fantasies without any limits!"> 15 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 16 17 <!-- Open Graph --> 18 <meta property="og:type" content="website"> 19 <meta property="og:title" content="Pocket Girl - The AI that fulfills all your fantasies..."> 20 <meta property="og:description" content="Discover our Pocket Girls, these AIs that will fulfill your fantasies without any limits!"> 21 <meta property="og:url" content="http://www.pocketgirl.ai/"> 22 <meta property="og:image" content="https://www.pocketgirl.ai/src/assets/img/landing/landing-header.jpg"> 23 <meta name="twitter:card" content="summary_large_image"> 24 <meta name="twitter:image" content="https://www.pocketgirl.ai/src/assets/img/landing/landing-header.jpg"> 25 26 <!-- TJ --> 27 <meta http-equiv="Delegate-CH" 28 content="sec-ch-ua https://ads.trafficjunky.net; sec-ch-ua-arch https://ads.trafficjunky.net; sec-ch-ua-full-version-list https://ads.trafficjunky.net; sec-ch-ua-mobile https://ads.trafficjunky.net; sec-ch-ua-model https://ads.trafficjunky.net; sec-ch-ua-platform https://ads.trafficjunky.net; sec-ch-ua-platform-version https://ads.trafficjunky.net;"> 29 30 31 32 <!-- Favicons --> 33 <link rel="icon" type="image/png" sizes="96x96" 34 href="https://www.pocketgirl.ai/src/assets/img/favicons/favicon-96x96.png?v=4352343"> 35 <link rel="icon" type="image/svg+xml" 36 href="https://www.pocketgirl.ai/src/assets/img/favicons/favicon.svg?v=4352343"> 37 <link rel="shortcut icon" 38 href="https://www.pocketgirl.ai/src/assets/img/favicons/favicon.ico?v=4352343"> 39 <link rel="apple-touch-icon" sizes="180x180" 40 href="https://www.pocketgirl.ai/src/assets/img/favicons/apple-touch-icon.png?v=4352343"> 41 42 <link rel="canonical" 43 href="https://www.pocketgirl.ai/"> 44 <link rel="alternate" href="https://www.pocketgirl.ai/fr/" 45 hreflang="fr"> 46 <link rel="alternate" href="https://www.pocketgirl.ai/" 47 hreflang="en"> 48 <link rel="alternate" href="https://www.pocketgirl.ai/de/" 49 hreflang="de"> 50 <link rel="alternate" href="https://www.pocketgirl.ai/it/" 51 hreflang="it"> 52 <link rel="alternate" href="https://www.pocketgirl.ai/es/" 53 hreflang="es"> 54 <link rel="alternate" href="https://www.pocketgirl.ai/pt/" 55 hreflang="pt"> 56 <link rel="alternate" href="https://www.pocketgirl.ai/" 57 hreflang="x-default"> 58 59 <!-- CSS --> 60 <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" 61 integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous"> 62 63 <link rel="stylesheet" href="https://www.pocketgirl.ai/src/assets/css/dist/style-sass.min.css?v=1791203047"> 64 <link rel="stylesheet" href="https://www.pocketgirl.ai/src/assets/css/dist/subscription.css?v=1791203047"> 65 <link rel="stylesheet" href="https://www.pocketgirl.ai/src/assets/css/dist/override.css?v=1791203047"> 66 <link rel="stylesheet" href="https://www.pocketgirl.ai/src/assets/css/dist/girls-grid.css?v=1791203047"> 67 <link rel="stylesheet" href="https://www.pocketgirl.ai/src/assets/css/dist/modals.css?v=1791203047"> 68 <link rel="stylesheet" href="https://www.pocketgirl.ai/src/assets/css/dist/chat-mobile.css?v=1791203047"> 69 70 <link href="https://www.pocketgirl.ai/src/assets/fonts/fontawesome-pro-5.15.3/css/all.min.css?" 71 rel="stylesheet"> 72 <link href="https://www.pocketgirl.ai/src/assets/fonts/fontello-pocketgirl-1.0.0/css/pocketgirl.css?" 73 rel="stylesheet"> 74 75 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css" /> 76 77 <!-- Fonts-->
78 <link rel="preconnect" href="https://fonts.googleapis.com"> 79 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 80 <link rel="preconnect" href="https://cdn.jsdelivr.net/" crossorigin> 81 82 <!-- JS --> 83
83<script src="https://code.jquery.com/jquery-3.7.0.min.js" 84 integrity="sha256-2Pmvv0kuTBOenSvLm6bvfBSSHrUJ+3A7x6P5Ebd07/g=" crossorigin="anonymous"></script>
84 85 86
86<script src="https://cdn.jsdelivr.net/npm/[email protected]/countdown.min.js"></script>
86 87 88 <!-- TODO : load dist in production --> 89
89<script src="https://www.pocketgirl.ai/src/assets/js/src/utils.js"></script>
89 90 91
91<script type="text/javascript"> 92 var currentPath = "https://www.pocketgirl.ai"; 93 var GLOBAL_FB_EVENT_ID_PIXEL = "6ac396e6e9683"; 94 95 function sendTikTokEventServer(datas) { 96 datas.currentUrl = window.location.href.split(/[?#]/)[0]; 97 var body = "content=" + encodeURIComponent(JSON.stringify(datas)); 98 99 // sendBeacon : survit a une redirection immediate (ex: clic vers pocketgirl.ai) 100 if (navigator.sendBeacon) { 101 navigator.sendBeacon('/tiktok', new Blob([body], { 102 type: 'application/x-www-form-urlencoded' 103 })); 104 } else { 105 var xhr = new XMLHttpRequest(); 106 xhr.open("POST", '/tiktok', true); 107 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 108 xhr.send(body); 109 } 110 } 111 112 </script>
112 113 114 <!-- Google Tag Manager --> 115
115<script>
vendor: 554 bytes, lines 115-129
115 116 (function(w, d, s, l, i) { 117 w[l] = w[l] || []; 118 w[l].push({ 119 'gtm.start': new Date().getTime(), 120 event: 'gtm.js' 121 }); 122 var f = d.getElementsByTagName(s)[0], 123 j = d.createElement(s), 124 dl = l != 'dataLayer' ? '&l=' + l : ''; 125 j.async = true; 126 j.src = 127 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; 128 f.parentNode.insertBefore(j, f); 129 })(window, document, 'script', 'dataLayer', '
129GTM-TFNQZCS3
vendor: 8 bytes, lines 129-130
129'); 130
130</script>
130 131 <!-- End Google Tag Manager --> 132 133 134 135 136 137
137<script> 138 window.proxy_fpr_tr_url = "/tr"; 139 window.proxy_fpr_get_details_url = "/tr/get_details"; 140 (function(w) { 141 w.fpr = w.fpr || function() { 142 w.fpr.q = w.fpr.q || []; 143 w.fpr.q[arguments[0] == 'set' ? 'unshift' : 'push'](arguments); 144 }; 145 })(window); 146 fpr("init", { 147 cid: "7ioolvy7" 148 }); 149 fpr("click"); 150 </script>
150 151
151<script src="/src/assets/js/dist/fpr-prox.min.js" defer async=""></script>
151 152 </head> 153 154<body> 155 156 <div class="modal-backdrop" id="modal-backdrop"> 157 <div id="avertissement_modal" class="popup-slide bloc_modal"> 158 <div class="popup-content-wrapper no-illustration"> 159 <div class="popup-content"> 160 <div class="header"> 161 <div class="title avertissement-title"> 162 18+ Warning </div> 163 <div class="subtitle"> 164 This site is for adults only! </div> 165 </div> 166 <div class="content"> 167 168 <p class="avertissement-text"> 169 By entering this site, you certify that you are at least 18 years old and agree to our Terms of Use and Privacy Policy. Your data, including your email, may be used for marketing purposes, with the option to unsubscribe at any time. We use cookies for analytics and spam detection. All content is created with professional actresses; any reproduction is strictly prohibited. </p> 170 <div class="avertissement-links"> 171 <a href="tos" class="avertissement-link" 172 target="_blank">Terms of Use</a> 173 <a href="/confidentialite" class="avertissement-link" 174 target="_blank">Privacy Policy</a> 175 <a href="/cookies" class="avertissement-link" 176 target="_blank">Cookies</a> 177 </div> 178 </div> 179 <div class="avertissement-buttons"> 180 181 <button type="button" class="btn btn-secondary" 182 id="exit-site">Leave the site</button> 183 <button type="button" class="btn btn-primary" 184 id="confirm-age">I am over 18 years old</button> 185 </div> 186 </div> 187 </div> 188</div> 189
190<script> 191function openAvertissement() { 192 $(".popup-slide").removeClass('active'); 193 $('#avertissement_modal').addClass('active'); 194 $('#modal-backdrop').addClass('active').hide().fadeIn(100); 195 196 // Bloquer la fermeture du modal 197 blockModalClosing('#avertissement_modal'); 198 199 200} 201 202$(document).ready(function() { 203 // 204 // Bouton confirmer l'âge 205 $('#confirm-age').on('click', function() { 206 // Restaurer le comportement normal avant de fermer 207 restoreModalClosing(); 208 209 // Recharger la page au lieu de fermer le modal 210 window.location.reload(); 211 }); 212 213 // Bouton quitter le site 214 $('#exit-site').on('click', function() { 215 window.location.href = "https://www.google.com"; 216 }); 217 218 219}); 220</script>
220 <div id="auth_offer_modal" class="popup-slide"> 221 <div class="popup-content-wrapper"> 222 <div class="illustration"> 223 <img src="https://www.pocketgirl.ai/src/assets/img/girls/register-girl.jpg" alt="illustration"> 224 </div> 225 226 <div class="popup-content"> 227 <span class="btn-close-modal close"> 228 <i class="fal fa-times"></i> 229 </span> 230 <div class="auth-container"> 231 232 <div id="registerSection" class="auth-section active"> 233 <div class="header"> 234 <!-- <div class="free-token hithere"> 235 <span class="icon-rounded-wrapper"> 236 <i class="fas fa-bolt"></i> 237 </span> 238 0 jetons offerts 239 </div> --> 240 <div class="title upper"> 241 Sign up <strong>FOR FREE</strong> </div> 242 </div> 243 244 <main class="form-signin w-100"> 245 <form class="form-modal" id="registerForm" method="POST"> 246 <div class="form-floating my-3"> 247 <i class="fas fa-envelope"></i> 248 <input type="hidden" class="form-control" id="registerEmailOld"> 249 <input type="email" class="form-control" id="registerEmail" name="email" 250 placeholder="[email protected]" required> 251 <label for="email">E-mail</label> 252 </div> 253 254 <div class="tips"> 255 <i class="far fa-exclamation-triangle"></i> 256 <b>Valid email required</b> (confirmation needed). </div> 257 258 <div class="form-floating my-3"> 259 <i class="fas fa-lock"></i> 260 <input type="password" class="form-control" id="registerPassword" name="password" 261 placeholder="password" required> 262 <label for="password">Password</label> 263 </div> 264 265 <div class="form-floating my-3"> 266 <i class="fas fa-lock"></i> 267 <input type="password" class="form-control" id="registerPasswordConfirm" name="passwordconfirm" placeholder="confirm password" required> 268 <label for="passwordConfirm">Password confirmation</label> 269 </div> 270 271 <div class="form-floating my-3" style="position:relative;margin-bottom:25px !important;"> 272 <input type="checkbox" id="promo-checkbox" class="tos-checkbox-styled" style="padding:0px !important; border-radius:0;" checked> 273 <div style="font-size:13px; color:#fff; margin-left:5px; position:absolute;top:3px; left:25px;margin-bottom:5px;">I agree to receive promotional offers</div> 274 </div> 275 276 <button class="btn btn-primary w-100 py-3 btn-auth-loader" type="submit"> 277 <span class="btn-text">Create a free account</span> 278 <span class="btn-loader" style="display: none;"> 279 <svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 280 <style> 281 .spinner_P7sC{transform-origin:center;animation:spinner_svv2 .75s infinite linear} 282 @keyframes spinner_svv2{100%{transform:rotate(360deg)}} 283 </style> 284 <circle class="spinner_P7sC" cx="12" cy="12" r="10" fill="none" stroke="white" stroke-width="2.5" stroke-dasharray="31.4 31.4"/> 285 </svg> 286 </span> 287 </button> 288 </form> 289 </main> 290 291 <small>By continuing, I certify that I am <strong>18 years old or older</strong> and I accept the terms of use of pocketgirl.ai.</small> 292 293 <div class="footer"> 294 <p>Already have an account? <a href="#" id="switchToLogin">Log in</a></p> 295 </div> 296 </div> 297 298 <div id="loginSection" class="auth-section" style="display:none;"> 299 <div class="header"> 300 <div class="title upper"> 301 Log in <strong>to continue</strong> </div> 302 </div> 303 304 <main class="form-signin w-100"> 305 <div id="loginError" class="alert alert-danger" style="display: none;"></div> 306 <form class="form-modal" id="loginForm"> 307 <div class="form-floating my-3"> 308 <i class="fas fa-envelope"></i> 309 <input type="email" class="form-control" id="loginEmail" name="email" 310 placeholder="[email protected]" required> 311 <label for="email">E-mail</label> 312 </div> 313 314 <div class="form-floating my-3"> 315 <i class="fas fa-lock"></i> 316 <input type="password" class="form-control" id="loginPassword" name="password" 317 placeholder="password" required> 318 <label for="password">Password</label> 319 </div> 320 321 <button class="btn btn-primary w-100 py-3 btn-auth-loader" type="submit">
322 <span class="btn-text">Log in</span> 323 <span class="btn-loader" style="display: none;"> 324 <svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 325 <style> 326 .spinner_P7sC{transform-origin:center;animation:spinner_svv2 .75s infinite linear} 327 @keyframes spinner_svv2{100%{transform:rotate(360deg)}} 328 </style> 329 <circle class="spinner_P7sC" cx="12" cy="12" r="10" fill="none" stroke="white" stroke-width="2.5" stroke-dasharray="31.4 31.4"/> 330 </svg> 331 </span> 332 </button> 333 </form> 334 <!-- Link to Forgot Password --> 335 <div class="text-center mt-3"> 336 <a href="#" id="switchToForgotPassword" style="font-size: 0.9em; color: #c1c1c1;">Forgot password?</a> 337 </div> 338 </main> 339 340 <div class="footer"> 341 <p class="no_account"> 342 Don't have an account? <a href="#" id="switchToRegister">Create yours</a> 343 </p> 344 </div> 345 </div> 346 347 <!-- New Forgot Password Section --> 348 <div id="forgotPasswordSection" class="auth-section" style="display:none;"> 349 <div class="header"> 350 <div class="title upper"> 351 Password <strong>forgotten?</strong> </div> 352 <p style="font-size:0.9em; color:#6c757d; margin-top: 5px;">Enter your email to receive a temporary password.</p> 353 </div> 354 355 <main class="form-signin w-100"> 356 <div id="forgotPasswordMessage" class="alert" style="display: none; height: auto; font-weight: 550; font-size: 13px; padding: 10px;"></div> 357 <form class="form-modal" id="forgotPasswordForm"> 358 <div class="form-floating my-3"> 359 <i class="fas fa-envelope"></i> 360 <input type="email" class="form-control" id="forgotPasswordEmail" name="email" 361 placeholder="[email protected]" required> 362 <label for="forgotPasswordEmail">E-mail</label> 363 </div> 364 <button class="btn btn-primary w-100 py-3 btn-auth-loader" type="submit"> 365 <span class="btn-text">Send</span> 366 <span class="btn-loader" style="display: none;"> 367 <svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 368 <style> 369 .spinner_P7sC{transform-origin:center;animation:spinner_svv2 .75s infinite linear} 370 @keyframes spinner_svv2{100%{transform:rotate(360deg)}} 371 </style> 372 <circle class="spinner_P7sC" cx="12" cy="12" r="10" fill="none" stroke="white" stroke-width="2.5" stroke-dasharray="31.4 31.4"/> 373 </svg> 374 </span> 375 </button> 376 </form> 377 </main> 378 379 <div class="footer"> 380 <p><a href="#" id="switchToLoginFromForgot">Previous</a></p> 381 </div> 382 </div> 383 <!-- End Forgot Password Section --> 384 385 <!-- Find Email Section --> 386 <div id="findEmailSection" class="auth-section" style="display:none;"> 387 <div class="header"> 388 <div class="title upper"> 389 Find my email address </div> 390 <p style="font-size:0.9em; color:#6c757d; margin-top: 5px;">Check if your email address exists in our database.</p> 391 </div> 392 393 <main class="form-signin w-100"> 394 <div id="findEmailMessage" class="alert" style="display: none; height: auto; font-weight: 550; font-size: 13px; padding: 10px;"></div> 395 <form class="form-modal" id="findEmailForm"> 396 <div class="form-floating my-3"> 397 <i class="fas fa-envelope"></i> 398 <input type="email" class="form-control" id="findEmailInput" name="email" 399 placeholder="Enter an email address" required> 400 <label for="findEmailInput">E-mail</label> 401 </div> 402 <button class="btn btn-primary w-100 py-3 btn-auth-loader" type="submit">
403 <span class="btn-text">Test</span> 404 <span class="btn-loader" style="display: none;"> 405 <svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> 406 <style> 407 .spinner_P7sC{transform-origin:center;animation:spinner_svv2 .75s infinite linear} 408 @keyframes spinner_svv2{100%{transform:rotate(360deg)}} 409 </style> 410 <circle class="spinner_P7sC" cx="12" cy="12" r="10" fill="none" stroke="white" stroke-width="2.5" stroke-dasharray="31.4 31.4"/> 411 </svg> 412 </span> 413 </button> 414 </form> 415 416 <div class="find-email-contact" style="margin-top: 20px; padding: 15px; background: rgba(255,255,255,0.05); border-radius: 8px;"> 417 <p style="font-size: 0.9em; color: #c1c1c1; margin-bottom: 8px; padding: 5px 5px;"> 418 Can't find your address? </p> 419 <p style="font-size: 0.9em; margin-bottom: 8px; padding: 5px 5px;"> 420 Contact us at <a href="mailto:[email protected]" style="color: #ff6b9d;">[email protected]</a> 421 </p> 422 <p style="font-size: 0.8em; color: #888; font-style: italic; margin: 0; padding: 5px 5px;"> 423 To speed up the process, please provide the last 4 digits of your credit card and the date of your first payment. </p> 424 </div> 425 </main> 426 427 <div class="footer"> 428 <p><a href="#" id="switchToLoginFromFindEmail">Back to login</a></p> 429 </div> 430 </div> 431 <!-- End Find Email Section --> 432 433 </div> 434 </div> 435 </div> 436</div> 437 438<style> 439/* Style pour les boutons avec loader */ 440.btn-auth-loader { 441 position: relative; 442} 443 444.btn-auth-loader.loading .btn-text { 445 visibility: hidden; 446} 447 448.btn-auth-loader.loading .btn-loader { 449 display: inline-block !important; 450 position: absolute; 451 top: 50%; 452 left: 50%; 453 transform: translate(-50%, -50%); 454} 455</style> 456
457<script> 458 // Function to display messages in the forgot password section 459 function showForgotPasswordMessage(message, isError = true) { 460 const $messageDiv = $('#forgotPasswordMessage'); 461 $messageDiv.text(message) 462 .removeClass(isError ? 'alert-success' : 'alert-danger') 463 .addClass(isError ? 'alert-danger' : 'alert-success') 464 .fadeIn(); 465 // Hide after 5 seconds 466 setTimeout(function() { 467 $messageDiv.fadeOut(); 468 }, 5000); 469 } 470 471 $(document).ready(function() { 472 // Gestionnaire pour le bouton de fermeture 473 $('.btn-close-modal').on('click', function() { 474 $('#auth_offer_modal').removeClass('active'); 475 closeModalBackDrop(); 476 // Reset all sections to default state (register visible) 477 $('#registerSection, #loginSection, #forgotPasswordSection, #findEmailSection').hide().removeClass('active'); 478 $('#registerSection').show().addClass('active'); 479 }); 480 481 $('#switchToRegister').on('click', function(e) { 482 e.preventDefault(); 483 $('#loginSection').stop(true, true).fadeOut(200, function() { 484 $('#forgotPasswordSection').hide(); // Ensure forgot is hidden 485 $('#registerSection').stop(true, true).fadeIn(200).addClass('active'); 486 $('#loginSection').removeClass('active'); 487 }); 488 }); 489 490 $('#switchToLogin').on('click', function(e) { 491 e.preventDefault(); 492 $('#registerSection').stop(true, true).fadeOut(200, function() { 493 $('#forgotPasswordSection').hide(); // Ensure forgot is hidden 494 $('#loginSection').stop(true, true).fadeIn(200).addClass('active'); 495 $('#registerSection').removeClass('active'); 496 }); 497 }); 498 499 // --- New JS for Forgot Password --- 500 $('#switchToForgotPassword').on('click', function(e) { 501 e.preventDefault(); 502 $('#loginSection').stop(true, true).fadeOut(200, function() { 503 $('#forgotPasswordSection').stop(true, true).fadeIn(200).addClass('active'); 504 $('#loginSection').removeClass('active'); 505 $('#forgotPasswordMessage').hide(); // Clear previous messages 506 }); 507 }); 508 509 $('#switchToLoginFromForgot').on('click', function(e) { 510 e.preventDefault(); 511 $('#forgotPasswordSection').stop(true, true).fadeOut(200, function() { 512 $('#loginSection').stop(true, true).fadeIn(200).addClass('active'); 513 $('#forgotPasswordSection').removeClass('active'); 514 $('#loginError').hide(); // Clear login errors if any 515 }); 516 }); 517 518 // Forgot Password Form Submission 519 $('#forgotPasswordForm').on('submit', function(e) { 520 // Vérifier d'abord la validité du formulaire 521 if (!this.checkValidity()) { 522 return; // Laisser le navigateur gérer la validation HTML5 523 } 524 525 e.preventDefault(); 526 const email = $('#forgotPasswordEmail').val(); 527 528 // Nouveau code pour le loader 529 const $button = $(this).find('.btn-auth-loader'); 530 $button.addClass("disabled loading"); 531 $('#forgotPasswordMessage').hide(); 532 533 $.ajax({ 534 url: '/api/password-forgotten', 535 method: 'POST', 536 data: { email: email }, 537 success: function(response) { 538 // Enlever le loader 539 $button.removeClass("disabled loading"); 540 541 try { 542 response = typeof response === 'string' ? JSON.parse(response) : response; 543 if (response.status) { 544 showForgotPasswordMessage(response.message, false); 545 $('#forgotPasswordEmail').val(''); 546 } else { 547 showForgotPasswordMessage(response.message || 'An error has occurred.', true); 548 } 549 } catch (error) { 550 showForgotPasswordMessage('Communication error with the server.', true); 551 } 552 553 }, 554 error: function() { 555 // Enlever le loader en cas d'erreur 556 $button.removeClass("disabled loading"); 557 showForgotPasswordMessage('Network error. Please try again.', true); 558 } 559 }); 560 }); 561 562 function showRegisterError(message) { 563 $('#registerForm .error-message').remove(); 564 565 $('#registerForm button[type="submit"]').before('<div class="error-message alert alert-danger mt-3">Error: ' + message + '</div>'); 566 } 567 568 $('#registerForm').on('submit', function(e) { 569 // Vérifier d'abord la validité du formulaire 570 if (!this.checkValidity()) { 571 return; // Laisser le navigateur gérer la validation HTML5 572 } 573 574 e.preventDefault(); 575 const email = $('#registerEmail').val(); 576 const emailOld = $('#registerEmailOld').val(); 577 const password = $('#registerPassword').val(); 578 const confirmPassword = $('#registerPasswordConfirm').val(); 579 580 // Nouveau code pour le loader 581 const $button = $(this).find('.btn-auth-loader'); 582 $button.addClass("disabled loading"); 583 584 // Validation côté client pour les mots de passe 585 if (password !== confirmPassword) { 586 showRegisterError('Passwords do not match'); 587 $button.removeClass("disabled loading"); 588 return; 589 } 590 591 $.ajax({ 592 url: '/api/register', 593 method: 'POST', 594 data: { 595 email_old: emailOld, 596 email , 597 password, 598 passwordconfirm: confirmPassword 599 }, 600 success: function(response) { 601 response = JSON.parse(response); 602 603 // Enlever le loader 604 $button.removeClass("disabled loading"); 605 606 if (response.status) { 607 if (response.verification_code) { 608 $('#auth_offer_modal').removeClass('active'); 609 $('#auth_confirmation_modal').addClass('active'); 610 } else { 611 // Set userId in the personalization modal 612 if (response.user_id) { 613 //$('#userId').val(response.user_id); 614 // Close current modal and open personalization modal 615 $('#auth_offer_modal').removeClass('active'); 616 // Open personalization modal 617 //openPersonalizeExperienceModal(); 618 if (typeof window.send_event === "function") { 619 window.send_event({ 620 name: "Subscribe", 621 type: "Acquisition", 622 value: "1.000" 623 }); 624 } 625 if (typeof openAvertissement === 'function') { openAvertissement(); } else { window.location.reload(); } 626 627 } else { 628 window.location.reload(); 629 } 630 } 631 } else { 632 if (response.message && response.message.includes('not_enabled')) { 633 showRegisterError('Invalid email address or password'); 634 } else { 635 showRegisterError(response.message); 636 } 637 638 switch (response.reason) { 639 case "not_enabled": 640 $('#auth_offer_modal').removeClass('active'); 641 $('#auth_confirmation_modal').addClass('active'); 642 break; 643 } 644 } 645 }, 646 error: function() { 647 // Enlever le loader en cas d'erreur 648 $button.removeClass("disabled loading"); 649 showRegisterError('Invalid email address or password'); 650 } 651 }); 652 }); 653 654 $('#loginForm').on('submit', function(e) { 655 // Vérifier d'abord la validité du formulaire 656 if (!this.checkValidity()) { 657 return; // Laisser le navigateur gérer la validation HTML5 658 } 659 660 e.preventDefault(); 661 const email = $('#loginEmail').val(); 662 const password = $('#loginPassword').val(); 663 664 // Nouveau code pour le loader 665 const $button = $(this).find('.btn-auth-loader'); 666 $button.addClass("disabled loading"); 667 668 $.ajax({ 669 url: '/api/login', 670 method: 'POST', 671 data: { 672 email, 673 password 674 }, 675 success: function(response) { 676 response = JSON.parse(response); 677 678 // Enlever le loader 679 $button.removeClass("disabled loading"); 680 681 if (response.status) { 682 window.location.reload(); 683 } else { 684 showLoginError(response.message || 'Invalid email address or password', response.reason); 685 686 switch (response.reason) { 687 case "not_enabled": 688 $('#auth_offer_modal').removeClass('active'); 689 $('#auth_confirmation_modal').addClass('active'); 690 break; 691 } 692 } 693 }, 694 error: function() { 695 // Enlever le loader en cas d'erreur 696 $button.removeClass("disabled loading"); 697 showLoginError('An error has occurred.'); 698 } 699 }); 700 }); 701 702 // Fonction pour afficher les erreurs de validation dans le formulaire de connexion 703 function showLoginError(message, reason) { 704 // Supprime l'erreur précédente si elle existe 705 $('#loginForm .error-message').remove(); 706 $('#loginForm .forgot-email-link').remove(); 707 708 // Ajoute le nouveau message d'erreur 709 $('#loginForm button[type="submit"]').before('<div class="error-message alert alert-danger mt-3">Error: ' + message + '</div>'); 710 711 // Si l'email n'existe pas, proposer de retrouver son email 712 if (reason === 'email_not_found') { 713 $('#loginForm .error-message').after('<div class="forgot-email-link text-center mt-2" style="margin-bottom: 15px;"><a href="#" id="switchToFindEmail" style="font-size: 0.85em; color: #ff6b9d;">Did you forget your email?</a></div>'); 714 } 715 } 716 717 // --- JS for Find Email Section --- 718 $('#switchToFindEmail').on('click', function(e) { 719 e.preventDefault(); 720 $('#loginSection').stop(true, true).fadeOut(200, function() { 721 $('#findEmailSection').stop(true, true).fadeIn(200).addClass('active'); 722 $('#loginSection').removeClass('active'); 723 $('#findEmailMessage').hide(); 724 }); 725 }); 726 727 // Event delegation for dynamically created link 728 $(document).on('click', '#switchToFindEmail', function(e) { 729 e.preventDefault(); 730 $('#loginSection').stop(true, true).fadeOut(200, function() { 731 $('#findEmailSection').stop(true, true).fadeIn(200).addClass('active'); 732 $('#loginSection').removeClass('active'); 733 $('#findEmailMessage').hide(); 734 }); 735 }); 736 737 $('#switchToLoginFromFindEmail').on('click', function(e) { 738 e.preventDefault(); 739 $('#findEmailSection').stop(true, true).fadeOut(200, function() { 740 $('#loginSection').stop(true, true).fadeIn(200).addClass('active'); 741 $('#findEmailSection').removeClass('active'); 742 $('#loginError').hide(); 743 }); 744 }); 745 746 // Function to display messages in the find email section 747 function showFindEmailMessage(message, isSuccess = false) { 748 const $messageDiv = $('#findEmailMessage'); 749 $messageDiv.html(message) 750 .removeClass(isSuccess ? 'alert-danger' : 'alert-success') 751 .addClass(isSuccess ? 'alert-success' : 'alert-danger') 752 .fadeIn(); 753 } 754 755 // Find Email Form Submission 756 $('#findEmailForm').on('submit', function(e) { 757 if (!this.checkValidity()) { 758 return; 759 } 760 761 e.preventDefault(); 762 const email = $('#findEmailInput').val(); 763 764 const $button = $(this).find('.btn-auth-loader'); 765 $button.addClass("disabled loading"); 766 $('#findEmailMessage').hide(); 767 768 $.ajax({ 769 url: '/api/check-email', 770 method: 'POST', 771 data: { email: email }, 772 success: function(response) { 773 $button.removeClass("disabled loading"); 774 775 try { 776 response = typeof response === 'string' ? JSON.parse(response)
776: response; 777 778 if (response.reason === 'rate_limit') { 779 showFindEmailMessage(response.message, false); 780 } else if (response.status) { 781 showFindEmailMessage(response.message, response.exists); 782 } else { 783 showFindEmailMessage(response.message || 'An error has occurred.', false); 784 } 785 } catch (error) { 786 showFindEmailMessage('Communication error with the server.', false); 787 } 788 }, 789 error: function() { 790 $button.removeClass("disabled loading"); 791 showFindEmailMessage('Network error. Please try again.', false); 792 } 793 }); 794 }); 795 }); 796</script>
796<div id="auth_confirmation_modal" class="popup-slide"> 797 <div class="popup-content"> 798 <span class="btn-close-modal close"> 799 <i class="fal fa-times"></i> 800 </span> 801 <div class="auth-container"> 802 803 <div id="registerCodeSection" class="auth-section active"> 804 <div class="header"> 805 <div class="title"> 806 Confirmation 807 </div> 808 <p> 809 Indiquer le code reçu par mail 810 </p> 811 </div> 812 813 <main class="form-signin w-100 m-auto"> 814 <form class="form-modal" id="confirmRegistrationForm"> 815 <div class="form-floating my-3"> 816 <input type="text" class="form-control" id="registrationCode" name="registrationCode" 817 placeholder="- - - -" required> 818 <label for="registrationCode">Code</label> 819 </div> 820 <small class="msg-error" id="error_code_reason">une erreur est survenue</small> 821 <button class="btn btn-primary w-100 py-3 btn-processing-submit" 822 type="submit">Confirmer</button> 823 <p>Code non reçu ? <a href="#" id="action_resend_verification_code">Renvoyez un code</a></p> 824 <p><a href="#" id="action_relaunch_register">Changer de mail</a></p> 825 </form> 826 </main> 827 828 </div> 829 </div> 830 </div> 831</div> 832 833
834<script> 835 $(document).ready(function() { 836 837 $('#action_relaunch_register').on('click', function(e) { 838 e.preventDefault(); 839 $('#auth_confirmation_modal').removeClass('active'); 840 // Open register reseted 841 $('#registerEmailOld').val($('#registerEmail').val()); 842 $("#registerForm")[0].reset() 843 $('#auth_offer_modal').addClass('active'); 844 }); 845 846 $("#action_resend_verification_code").click(function(e) { 847 e.preventDefault(); 848 $("#error_code_reason").removeClass("display error success"); 849 const email = $('#registerEmail').val(); 850 $(".btn-processing-submit").addClass("disabled"); 851 852 $.ajax({ 853 url: '/api/register-send-code', 854 method: 'POST', 855 data: { 856 email 857 }, 858 success: function(response) { 859 response = JSON.parse(response); 860 config.global.debug && console.log(response); 861 $(".btn-processing-submit").removeClass("disabled"); 862 if (response.status) { 863 $("#error_code_reason").addClass("display success").html( 864 'Code envoyé !'); 865 $("#action_resend_verification_code").addClass("disabled"); 866 } 867 } 868 }); 869 }); 870 871 872 $('#confirmRegistrationForm').on('submit', function(e) { 873 e.preventDefault(); 874 const email = $('#registerEmail').val(); 875 const code = $('#registrationCode').val(); 876 $("#error_code_reason").removeClass("display error success"); 877 878 $.ajax({ 879 url: '/api/register-confirmation', 880 method: 'POST', 881 data: { 882 email, 883 code 884 }, 885 success: function(response) { 886 response = JSON.parse(response); 887 config.global.debug && console.log(response); 888 889 if (response.status) { 890 //Traffic Junkie 891 window.idsync.send_event({ 892 "name": "Subscribe", 893 "type": "Acquisition", 894 "value": "1.000" 895 }); 896 897 window.location.reload(); 898 } else { 899 switch (response.reason) { 900 case "already_enabled": 901 window.location.reload(); 902 break; 903 case "no_match": 904 $("#error_code_reason").addClass('error display') 905 .html(response 906 .message); 907 break; 908 default: 909 break; 910 } 911 } 912 } 913 }); 914 }); 915 916 917 }); 918</script>
918 919 <div id="refuse_multi_request_modal" class="popup-slide"> 920 <div class="popup-content-wrapper no-illustration"> 921 <div class="popup-content"> 922 <span class="btn-close-modal close"><i class="fal fa-times"></i></span> 923 <div class="header"> 924 <div class="modal-icon"><i class="fas fa-exclamation-triangle"></i></div> 925 <div class="title">Multiple action denied</div> 926 <div class="subtitle">Please submit a <strong>single request</strong></div> 927 </div> 928 <div class="content"> 929 <div class="multirequest-container"> 930 <div class="multirequest refused"> 931 <div class="label"><i class="fas fa-times-circle"></i> Action Refused</div> 932 <div class="request-message"> 933 <span class="username">Charles</span> 934 <span class="message">Get up and dance</span> 935 </div> 936 </div> 937 <div class="multirequest accepted"> 938 <div class="label"><i class="fas fa-check-circle"></i> Action Accepted</div> 939 <div class="request-message"> 940 <span class="username">Charles</span> 941 <span class="message">Dance for me.</span> 942 </div> 943 </div> 944 </div> 945 <p class="modal-note">The current version of our artificial intelligence does not yet support multi-action requests</p> 946 </div> 947 </div> 948 </div> 949</div> 950
951<script> 952 $(document).ready(function() { 953 $('#refuse_multi_request_modal .close').click(function() { 954 $('#refuse_multi_request_modal').removeClass('active'); 955 closeModalBackDrop(); 956 }); 957 }); 958</script>
958 <!-- Modal pour quota dépassé --> 959<div id="quota_exceeded_modal" class="popup-slide"> 960 <div class="popup-content-wrapper no-illustration"> 961 <div class="popup-content"> 962 <span class="btn-close-modal close" id="close-quota-modal"> 963 <i class="fal fa-times"></i> 964 </span> 965 <div class="header"> 966 <div class="title avertissement-title"> 967 Maximum number of messages reached </div> 968 969 </div> 970 <div class="content"> 971 <p class="avertissement-text" id="quota-message"> 972 To <strong>chat without limits</strong>, please sign up for free! </p> 973 </div> 974 <div class="avertissement-buttons text-center"> 975 <button type="button" class="btn btn-blue-green" id="quota-action-button">Free Sign Up</button> 976 </div> 977 </div> 978 </div> 979</div> 980
981<script> 982 $(document).ready(function() { 983 984 $('#close-quota-modal').on('click', function() { 985 $('#quota_exceeded_modal').removeClass('active'); 986 closeModalBackDrop(); 987 }); 988 989 window.configureQuotaExceededModal = function(isPremium, isRegistered) { 990 991 if (!isPremium && !isRegistered) { 992 993 $('#quota-message').html('To <strong>chat without limits</strong>, please sign up for free!'); 994 $('#quota-action-button').text('Free Sign Up').removeClass('btn-orange').addClass('btn-blue-green'); 995 996 // Suppression directe de l'indicateur de frappe et du dernier message 997 $('.typing').remove(); 998 setTimeout(function() { 999 $('.message:last').remove(); 1000 $('#user_message').prop('disabled', false); 1001 $('.message-submit').prop('disabled', false); 1002 $('#user_message').val(''); 1003 }, 300); 1004 1005 $('#quota-action-button').off('click').on('click', function() { 1006 $('#quota_exceeded_modal').removeClass('active'); 1007 closeModalBackDrop(); 1008 openAuthModal(); 1009 }); 1010 1011 } else if (!isPremium && isRegistered) { 1012 1013 $('#quota-message').html('For <strong>unlimited chatting</strong>,<br> become Premium!'); 1014 $('#quota-action-button').text('Become Premium (70% Off Offer)').removeClass('btn-blue-green').addClass('btn-orange'); 1015 1016 // Suppression directe de l'indicateur de frappe et du dernier message 1017 $('.typing').remove(); 1018 setTimeout(function() { 1019 $('.message:last').remove(); 1020 $('#user_message').prop('disabled', false); 1021 $('.message-submit').prop('disabled', false); 1022 $('#user_message').val(''); 1023 }, 300); 1024 1025 $('#quota-action-button').off('click').on('click', function() { 1026 window.location.href = '/subscription'; 1027 }); 1028 } 1029 1030 1031 1032 }; 1033 1034 }); 1035</script>
1035 <div id="premium_error_modal" class="popup-slide"> 1036 <div class="popup-content"> 1037 <div class="header"> 1038 <div class="title"> 1039 Information </div> 1040 <p> 1041 You must be a premium member to access this room. </p> 1042 1043 <a href="/subscription" class="btn btn-orange icon-left upper btn-process"> 1044 <i class="fas fa-crown"></i> 1045 Become premium </a> 1046 </div> 1047 </div> 1048</div> 1049
1050<script> 1051 function openPremiumErrorModal() { 1052 $('#premium_error_modal').addClass('active'); 1053 openModalBackDrop(); 1054 } 1055 1056 </script>
1056 <div id="user_informations_modal" class="popup-slide"> 1057<div class="popup-content-wrapper no-illustration"> 1058<div class="popup-content"> 1059 <div class="auth-container"> 1060 <div id="userInformationsSection" class="auth-section active"> 1061 <div class="header"> 1062 <div class="title"> 1063 Customize your AI experience </div> 1064 <div class="subtitle"> 1065 This will allow you to personalize your interactions with the Pocket Girls. </div> 1066 </div> 1067 1068 <main class="form-signin w-100"> 1069 <form class="form-modal" id="userInformationsForm" method="POST"> 1070 <input type="hidden" id="userId" name="userId" value="21"> 1071 <div class="form-floating my-3"> 1072 <i class="fas fa-user"></i> 1073 <input type="text" class="form-control" id="userFirstname" name="firstname" 1074 placeholder="Your first name" required minlength="3" maxlength="20"> 1075 <label for="firstname">First Name</label> 1076 </div> 1077 1078 <div class="tips mb-3"> 1079 <i class="fal fa-info-circle"></i> 1080 You will no longer be able to change your first name. </div> 1081 1082 <div class="form-group my-4"> 1083 <label class="d-block mb-3">I am a:</label> 1084 <div class="gender-selection"> 1085 <div class="gender-option"> 1086 <input type="radio" name="gender" id="genderMale" value="homme" required checked> 1087 <label for="genderMale"> 1088 <i class="fas fa-mars"></i> 1089 <span>Man</span> 1090 </label> 1091 </div> 1092 <div class="gender-option"> 1093 <input type="radio" name="gender" id="genderFemale" value="femme" required> 1094 <label for="genderFemale"> 1095 <i class="fas fa-venus"></i> 1096 <span>Woman</span> 1097 </label> 1098 </div> 1099 </div> 1100 </div> 1101 1102 <button class="btn btn-primary w-100 py-3 btn-processing-submit" 1103 type="submit">Save</button> 1104 </form> 1105 </main> 1106 </div> 1107 </div> 1108 </div> 1109</div> 1110</div> 1111 1112
1113<script> 1114 function openPersonalizeExperienceModal() { 1115 $(".popup-slide").removeClass('active'); 1116 $('#user_informations_modal').addClass('active'); 1117 $('#modal-backdrop').addClass('active').hide().fadeIn(100); 1118 1119 // Bloquer la fermeture du modal 1120 blockModalClosing('#user_informations_modal'); 1121 1122 // Mettre le focus sur le champ de prénom 1123 setTimeout(function() { 1124 $('#userFirstname').focus(); 1125 }, 300); 1126 } 1127 1128 $(document).ready(function() { 1129 1130 // openPersonalizeExperienceModal(); 1131 1132 1133 $('#userInformationsForm').on('submit', function(e) { 1134 1135 e.preventDefault(); 1136 const userId = $('#userId').val(); 1137 const firstname = $('#userFirstname').val(); 1138 const gender = $('input[name="gender"]:checked').val(); 1139 1140 // Sauvegarder le texte du bouton 1141 const $submitBtn = $(".btn-processing-submit"); 1142 const originalBtnText = $submitBtn.html(); 1143 1144 // Afficher le loader SVG 1145 $submitBtn.html('<svg class="spinner" viewBox="0 0 50 50"><circle class="path" cx="25" cy="25" r="20" fill="none" stroke-width="5"></circle></svg>'); 1146 $submitBtn.addClass("disabled"); 1147 1148 // Validation côté client 1149 if (!firstname || !gender) { 1150 showError('Please fill in all fields'); 1151 $submitBtn.html(originalBtnText); 1152 $submitBtn.removeClass("disabled"); 1153 return; 1154 } 1155 1156 // Restaurer le comportement normal avant de fermer 1157 restoreModalClosing(); 1158 1159 // Envoyer les données au serveur en JSON 1160 $.ajax({ 1161 url: '/api/user/informations', 1162 method: 'POST', 1163 contentType: 'application/json', 1164 data: JSON.stringify({ 1165 userId: userId, 1166 firstname: firstname, 1167 gender: gender 1168 }), 1169 success: function(response) { 1170 try { 1171 response = typeof response === 'string' ? JSON.parse(response) : response; 1172 1173 if (response.status) { 1174 // Fermer le modal sans recharger la page 1175 $('#user_informations_modal').removeClass('active'); 1176 $('#modal-backdrop').removeClass('active').fadeOut(100); 1177 } else { 1178 showError(response.message || 'An error has occurred'); 1179 $submitBtn.html(originalBtnText); 1180 $submitBtn.removeClass("disabled"); 1181 } 1182 } catch (e) { 1183 $submitBtn.html(originalBtnText); 1184 $submitBtn.removeClass("disabled"); 1185 showError('An error has occurred'); 1186 } 1187 }, 1188 error: function() { 1189 $submitBtn.html(originalBtnText); 1190 $submitBtn.removeClass("disabled"); 1191 showError('A connection error has occurred'); 1192 } 1193 }); 1194 }); 1195 1196 // Fonction pour afficher les erreurs de validation 1197 function showError(message) { 1198 // Supprime l'erreur précédente si elle existe 1199 $('#userInformationsForm .error-message').remove(); 1200 1201 // Ajoute le nouveau message d'erreur 1202 $('#userInformationsForm button[type="submit"]').before('<div class="error-message alert alert-danger mt-3">Error: ' + message + '</div>'); 1203 } 1204 }); 1205</script>
1205 1206<!-- Modal intermédiaire avant désabonnement --> 1207<div id="offer_delete_subscription_modal" class="popup-slide"> 1208 <div class="popup-content-wrapper no-illustration"> 1209 <div class="popup-content"> 1210 <div class="header"> 1211 <div class="title">Wait!<br> One last thing ð¤</div> 1212 </div> 1213 <div class="content"> 1214 <p class="modal-subtitle">If you remain subscribed this month,<br> we offer you:</p> 1215 <p class="message-count-highlight"><strike>200</strike> 500 jetons</p> 1216 <p class="modal-subtitle"><br> at your next due date! ð²</p> 1217 </div> 1218 <div class="avertissement-buttons"> 1219 <button type="button" class="btn btn-secondary" id="proceed_to_unsubscribe_offer">No thanks</button> 1220 <button type="button" class="btn btn-primary" id="stay_subscribed_offer">I accept the tokens!</button> 1221 </div> 1222 </div> 1223 </div> 1224</div> 1225 1226 1227<!-- Modal intermédiaire avant désabonnement --> 1228<div id="pre_delete_subscription_modal" class="popup-slide"> 1229 <div class="popup-content-wrapper no-illustration"> 1230 <div class="popup-content"> 1231 <div class="header"> 1232 <div class="title">Wait! We're sad to see you go...</div> 1233 </div> 1234 <div class="content"> 1235 <p class="modal-description">Before you go, we would really appreciate a moment of your time. Understanding our users' experience is crucial for us to improve.</p> 1236 <div class="form-group"> 1237 <label for="unsubscribe_reason" id="error_message">This field is required</label> 1238 <textarea id="unsubscribe_reason" class="form-control" rows="4" placeholder="I decided to unsubscribe because..."></textarea> 1239 </div> 1240 </div> 1241 <div class="avertissement-buttons"> 1242 <button type="button" class="btn btn-secondary" id="proceed_to_unsubscribe">Unsubscribe</button> 1243 <button type="button" class="btn btn-primary" id="stay_subscribed">Stay subscribed</button> 1244 </div> 1245 </div> 1246 </div> 1247</div> 1248 1249<!-- Modal de confirmation de désabonnement --> 1250<div id="user_delete_subscription_modal" class="popup-slide"> 1251 <div class="popup-content-wrapper no-illustration"> 1252 <div class="popup-content"> 1253 <div class="header"> 1254 <div class="title">â ï¸ Warning â ï¸</div> 1255 </div> 1256 <div class="content"> 1257 <p class="modal-description">By unsubscribing, you will <strong style="color:#f02e74;">lose</strong> the following benefits:</p> 1258 <div class="advantages"> 1259 <div class="subscription-page__advantage"> 1260 <i class="fas fa-times-circle color--red"></i> 1261 <span>Your ongoing chats</span> 1262 </div> 1263 <div class="subscription-page__advantage"> 1264 <i class="fas fa-times-circle color--red"></i> 1265 <span>Access to X actions</span> 1266 </div> 1267 <div class="subscription-page__advantage"> 1268 <i class="fas fa-times-circle color--red"></i> 1269 <span>Access to premium girls</span> 1270 </div> 1271 <div class="subscription-page__advantage"> 1272 <i class="fas fa-times-circle color--red"></i> 1273 <span>The 2nd camera and HD zoom</span> 1274 </div> 1275 </div> 1276 </div> 1277 <div class="avertissement-buttons"> 1278 <button type="button" class="btn btn-primary" id="cancel_subscription_deletion">Iâm keeping my subscription</button> 1279 <button type="button" class="btn btn-secondary" id="confirm_subscription_deletion">I cancel and lose my benefits</button> 1280 </div> 1281 </div> 1282 </div> 1283</div> 1284
1285<script> 1286 // Fonction pour ouvrir le modal intermédiaire 1287 function openPreDeleteSubscriptionModal() { 1288 // Masquer le message d'erreur par défaut 1289 $('#error_message').hide(); 1290 // Réinitialiser la bordure du champ 1291 $('#unsubscribe_reason').css('border', '1px solid #ccc'); 1292 // Ouvrir le modal intermédiaire 1293 } 1294 1295 // Fonction pour ouvrir le modal de confirmation de désabonnement 1296 function openUserDeleteSubscriptionModal() { 1297 $('#user_delete_subscription_modal').addClass('active'); 1298 openModalBackDrop(); 1299 } 1300 1301 $(document).ready(function() { 1302 // Ouvrir le modal intermédiaire lorsque l'utilisateur clique sur le bouton de désabonnement 1303 $('#confirm_subscription_deletion').on('click', function() { 1304 // Fermer le modal principal et ouvrir le modal intermédiaire 1305 $('#user_delete_subscription_modal').removeClass('active'); 1306 openPreDeleteSubscriptionModal(); 1307 }); 1308 1309 // Fermer le modal intermédiaire et revenir au modal principal 1310 $('#stay_subscribed').on('click', function() { 1311 $('#pre_delete_subscription_modal').removeClass('active'); 1312 $('#modal-backdrop').removeClass('active'); 1313 }); 1314 1315 $('#stay_subscribed_offer').on('click', function() { 1316 1317 1318 $.ajax({ 1319 url: '/api/user/setExtraTokenOffer', 1320 type: 'POST', 1321 dataType: 'json', 1322 success: function(response) { 1323 showNotification("Offer validated! You will receive 500 tokens at your next due date.", "success"); 1324 } 1325 }); 1326 1327 $('#offer_delete_subscription_modal').removeClass('active'); 1328 $('#modal-backdrop').removeClass('active'); 1329 1330 }); 1331 1332 // Traiter le désabonnement 1333 // 1334 $('#proceed_to_unsubscribe').on('click', function() { 1335 if ($('#unsubscribe_reason').val().trim() === '') { 1336 // Afficher le message d'erreur 1337 $('#error_message').show(); 1338 // Mettre en évidence le champ obligatoire 1339 $('#unsubscribe_reason').css('border', '2px solid #f02e74'); 1340 return false; 1341 } 1342 1343 // Stocker la raison du désabonnement (à implémenter selon vos besoins) 1344 const reason = $('#unsubscribe_reason').val(); 1345 console.log('Raison du désabonnement:', reason); 1346 1347 // Rediriger vers la page d'annulation d'abonnement 1348 window.location.href = '/account/cancel-subscription'; 1349 }); 1350 $('#proceed_to_unsubscribe_offer').on('click', function() { 1351 window.location.href = '/account/cancel-subscription'; 1352 }); 1353 1354 // Fermer le modal de confirmation 1355 $('#cancel_subscription_deletion').on('click', function() { 1356 $('#user_delete_subscription_modal').removeClass('active'); 1357 $('#modal-backdrop').removeClass('active'); 1358 }); 1359 }); 1360</script>
1360 <div id="gentleman_modal" class="popup-slide"> 1361 <div class="popup-content-wrapper no-illustration"> 1362 <div class="popup-content"> 1363 <div class="header"> 1364 <div class="title">Very important ð²</div> 1365 </div> 1366 <div class="content"> 1367 <p class="modal-description">Consider Pocket Girls as <strong>real women</strong>.<br><br>The more you chat and build a real connection, the wilder and more <strong style="color:#f02e74;">uninhibited</strong> the actions will get ð«£ð¤<br><br>If you just send actions mindlessly, you'll miss out on all the magic... ð¥µ</p> 1368 </div> 1369 <div class="modal-buttons"> 1370 <button type="button" class="btn btn-primary" id="close-modal-gentleman">I understand</button> 1371 </div> 1372 </div> 1373 </div> 1374</div> 1375
1376<script> 1377 1378 1379 $(document).ready(function() { 1380 1381 // Bouton quitter le site 1382 $('#close-modal-gentleman').on('click', function() { 1383 $(".popup-slide").removeClass('active'); 1384 $('#gentleman_modal').removeClass('active'); 1385 $('#modal-backdrop').removeClass('active'); 1386 }); 1387 1388 }); 1389 1390</script>
1390 <div id="refuse-sex-modal" class="popup-slide"> 1391 <div class="popup-content-wrapper no-illustration"> 1392 <div class="popup-content"> 1393 <div class="header"> 1394 <div class="title"> 1395 Not right now ð ââï¸ </div> 1396 </div> 1397 <div class="content"> 1398 <p> 1399 <strong class="modal-title-centered">Get Intimate First!</strong> <br><br>To make <strong>sexual</strong> requests, you need to have exchanged at least: <br><br><strong class="message-count-highlight">5 messages</strong><br><br>The more intimate you get, the wilder and <strong class="action-highlight">uninhibited</strong> the actions will be ð«£ </p> 1400 </div> 1401 <div class="modal-action-buttons"> 1402 <button type="button" class="btn btn-primary" id="close-modal-refuse-sex">I understand</button> 1403 </div> 1404 </div> 1405 </div> 1406</div> 1407
1408<script> 1409 1410 1411 $(document).ready(function() { 1412 1413 1414 1415 1416 // Bouton quitter le site 1417 $('#close-modal-refuse-sex').on('click', function() { 1418 $(".popup-slide").removeClass('active'); 1419 $('#refuse-sex-modal').removeClass('active'); 1420 $('#modal-backdrop').removeClass('active'); 1421 }); 1422 1423 }); 1424 1425</script>
1425 <div id="prohibited_content_modal" class="popup-slide"> 1426 <div class="popup-content-wrapper no-illustration"> 1427 <div class="popup-content"> 1428 <div class="header"> 1429 <div class="title">â Prohibited Content â</div> 1430 </div> 1431 <div class="content"> 1432 <p>We have identified that your message does not comply with our terms of use. <br>Please ensure you strictly follow them in the future.</p> 1433 </div> 1434 <div class="gentlemen-buttons"> 1435 <button type="button" class="btn btn-primary" id="close-modal-prohibited-content">I understand</button> 1436 </div> 1437 </div> 1438 </div> 1439</div> 1440
1441<script> 1442 1443 1444 $(document).ready(function() { 1445 1446 // Bouton quitter le site 1447 $('#close-modal-prohibited-content').on('click', function() { 1448 $(".popup-slide").removeClass('active'); 1449 $('#prohibited_content_modal').removeClass('active'); 1450 $('#modal-backdrop').removeClass('active'); 1451 }); 1452 1453 }); 1454 1455</script>
1455 <div id="upgrade_plan_modal" class="popup-slide"> 1456 <div class="popup-content-wrapper no-illustration"> 1457 <div class="popup-content"> 1458 <span class="btn-close-modal close"> 1459 <i class="fal fa-times"></i> 1460 </span> 1461 <div class="header"> 1462 <div class="title"> 1463 <i class="fas fa-crown color--orange"></i> 1464 Feature Reserved </div> 1465 </div> 1466 <div class="content"> 1467 <p class="upgrade-description"> 1468 Camera 2 and zoom are reserved for <strong style="color:#FFF;">3-month and yearly</strong> subscribers. </p> 1469 <div class="upgrade-features-wrapper"> 1470 <p class="upgrade-features-label">For 3-month and yearly subscribers:</p> 1471 <div class="upgrade-features"> 1472 <div class="feature-item"> 1473 <i class="fas fa-video"></i> 1474 <span>Access to Camera 2</span> 1475 </div> 1476 <div class="feature-item"> 1477 <i class="fas fa-search-plus"></i> 1478 <span>HD Zoom</span> 1479 </div> 1480 <div class="feature-item"> 1481 <i class="fas fa-fire"></i> 1482 <span>More sexually aggressive AI ð¤¯</span> 1483 </div> 1484 <div class="feature-item"> 1485 <i class="fas fa-lock-open"></i> 1486 <span>Secret actions revealed ð¤</span> 1487 </div> 1488 <div class="feature-item"> 1489 <i class="fas fa-infinity"></i> 1490 <span>No daily action limits</span> 1491 </div> 1492 </div> 1493 </div> 1494 </div> 1495 <div class="upgrade-actions"> 1496 <a href="/subscription" class="btn btn-orange icon-left"> 1497 <i class="fas fa-arrow-up"></i> 1498 Upgrade my subscription </a> 1499 <button class="btn-text-link btn-close-modal"> 1500 Later </button> 1501 </div> 1502 </div> 1503 </div> 1504</div> 1505
1506<script> 1507 function openUpgradePlanModal() { 1508 $('#upgrade_plan_modal').addClass('active'); 1509 openModalBackDrop(); 1510 } 1511 1512 function closeUpgradePlanModal() { 1513 $('#upgrade_plan_modal').removeClass('active'); 1514 closeModalBackDrop(); 1515 } 1516 1517 $(document).ready(function() { 1518 $('#upgrade_plan_modal .btn-close-modal').on('click', function(e) { 1519 e.preventDefault(); 1520 closeUpgradePlanModal(); 1521 }); 1522 }); 1523</script>
1523 1524 1525<style> 1526 #upgrade_plan_modal .popup-content { 1527 max-width: 380px; 1528 text-align: center; 1529 } 1530 1531 #upgrade_plan_modal .header .title { 1532 display: flex; 1533 align-items: center; 1534 justify-content: center; 1535 gap: 10px; 1536 line-height: 1.1em; 1537 } 1538 1539 #upgrade_plan_modal .header .title i { 1540 font-size: 1.1em; 1541 } 1542 1543 #upgrade_plan_modal .upgrade-description { 1544 font-weight: 400; 1545 font-size: 0.95em; 1546 line-height: 1.5; 1547 color: rgba(255, 255, 255, 0.8); 1548 margin: 0; 1549 } 1550 1551 #upgrade_plan_modal .upgrade-features-wrapper { 1552 margin-bottom: 25px; 1553 } 1554 1555 #upgrade_plan_modal .upgrade-features-label { 1556 font-size: 0.85em; 1557 color: #FFF; 1558 margin: 0 0 12px 0; 1559 font-weight: 600; 1560 } 1561 1562 #upgrade_plan_modal .upgrade-features { 1563 display: inline-flex; 1564 flex-direction: column; 1565 align-items: flex-start; 1566 gap: 10px; 1567 width: 100%; 1568 } 1569 1570 #upgrade_plan_modal .feature-item { 1571 display: flex; 1572 align-items: center; 1573 gap: 12px; 1574 padding: 10px 20px; 1575 background: linear-gradient(135deg, rgba(240, 46, 116, 0.15) 0%, rgba(240, 46, 116, 0.05) 100%); 1576 border: 1px solid rgba(240, 46, 116, 0.2); 1577 border-radius: 25px; 1578 font-size: 0.9em; 1579 text-align: left; 1580 width: 100%; 1581 box-sizing: border-box; 1582 } 1583 1584 #upgrade_plan_modal .feature-item i { 1585 font-size: 1em; 1586 color: #f02e74; 1587 width: 18px; 1588 text-align: center; 1589 flex-shrink: 0; 1590 } 1591 1592 #upgrade_plan_modal .feature-item span { 1593 color: rgba(255, 255, 255, 0.9); 1594 } 1595 1596 #upgrade_plan_modal .upgrade-actions { 1597 display: flex; 1598 flex-direction: column; 1599 align-items: center; 1600 gap: 15px; 1601 } 1602 1603 #upgrade_plan_modal .upgrade-actions .btn { 1604 padding: 12px 28px; 1605 font-size: 0.9em; 1606 border-radius: 25px; 1607 } 1608 1609 #upgrade_plan_modal .btn-text-link { 1610 background: none; 1611 border: none; 1612 color: rgba(255, 255, 255, 0.5); 1613 font-size: 0.85em; 1614 cursor: pointer; 1615 padding: 5px 10px; 1616 transition: color 0.2s ease; 1617 } 1618 1619 #upgrade_plan_modal .btn-text-link:hover { 1620 color: rgba(255, 255, 255, 0.8); 1621 } 1622 1623 @media (max-width: 767px) { 1624 #upgrade_plan_modal .header .title { 1625 margin-top: 8px; 1626 } 1627 } 1628</style> 1629 1630 </div> 1631 1632
1632<script> 1633 let config = {"global":{"debug":true},"modals":{"offer":{"title":"<strong>Site Launch Offer<\/strong><br> Today <span class='boxed'>-50%<\/span> on tokens \ud83d\ude31","title_alt":"You don't have enough tokens \ud83d\ude31"}}}; 1634 const $modalBackdrop = $("#modal-backdrop"); 1635 1636 /** BACKDROP */ 1637 function openModalBackDrop() { 1638 $modalBackdrop 1639 .addClass("active") 1640 .hide() 1641 .fadeIn(100); 1642 } 1643 1644 function closeModalBackDrop() { 1645 $modalBackdrop.fadeOut(100); 1646 // Ne pas supprimer la classe active des modals ici 1647 // $(".popup-slide.active").removeClass("active"); 1648 } 1649 1650 // Fermer le modal en cliquant sur le backdrop (en-dehors du bloc modal) 1651 $modalBackdrop.on("click", function(e) { 1652 if (e.target === this) { 1653 $(this).fadeOut(100); 1654 $(".popup-slide.active").removeClass("active"); 1655 // Reset auth modal sections to default state 1656 $('#registerSection, #loginSection, #forgotPasswordSection, #findEmailSection').hide().removeClass('active'); 1657 $('#registerSection').show().addClass('active'); 1658 } 1659 }); 1660 /** BACKDROP */ 1661 1662 /** GLOBAL */ 1663 function openAuthModal(title = null, type = null) { 1664 if (title) { 1665 $("#modal_offer_title_injector").html(title); 1666 } else { 1667 $("#modal_offer_title_injector").html(config.modals.offer.title); 1668 } 1669 1670 // Reset all sections first 1671 $('#registerSection, #loginSection, #forgotPasswordSection, #findEmailSection').hide().removeClass('active'); 1672 1673 if (type == "signin") { 1674 $('#loginSection').show().addClass('active'); 1675 } else { 1676 // Default to signup/register 1677 $('#registerSection').show().addClass('active'); 1678 } 1679 1680 $('#auth_offer_modal').addClass('active'); 1681 openModalBackDrop(); 1682 } 1683 </script>
1683 1684 1685 <!--<nav class="main"> 1686 <div class="wrapper"> 1687 <div class="logo"> 1688 <img src="https://www.pocketgirl.ai/src/assets/img/logo/[email protected]" alt="logo"> 1689 </div> 1690 <div class="actions"> 1691 <div class="free-token"> 1692 <div class="icon-wrapper"> 1693 <i class="fas fa-bolt"></i> 1694 </div> 1695 0 crédits offerts à l'inscription 1696 </div> 1697 </div> 1698 </div> 1699</nav>--> 1700 1701<nav class="room "> 1702 <div class="wrapper"> 1703 <div class="menu-mobile-open show-smartphone" id="menu_toggle"> 1704 <button class="hamburger hamburger--collapse" type="button"> 1705 <span class="hamburger-box"> 1706 <span class="hamburger-inner"></span> 1707 </span> 1708 </button> 1709 </div> 1710 1711 <div class="logo"> 1712 <a href="/"> 1713 <img src="https://www.pocketgirl.ai/src/assets/img/logo/logo.svg?3" alt="logo"> 1714 </a> 1715 </div> 1716 <div class="actions flex-end" style="position:relative;"> 1717 <button class="btn btn-blue-green upper btn-sign hide-tablet hide-smartphone" data-type="signup"> 1718 Create a free account </button> 1719 <button class="btn btn-white upper btn-sign hide-tablet hide-smartphone" data-type="signin"> 1720 Log in </button> 1721 1722 <button class="btn btn-blue-green upper btn-sign btn-icon show-smartphone show-tablet hide-desktop" 1723 data-type="signin"> 1724 <i class="fas fa-user"></i> 1725 </button> 1726 1727 1728 </div> 1729 1730 </div> 1731 1732 <!-- Neon effect --> 1733 <div class="neon-effect-wrapper hide-smartphone"> 1734 <div class="neon-effect"></div> 1735 </div> 1736 1737</nav> 1738
1739<script> 1740 $(document).ready(function() { 1741 const profileMenuButton = $(".user-profile-menu button"); 1742 const profileMenuContent = $(".user-profile-content"); 1743 1744 $(".menu-mobile-open").click(function() { 1745 openSidebar(); 1746 }); 1747 1748 $(".menu-mobile-close").click(function() { 1749 closeSidebar(); 1750 }); 1751 1752 var openSidebar = function() { 1753 var _slideMenu = $("#menu_toggle_content"); 1754 var _btnMenu = $(".menu-mobile-open > button"); 1755 var _closeDirection = { 1756 direction: "left" 1757 }; 1758 _slideMenu.stop(true, true).show("slide", _closeDirection, 300); 1759 _btnMenu.toggleClass("is-active"); 1760 _slideMenu.toggleClass("slide-opened"); 1761 } 1762 1763 var closeSidebar = function() { 1764 var _slideMenu = $("#menu_toggle_content"); 1765 var _btnMenu = $(".menu-mobile-open > button"); 1766 var _closeDirection = { 1767 direction: "right" 1768 }; 1769 _slideMenu.stop(true, true).show("slide", _closeDirection, 300); 1770 _btnMenu.toggleClass("is-active"); 1771 _slideMenu.toggleClass("slide-opened"); 1772 } 1773 1774 if (profileMenuButton.length && profileMenuContent.length) { 1775 profileMenuButton.click(function(event) { 1776 event.stopPropagation(); // Empêche la fermeture immédiate 1777 profileMenuContent.toggleClass("show"); 1778 }); 1779 1780 $(document).click(function(event) { 1781 if (!profileMenuContent.is(event.target) && !profileMenuButton.is(event.target) && 1782 profileMenuContent.has(event.target).length === 0) { 1783 profileMenuContent.removeClass("show"); 1784 } 1785 }); 1786 } 1787 }); 1788</script>
1788 1789<section class="sidebar-container-wrapper menu-mobile-content" id="menu_toggle_content"> 1790 <div class="sidebar-container"> 1791 1792 <div class="menu"> 1793 1794 <div class="action basic show-smartphone"> 1795 <div class="menu-mobile-close"> 1796 <button class="hamburger hamburger--collapse is-active" type="button"> 1797 <span class="hamburger-box"> 1798 <span class="hamburger-inner"></span> 1799 </span> 1800 </button> 1801 </div> 1802 </div> 1803 1804 <div class="action basic"> 1805 <a href="/girls"> 1806 <i class="fas fa-th"></i> 1807 </a> 1808 </div> 1809 1810 1811 <div class="menu-girls-wrapper custom-no-sb"> 1812 <div class="menu-girls"> 1813 1814 </div> 1815 1816 </div> 1817 <!-- Neon effect --> 1818 <div class="neon-effect-wrapper vertical hide-smartphone"> 1819 <div class="neon-effect"></div> 1820 </div> 1821 1822 1823 1824 </div> 1825 1826 <!-- Bottom icons --> 1827 <div class="sidebar-bottom-icons"> 1828 <div class="action basic language-toggle-container" id="language-toggle-container"> 1829 <a href="#" class="language-icon"> 1830 <img src="https://flagcdn.com/64x48/us.png" 1831 srcset="https://flagcdn.com/64x48/us.png 2x, https://flagcdn.com/48x36/us.png 3x" 1832 alt="en" class="flag-icon" data-lang="en"> 1833 </a> 1834 </div> 1835 <div class="action basic"> 1836 <a href="mailto:[email protected]" class="contact-icon"> 1837 <i class="fas fa-envelope"></i> 1838 </a> 1839 </div> 1840 </div> 1841 </div> 1842 1843 <!-- Menu fixe de drapeaux --> 1844 <div class="language-menu-fixed" id="language-menu-sidebar" style="display: none;"> 1845 <div class="language-option-sidebar"> 1846 <a href="#" class="lang-selector " 1847 data-lang="fr"> 1848 <img src="https://flagcdn.com/64x48/fr.png" 1849 srcset="https://flagcdn.com/64x48/fr.png 2x, https://flagcdn.com/48x36/fr.png 3x" 1850 alt="FR" class="flag-icon"> 1851 </a> 1852 </div> 1853 <div class="language-option-sidebar"> 1854 <a href="#" class="lang-selector active" 1855 data-lang="en"> 1856 <img src="https://flagcdn.com/64x48/us.png" 1857 srcset="https://flagcdn.com/64x48/us.png 2x, https://flagcdn.com/48x36/us.png 3x" 1858 alt="EN" class="flag-icon"> 1859 </a> 1860 </div> 1861 <div class="language-option-sidebar"> 1862 <a href="#" class="lang-selector " 1863 data-lang="de"> 1864 <img src="https://flagcdn.com/64x48/de.png" 1865 srcset="https://flagcdn.com/64x48/de.png 2x, https://flagcdn.com/48x36/de.png 3x" 1866 alt="DE" class="flag-icon"> 1867 </a> 1868 </div> 1869 <div class="language-option-sidebar"> 1870 <a href="#" class="lang-selector " 1871 data-lang="it"> 1872 <img src="https://flagcdn.com/64x48/it.png" 1873 srcset="https://flagcdn.com/64x48/it.png 2x, https://flagcdn.com/48x36/it.png 3x" 1874 alt="IT" class="flag-icon"> 1875 </a> 1876 </div> 1877 <div class="language-option-sidebar"> 1878 <a href="#" class="lang-selector " 1879 data-lang="es"> 1880 <img src="https://flagcdn.com/64x48/es.png" 1881 srcset="https://flagcdn.com/64x48/es.png 2x, https://flagcdn.com/48x36/es.png 3x" 1882 alt="ES" class="flag-icon"> 1883 </a> 1884 </div> 1885 <div class="language-option-sidebar"> 1886 <a href="#" class="lang-selector " 1887 data-lang="pt"> 1888 <img src="https://flagcdn.com/64x48/pt.png" 1889 srcset="https://flagcdn.com/64x48/pt.png 2x, https://flagcdn.com/48x36/pt.png 3x" 1890 alt="PT" class="flag-icon"> 1891 </a> 1892 </div> 1893 </div> 1894</section> 1895
1896<script> 1897 document.addEventListener('DOMContentLoaded', function() { 1898 const languageToggleContainer = document.getElementById('language-toggle-container'); 1899 const languageMenu = document.getElementById('language-menu-sidebar'); 1900 const currentLang = document.querySelector('.language-icon img').getAttribute('data-lang'); 1901 1902 function setCookie(name, value, days) { 1903 var expires = ""; 1904 if (days) { 1905 var date = new Date(); 1906 date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 1907 expires = "; expires=" + date.toUTCString(); 1908 } 1909 document.cookie = name + "=" + (value || "") + expires + "; path=/"; 1910 } 1911 1912 1913 function toggleLanguageMenu(event) { 1914 event.preventDefault(); 1915 event.stopPropagation(); 1916 1917 if (languageMenu.style.display === 'none' || !languageMenu.style.display) { 1918 languageMenu.style.display = 'flex'; 1919 } else { 1920 languageMenu.style.display = 'none'; 1921 } 1922 } 1923 1924 languageToggleContainer.addEventListener('click', toggleLanguageMenu); 1925 const languageSelectors = document.querySelectorAll('.lang-selector'); 1926 languageSelectors.forEach(function(selector) { 1927 selector.addEventListener('click', function(event) { 1928 event.preventDefault(); 1929 1930 const newLang = this.getAttribute('data-lang'); 1931 1932 if (currentLang === newLang) { 1933 languageMenu.style.display = 'none'; 1934 return; 1935 } 1936 1937 setCookie('locale', newLang, 3650); 1938 1939 $.ajax({ 1940 url: 'https://www.pocketgirl.ai/api/user/persistLanguage', 1941 type: 'POST', 1942 contentType: 'application/json', 1943 data: JSON.stringify({ 1944 language_code: newLang, 1945 current_url: window.location.pathname 1946 }), 1947 success: function(response) { 1948 console.log(response); 1949 //window.location.reload(); 1950 if (response.success) { 1951 // â Redirection vers la nouvelle URL avec la bonne locale 1952 window.location.href = response.redirect_url; 1953 } else { 1954 console.error('Erreur changement locale:', response.error); 1955 } 1956 }, 1957 error: function(jqXHR, textStatus, errorThrown) { 1958 console.error('Error persisting language change:', textStatus, 1959 errorThrown); 1960 window.location.href = window.location.href.split('?')[0] + 1961 '?lang=' + newLang; 1962 } 1963 }); 1964 }); 1965 }); 1966 1967 document.addEventListener('click', function(event) { 1968 if (!event.target.closest('#language-menu-sidebar') && !event.target.closest( 1969 '#language-toggle-container')) { 1970 languageMenu.style.display = 'none'; 1971 } 1972 }); 1973 1974 languageMenu.addEventListener('click', function(event) { 1975 if (!event.target.closest('.lang-selector')) { 1976 event.stopPropagation(); 1977 } 1978 }); 1979 }); 1980</script>
1980 <div class="global-container-wrapper nav menu chat"> 1981 1982 <div class="main-container main-container-layout" style="padding-top: 0" ;> 1983 1984 <div> 1985 <section class="section-wrapper header"> 1986 <div class="section"> 1987 <div class="landing-header"> 1988 <div class="title-wrapper"> 1989 <div class="title"> 1990 <h1>The AI that fulfills <br>your fantasies <br><span class="color--primary">With no limits.</span> </h1> 1991 <p class="hide-smartphone">Talk to her. She obeys. Itâs that simple.</p> 1992 </div> 1993 </div> 1994 <div class="img-wrapper "> 1995 <img class="show-smartphone" 1996 src="/src/assets/img/landing/landing-header.jpg" 1997 alt="Landing"> 1998 </div> 1999 </div> 2000 </div> 2001 </section> 2002 2003 2004<div 2005 class="global-container-wrapper girl-container-full menu"> 2006 <section class="girls-selection-wrapper"> 2007 <div class="girls-header"> 2008 2009 <h2><span class="color--pink">Explore</span> the Pocket Girls</h2> 2010 </div> 2011 2012 <div class="girls-grid-new"> 2013 2014 2015 <div class="girl-card girl-card--single "> 2016 <div class="girl-card__glass"> 2017 <div class="girl-card__header"> 2018 <div class="girl-card__identity"> 2019 <h3 class="girl-card__name"> 2020 Polly Gardel </h3> 2021 <span class="girl-card__age">30 years</span> 2022 </div> 2023 <div class="girl-card__status"> 2024 <div class="live-indicator"> 2025 <span class="live-dot"></span> 2026 <span class="live-text">Live</span> 2027 </div> 2028 </div> 2029 </div> 2030 2031 <div class="girl-card__tags"> 2032 <span class="girl-tag">Slim</span> 2033 <span class="girl-tag">Big Boobs</span> 2034 <span class="girl-tag">Blonde</span> 2035 </div> 2036 2037 <a href="/room/polly-gardel-livingroom" class="room-card room-card--solo "> 2038 2039 2040 2041 2042 <div class="room-card__video"> 2043 <video autoplay playsinline muted loop preload="none" 2044 class="room-video visible" data-index="1" 2045 poster="/public/rooms/thumbs/40/thumbs_poster.jpg?v=6" 2046 loading="lazy"> 2047 <source 2048 src="/public/rooms/thumbs/40/thumbs_desktop.mp4?v=6" 2049 type="video/mp4"> 2050 </video> 2051 </div> 2052 2053 <div class="room-card__location"> 2054 <i class="fas fa-door-open"></i> 2055 <span>Sitting in her armchair</span> 2056 </div> 2057 2058 </a> 2059 2060 <a href="/room/polly-gardel-livingroom" class="girl-card__cta "> 2061 <i class="far fa-comment"></i>
2062 <span>Chat with Polly</span> 2063 </a> 2064 </div> 2065 </div> 2066 2067 2068 2069 2070 <div class="girl-card girl-card--multi " data-rooms="3"> 2071 <div class="girl-card__glass"> 2072 <div class="girl-card__header"> 2073 <div class="girl-card__identity"> 2074 <h3 class="girl-card__name"> 2075 Vanessa Alessia </h3> 2076 <span class="girl-card__age">22 years</span> 2077 </div> 2078 <div class="girl-card__status"> 2079 <div class="live-indicator"> 2080 <span class="live-dot"></span> 2081 <span class="live-text">Live</span> 2082 </div> 2083 </div> 2084 </div> 2085 2086 <div class="girl-card__tags"> 2087 <span class="girl-tag">Slim</span> 2088 <span class="girl-tag">Beauty</span> 2089 <span class="girl-tag">Brunette</span> 2090 </div> 2091 2092 <div class="girl-card__rooms"> 2093 2094 <a href="/room/vanessa-alessia-livingroom" class="room-card "> 2095 2096 2097 2098 2099 <div class="room-card__video"> 2100 <video autoplay playsinline muted loop preload="none" 2101 class="room-video visible" data-index="2" 2102 poster="/public/rooms/thumbs/35/thumbs_poster.jpg?v=6" 2103 loading="lazy"> 2104 <source 2105 src="/public/rooms/thumbs/35/thumbs_desktop.mp4?v=6" 2106 type="video/mp4"> 2107 </video> 2108 </div> 2109 2110 <div class="room-card__location"> 2111 <i class="fas fa-door-open"></i> 2112 <span>On her couch</span> 2113 </div> 2114 2115 </a> 2116 2117 <a href="/room/vanessa-alessia-bedroom" class="room-card "> 2118 2119 2120 2121 2122 <div class="room-card__video"> 2123 <video autoplay playsinline muted loop preload="none" 2124 class="room-video visible" data-index="3" 2125 poster="/public/rooms/thumbs/36/thumbs_poster.jpg?v=6" 2126 loading="lazy"> 2127 <source 2128 src="/public/rooms/thumbs/36/thumbs_desktop.mp4?v=6" 2129 type="video/mp4"> 2130 </video> 2131 </div> 2132 2133 <div class="room-card__location"> 2134 <i class="fas fa-door-open"></i> 2135 <sp
2135an>In her room</span> 2136 </div> 2137 2138 </a> 2139 2140 <a href="/room/vanessa-alessia-sofa" class="room-card "> 2141 2142 2143 2144 2145 <div class="room-card__video"> 2146 <video autoplay playsinline muted loop preload="none" 2147 class="room-video visible" data-index="4" 2148 poster="/public/rooms/thumbs/37/thumbs_poster.jpg?v=6" 2149 loading="lazy"> 2150 <source 2151 src="/public/rooms/thumbs/37/thumbs_desktop.mp4?v=6" 2152 type="video/mp4"> 2153 </video> 2154 </div> 2155 2156 <div class="room-card__location"> 2157 <i class="fas fa-door-open"></i> 2158 <span>On her sofa</span> 2159 </div> 2160 2161 </a> 2162 </div> 2163 2164 <a href="/room/vanessa-alessia-livingroom" class="girl-card__cta "> 2165 <i class="far fa-comment"></i> 2166 <span>Chat with Vanessa</span> 2167 </a> 2168 </div> 2169 </div> 2170 2171 2172 2173 2174 2175 <div class="girl-card girl-card--multi " data-rooms="2"> 2176 <div class="girl-card__glass"> 2177 <div class="girl-card__header"> 2178 <div class="girl-card__identity"> 2179 <h3 class="girl-card__name"> 2180 Alexis Crystal </h3> 2181 <span class="girl-card__age">30 years</span> 2182 </div> 2183 <div class="girl-card__status"> 2184 <div class="live-indicator"> 2185 <span class="live-dot"></span> 2186 <span class="live-text">Live</span> 2187 </div> 2188 </div> 2189 </div> 2190 2191 2192 <div class="girl-card__rooms"> 2193 2194 <a href="/room/alexis-crystal-bedroom" class="room-card "> 2195 2196 2197 2198 2199 <div class="room-card__video"> 2200 <video autoplay playsinline muted loop preload="none" 2201 class="room-video visible" data-index="5" 2202 poster="/public/rooms/thumbs/38/thumbs_poster.jpg?v=6" 2203 loading="lazy"> 2204 <source 2205 src="/public/rooms/thumbs/38/thumbs_desktop.mp4?v=6" 2206 type="video/mp4"> 2207 </video> 2208 </div> 2209 2210 <div class="room-card__location"> 2211 <i class="fas fa-door-open"></i> 2212 <sp
2212an>Sitting on her bed</span> 2213 </div> 2214 2215 </a> 2216 2217 <a href="javascript:;" class="room-card room-card--locked btn-sign"> 2218 2219 2220 2221 <div class="room-card__lock room-card__lock--guest"> 2222 <i class="fas fa-user"></i> 2223 <span>Sign-up only</span> 2224 </div> 2225 2226 <div class="room-card__video"> 2227 <video autoplay playsinline muted loop preload="none" 2228 class="room-video visible" data-index="6" 2229 poster="/public/rooms/thumbs/39/thumbs_poster.jpg?v=6" 2230 loading="lazy"> 2231 <source 2232 src="/public/rooms/thumbs/39/thumbs_desktop.mp4?v=6" 2233 type="video/mp4"> 2234 </video> 2235 </div> 2236 2237 <div class="room-card__location"> 2238 <i class="fas fa-door-open"></i> 2239 <span>Sitting on her sofa</span> 2240 </div> 2241 2242 </a> 2243 </div> 2244 2245 <a href="/room/alexis-crystal-bedroom" class="girl-card__cta "> 2246 <i class="far fa-comment"></i> 2247 <span>Chat with Alexis</span> 2248 </a> 2249 </div> 2250 </div> 2251 2252 2253 2254 2255 2256 2257 <div class="girl-card girl-card--multi " data-rooms="2"> 2258 <div class="girl-card__glass"> 2259 <div class="girl-card__header"> 2260 <div class="girl-card__identity"> 2261 <h3 class="girl-card__name"> 2262 Lily Heart </h3> 2263 <span class="girl-card__age">21 years</span> 2264 </div> 2265 <div class="girl-card__status"> 2266 <div class="live-indicator"> 2267 <span class="live-dot"></span> 2268 <span class="live-text">Live</span> 2269 </div> 2270 </div> 2271 </div> 2272 2273 <div class="girl-card__tags"> 2274 <span class="girl-tag">Fit Girl</span> 2275 <span class="girl-tag">Sweet</span> 2276 <span class="girl-tag">Orgasm</span> 2277 </div> 2278 2279 <div class="girl-card__rooms"> 2280 2281 <a href="/room/lily-heart-livingroom" class="room-card "> 2282 2283 2284 2285 2286 <div class="room-card__video">
2287 <video autoplay playsinline muted loop preload="none" 2288 class="room-video visible" data-index="7" 2289 poster="/public/rooms/thumbs/6/thumbs_poster.jpg?v=6" 2290 loading="lazy"> 2291 <source 2292 src="/public/rooms/thumbs/6/thumbs_desktop.mp4?v=6" 2293 type="video/mp4"> 2294 </video> 2295 </div> 2296 2297 <div class="room-card__location"> 2298 <i class="fas fa-door-open"></i> 2299 <span>On her couch</span> 2300 </div> 2301 2302 </a> 2303 2304 <a href="/room/lily-heart-bedroom" class="room-card "> 2305 2306 2307 2308 2309 <div class="room-card__video"> 2310 <video autoplay playsinline muted loop preload="none" 2311 class="room-video visible" data-index="8" 2312 poster="/public/rooms/thumbs/29/thumbs_poster.jpg?v=6" 2313 loading="lazy"> 2314 <source 2315 src="/public/rooms/thumbs/29/thumbs_desktop.mp4?v=6" 2316 type="video/mp4"> 2317 </video> 2318 </div> 2319 2320 <div class="room-card__location"> 2321 <i class="fas fa-door-open"></i> 2322 <span>On her bed</span> 2323 </div> 2324 2325 </a> 2326 </div> 2327 2328 <a href="/room/lily-heart-livingroom" class="girl-card__cta "> 2329 <i class="far fa-comment"></i> 2330 <span>Chat with Lily</span> 2331 </a> 2332 </div> 2333 </div> 2334 2335 2336 2337 2338 2339 <div class="girl-card girl-card--multi " data-rooms="2"> 2340 <div class="girl-card__glass"> 2341 <div class="girl-card__header"> 2342 <div class="girl-card__identity"> 2343 <h3 class="girl-card__name"> 2344 Paloma SolÃs </h3> 2345 <span class="girl-card__age">28 years</span> 2346 </div> 2347 <div class="girl-card__status"> 2348 <div class="live-indicator"> 2349 <span class="live-dot"></span> 2350 <span class="live-text">Live</span> 2351 </div> 2352 </div> 2353 </div> 2354 2355 <div class="girl-card__tags"> 2356 <sp
2356an class="girl-tag">Chile</span> 2357 <span class="girl-tag">Big boobs</span> 2358 <span class="girl-tag">Perfect body</span> 2359 </div> 2360 2361 <div class="girl-card__rooms"> 2362 2363 <a href="/room/paloma-solis-bedroom" class="room-card "> 2364 2365 2366 2367 2368 <div class="room-card__video"> 2369 <video autoplay playsinline muted loop preload="none" 2370 class="room-video visible" data-index="9" 2371 poster="/public/rooms/thumbs/9/thumbs_poster.jpg?v=6" 2372 loading="lazy"> 2373 <source 2374 src="/public/rooms/thumbs/9/thumbs_desktop.mp4?v=6" 2375 type="video/mp4"> 2376 </video> 2377 </div> 2378 2379 <div class="room-card__location"> 2380 <i class="fas fa-door-open"></i> 2381 <span>In her bedroom</span> 2382 </div> 2383 2384 </a> 2385 2386 <a href="/room/paloma-solis-livingroom" class="room-card "> 2387 2388 2389 2390 2391 <div class="room-card__video"> 2392 <video autoplay playsinline muted loop preload="none" 2393 class="room-video visible" data-index="10" 2394 poster="/public/rooms/thumbs/8/thumbs_poster.jpg?v=6" 2395 loading="lazy"> 2396 <source 2397 src="/public/rooms/thumbs/8/thumbs_desktop.mp4?v=6" 2398 type="video/mp4"> 2399 </video> 2400 </div> 2401 2402 <div class="room-card__location"> 2403 <i class="fas fa-door-open"></i> 2404 <span>In her living room</span> 2405 </div> 2406 2407 </a> 2408 </div> 2409 2410 <a href="/room/paloma-solis-bedroom" class="girl-card__cta "> 2411 <i class="far fa-comment"></i> 2412 <span>Chat with Paloma</span> 2413 </a> 2414 </div> 2415 </div> 2416 2417 2418 2419 2420 2421 <div class="girl-card girl-card--single "> 2422 <div class="girl-card__glass"> 2423 <div class="girl-card__header"> 2424 <div class="girl-card__identity"> 2425 <h3 class="girl-card__name"> 2426 Leya Desantis </h3>
2427 <span class="girl-card__age">31 years</span> 2428 </div> 2429 <div class="girl-card__status"> 2430 <div class="live-indicator"> 2431 <span class="live-dot"></span> 2432 <span class="live-text">Live</span> 2433 </div> 2434 </div> 2435 </div> 2436 2437 <div class="girl-card__tags"> 2438 <span class="girl-tag">European</span> 2439 <span class="girl-tag">Beautiful breasts</span> 2440 <span class="girl-tag">Redhead</span> 2441 </div> 2442 2443 <a href="/room/leya-desantis-office" class="room-card room-card--solo "> 2444 2445 2446 2447 2448 <div class="room-card__video"> 2449 <video autoplay playsinline muted loop preload="none" 2450 class="room-video visible" data-index="11" 2451 poster="/public/rooms/thumbs/20/thumbs_poster.jpg?v=6" 2452 loading="lazy"> 2453 <source 2454 src="/public/rooms/thumbs/20/thumbs_desktop.mp4?v=6" 2455 type="video/mp4"> 2456 </video> 2457 </div> 2458 2459 <div class="room-card__location"> 2460 <i class="fas fa-door-open"></i> 2461 <span>In her office</span> 2462 </div> 2463 2464 </a> 2465 2466 <a href="/room/leya-desantis-office" class="girl-card__cta "> 2467 <i class="far fa-comment"></i> 2468 <span>Chat with Leya</span> 2469 </a> 2470 </div> 2471 </div> 2472 2473 2474 2475 2476 <div class="girl-card girl-card--single "> 2477 <div class="girl-card__glass"> 2478 <div class="girl-card__header"> 2479 <div class="girl-card__identity"> 2480 <h3 class="girl-card__name"> 2481 Zazie Skymm </h3> 2482 <span class="girl-card__age">30 years</span> 2483 </div> 2484 <div class="girl-card__status"> 2485 <div class="live-indicator"> 2486 <span class="live-dot"></span> 2487 <span class="live-text">Live</span> 2488 </div> 2489 </div> 2490 </div> 2491 2492 <div class="girl-card__tags"> 2493 <span class="girl-tag">Blonde</span> 2494 <span class="girl-tag">Voluptuous</span> 2495 <span class="girl-tag">Nymphomaniac</span> 2496 </div> 2497 2498 <a href="/room/zazie-skymm-livingroom" class="room-card room-card--solo "> 2499 2500 2501 2502 2503 <div class="room-card__video">
2504 <video autoplay playsinline muted loop preload="none" 2505 class="room-video visible" data-index="12" 2506 poster="/public/rooms/thumbs/24/thumbs_poster.jpg?v=6" 2507 loading="lazy"> 2508 <source 2509 src="/public/rooms/thumbs/24/thumbs_desktop.mp4?v=6" 2510 type="video/mp4"> 2511 </video> 2512 </div> 2513 2514 <div class="room-card__location"> 2515 <i class="fas fa-door-open"></i> 2516 <span>In her living room</span> 2517 </div> 2518 2519 </a> 2520 2521 <a href="/room/zazie-skymm-livingroom" class="girl-card__cta "> 2522 <i class="far fa-comment"></i> 2523 <span>Chat with Zazie</span> 2524 </a> 2525 </div> 2526 </div> 2527 2528 2529 2530 2531 <div class="girl-card girl-card--multi " data-rooms="2"> 2532 <div class="girl-card__glass"> 2533 <div class="girl-card__header"> 2534 <div class="girl-card__identity"> 2535 <h3 class="girl-card__name"> 2536 Jade Jadore </h3> 2537 <span class="girl-card__age">22 years</span> 2538 </div> 2539 <div class="girl-card__status"> 2540 <div class="live-indicator"> 2541 <span class="live-dot"></span> 2542 <span class="live-text">Live</span> 2543 </div> 2544 </div> 2545 </div> 2546 2547 <div class="girl-card__tags"> 2548 <span class="girl-tag">Slim</span> 2549 <span class="girl-tag">Small breasts</span> 2550 <span class="girl-tag">Blonde</span> 2551 </div> 2552 2553 <div class="girl-card__rooms"> 2554 2555 <a href="/room/jade-jadore-in-her-bed" class="room-card "> 2556 2557 2558 2559 2560 <div class="room-card__video"> 2561 <video autoplay playsinline muted loop preload="none" 2562 class="room-video visible" data-index="13" 2563 poster="/public/rooms/thumbs/34/thumbs_poster.jpg?v=6" 2564 loading="lazy"> 2565 <source 2566 src="/public/rooms/thumbs/34/thumbs_desktop.mp4?v=6" 2567 type="video/mp4"> 2568 </video> 2569 </div> 2570 2571 <div class="room-card__location"> 2572 <i class="fas fa-door-open"></i> 2573 <sp
2573an>On her bed</span> 2574 </div> 2575 2576 </a> 2577 2578 <a href="/room/jade-jadore-bedroom" class="room-card "> 2579 2580 2581 2582 2583 <div class="room-card__video"> 2584 <video autoplay playsinline muted loop preload="none" 2585 class="room-video visible" data-index="14" 2586 poster="/public/rooms/thumbs/32/thumbs_poster.jpg?v=6" 2587 loading="lazy"> 2588 <source 2589 src="/public/rooms/thumbs/32/thumbs_desktop.mp4?v=6" 2590 type="video/mp4"> 2591 </video> 2592 </div> 2593 2594 <div class="room-card__location"> 2595 <i class="fas fa-door-open"></i> 2596 <span>In her bedroom</span> 2597 </div> 2598 2599 </a> 2600 </div> 2601 2602 <a href="/room/jade-jadore-in-her-bed" class="girl-card__cta "> 2603 <i class="far fa-comment"></i> 2604 <span>Chat with Jade</span> 2605 </a> 2606 </div> 2607 </div> 2608 2609 2610 2611 2612 2613 <div class="girl-card girl-card--multi " data-rooms="2"> 2614 <div class="girl-card__glass"> 2615 <div class="girl-card__header"> 2616 <div class="girl-card__identity"> 2617 <h3 class="girl-card__name"> 2618 Lia Lin </h3> 2619 <span class="girl-card__age">23 years</span> 2620 </div> 2621 <div class="girl-card__status"> 2622 <div class="live-indicator"> 2623 <span class="live-dot"></span> 2624 <span class="live-text">Live</span> 2625 </div> 2626 </div> 2627 </div> 2628 2629 <div class="girl-card__tags"> 2630 <span class="girl-tag">Ebony</span> 2631 <span class="girl-tag">Perfect Breasts</span> 2632 <span class="girl-tag">Brunette</span> 2633 </div> 2634 2635 <div class="girl-card__rooms"> 2636 2637 <a href="/room/lia-lin-chair" class="room-card "> 2638 2639 2640 2641 2642 <div class="room-card__video"> 2643 <video autoplay playsinline muted loop preload="none" 2644 class="room-video visible" data-index="15" 2645 poster="/public/rooms/thumbs/30/thumbs_poster.jpg?v=6" 2646 loading="lazy"> 2647 <source 2648 src="/public/rooms/thumbs/30/thumbs_desktop.mp4?v=6" 2649 type="video/mp4"> 2650 </video> 2651 </div> 2652 2653 <div class="room-card__location"> 2654 <i class="fas fa-door-open"></i> 2655 <sp
2655an>On her chair</span> 2656 </div> 2657 2658 </a> 2659 2660 <a href="/room/lia-lin-livingroom" class="room-card "> 2661 2662 2663 2664 2665 <div class="room-card__video"> 2666 <video autoplay playsinline muted loop preload="none" 2667 class="room-video visible" data-index="16" 2668 poster="/public/rooms/thumbs/27/thumbs_poster.jpg?v=6" 2669 loading="lazy"> 2670 <source 2671 src="/public/rooms/thumbs/27/thumbs_desktop.mp4?v=6" 2672 type="video/mp4"> 2673 </video> 2674 </div> 2675 2676 <div class="room-card__location"> 2677 <i class="fas fa-door-open"></i> 2678 <span>On her couch</span> 2679 </div> 2680 2681 </a> 2682 </div> 2683 2684 <a href="/room/lia-lin-chair" class="girl-card__cta "> 2685 <i class="far fa-comment"></i> 2686 <span>Chat with Lia</span> 2687 </a> 2688 </div> 2689 </div> 2690 2691 2692 2693 2694 2695 <div class="girl-card girl-card--multi " data-rooms="2"> 2696 <div class="girl-card__glass"> 2697 <div class="girl-card__header"> 2698 <div class="girl-card__identity"> 2699 <h3 class="girl-card__name"> 2700 Lily Wednesday </h3> 2701 <span class="girl-card__age">21 years</span> 2702 </div> 2703 <div class="girl-card__status"> 2704 <div class="live-indicator"> 2705 <span class="live-dot"></span> 2706 <span class="live-text">Live</span> 2707 </div> 2708 </div> 2709 </div> 2710 2711 <div class="girl-card__tags"> 2712 <span class="girl-tag">Domination</span> 2713 <span class="girl-tag">Cosplay</span> 2714 <span class="girl-tag">Skinny</span> 2715 </div> 2716 2717 <div class="girl-card__rooms"> 2718 2719 <a href="/room/lily-wednesday-sofa" class="room-card "> 2720 2721 2722 2723 2724 <div class="room-card__video"> 2725 <video autoplay playsinline muted loop preload="none" 2726 class="room-video visible" data-index="17" 2727 poster="/public/rooms/thumbs/28/thumbs_poster.jpg?v=6" 2728 loading="lazy"> 2729 <source 2730 src="/public/rooms/thumbs/28/thumbs_desktop.mp4?v=6" 2731 type="video/mp4"> 2732 </video> 2733 </div> 2734 2735 <div class="room-card__location"> 2736 <i class="fas fa-door-open"></i> 2737 <sp
2737an>On her couch</span> 2738 </div> 2739 2740 </a> 2741 2742 <a href="/room/lily-wednesday" class="room-card "> 2743 2744 2745 2746 2747 <div class="room-card__video"> 2748 <video autoplay playsinline muted loop preload="none" 2749 class="room-video visible" data-index="18" 2750 poster="/public/rooms/thumbs/7/thumbs_poster.jpg?v=6" 2751 loading="lazy"> 2752 <source 2753 src="/public/rooms/thumbs/7/thumbs_desktop.mp4?v=6" 2754 type="video/mp4"> 2755 </video> 2756 </div> 2757 2758 <div class="room-card__location"> 2759 <i class="fas fa-door-open"></i> 2760 <span>In her armchair</span> 2761 </div> 2762 2763 </a> 2764 </div> 2765 2766 <a href="/room/lily-wednesday-sofa" class="girl-card__cta "> 2767 <i class="far fa-comment"></i> 2768 <span>Chat with Lily</span> 2769 </a> 2770 </div> 2771 </div> 2772 2773 2774 2775 2776 2777 <div class="girl-card girl-card--multi " data-rooms="2"> 2778 <div class="girl-card__glass"> 2779 <div class="girl-card__header"> 2780 <div class="girl-card__identity"> 2781 <h3 class="girl-card__name"> 2782 Ariana Cortez </h3> 2783 <span class="girl-card__age">27 years</span> 2784 </div> 2785 <div class="girl-card__status"> 2786 <div class="live-indicator"> 2787 <span class="live-dot"></span> 2788 <span class="live-text">Live</span> 2789 </div> 2790 </div> 2791 </div> 2792 2793 <div class="girl-card__tags"> 2794 <span class="girl-tag">Slender figure</span> 2795 <span class="girl-tag">Brunette</span> 2796 <span class="girl-tag">Dreamy</span> 2797 </div> 2798 2799 <div class="girl-card__rooms"> 2800 2801 <a href="/room/ariana-cortez-livingroom" class="room-card "> 2802 2803 2804 2805 2806 <div class="room-card__video"> 2807 <video autoplay playsinline muted loop preload="none" 2808 class="room-video visible" data-index="19" 2809 poster="/public/rooms/thumbs/33/thumbs_poster.jpg?v=6" 2810 loading="lazy"> 2811 <source 2812 src="/public/rooms/thumbs/33/thumbs_desktop.mp4?v=6" 2813 type="video/mp4"> 2814 </video> 2815 </div> 2816 2817 <div class="room-card__location"> 2818 <i class="fas fa-door-open"></i> 2819 <sp
2819an>On her couch</span> 2820 </div> 2821 2822 </a> 2823 2824 <a href="/room/ariana-cortez-sport" class="room-card "> 2825 2826 2827 2828 2829 <div class="room-card__video"> 2830 <video autoplay playsinline muted loop preload="none" 2831 class="room-video visible" data-index="20" 2832 poster="/public/rooms/thumbs/31/thumbs_poster.jpg?v=6" 2833 loading="lazy"> 2834 <source 2835 src="/public/rooms/thumbs/31/thumbs_desktop.mp4?v=6" 2836 type="video/mp4"> 2837 </video> 2838 </div> 2839 2840 <div class="room-card__location"> 2841 <i class="fas fa-door-open"></i> 2842 <span>In her home gym</span> 2843 </div> 2844 2845 </a> 2846 </div> 2847 2848 <a href="/room/ariana-cortez-livingroom" class="girl-card__cta "> 2849 <i class="far fa-comment"></i> 2850 <span>Chat with Ariana</span> 2851 </a> 2852 </div> 2853 </div> 2854 2855 2856 2857 2858 2859 <div class="girl-card girl-card--multi " data-rooms="2"> 2860 <div class="girl-card__glass"> 2861 <div class="girl-card__header"> 2862 <div class="girl-card__identity"> 2863 <h3 class="girl-card__name"> 2864 Irina Luca </h3> 2865 <span class="girl-card__age">38 years</span> 2866 </div> 2867 <div class="girl-card__status"> 2868 <div class="live-indicator"> 2869 <span class="live-dot"></span> 2870 <span class="live-text">Live</span> 2871 </div> 2872 </div> 2873 </div> 2874 2875 <div class="girl-card__tags"> 2876 <span class="girl-tag">MILF</span> 2877 <span class="girl-tag">Anal Sex</span> 2878 <span class="girl-tag">Big Boobs</span> 2879 </div> 2880 2881 <div class="girl-card__rooms"> 2882 2883 <a href="/room/irina-luca-livingroom" class="room-card "> 2884 2885 2886 2887 2888 <div class="room-card__video"> 2889 <video autoplay playsinline muted loop preload="none" 2890 class="room-video visible" data-index="21"
2891 poster="/public/rooms/thumbs/10/thumbs_poster.jpg?v=6" 2892 loading="lazy"> 2893 <source 2894 src="/public/rooms/thumbs/10/thumbs_desktop.mp4?v=6" 2895 type="video/mp4"> 2896 </video> 2897 </div> 2898 2899 <div class="room-card__location"> 2900 <i class="fas fa-door-open"></i> 2901 <span>In her living room</span> 2902 </div> 2903 2904 </a> 2905 2906 <a href="/room/irina-luca-kitchen" class="room-card "> 2907 2908 2909 2910 2911 <div class="room-card__video"> 2912 <video autoplay playsinline muted loop preload="none" 2913 class="room-video visible" data-index="22" 2914 poster="/public/rooms/thumbs/11/thumbs_poster.jpg?v=6" 2915 loading="lazy"> 2916 <source 2917 src="/public/rooms/thumbs/11/thumbs_desktop.mp4?v=6" 2918 type="video/mp4"> 2919 </video> 2920 </div> 2921 2922 <div class="room-card__location"> 2923 <i class="fas fa-door-open"></i> 2924 <span>In her kitchen</span> 2925 </div> 2926 2927 </a> 2928 </div> 2929 2930 <a href="/room/irina-luca-livingroom" class="girl-card__cta "> 2931 <i class="far fa-comment"></i> 2932 <span>Chat with Irina</span> 2933 </a> 2934 </div> 2935 </div> 2936 2937 2938 2939 2940 2941 <div class="girl-card girl-card--multi " data-rooms="2"> 2942 <div class="girl-card__glass"> 2943 <div class="girl-card__header"> 2944 <div class="girl-card__identity"> 2945 <h3 class="girl-card__name"> 2946 Lexi Blake </h3> 2947 <span class="girl-card__age">23 years</span> 2948 </div> 2949 <div class="girl-card__status"> 2950 <div class="live-indicator"> 2951 <span class="live-dot"></span> 2952 <span class="live-text">Live</span> 2953 </div> 2954 </div> 2955 </div> 2956 2957 <div class="girl-card__tags"> 2958 <span class="girl-tag">Blonde</span> 2959 <span class="girl-tag">Naive</span> 2960 <sp
2960an class="girl-tag">Tall</span> 2961 </div> 2962 2963 <div class="girl-card__rooms"> 2964 2965 <a href="/room/lexi-blake-livingroom" class="room-card "> 2966 2967 2968 2969 2970 <div class="room-card__video"> 2971 <video autoplay playsinline muted loop preload="none" 2972 class="room-video visible" data-index="23" 2973 poster="/public/rooms/thumbs/12/thumbs_poster.jpg?v=6" 2974 loading="lazy"> 2975 <source 2976 src="/public/rooms/thumbs/12/thumbs_desktop.mp4?v=6" 2977 type="video/mp4"> 2978 </video> 2979 </div> 2980 2981 <div class="room-card__location"> 2982 <i class="fas fa-door-open"></i> 2983 <span>In her living room</span> 2984 </div> 2985 2986 </a> 2987 2988 <a href="javascript:;" class="room-card room-card--locked btn-sign"> 2989 2990 2991 2992 <div class="room-card__lock room-card__lock--guest"> 2993 <i class="fas fa-user"></i> 2994 <span>Sign-up only</span> 2995 </div> 2996 2997 <div class="room-card__video"> 2998 <video autoplay playsinline muted loop preload="none" 2999 class="room-video visible" data-index="24" 3000 poster="/public/rooms/thumbs/13/thumbs_poster.jpg?v=6" 3001 loading="lazy"> 3002 <source 3003 src="/public/rooms/thumbs/13/thumbs_desktop.mp4?v=6" 3004 type="video/mp4"> 3005 </video> 3006 </div> 3007 3008 <div class="room-card__location"> 3009 <i class="fas fa-door-open"></i> 3010 <span>On her bed</span> 3011 </div> 3012 3013 </a> 3014 </div> 3015 3016 <a href="/room/lexi-blake-livingroom" class="girl-card__cta "> 3017 <i class="far fa-comment"></i> 3018 <span>Chat with Lexi</span> 3019 </a> 3020 </div> 3021 </div> 3022 3023 3024 3025 3026 3027 <div class="girl-card girl-card--multi " data-rooms="2"> 3028 <div class="girl-card__glass"> 3029 <div class="girl-card__header"> 3030 <div class="girl-card__identity"> 3031 <h3 class="girl-card__name"> 3032 Anika Vogel </h3>
3033 <span class="girl-card__age">25 years</span> 3034 </div> 3035 <div class="girl-card__status"> 3036 <div class="live-indicator"> 3037 <span class="live-dot"></span> 3038 <span class="live-text">Live</span> 3039 </div> 3040 </div> 3041 </div> 3042 3043 <div class="girl-card__tags"> 3044 <span class="girl-tag">Blonde</span> 3045 <span class="girl-tag">Sweet</span> 3046 <span class="girl-tag">Striptease</span> 3047 <span class="girl-tag">Fit Girl</span> 3048 </div> 3049 3050 <div class="girl-card__rooms"> 3051 3052 <a href="/room/anika-vogel-livingroom" class="room-card "> 3053 3054 3055 3056 3057 <div class="room-card__video"> 3058 <video autoplay playsinline muted loop preload="none" 3059 class="room-video visible" data-index="25" 3060 poster="/public/rooms/thumbs/4/thumbs_poster.jpg?v=6" 3061 loading="lazy"> 3062 <source 3063 src="/public/rooms/thumbs/4/thumbs_desktop.mp4?v=6" 3064 type="video/mp4"> 3065 </video> 3066 </div> 3067 3068 <div class="room-card__location"> 3069 <i class="fas fa-door-open"></i> 3070 <span>In her living room</span> 3071 </div> 3072 3073 </a> 3074 3075 <a href="javascript:;" class="room-card room-card--locked btn-sign"> 3076 3077 3078 3079 <div class="room-card__lock room-card__lock--guest"> 3080 <i class="fas fa-user"></i> 3081 <span>Sign-up only</span> 3082 </div> 3083 3084 <div class="room-card__video"> 3085 <video autoplay playsinline muted loop preload="none" 3086 class="room-video visible" data-index="26" 3087 poster="/public/rooms/thumbs/5/thumbs_poster.jpg?v=6" 3088 loading="lazy"> 3089 <source 3090 src="/public/rooms/thumbs/5/thumbs_desktop.mp4?v=6" 3091 type="video/mp4"> 3092 </video> 3093 </div> 3094 3095 <div class="room-card__location"> 3096 <i class="fas fa-door-open"></i> 3097 <sp
3097an>On her bench</span> 3098 </div> 3099 3100 </a> 3101 </div> 3102 3103 <a href="/room/anika-vogel-livingroom" class="girl-card__cta "> 3104 <i class="far fa-comment"></i> 3105 <span>Chat with Anika</span> 3106 </a> 3107 </div> 3108 </div> 3109 3110 3111 3112 3113 3114 <div class="girl-card girl-card--multi " data-rooms="2"> 3115 <div class="girl-card__glass"> 3116 <div class="girl-card__header"> 3117 <div class="girl-card__identity"> 3118 <h3 class="girl-card__name"> 3119 Clara Weiss </h3> 3120 <span class="girl-card__age">28 years</span> 3121 </div> 3122 <div class="girl-card__status"> 3123 <div class="live-indicator"> 3124 <span class="live-dot"></span> 3125 <span class="live-text">Live</span> 3126 </div> 3127 </div> 3128 </div> 3129 3130 <div class="girl-card__tags"> 3131 <span class="girl-tag">Skinny</span> 3132 <span class="girl-tag">Small tits</span> 3133 <span class="girl-tag">Strict</span> 3134 </div> 3135 3136 <div class="girl-card__rooms"> 3137 3138 <a href="/room/clara-weiss-studio" class="room-card "> 3139 3140 3141 3142 3143 <div class="room-card__video"> 3144 <video autoplay playsinline muted loop preload="none" 3145 class="room-video visible" data-index="27" 3146 poster="/public/rooms/thumbs/14/thumbs_poster.jpg?v=6" 3147 loading="lazy"> 3148 <source 3149 src="/public/rooms/thumbs/14/thumbs_desktop.mp4?v=6" 3150 type="video/mp4"> 3151 </video> 3152 </div> 3153 3154 <div class="room-card__location"> 3155 <i class="fas fa-door-open"></i> 3156 <span>On her armchair</span> 3157 </div> 3158 3159 </a> 3160 3161 <a href="javascript:;" class="room-card room-card--locked btn-sign"> 3162 3163 3164 3165 <div class="room-card__lock room-card__lock--guest"> 3166 <i class="fas fa-user"></i>
3167 <span>Sign-up only</span> 3168 </div> 3169 3170 <div class="room-card__video"> 3171 <video autoplay playsinline muted loop preload="none" 3172 class="room-video visible" data-index="28" 3173 poster="/public/rooms/thumbs/15/thumbs_poster.jpg?v=6" 3174 loading="lazy"> 3175 <source 3176 src="/public/rooms/thumbs/15/thumbs_desktop.mp4?v=6" 3177 type="video/mp4"> 3178 </video> 3179 </div> 3180 3181 <div class="room-card__location"> 3182 <i class="fas fa-door-open"></i> 3183 <span>On her bench</span> 3184 </div> 3185 3186 </a> 3187 </div> 3188 3189 <a href="/room/clara-weiss-studio" class="girl-card__cta "> 3190 <i class="far fa-comment"></i> 3191 <span>Chat with Clara</span> 3192 </a> 3193 </div> 3194 </div> 3195 3196 3197 3198 3199 3200 <div class="girl-card girl-card--multi " data-rooms="2"> 3201 <div class="girl-card__glass"> 3202 <div class="girl-card__header"> 3203 <div class="girl-card__identity"> 3204 <h3 class="girl-card__name"> 3205 Liv Wilde </h3> 3206 <span class="girl-card__age">27 years</span> 3207 </div> 3208 <div class="girl-card__status"> 3209 <div class="live-indicator"> 3210 <span class="live-dot"></span> 3211 <span class="live-text">Live</span> 3212 </div> 3213 </div> 3214 </div> 3215 3216 <div class="girl-card__tags"> 3217 <span class="girl-tag">Anal Sex</span> 3218 <span class="girl-tag">Striptease</span> 3219 <span class="girl-tag">Blonde</span> 3220 <span class="girl-tag">Slim</span> 3221 </div> 3222 3223 <div class="girl-card__rooms"> 3224 3225 <a href="javascript:;" class="room-card room-card--locked btn-sign"> 3226 3227 3228 3229 <div class="room-card__lock room-card__lock--guest"> 3230 <i class="fas fa-user"></i> 3231 <span>Sign-up only</span> 3232 </div> 3233 3234 <div class="room-card__video">
3235 <video autoplay playsinline muted loop preload="none" 3236 class="room-video visible" data-index="29" 3237 poster="/public/rooms/thumbs/2/thumbs_poster.jpg?v=6" 3238 loading="lazy"> 3239 <source 3240 src="/public/rooms/thumbs/2/thumbs_desktop.mp4?v=6" 3241 type="video/mp4"> 3242 </video> 3243 </div> 3244 3245 <div class="room-card__location"> 3246 <i class="fas fa-door-open"></i> 3247 <span>On her bed</span> 3248 </div> 3249 3250 </a> 3251 3252 <a href="/room/liv-wilde-livingroom" class="room-card "> 3253 3254 3255 3256 3257 <div class="room-card__video"> 3258 <video autoplay playsinline muted loop preload="none" 3259 class="room-video visible" data-index="30" 3260 poster="/public/rooms/thumbs/1/thumbs_poster.jpg?v=6" 3261 loading="lazy"> 3262 <source 3263 src="/public/rooms/thumbs/1/thumbs_desktop.mp4?v=6" 3264 type="video/mp4"> 3265 </video> 3266 </div> 3267 3268 <div class="room-card__location"> 3269 <i class="fas fa-door-open"></i> 3270 <span>In her studio</span> 3271 </div> 3272 3273 </a> 3274 </div> 3275 3276 <a href="javascript:;" class="girl-card__cta btn-sign"> 3277 <i class="far fa-comment"></i> 3278 <span>Chat with Liv</span> 3279 </a> 3280 </div> 3281 </div> 3282 3283 3284 3285 </div> 3286 </section> 3287 3288 3289 <section class="rooms-carousel-wrapper"> 3290 <h2>The girls from <span class="color--pink">Maison Rose</span> are soon becoming Pocket Girls!</h2> 3291 <div class="swiper rooms-swiper"> 3292 <div class="swiper-wrapper"> 3293 <div class="swiper-slide girl-chat-wrapper"> 3294 <div class="girl-video"> 3295 3296 <div class="room-tags"> 3297 </div> 3298 <div class="video-wrapper"> 3299 <video autoplay playsinline muted loop preload="none" 3300 class="girl-thumb-video fade-video visible" 3301 poster="/public/rooms/thumbs/16/thumbs_poster.jpg?v=6" 3302 loading="lazy"> 3303 <source 3304 src="/public/rooms/thumbs/16/thumbs_desktop.mp4?v=6" 3305 type="video/mp4"> 3306 </video> 3307 </div> 3308 <div class="girl-details"> 3309 <div class="girl-name"> 3310 Black Angel <sp
3310an> 3311 28 years </span> 3312 </div> 3313 <div class="girl-tags"> 3314 </div> 3315 </div> 3316 </div> 3317 </div> 3318 <div class="swiper-slide girl-chat-wrapper"> 3319 <div class="girl-video"> 3320 3321 <div class="room-tags"> 3322 </div> 3323 <div class="video-wrapper"> 3324 <video autoplay playsinline muted loop preload="none" 3325 class="girl-thumb-video fade-video visible" 3326 poster="/public/rooms/thumbs/21/thumbs_poster.jpg?v=6" 3327 loading="lazy"> 3328 <source 3329 src="/public/rooms/thumbs/21/thumbs_desktop.mp4?v=6" 3330 type="video/mp4"> 3331 </video> 3332 </div> 3333 <div class="girl-details"> 3334 <div class="girl-name"> 3335 Nata Gold <span> 3336 28 years </span> 3337 </div> 3338 <div class="girl-tags"> 3339 </div> 3340 </div> 3341 </div> 3342 </div> 3343 <div class="swiper-slide girl-chat-wrapper"> 3344 <div class="girl-video"> 3345 3346 <div class="room-tags"> 3347 </div> 3348 <div class="video-wrapper"> 3349 <video autoplay playsinline muted loop preload="none" 3350 class="girl-thumb-video fade-video visible" 3351 poster="/public/rooms/thumbs/22/thumbs_poster.jpg?v=6" 3352 loading="lazy"> 3353 <source 3354 src="/public/rooms/thumbs/22/thumbs_desktop.mp4?v=6" 3355 type="video/mp4"> 3356 </video> 3357 </div> 3358 <div class="girl-details"> 3359 <div class="girl-name"> 3360 Nata Gold <span> 3361 28 years </span> 3362 </div> 3363 <div class="girl-tags"> 3364 </div> 3365 </div> 3366 </div> 3367 </div> 3368 <div class="swiper-slide girl-chat-wrapper"> 3369 <div class="girl-video"> 3370 3371 <div class="room-tags"> 3372 </div> 3373 <div class="video-wrapper"> 3374 <video autoplay playsinline muted loop preload="none" 3375 class="girl-thumb-video fade-video visible" 3376 poster="/public/rooms/thumbs/23/thumbs_poster.jpg?v=6" 3377 loading="lazy"> 3378 <source 3379 src="/public/rooms/thumbs/23/thumbs_desktop.mp4?v=6" 3380 type="video/mp4"> 3381 </video> 3382 </div> 3383 <div class="girl-details"> 3384 <div class="girl-name"> 3385 Veronica Leal <sp
3385an> 3386 28 years </span> 3387 </div> 3388 <div class="girl-tags"> 3389 </div> 3390 </div> 3391 </div> 3392 </div> 3393 <div class="swiper-slide girl-chat-wrapper"> 3394 <div class="girl-video"> 3395 3396 <div class="room-tags"> 3397 </div> 3398 <div class="video-wrapper"> 3399 <video autoplay playsinline muted loop preload="none" 3400 class="girl-thumb-video fade-video visible" 3401 poster="/public/rooms/thumbs/25/thumbs_poster.jpg?v=6" 3402 loading="lazy"> 3403 <source 3404 src="/public/rooms/thumbs/25/thumbs_desktop.mp4?v=6" 3405 type="video/mp4"> 3406 </video> 3407 </div> 3408 <div class="girl-details"> 3409 <div class="girl-name"> 3410 Veronica Leal <span> 3411 28 years </span> 3412 </div> 3413 <div class="girl-tags"> 3414 </div> 3415 </div> 3416 </div> 3417 </div> 3418 <div class="swiper-slide girl-chat-wrapper"> 3419 <div class="girl-video"> 3420 3421 <div class="room-tags"> 3422 </div> 3423 <div class="video-wrapper"> 3424 <video autoplay playsinline muted loop preload="none" 3425 class="girl-thumb-video fade-video visible" 3426 poster="/public/rooms/thumbs/18/thumbs_poster.jpg?v=6" 3427 loading="lazy"> 3428 <source 3429 src="/public/rooms/thumbs/18/thumbs_desktop.mp4?v=6" 3430 type="video/mp4"> 3431 </video> 3432 </div> 3433 <div class="girl-details"> 3434 <div class="girl-name"> 3435 Leya Desantis <span> 3436 31 years </span> 3437 </div> 3438 <div class="girl-tags"> 3439 <div class="tag tag-xs tag-primary">European </div> 3440 <div class="tag tag-xs tag-black">Beautiful breasts </div> 3441 <div class="tag tag-xs tag-black">Redhead </div> 3442 </div> 3443 </div> 3444 </div> 3445 </div> 3446 </div> 3447 <div class="swiper-pagination"></div> 3448 </div> 3449 </section> 3450 3451 </div> 3452
3453<script> 3454$(document).ready(function() { 3455 $(".container-sized .action-to-expand").click(function() { 3456 $(this).parent().toggleClass("maxout"); 3457 }); 3458 3459 $('[data-countdown]').each(function() { 3460 var $this = $(this); 3461 var finalTimestamp = parseInt($this.data('countdown')) * 1000; 3462 if (finalTimestamp) { 3463 countdown( 3464 new Date(finalTimestamp), 3465 function(ts) { 3466 if (ts.value < 0) { 3467 $this.text(ts.days + "j " + ts.hours + "h " + ts.minutes + "min"); 3468 } else { 3469 $this.text("Coming soon"); 3470 } 3471 }, 3472 countdown.DAYS | countdown.HOURS | countdown.MINUTES 3473 ); 3474 } 3475 }); 3476 3477 var swiper = new Swiper(".rooms-swiper", { 3478 slidesPerView: 'auto', 3479 spaceBetween: 20, 3480 loop: true, 3481 pagination: { 3482 el: ".swiper-pagination", 3483 clickable: true, 3484 dynamicBullets: true, 3485 }, 3486 }); 3487}); 3488 3489/* Gestion de l'affichage dynamique des vidéos thumbs */ 3490document.addEventListener('DOMContentLoaded', () => { 3491 const videos = document.querySelectorAll('.room-video, .girl-thumb-video'); 3492 3493 const videoObserver = new IntersectionObserver((entries, observer) => { 3494 entries.forEach(entry => { 3495 const video = entry.target; 3496 3497 if (entry.isIntersecting) { 3498 if (video.readyState === 0) { 3499 video.load(); 3500 } 3501 video.play(); 3502 } else { 3503 if (!video.paused) { 3504 video.pause(); 3505 } 3506 } 3507 }); 3508 }, { 3509 rootMargin: '150px 0px 0px 0px', 3510 threshold: 0 3511 }); 3512 3513 videos.forEach(video => { 3514 videoObserver.observe(video); 3515 video.pause(); 3516 }); 3517 3518 window.addEventListener('beforeunload', () => { 3519 videos.forEach(video => { 3520 video.pause(); 3521 videoObserver.unobserve(video); 3522 }); 3523 }); 3524}); 3525</script>
3525 3526 3527<!-- Optimisation du positionnement des cards sur desktop -->
3528<script src="/src/assets/js/girls-grid-optimizer.js"></script>
3528 3529 3530 <!-- SECTION - FAQ --> 3531 <section class="section-wrapper faq-section "> 3532 <div class="section"> 3533 <div class="head mb--60"> 3534 <h2>Frequently Asked <span class="color--pink">Questions</span></h2> 3535 </div> 3536 <div class="content"> 3537 <div class="wrapper"> 3538 <div class="faq" id="faq"> 3539 <a href="#" class="question" data-id="0"> 3540 <i class="fas fa-chevron-right color--white"></i> 3541 What is Pocket Girl? </a> 3542 <span data-id="0" 3543 class="color--white">Pocket Girl is an interactive platform where you can chat with female AI models who can perform hundreds of different actions, ranging from dancing to personalized conversations. Some erotic actions are exclusively reserved for premium members.</span> 3544 <a href="#" class="question" data-id="1"> 3545 <i class="fas fa-chevron-right color--white"></i> 3546 How does Pocket Girl work? </a> 3547 <span data-id="1" 3548 class="color--white">After you sign up, you can choose an AI from our gallery and send her specific action requests that she will perform on video. Basic actions are available for free, while more exclusive and erotic content requires a premium subscription.</span> 3549 <a href="#" class="question" data-id="2"> 3550 <i class="fas fa-chevron-right color--white"></i> 3551 What types of actions are available on Pocket Girl? </a> 3552 <span data-id="2" 3553 class="color--white">
3553Pocket Girl offers a wide range of actions: from basic interactions like dancing, posing, or chatting for standard accounts, to erotic content for premium subscribers. Each AI has its own set of actions, which you can explore in her profile.</span> 3554 <a href="#" class="question" data-id="3"> 3555 <i class="fas fa-chevron-right color--white"></i> 3556 Is it possible to request more erotic actions? </a> 3557 <span data-id="3" 3558 class="color--white">Yes, erotic actions are available exclusively for our premium subscribers. To access them, you need to purchase a monthly subscription through our secure payment system, TrustPay.</span> 3559 <a href="#" class="question" data-id="4"> 3560 <i class="fas fa-chevron-right color--white"></i> 3561 How do I subscribe to the premium membership? </a> 3562 <span data-id="4" 3563 class="color--white">To become a premium member, you must be registered and verified as an adult. You can subscribe from your member area by clicking on 'Become Premium'. Payment is made exclusively by credit card (Visa or Mastercard) through our secure TrustPay platform. Several subscription plans are available to suit your needs.</span> 3564 <a href="#" class="question" data-id="5"> 3565 <i class="fas fa-chevron-right color--white"></i> 3566 What are the benefits of the premium subscription? </a> 3567 <span data-id="5" 3568 class="color--white">Premium membership gives you access to all available actions, including erotic content, exclusive interactions with the AIs, priority access to new features and models, as well as premium customer support.</span> 3569 <a href="#" class="question" data-id="6"> 3570 <i class="fas fa-chevron-right color--white"></i> 3571 How do purchases appear on my bank statements? </a> 3572 <span data-id="6" 3573 class="color--white">To protect our users' privacy, the name Pocket Girl will not appear on your bank statements. The subscription will be listed under a discreet and neutral name, ensuring your confidentiality.</span> 3574 <a href="#" class="question" data-id="7"> 3575 <i class="fas fa-chevron-right color--white"></i> 3576 Can I cancel my premium subscription at any time? </a> 3577 <span data-id="7" 3578 class="color--white">Yes, you can cancel your premium subscription at any time from your member area. The cancellation will take effect at the end of the current period, with no automatic renewal. You will keep your premium benefits until that date.</span> 3579 <a href="#" class="question" data-id="8"> 3580 <i class="fas fa-chevron-right color--white"></i> 3581 Who can sign up on Pocket Girl? </a>
3582 <span data-id="8" 3583 class="color--white">Registration is strictly reserved for adults (18 years and older), and we require age verification before approving the creation of an account. We reserve the right to suspend any account suspected of misrepresenting the user's age.</span> 3584 <a href="#" class="question" data-id="9"> 3585 <i class="fas fa-chevron-right color--white"></i> 3586 Are payments on Pocket Girl secure? </a> 3587 <span data-id="9" 3588 class="color--white">Absolutely. We use TrustPay, a certified payment system that guarantees the security of all transactions. Your banking information is encrypted according to the highest standards and is never stored on our servers.</span> 3589 <a href="#" class="question" data-id="10"> 3590 <i class="fas fa-chevron-right color--white"></i> 3591 Does Pocket Girl offer a free trial of the premium service? </a> 3592 <span data-id="10" 3593 class="color--white">Yes, we occasionally offer free trial periods of the premium subscription for new users. These promotional offers are announced on our homepage. In the meantime, you can explore the platformâs basic features for free.</span> 3594 <a href="#" class="question" data-id="11"> 3595 <i class="fas fa-chevron-right color--white"></i> 3596 Can I cancel an action after Iâve sent it? </a> 3597 <span data-id="11" 3598 class="color--white">Once an action is sent to the AI, it cannot be undone. Please make sure to confirm your choices before each request. If you experience a technical issue preventing the action from being executed, please contact our customer support.</span> 3599 <a href="#" class="question" data-id="12"> 3600 <i class="fas fa-chevron-right color--white"></i> 3601 How does privacy work on Pocket Girl? </a> 3602 <span data-id="12" 3603 class="color--white">We place the highest importance on your privacy. All your interactions are strictly confidential and protected by advanced encryption. We never share your personal data with third parties. For more details, please refer to our privacy policy.</span> 3604 <a href="#" class="question" data-id="13"> 3605 <i class="fas fa-chevron-right color--white"></i> 3606 What should I do if I have an issue with my account or subscription? </a> 3607 <span data-id="13" 3608 class="color--white">If youâre experiencing any issues with your account or your premium subscription, our support team is available 24/7 to assist you. You can contact us by email at [email protected] or through the live chat available on the platform for premium members.</span> 3609 </div> 3610 </div> 3611 </div> 3612 3613 </div> 3614 </section> 3615 3616 3617 <section class="section-wrapper offers" style="margin-top: -40px"> 3618 <div class="section"> 3619 <div class="head"> 3620 <div class="args"> 3621 <div class="arg"> 3622 <i class="far fa-user-headset"></i>
3623 <span>24/7 Customer Support: For fast and efficient assistance.</span> 3624 </div> 3625 <div class="arg"> 3626 <i class="far fa-shield-check"></i> 3627 <span>Guaranteed privacy protection: <br>Your data and interactions remain strictly confidential.</span> 3628 </div> 3629 <div class="arg"> 3630 <i class="far fa-user-shield"></i> 3631 <span>Responsible use encouraged: Pocketgirl.ai adheres to safety standards and promotes adult and responsible use.</span> 3632 </div> 3633 </div> 3634 </div> 3635 </div> 3636 </section> 3637 </div> 3638 </div> 3639 3640 <div class="container-sized" style="color:#FFF;line-height:1.6em;padding:15px;"> 3641 <p>With <strong>Pocket Girl</strong>, step into a new era of digital interaction where boundaries fade away. Imagine the possibility of chatting with a <strong>sexy AI girl</strong> designed to fulfill your desires and fantasies. This interactive platform offers a true <strong>virtual girlfriend</strong> capable of performing a wide range of actions, from simple conversations to more intimate interactions.</p><h2>Pocket Girl: Experience a Limitless Virtual World</h2><p><strong>Pocket Girl</strong> is not just a simulator. Itâs a revolution in the world of interactive entertainment. Thanks to advanced technology, every <strong>AI interaction</strong> is crafted to deliver maximum immersion. The goal? To make you feel like youâre engaging with a truly conscious, natural, and captivating virtual entity.</p><p>Users can trigger a variety of actions and responses, whether itâs lighthearted moments, deep conversations, or more sensual encounters. Every scene is carefully designed to provide a realistic and personalized experience tailored to each userâs preferences.</p><h3>An AI Girlfriend Simulator That Understands You</h3><p>What makes this platform so unique is its ability to adapt. Thanks to an <strong>intelligent AI system</strong>, it remembers your choices and gradually refines its responses. The result: an experience that becomes increasingly smooth, intuitive, and natural, creating the illusion of real chemistry with your <strong>virtual girl</strong>.</p><p>With multiple available actions and advanced customization, every user can create their own universe of interactions, according to their desires and current mood.</p><h2>An Immersive and Evolving Experience</h2><p><strong>Pocket Girl</strong> opens the door to a world of interactive possibilities, where imagination meets technology. Every interaction is designed to be natural, responsive, and unique, with regular content updates to enrich the user experience.</p><p>Looking for a <strong>virtual girlfriend</strong> who seems to truly understand you? Pocket Girl is the perfect tool to explore endless interactions, freely and without limits.</p><h3>Premium Features to Take It Further</h3><p>While <strong>Pocket Girl</strong> offers many features accessible to everyone, some interactions are reserved for premium members. These advanced scenarios allow you to explore bolder experiences for even deeper immersion.</p><p>By becoming a premium member, you gain access to exclusive scenes and early access to new content. Itâs the perfect privilege for those who want to take their virtual experience to the next level.</p><h2>Optimize Your User Interaction</h2><p>In a constantly evolving digital world, <strong>Pocket Girl</strong> stands out for the fluidity and quality of its <strong>AI interactions</strong>. Every exchange with your virtual companion is optimized to feel natural, intuitive, and engaging, strengthening your sense of connection.</p><p>Thanks to an intelligent interaction engine, every moment becomes a unique experience, true to your expectations and always surprising.</p><h3>A Simulation Game Like No Other</h3><p>Our <strong>Pocket Girls</strong> are redefining the standards of <strong>simulation games</strong> by offering stunning visual realism, immersive dialogues, and an unmatched freedom of interaction. Let yourself be guided through captivating scenarios, designed to adapt to every user profile.</p><p>The constantly updated scenes ensure ongoing diversity and freshness. Get ready to experience a virtual adventure thatâs always being reinvented.</p><ul><li>Enjoy personalized and natural conversations with the girls</li><li>Discover a variety of captivating interactive actions</li><li>Unlock exclusive content for each <strong>AI girlfriend</strong></li></ul><p><strong>Pocket Girl</strong> stands as the ultimate reference for anyone looking to explore the new frontiers of AI interaction, in an immersive, evolving, and private space.</p> <div class="action-to-expand show"> 3642 <i class="fas fa-angle-down"></i> 3643 continue reading </div> 3644 </div> 3645 3646</div> 3647 3648<footer> 3649 <div class="content"> 3650 <div class="logo"> 3651 <img src="https://www.pocketgirl.ai/src/assets/img/logo/logo.svg?3" alt="logo"> 3652 </div> 3653 <div class="description"> 3654 <p class="copyright"> © 2026 All Rights Reserved - Pocketgirl.ai</p> 3655 </div> 3656 <div class="footer-nav"> 3657 <a target="_blank" href="/tos">TOS</a> 3658 <a target="_blank" href="/legals">Legals</a> 3659 <a href="mailto:[email protected]">Contact</a> 3660 </div> 3661 </div> 3662</footer> 3663
3664<script> 3665 $(document).ready(function() { 3666 $(".container-sized .action-to-expand").click(function() { 3667 e.preventDefault(); 3668 e.stopPropagation(); 3669 $(this).parent().toggleClass("maxout"); 3670 }); 3671 }); 3672 3673 var createFaq = function() { 3674 $(".question").on('click', function() { 3675 var $this = $(this); 3676 var curid = $this.data("id"); 3677 var $answer = $("span[data-id=" + curid + "]"); 3678 3679 $("#faq span").stop().slideUp(200); 3680 $(".question").removeClass("open").find('i').removeClass('open'); 3681 3682 if (!$this.hasClass("open")) { 3683 $this.addClass("open"); 3684 $this.find('i').addClass('open'); 3685 $answer.stop().slideDown(200); 3686 } 3687 3688 return false; 3689 }); 3690 }; 3691 3692 createFaq(); 3693</script>
3693 3694 3695
3695<script> 3696 $(".premium-required").click(function(e) { 3697 e.preventDefault(); 3698 openPremiumErrorModal(); 3699 }); 3700 3701 $(".btn-sign").click(function() { 3702 const type = $(this).data('type'); 3703 openAuthModal(null, type); 3704 }); 3705 3706 $(".btn-process").click(function() { 3707 openAuthModal(null); 3708 }); 3709 3710 // MODAL - GENERIC - CLOSE MODAL 3711 $(".btn-close-modal").click(function() { 3712 $(this).closest(".popup-slide").toggleClass("active"); 3713 closeModalBackDrop(); 3714 }); 3715 </script>
3715 3716 3717 <!-- Google Tag Manager (noscript) -->
vendor: 72 bytes, lines 3717-3718
3717 3718 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
3718GTM-TFNQZCS3
vendor: 99 bytes, lines 3718-3720
3718" height="0" width="0" 3719 style="display:none;visibility:hidden"></iframe></noscript> 3720
3720<!-- End Google Tag Manager (noscript) --> 3721 3722
3722<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" 3723 integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"> 3724 </script>
3724 3725 3726
3726<script src="/src/assets/js/dist/swiper-bundle.min.js"></script>
3726 3727
3727<script src="/src/assets/js/modal-utils.js?v=1791203047"></script>
3727 3728 3729 <iframe style="display: none;" id="TrustPayFrame" src=""></iframe> 3730 3731
3731<script type="text/javascript" src="https://fl-cdn2.contentabc.com/delivery/idsync/idsync.min.js" defer></script>
3731 3732
3732<script> 3733 document.addEventListener("DOMContentLoaded", function(event) { 3734 if (window.idsync && typeof window.idsync.config === 'function') { 3735 try { 3736 window.idsync.config(36509) 3737 .fp_get() 3738 .sync(); 3739 window.idsync.send_event({ 3740 "name": "Visiteur", 3741 "type": "Acquisition", 3742 "value": "1.000" 3743 }); 3744 3745 3746 } catch {} 3747 } 3748 }); 3749 </script>
3749 3750 3751 <img src="//tsyndicate.com/api/v1/retargeting/set/10523373-571f-4228-a6c1-b3c506497a94" height="1" width="1" 3752 style="position: fixed; top: 0; left: 0; z-index: -1;width: 1px;height:1px;opacity:0"> 3753 3754</body> 3755 3756</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.