It looks like this is a web page, not a feed. I looked for a feed associated with this page, but couldn't find one. Please enter the address of your feed to validate.

Source: https://www.logicballs.com

  1. <!DOCTYPE html>
  2. <html dir=""
  3.   lang="en">
  4.  
  5. <head>
  6.   <meta charset="UTF-8" />
  7.   <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  8.   <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
  9.  
  10.   <title>
  11.      AI Writer and Content Creation Tool
  12.   </title>
  13.   <link rel="stylesheet" type="text/css" media="screen" href="/css/home-v1/home-v1.min.css?v=0.1.5" />
  14.  
  15.      
  16.        
  17.            
  18.              
  19.                  <meta property="og:type" content="Website" />
  20.                  <meta property="og:site_name" content="LogicBalls" />
  21.                  <meta property="og:url" content="https://logicballs.com/" />
  22.                  <meta property="og:title" content="FREE AI Tools | No Login Required" />
  23.                  <meta property="og:description" content="LogicBalls: AI writing assistant for high-quality content" />
  24.                  <meta property="og:image" content="https://logicballs.com/ogimages/cover.png" />
  25.                  <meta name="twitter:card" content="summary_large_image" />
  26.                  <meta name="twitter:site" content="@logicballs" />
  27.                  <meta name="twitter:url" content="https://logicballs.com/" />
  28.                  <meta name="twitter:title"
  29.                     content="AI Writer and Content Creation Tool" />
  30.                  <meta name="twitter:description" content="LogicBalls: AI writing assistant for high-quality content" />
  31.                  <meta name="twitter:card" content="https://logicballs.com/ogimages/cover.png" />
  32.                  <meta name="twitter:image" content="https://logicballs.com/ogimages/cover.png" />
  33.                  <meta name="description" content="LogicBalls: AI writing assistant for high-quality content" />
  34.                  <meta name="google-adsense-account" content="ca-pub-7564448169654271">
  35.                  <link rel="canonical" href="https://logicballs.com/" />
  36.                  
  37.                    
  38.                        
  39.                           <link rel="alternate" hreflang="en" href="https://logicballs.com/" />
  40.                          
  41.                           <link rel="alternate" hreflang="fr" href="https://logicballs.com/fr/" />
  42.                          
  43.                           <link rel="alternate" hreflang="de" href="https://logicballs.com/de/" />
  44.                          
  45.                           <link rel="alternate" hreflang="zh" href="https://logicballs.com/zh/" />
  46.                          
  47.                           <link rel="alternate" hreflang="ar" href="https://logicballs.com/ar/" />
  48.                          
  49.                           <link rel="alternate" hreflang="pt" href="https://logicballs.com/pt/" />
  50.                          
  51.                           <link rel="alternate" hreflang="es" href="https://logicballs.com/es/" />
  52.                          
  53.                           <link rel="alternate" hreflang="ja" href="https://logicballs.com/ja/" />
  54.                          
  55.                           <link rel="alternate" hreflang="ko" href="https://logicballs.com/ko/" />
  56.                          
  57.                           <link rel="alternate" hreflang="tl" href="https://logicballs.com/tl/" />
  58.                          
  59.                           <link rel="alternate" hreflang="nl" href="https://logicballs.com/nl/" />
  60.                          
  61.                           <link rel="alternate" hreflang="hi" href="https://logicballs.com/hi/" />
  62.                          
  63.                              <link rel="alternate" hreflang="x-default" href="https://logicballs.com/" />
  64.                              
  65.                                 <link rel="dns-prefetch" href="//logicballs.com" />
  66.                                 <link rel="dns-prefetch" href="//www.googletagmanager.com" />
  67.                                 <!-- Preconnects after critical preloads -->
  68.                                
  69.                                
  70.                                 <link rel="icon" href="https://logicballs.com/images/logo/favicon.ico" type="image/x-icon" />
  71.                                 <!-- Google Fonts with preload for better performance -->
  72.                                 <link rel="preload"
  73.                                    href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Poppins:wght@500;600;700&display=swap"
  74.                                    as="style" onload="this.onload=null;this.rel='stylesheet'">
  75.                                 <noscript>
  76.                                    <link rel="stylesheet"
  77.                                       href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Poppins:wght@500;600;700&display=swap">
  78.                                 </noscript>
  79.                                  
  80.                                 <!-- Non-critical external CSS -->
  81.                                
  82.                                    <script type="application/ld+json">
  83.         {
  84.  "@context": "https://schema.org",
  85.  "@graph": [
  86.    {
  87.      "@type": "Organization",
  88.      "@id": "https://logicballs.com/#organization",
  89.      "name": "LogicBalls",
  90.      "url": "https://logicballs.com/",
  91.      "logo": "https://logicballs.com/images/logicballs-logo.png",
  92.      "description": "LogicBalls: AI writing assistant for high-quality content",
  93.      "sameAs": [
  94.        "https://www.facebook.com/logicballsApp",
  95.        "https://x.com/logicballs_ai",
  96.        "https://www.linkedin.com/company/logicballs-ai",
  97.        "https://www.instagram.com/logic_balls/",
  98.        "https://www.youtube.com/@logicballs"
  99.      ],
  100.      "contactPoint": {
  101.        "@type": "ContactPoint",
  102.        "contactType": "customer service",
  103.        "email": "support@logicballs.com"
  104.      },
  105.      "slogan": "Unleash Your Creativity with AI-Powered Writing Tools",
  106.      "areaServed": {
  107.        "@type": "Place",
  108.        "name": "Worldwide"
  109.      }
  110.    },
  111.    {
  112.      "@type": "WebSite",
  113.      "@id": "https://logicballs.com/#website",
  114.      "url": "https://logicballs.com/",
  115.      "name": "AI Writer and Content Creation Tool",
  116.      "description": "LogicBalls: AI writing assistant for high-quality content",
  117.      "publisher": {
  118.        "@id": "https://logicballs.com/#organization"
  119.      }
  120.    },
  121.    {
  122.      "@type": "WebPage",
  123.      "@id": "https://logicballs.com/#webpage",
  124.      "url": "https://logicballs.com/",
  125.      "name": "AI Copy Writing | LogicBalls",
  126.      "isPartOf": {
  127.        "@id": "https://logicballs.com/#website"
  128.      },
  129.      "about": {
  130.        "@id": "https://logicballs.com/#organization"
  131.      },
  132.      "description": "LogicBalls: AI writing assistant for high-quality content",
  133.      "breadcrumb": {
  134.        "@id": "https://logicballs.com/#breadcrumb"
  135.      },
  136.      "inLanguage": "en",
  137.      "primaryImageOfPage": {
  138.        "@type": "ImageObject",
  139.        "url": "https://logicballs.com/images/cover.png",
  140.        "width": 1200,
  141.        "height": 630,
  142.        "caption": "LogicBalls AI Writing Tools Platform"
  143.      }
  144.    },
  145.    {
  146.      "@type": "BreadcrumbList",
  147.      "@id": "https://logicballs.com/#breadcrumb",
  148.      "itemListElement": [
  149.        {
  150.          "@type": "ListItem",
  151.          "position": 1,
  152.          "name": "Home",
  153.          "item": "https://logicballs.com/"
  154.        }
  155.      ]
  156.    },
  157.    {
  158.      "@type": "SoftwareApplication",
  159.      "@id": "https://logicballs.com/#softwareapplication",
  160.      "name": "AI Copy Writing | LogicBalls",
  161.      "operatingSystem": "Web",
  162.      "applicationCategory": "https://schema.org/BusinessApplication",
  163.      "url": "https://logicballs.com/",
  164.      "image": "https://logicballs.com/images/cover.png",
  165.      "offers": {
  166.        "@type": "Offer",
  167.        "priceCurrency": "USD",
  168.        "price": "0",
  169.        "description": "Free trial available",
  170.        "availability": "https://schema.org/InStock"
  171.      }
  172.    }
  173.  ]
  174. }
  175.      </script>
  176.                                    
  177.                                      
  178.                                             <script>
  179.                                                if (typeof window !== 'undefined' && window.location.host === 'logicballs.com') {
  180.  
  181.                                                   (function (w, d, s, l, i) {
  182.                                                      w[l] = w[l] || [];
  183.                                                      w[l].push({
  184.                                                         'gtm.start': new Date().getTime(),
  185.                                                         event: 'gtm.js'
  186.                                                      });
  187.                                                      var f = d.getElementsByTagName(s)[0],
  188.                                                         j = d.createElement(s),
  189.                                                         dl = l != 'dataLayer' ? '&l=' + l : '';
  190.                                                      j.async = true;
  191.                                                      j.src =
  192.                                                         'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
  193.                                                      f.parentNode.insertBefore(j, f);
  194.                                                   })(window, document, 'script', 'dataLayer', 'GTM-MB8NQN6');
  195.  
  196.                                                }
  197.                                             </script>
  198.                                             <script async
  199.                                                src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7564448169654271"
  200.                                                crossorigin="anonymous"></script>
  201.                                             <style>
  202.                                                /* Hide/show headers based on screen size */
  203.                                                @media (max-width: 991px) {
  204.                                                   #desktop-header {
  205.                                                      display: none !important;
  206.                                                   }
  207.  
  208.                                                   #mobile-header {
  209.                                                      display: block !important;
  210.                                                   }
  211.                                                }
  212.  
  213.                                                @media (min-width: 992px) {
  214.                                                   #desktop-header {
  215.                                                      display: block !important;
  216.                                                   }
  217.  
  218.                                                   #mobile-header {
  219.                                                      display: none !important;
  220.                                                   }
  221.                                                }
  222.  
  223.                                                .ai-models-dropdown .dropdown-category:hover>.dropdown-submenu {
  224.                                                   display: block;
  225.                                                   opacity: 1;
  226.                                                   visibility: visible;
  227.                                                   transform: translateX(0);
  228.                                                }
  229.  
  230.                                                .ai-models-dropdown {
  231.                                                   overflow: visible;
  232.                                                }
  233.  
  234.                                                /* Optional: indicate active hover on header */
  235.                                                .ai-models-dropdown .dropdown-category:hover>.dropdown-category-header {
  236.                                                   background: #F3F4F6;
  237.                                                   color: #1D4ED8;
  238.                                                }
  239.                                             </style>
  240.  
  241.  
  242. </head>
  243.  
  244. <body class="page-index">
  245.   <div class="ai-search-overlay" id="searchPopup">
  246.  <div class="ai-search-container">
  247.    <div class="ai-search-backdrop">
  248.  
  249.  
  250.      <div class="ai-search-box">
  251.        <div class="ai-search-input-wrapper">
  252.          <svg class="ai-search-icon-svg" viewBox="0 0 24 24" width="20" height="20">
  253.            <path
  254.              d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" />
  255.          </svg>
  256.          <input type="text" id="searchInput" class="ai-search-input"
  257.            placeholder="Try &#39;tool for writing a professional email&#39;... " autofocus>
  258.          <button id="searchButton" class="ai-search-btn" title="Press Enter to search">
  259.            <svg class="ai-search-enter-icon" xmlns="http://www.w3.org/2000/svg" width="16" height="16"
  260.              viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
  261.              stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-send-2">
  262.              <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
  263.              <path
  264.                d="M4.698 4.034l16.302 7.966l-16.302 7.966a.503 .503 0 0 1 -.546 -.124a.555 .555 0 0 1 -.12 -.568l2.468 -7.274l-2.468 -7.274a.555 .555 0 0 1 .12 -.568a.503 .503 0 0 1 .546 -.124z">
  265.              </path>
  266.              <path d="M6.5 12h14.5"></path>
  267.            </svg>
  268.            <div class="ai-search-btn-loader"></div>
  269.          </button>
  270.        </div>
  271.      </div>
  272.  
  273.      <div class="ai-search-content">
  274.        <div id="searchResults" class="ai-search-results">
  275.          <!-- Results will be populated here -->
  276.        </div>
  277.        <div class="ai-search-chat">
  278.          <div class="ai-search-message ai-search-initial">
  279.            <div class="ai-search-message-content">
  280.              <p></p>
  281.  
  282.            </div>
  283.          </div>
  284.        </div>
  285.  
  286.  
  287.      </div>
  288.    </div>
  289.  </div>
  290. </div>
  291.  
  292.  
  293.  
  294. <script>
  295.  let thinkingText = "AI is Thinking";
  296.  let popLanguage = "en";
  297.  let errormessage1 = "Please enter at least 2 characters to search...";
  298.  let errormessage2 = "I couldn&#39;t find any tools matching your search. Try describing your task differently, for example &#39;create marketing content&#39; instead of just &#39;marketing&#39;.";
  299.  let errormessage3 = "No tools found matching your search";
  300.  let errormessage4 = "Sorry, I encountered an error while searching. Please try again or rephrase your search.";
  301.  let errormessage5 = "An error occurred while searching. Please try again.";
  302.  let errormessage6 = "Sorry, something went wrong. Please try again in a moment.";
  303.  
  304. function openSearchPopup() {
  305.  document.getElementById('searchPopup').style.display = 'block';
  306.  document.getElementById('searchInput').focus();
  307. }
  308.  
  309.  function closeSearchPopup() {
  310.    document.getElementById('searchPopup').style.display = 'none';
  311.  }
  312.  
  313.  function suggestionClick(element) {
  314.    document.getElementById('searchInput').value = element.textContent;
  315.    performSearch();
  316.  }
  317.  
  318.  async function performSearch() {
  319.    const searchTerm = document.getElementById('searchInput').value.trim();
  320.    const lang = localStorage.getItem('selectedLanguage') || 'en';
  321.    const resultsContainer = document.getElementById('searchResults');
  322.    const searchButton = document.getElementById('searchButton');
  323.    const buttonLoader = searchButton.querySelector('.ai-search-btn-loader');
  324.    const enterIcon = searchButton.querySelector('.ai-search-enter-icon');
  325.    const allMessages = document.querySelector('.ai-search-content');
  326.  
  327.    if (searchTerm.length < 2) {
  328.      resultsContainer.innerHTML = `<div class="ai-search-message">${errormessage1}</div>`;
  329.      return;
  330.    }
  331.  
  332.    // Show loading state
  333.    allMessages.style.display = 'block';
  334.  
  335.    enterIcon.style.display = 'none';
  336.    buttonLoader.style.display = 'block';
  337.    resultsContainer.innerHTML = `<div class="ai-search-loading btn-shine">${thinkingText}</div>`;
  338.  
  339.  
  340.  try {
  341.    const response = await fetch('/v1/api/user/search-tools', {
  342.      method: 'POST',
  343.      headers: {
  344.        'Content-Type': 'application/json'
  345.      },
  346.      body: JSON.stringify({
  347.        searchKey: searchTerm,
  348.        lang: popLanguage || 'en'
  349.      })
  350.    });
  351.  
  352.      const data = await response.json();
  353.  
  354.      if (data.status === 'success') {
  355.        const { results, suggestion } = data.data;
  356.        const messageText = document.querySelector('.ai-search-message-content');
  357.  
  358.  
  359.  
  360.  
  361.        if (results.length > 0) {
  362.  
  363.          allMessages.style.overflow = 'auto';
  364.          resultsContainer.innerHTML = results.map(item => `
  365.          <a href="${item.url}" class="ai-search-item" target="_blank">
  366.            <div class="ai-search-category">${item.category}</div>
  367.            <div class="ai-search-name">${item.name}</div>
  368.            <div class="ai-search-tags">${item.tags.join(' • ')}</div>
  369.          </a>
  370.        `).join('');
  371.        } else {
  372.          messageText.style.display = 'block';
  373.          messageText.innerHTML = errormessage2;
  374.          resultsContainer.innerHTML = `<div class="ai-search-message">${errormessage3}</div>`;
  375.        }
  376.      } else {
  377.        document.querySelector('.ai-search-message-content').innerHTML = errormessage4
  378.        resultsContainer.innerHTML = `<div class="ai-search-error">${errormessage5}</div>`;
  379.      }
  380.    } catch (error) {
  381.      console.error('Error fetching search results:', error);
  382.      document.querySelector('.ai-search-message-content').innerHTML = errormessage6
  383.      resultsContainer.innerHTML =  `<div class="ai-search-error">${errormessage5}</div>`;
  384.    } finally {
  385.      // Reset button state
  386.      enterIcon.style.display = 'block';
  387.      buttonLoader.style.display = 'none';
  388.    }
  389.  }
  390.  
  391.  document.getElementById('searchButton').addEventListener('click', performSearch);
  392.  
  393.  document.getElementById('searchInput').addEventListener('keypress', function (e) {
  394.    if (e.key === 'Enter') {
  395.      performSearch();
  396.    }
  397.  });
  398.  
  399.  // Hide content when input is cleared
  400.  document.getElementById('searchInput').addEventListener('input', function (e) {
  401.    const allMessages = document.querySelector('.ai-search-content');
  402.    const resultsContainer = document.getElementById('searchResults');
  403.    const messageContent = document.querySelector('.ai-search-message-content');
  404.  
  405.    if (!this.value.trim()) {
  406.      allMessages.style.display = 'none';
  407.      resultsContainer.innerHTML = '';
  408.      if (messageContent) {
  409.        messageContent.innerHTML = '';
  410.        messageContent.style.display = 'none';
  411.      }
  412.    }
  413.  });
  414.  
  415.  // Close popup when clicking outside
  416.  document.addEventListener('click', function (event) {
  417.    const popup = document.getElementById('searchPopup');
  418.    const container = document.querySelector('.ai-search-container');
  419.    const backdrop = document.querySelector('.ai-search-backdrop');
  420.    if (event.target === popup || (event.target === container && !backdrop.contains(event.target))) {
  421.      closeSearchPopup();
  422.    }
  423.  });
  424.  
  425.  // Close popup on escape key
  426.  document.addEventListener('keydown', function (e) {
  427.    if (e.key === 'Escape' && document.getElementById('searchPopup').style.display === 'block') {
  428.      closeSearchPopup();
  429.    }
  430.  });
  431. </script>
  432.      <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MB8NQN6" height="0" width="0"
  433.            style="display: none; visibility: hidden"></iframe></noscript>
  434.      <!-- Responsive Header Include -->
  435.      
  436.        
  437. <script src="https://accounts.google.com/gsi/client" async defer></script>
  438. <script>// Constants
  439. // Constants
  440. const GOOGLE_AUTH_CONFIG = {
  441.  BUTTON_CONFIG: {
  442.    theme: 'outline',
  443.    size: 'large'
  444.  }
  445. };
  446.  
  447. window.onload = function() {
  448.  window.isAuthenticated = false;
  449.  
  450.  google.accounts.id.initialize({
  451.    client_id: '912809138133-km9l2r229va9mot2js9gg2f4ssa9pbua.apps.googleusercontent.com',  // Client ID injected directly from server template
  452.    callback: handleGoogleCredentialResponse,
  453.    auto_select: true
  454.  });
  455.  
  456.  const buttonContainer = document.getElementById('buttonDiv');
  457.  if (buttonContainer) {
  458.    google.accounts.id.renderButton(
  459.      buttonContainer,
  460.      GOOGLE_AUTH_CONFIG.BUTTON_CONFIG
  461.    );
  462.  }
  463.  
  464.  google.accounts.id.prompt();
  465. };
  466.  
  467. // Handle Google credential response
  468. async function handleGoogleCredentialResponse(response) {
  469.  if (!response?.credential) {
  470.    // console.error('Invalid credential response');
  471.    return;
  472.  }
  473.  
  474.  try {
  475.    const resp = await authapiRequest(
  476.      'POST',
  477.      'googleTapAuth',
  478.      { token: response.credential }
  479.    );
  480.  
  481.    if (resp.data?.statuscode === 200) {
  482.      await handleGoogleLogin(resp?.data?.data);
  483.    } else {
  484.      // console.error('Google auth API error:', resp);
  485.    }
  486.  } catch (error) {
  487.    // console.error('Google auth error:', error);
  488.  }
  489. }
  490.  
  491. // Handle Google login flow
  492. async function handleGoogleLogin(response) {
  493.  if (!response?.user) {
  494.    // console.error('Invalid user data');
  495.    return;
  496.  }
  497.  
  498.  const { user, oauth } = response;
  499.  
  500.  // Set initial auth data
  501.  let imageUrl;
  502.  if (user.email) {
  503.    imageUrl = "https://placehold.co/40X40/lightblue/white?text=" + user.email.charAt(0).toUpperCase();
  504.  } else {
  505.    imageUrl = "https://placehold.co/40X40/lightblue/white?text=" + user.identifier.charAt(0).toUpperCase();
  506.  }
  507.  
  508.  if (user.photoURL) {
  509.    imageUrl = user.photoURL;
  510.  }
  511.  
  512.  localStorage.setItem("user_id", user.user_id);
  513.  localStorage.setItem("photo_url", imageUrl);
  514.  localStorage.setItem("authtoken", oauth.access_token);
  515.  
  516.  try {
  517.    const resp = await authapiRequest(
  518.      'POST',
  519.      'user',
  520.      prepareUserAuthRequest(user, null, oauth.id_token),
  521.      { Authorization: `Bearer ${oauth.access_token}` }
  522.    );
  523.  
  524.    if (resp.data) {
  525.      if (resp.data.logInTime) {
  526.        localStorage.setItem("logInTime", resp.data.logInTime);
  527.      }
  528.  
  529.      if (resp.data.activeSession) {
  530.        await authapiRequest(
  531.          'GET',
  532.          `user/updateSeesion?lastLoginTime='${localStorage.getItem("logInTime")}'`,
  533.          undefined,
  534.          { Authorization: `Bearer ${oauth.access_token}` }
  535.        );
  536.      }
  537.  
  538.      if (resp.data?.session) {
  539.        const payload = JSON.parse(atob(resp.data.session.split(".")[1]));
  540.        const expirationTime = new Date(payload.exp * 1000).toGMTString();
  541.        
  542.        // Set cookies
  543.        document.cookie = `_sess=${resp.data.session};path=/;expires=${expirationTime}`;
  544.        document.cookie = `access_token=${oauth.access_token};path=/;expires=${expirationTime}`;
  545.        document.cookie = `id_token=${oauth.id_token};path=/;expires=${expirationTime}`;
  546.  
  547.        // Update profile picture if available
  548.        if (resp.data.ProfilePic?.length) {
  549.          localStorage.setItem("photo_url", resp.data.ProfilePic);
  550.        }
  551.        
  552.        localStorage.setItem("user_id", resp.data.UserId);
  553.  
  554.        // Handle redirect
  555.        if (resp.data.subscription) {
  556.          window.location.href = "/premium";
  557.          return;
  558.        }
  559.        
  560.        window.location.reload();
  561.        return;
  562.      }
  563.    }
  564.  } catch (error) {
  565.    // console.error('Login flow error:', error);
  566.  }
  567. }
  568.  
  569. // Prepare user request data
  570. function prepareUserAuthRequest(user, refCode = null, idToken) {
  571.  const userApiRequest = {
  572.    created_at: parseInt(user?.metadata?.createdAt),
  573.    last_login_at: parseInt(user?.metadata?.lastLoginAt),
  574.    ref_code: refCode,
  575.    displayName: user?.displayName,
  576.    idToken
  577.  };
  578.  
  579.  if (localStorage.getItem("logInTime")) {
  580.    userApiRequest.logIn_session_time = localStorage.getItem("logInTime");
  581.  }
  582.  
  583.  // Get UTM parameters from cookies
  584.  const utmSource = document.cookie.match(/utm_source=([^;]+)/)?.[1];
  585.  const utmMedium = document.cookie.match(/utm_medium=([^;]+)/)?.[1];
  586.  const utmCampaign = document.cookie.match(/utm_campaign=([^;]+)/)?.[1];
  587.  
  588.  // Add UTM parameters if all are present
  589.  if (utmSource && utmMedium && utmCampaign) {
  590.    userApiRequest.utm_source = utmSource;
  591.    userApiRequest.utm_medium = utmMedium;
  592.    userApiRequest.utm_campaign = utmCampaign;
  593.  }
  594.  
  595.  return userApiRequest;
  596. }
  597.  
  598.  
  599. async function authapiRequest(method, path, data, headers = {}) {
  600.      try {
  601.        const response = await fetch(`${window.location.protocol}//${window.location.host}/v1/api/${path}`, {
  602.          method,
  603.          ...(data && { body: JSON.stringify(data) }),
  604.          headers: {
  605.            Accept: 'application/json',
  606.            'Content-Type': 'application/json',
  607.            ...headers
  608.          }
  609.        });
  610.        
  611.        return response.ok ? { data: await response.json() } : { error: 'API request failed' };
  612.      } catch (e) {
  613.        return { error: e };
  614.      }
  615.    }
  616.  
  617. </script>
  618.            
  619.               <div id="desktop-header">
  620.                  
  621.  
  622.  
  623.  
  624. <header class="header" id="header" role="banner">
  625.  <nav class="navbar" role="navigation">
  626.    <!--Logo-->
  627.  
  628.    <div class="logo">
  629.      <a href="https://logicballs.com">
  630.        <img src="https://logicballs.com/images/logo.svg" alt="LogicBalls" title="LogicBalls" />
  631.      </a>
  632.    </div>
  633.    <!--Logo-->
  634.    <!--search-->
  635.    <div class="search">
  636.      <div class="search-header">
  637.        <button id="show-button-typesence" onclick="
  638.                        if(typeof window.hightlightSearchBoxCursor === 'function') {
  639.                          window.hightlightSearchBoxCursor();
  640.                        } else if(typeof hightlightSearchBoxCursor === 'function') {
  641.                          hightlightSearchBoxCursor();
  642.                        } else {
  643.                          // Wait for search to load and try again
  644.                          setTimeout(() => {
  645.                            if(typeof window.hightlightSearchBoxCursor === 'function') {
  646.                              window.hightlightSearchBoxCursor();
  647.                            }
  648.                          }, 100);
  649.                        }">
  650.          Search
  651.        </button>
  652.        <button onclick="if(typeof openSearchPopup === 'function') { openSearchPopup(); }" id="show-button-ai" class="show-button-typesence">
  653.  
  654.          <svg focusable="false" viewBox="0 -960 960 960" height="28" width="28" class="EiVpKc aoH">
  655.            <path d="M480-80q2,0 2-2q0-82 31-154t85-126t126-85t154-31q2,0 2-2t-2-2q-82,0-154-31T598-598T513-724T482-878q0-2-2-2t-2,2q0,82-31,154T362-598T236-513T82-482q-2,0-2,2t2,2q82,0 154,31t126,85t85,126T478-82q0,2 2,2Z">
  656.            </path>
  657.          </svg>
  658.          <div>Ask AI </div>
  659.        </button>
  660.  
  661.      </div>
  662.    </div>
  663.    <!--Navigation-->
  664.    <div class="nav-rigth">
  665. <!--
  666.      <a href="https://logicballs.com/write-for-us" class="">
  667.        <div>
  668.          Write for us
  669.        </div>
  670.      </a> -->
  671.  
  672.      <a href="https://logicballs.com/pricing" class="">
  673.        <div>
  674.          Pricing
  675.        </div>
  676.      </a>
  677.  
  678.      
  679.      <div class="tool-form">
  680.        <div class="field field-type-dropdown form-group">
  681.  
  682.  
  683.          <label class="dropdown" for="language-dropdown">
  684.            <div class="dd-button language" data-abc="dd-button">
  685.              <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-world" style="width: 18px;height: 18px;">
  686.                <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  687.                <path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0" />
  688.                <path d="M3.6 9h16.8" />
  689.                <path d="M3.6 15h16.8" />
  690.                <path d="M11.5 3a17 17 0 0 0 0 18" />
  691.                <path d="M12.5 3a17 17 0 0 1 0 18" />
  692.              </svg>
  693.            </div>
  694.  
  695.  
  696.  
  697.            <input type="checkbox" class="dd-input" aria-label="Toggle language menu" id="language-dropdown" name="language-dropdown">
  698.            <ul class="dd-menu" data-abc="ddmenu">
  699.              <li class="language-option" data-lang="en">
  700.                <button type="button" class="dd-item">English</button>
  701.              </li>
  702.              <li class="language-option" data-lang="zh">
  703.                <button type="button" class="dd-item">简体中文</button>
  704.              </li>
  705.              <li class="language-option" data-lang="ar">
  706.                <button type="button" class="dd-item">العربية</button>
  707.              </li>
  708.              <li class="language-option" data-lang="fr">
  709.                <button type="button" class="dd-item">Français</button>
  710.              </li>
  711.              <li class="language-option" data-lang="de">
  712.                <button type="button" class="dd-item">German</button>
  713.              </li>
  714.              <li class="language-option" data-lang="pt">
  715.                <button type="button" class="dd-item">Português</button>
  716.              </li>
  717.              <li class="language-option" data-lang="es">
  718.                <button type="button" class="dd-item">Español</button>
  719.              </li>
  720.              <li class="language-option" data-lang="ja">
  721.                <button type="button" class="dd-item">日本語</button>
  722.              </li>
  723.              <li class="language-option" data-lang="ko">
  724.                <button type="button" class="dd-item">한국어</button>
  725.              </li>
  726.              <li class="language-option" data-lang="tl">
  727.                <button type="button" class="dd-item">Tagalog</button>
  728.              </li>
  729.              <li class="language-option" data-lang="nl">
  730.                <button type="button" class="dd-item">Dutch</button>
  731.              </li>
  732.              <li class="language-option" data-lang="hi">
  733.                <button type="button" class="dd-item">हिन्दी</button>
  734.              </li>
  735.            </ul>
  736.          </label>
  737.        </div>
  738.      </div>
  739.      
  740.  
  741.  
  742.  
  743.      <div class="tool-form">
  744.        <div class="field field-type-dropdown form-group">
  745.          <div>
  746.            <label class="dropdown" for="usermenu-dropdown">
  747.              <div class="dd-button " data-abc="dd-button">
  748.                <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-user">
  749.                  <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  750.                  <path d="M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0" />
  751.                  <path d="M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2" />
  752.                </svg>
  753.              </div>
  754.              <input type="checkbox" class="dd-input" aria-label="Toggle user menu" id="usermenu-dropdown" name="usermenu-dropdown">
  755.              <ul class="dd-menu" data-abc="ddmenu">
  756.                <li>
  757.                  <span class="dd-item">
  758.                    
  759.                    <a href="https://logicballs.com/auth"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-login-2">
  760.                        <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  761.                        <path d="M9 8v-2a2 2 0 0 1 2 -2h7a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-7a2 2 0 0 1 -2 -2v-2" />
  762.                        <path d="M3 12h13l-3 -3" />
  763.                        <path d="M13 15l3 -3" />
  764.                      </svg>
  765.                      Login / Signup
  766.                    </a>
  767.                    
  768.                    
  769.  
  770.                  </span>
  771.                </li>
  772.                <li>
  773.                  <span class="dd-item">
  774.                    <span class="dd-text">
  775.                      <a class="nav-link" href="https://logicballs.com/pricing">
  776.                        <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-currency-dollar">
  777.                          <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  778.                          <path d="M16.7 8a3 3 0 0 0 -2.7 -2h-4a3 3 0 0 0 0 6h4a3 3 0 0 1 0 6h-4a3 3 0 0 1 -2.7 -2" />
  779.                          <path d="M12 3v3m0 12v3" />
  780.                        </svg>
  781.                        Pricing
  782.                      </a>
  783.                    </span>
  784.                  </span>
  785.                </li>
  786.                <li>
  787.                  <span class="dd-item">
  788.                    <span class="dd-text">
  789.                      <a class="nav-link" href="https://logicballs.com/tags">
  790.                        <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-tags">
  791.                          <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  792.                          <path d="M3 8v4.172a2 2 0 0 0 .586 1.414l5.71 5.71a2.41 2.41 0 0 0 3.408 0l3.592 -3.592a2.41 2.41 0 0 0 0 -3.408l-5.71 -5.71a2 2 0 0 0 -1.414 -.586h-4.172a2 2 0 0 0 -2 2z" />
  793.                          <path d="M18 19l1.592 -1.592a4.82 4.82 0 0 0 0 -6.816l-4.592 -4.592" />
  794.                          <path d="M7 10h-.01" />
  795.                        </svg>
  796.                        </svg>
  797.                        Tags
  798.                      </a>
  799.                    </span>
  800.                  </span>
  801.                </li>
  802.                <li>
  803.                  <span class="dd-item">
  804.                    <span class="dd-text">
  805.                      <a class="nav-link" href="https://logicballs.com/browse-ai-tools">
  806.                        <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-category">
  807.                          <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  808.                          <path d="M4 4h6v6h-6z" />
  809.                          <path d="M14 4h6v6h-6z" />
  810.                          <path d="M4 14h6v6h-6z" />
  811.                          <path d="M17 17m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0" />
  812.                        </svg>
  813.                        Categories
  814.                      </a>
  815.                    </span>
  816.                  </span>
  817.                </li>
  818.                <li>
  819.                  <span class="dd-item">
  820.                    <span class="dd-text">
  821.                      <a class="nav-link" href="https://logicballs.com/comparison">
  822.                        <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-scale">
  823.                          <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  824.                          <path d="M7 20l10 0" />
  825.                          <path d="M6 6l6 -1l6 1" />
  826.                          <path d="M12 3l0 17" />
  827.                          <path d="M9 12l-3 -6l-3 6a3 3 0 0 0 6 0" />
  828.                          <path d="M21 12l-3 -6l-3 6a3 3 0 0 0 6 0" />
  829.                        </svg>
  830.                        Comparison
  831.                      </a>
  832.                    </span>
  833.                  </span>
  834.                </li>
  835.                
  836.                <li class="divider"></li>
  837.                
  838.                <li>
  839.                  <span class="dd-item">
  840.                    <span class="dd-text">
  841.                      <a class="nav-link" href="/cdn-cgi/l/email-protection#deadabaeaeb1acaa9eb2b1b9b7bdbcbfb2b2adf0bdb1b3">
  842.                        <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-phone">
  843.                          <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  844.                          <path d="M5 4h4l2 5l-2.5 1.5a11 11 0 0 0 5 5l1.5 -2.5l5 2v4a2 2 0 0 1 -2 2a16 16 0 0 1 -15 -15a2 2 0 0 1 2 -2" />
  845.                        </svg>
  846.                        Contact us
  847.                      </a>
  848.                    </span>
  849.                  </span>
  850.                  
  851.              </ul>
  852.            </label>
  853.          </div>
  854.        </div>
  855.      </div>
  856.    </div>
  857.    <!--Navigation-->
  858.  </nav>
  859. </header>
  860.  
  861.  
  862. <div id="referralPopup" class="referral-popup">
  863.  <div class="referral-popup-content">
  864.    <button class="close-button" onclick="closeReferralPopup()">&times;</button>
  865.    
  866.    <div class="referral-popup-header">
  867.      
  868.      <h2>Unlock Your FREE Year of Premium Access! 🎁</h2>
  869.      <p class="subtitle">Share the power of our tools with friends and get rewarded!</p>
  870.      
  871.      <div class="reward-tiers">
  872.        <div class="reward-tier">
  873.          <div class="plan-badge">Most Popular</div>
  874.          <span class="plan-price">$59</span>
  875.          <h3>Pro Plan</h3>
  876.          <p class="plan-description">Refer 2 friends to our Pro plan and unlock a FULL YEAR of premium access absolutely FREE!</p>
  877.          <button class="share-button" onclick="shareViaLink('59', 'false' === 'true', event)">
  878.            <svg  xmlns="http://www.w3.org/2000/svg"  width="24"  height="24"  viewBox="0 0 24 24"  fill="none"  stroke="currentColor"  stroke-width="2"  stroke-linecap="round"  stroke-linejoin="round"  class="icon icon-tabler icons-tabler-outline icon-tabler-copy"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7 7m0 2.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667z" /><path d="M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1" /></svg>
  879.            Copy Referral Link
  880.          </button>
  881.        </div>
  882.        <div class="reward-tier">
  883.          <div class="plan-badge premium">Premium Choice</div>
  884.          <span class="plan-price">$99</span>
  885.          <h3>Premium Plan</h3>
  886.          <p class="plan-description">Refer 2 friends to our Premium plan and enjoy a FULL YEAR of our top-tier features FREE!</p>
  887.          <button class="share-button" onclick="shareViaLink('99', 'false' === 'true', event)">
  888.            <svg  xmlns="http://www.w3.org/2000/svg"  width="24"  height="24"  viewBox="0 0 24 24"  fill="none"  stroke="currentColor"  stroke-width="2"  stroke-linecap="round"  stroke-linejoin="round"  class="icon icon-tabler icons-tabler-outline icon-tabler-copy"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M7 7m0 2.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667z" /><path d="M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1" /></svg>
  889.            Copy Referral Link
  890.          </button>
  891.        </div>
  892.      </div>
  893.      
  894.      <p class="bonus-text">🎉 Already a subscriber? Get a BONUS year added to your current plan when your friends join!</p>
  895.    </div>
  896.  </div>
  897. </div>
  898.  
  899.  
  900. <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>
  901.  
  902. const API_CONFIG = {
  903.    
  904.    API_BASE_URL: `${window.location.protocol}//${window.location.host}/premium/`
  905.  };
  906. // function createConfetti() {
  907. //   const colors = ['#6a4dff', '#ff4d6a', '#4dff6a', '#ffd700'];
  908. //   const confettiCount = 150;
  909. //   const container = document.querySelector('.confetti-container');
  910.  
  911. //   for (let i = 0; i < confettiCount; i++) {
  912. //     const confetti = document.createElement('div');
  913. //     confetti.className = 'confetti';
  914. //     confetti.style.backgroundColor = colors[Math.floor(Math.random() * colors.length)];
  915. //     confetti.style.left = Math.random() * 100 + '%';
  916. //     confetti.style.animationDelay = Math.random() * 3 + 's';
  917. //     confetti.style.opacity = Math.random();
  918. //     confetti.style.transform = `rotate(${Math.random() * 360}deg)`;
  919.    
  920. //     const size = Math.random() * 10 + 5;
  921. //     confetti.style.width = size + 'px';
  922. //     confetti.style.height = size + 'px';
  923.    
  924. //     container.appendChild(confetti);
  925. //   }
  926. // }
  927.  
  928. function showReferralPopup() {
  929.  const popup = document.getElementById('referralPopup');
  930.  popup.classList.add('active');
  931.  // createConfetti();
  932. }
  933.  
  934. function closeReferralPopup() {
  935.  const popup = document.getElementById('referralPopup');
  936.  popup.classList.remove('active');
  937.  
  938.  // Clean up confetti
  939.  const container = document.querySelector('.confetti-container');
  940.  container.innerHTML = '';
  941. }
  942.  
  943. async function shareViaLink(planPrice, isAuth, event) {
  944.  // Find the button element for the specific plan
  945.  let buttonElement;
  946.  if (event) {
  947.    buttonElement = event.target.closest('.share-button');
  948.  } else {
  949.    // Find the button based on the plan price
  950.    const rewardTiers = document.querySelectorAll('.reward-tier');
  951.    for (const tier of rewardTiers) {
  952.      const priceElement = tier.querySelector('.plan-price');
  953.      if (priceElement && priceElement.textContent.includes(planPrice)) {
  954.        buttonElement = tier.querySelector('.share-button');
  955.        break;
  956.      }
  957.    }
  958.  }
  959.  
  960.  if (!buttonElement) {
  961.    console.error('Button element not found for price:', planPrice);
  962.    return;
  963.  }
  964.  
  965.  const originalText = buttonElement.innerHTML;
  966.  
  967.  // Check localStorage first
  968.  const storageKey = `referral_link_${planPrice}`;
  969.  const cachedLink = localStorage.getItem(storageKey);
  970.  
  971.  if (cachedLink) {
  972.    await copyToClipboard(cachedLink, buttonElement);
  973.    return;
  974.  }
  975.  
  976.  // Show loading state
  977.  buttonElement.innerHTML = `
  978.    <div class="button-spinner"></div>
  979.    <span>Generating link...</span>
  980.  `;
  981.  
  982.  // Function to show error popup
  983.  function showErrorPopup(message) {
  984.    const errorPopup = document.createElement('div');
  985.    errorPopup.className = 'error-popup';
  986.    errorPopup.textContent = message;
  987.    document.body.appendChild(errorPopup);
  988.    
  989.    // Remove popup after 3 seconds
  990.    setTimeout(() => {
  991.      errorPopup.remove();
  992.    }, 3000);
  993.  }
  994.  
  995.  if (isAuth) {
  996.    try {
  997.      
  998.  
  999.      // Call API to generate referral link
  1000.  
  1001.      const token = window.localStorage.getItem('authtoken')
  1002.      if(!token){
  1003.        throw new Error('Please logged in and try again');
  1004.      }
  1005.      
  1006.  
  1007.      const response = await fetch( `${API_CONFIG.API_BASE_URL}subscription/generate/`, {
  1008.        method: 'POST',
  1009.        headers: {
  1010.          'Authorization': `Bearer ${token}`,
  1011.          'Content-Type': 'application/json'
  1012.        },
  1013.        body: JSON.stringify({
  1014.          plan: planPrice === '99' ? 'Premium' : 'Pro'
  1015.        })
  1016.      });
  1017.  
  1018.      if (!response.ok) {
  1019.        throw new Error('Failed to generate referral link');
  1020.      }
  1021.  
  1022.      const data = await response.json();
  1023.      
  1024.      if (!data.data?.shared_link) {
  1025.        throw new Error('Invalid response format');
  1026.      }
  1027.  
  1028.      const referralLink = data.data.shared_link;
  1029.      
  1030.      // Store valid link in localStorage
  1031.      const storageKey = `referral_link_${planPrice}`;
  1032.      localStorage.setItem(storageKey, referralLink);
  1033.      
  1034.      // Copy to clipboard and restore original button state
  1035.      buttonElement.innerHTML = originalText;
  1036.      await copyToClipboard(referralLink, buttonElement);
  1037.    } catch (err) {
  1038.      console.error('Error sharing referral link:', err);
  1039.      // Restore original button state
  1040.      buttonElement.innerHTML = originalText;
  1041.      showErrorPopup(err.message || 'Unable to generate referral link. Please try again later.');
  1042.    }
  1043.  } else {
  1044.    // Redirect to auth page with refSub param
  1045.    const refSub = encodeURIComponent(btoa(JSON.stringify({ planPrice, timestamp: Date.now() })));
  1046.    window.location.href = `/auth?refSub=${refSub}`;
  1047.  }
  1048. }
  1049.  
  1050. async function copyToClipboard(text, buttonElement) {
  1051.  if (!text) {
  1052.    showErrorPopup('Invalid referral link');
  1053.    return;
  1054.  }
  1055.  
  1056.  const successState = '✓ Link Copied! Ready to Share';
  1057.  let currentTimeout;
  1058.  
  1059.  try {
  1060.    // Attempt to copy using clipboard API
  1061.    if (navigator.clipboard) {
  1062.      await navigator.clipboard.writeText(text);
  1063.    } else {
  1064.      // Fallback copy method
  1065.      const tempInput = document.createElement('input');
  1066.      tempInput.value = text;
  1067.      document.body.appendChild(tempInput);
  1068.      tempInput.select();
  1069.      document.execCommand('copy');
  1070.      document.body.removeChild(tempInput);
  1071.    }
  1072.  
  1073.    // Show success state
  1074.    const svgContent = buttonElement.querySelector('svg')?.outerHTML || '';
  1075.    buttonElement.innerHTML = svgContent + ' ' + successState;
  1076.  
  1077.    // Clear any existing timeout
  1078.    if (currentTimeout) {
  1079.      clearTimeout(currentTimeout);
  1080.    }
  1081.  
  1082.    // Set new timeout
  1083.    currentTimeout = setTimeout(() => {
  1084.      if (buttonElement.textContent.includes(successState)) {
  1085.        buttonElement.innerHTML = svgContent + ' Copy Referral Link';
  1086.      }
  1087.    }, 3000);
  1088.  
  1089.  } catch (err) {
  1090.    console.error('Failed to copy:', err);
  1091.    showErrorPopup('Failed to copy link. Please try again.');
  1092.  }
  1093. }
  1094.  
  1095. function promptManualCopy(text) {
  1096.  const tempInput = document.createElement('input');
  1097.  tempInput.value = text;
  1098.  document.body.appendChild(tempInput);
  1099.  tempInput.select();
  1100.  document.execCommand('copy');
  1101.  document.body.removeChild(tempInput);
  1102.  
  1103.  const successPopup = document.createElement('div');
  1104.  successPopup.className = 'error-popup success';
  1105.  successPopup.textContent = 'Referral link copied to clipboard! Share it with your friends to start earning rewards.';
  1106.  document.body.appendChild(successPopup);
  1107.  
  1108.  setTimeout(() => {
  1109.    successPopup.remove();
  1110.  }, 3000);
  1111. }
  1112.  
  1113. // Update the existing handleReferral function
  1114. window.handleReferral = function() {
  1115.  showReferralPopup();
  1116. };
  1117.  
  1118. // Initialize popup functionality
  1119. function initReferralPopup() {
  1120.  const popup = document.getElementById('referralPopup');
  1121.  if (!popup) {
  1122.    console.error('Referral popup not found!');
  1123.    return;
  1124.  }
  1125.  
  1126.  // Ensure popup is in body
  1127.  if (popup.parentElement !== document.body) {
  1128.    document.body.appendChild(popup);
  1129.  }
  1130. }
  1131.  
  1132. document.addEventListener('DOMContentLoaded', function() {
  1133.  // Initialize popup
  1134.  initReferralPopup();
  1135.  
  1136.  // Check for pending referral
  1137.  const urlParams = new URLSearchParams(window.location.search);
  1138.  const showReferral = urlParams.get('show_referral');
  1139.  const pendingReferral = localStorage.getItem('pending_referral');
  1140.  
  1141.  if (showReferral && pendingReferral) {
  1142.    try {
  1143.      const referralData = JSON.parse(atob(pendingReferral));
  1144.      if (referralData.planPrice && referralData.timestamp) {
  1145.        // Only process if timestamp is within last 24 hours
  1146.        const now = Date.now();
  1147.        const then = referralData.timestamp;
  1148.        if (now - then < 24 * 60 * 60 * 1000) {
  1149.          // Show popup and trigger link generation
  1150.          showReferralPopup();
  1151.          shareViaLink(referralData.planPrice, true);
  1152.        }
  1153.        // Clear the pending referral
  1154.        localStorage.removeItem('pending_referral');
  1155.      }
  1156.    } catch (error) {
  1157.      console.error('Error processing pending referral:', error);
  1158.    }
  1159.  }
  1160.  
  1161.  // Add confetti animation styles dynamically
  1162.  const style = document.createElement('style');
  1163.  style.textContent = `
  1164.    @keyframes confettiFall {
  1165.      0% {
  1166.        transform: translateY(-100vh) rotate(0deg);
  1167.      }
  1168.      100% {
  1169.        transform: translateY(100vh) rotate(360deg);
  1170.      }
  1171.    }
  1172.    
  1173.    .confetti {
  1174.      position: absolute;
  1175.      width: 10px;
  1176.      height: 10px;
  1177.      background-color: #6a4dff;
  1178.      animation: confettiFall 3s linear infinite;
  1179.    }
  1180.  
  1181.    .button-spinner {
  1182.      display: inline-block;
  1183.      width: 16px;
  1184.      height: 16px;
  1185.      margin-right: 8px;
  1186.      border: 2px solid rgba(255, 255, 255, 0.3);
  1187.      border-top-color: #fff;
  1188.      border-radius: 50%;
  1189.      animation: spin 0.8s linear infinite;
  1190.    }
  1191.    
  1192.    @keyframes spin {
  1193.      to { transform: rotate(360deg); }
  1194.    }
  1195.  
  1196.    .error-popup {
  1197.      position: fixed;
  1198.      top: 20px;
  1199.      right: 20px;
  1200.      background-color: #ff4d4d;
  1201.      color: white;
  1202.      padding: 15px 20px;
  1203.      border-radius: 5px;
  1204.      box-shadow: 0 2px 8px rgba(0,0,0,0.2);
  1205.      z-index: 9999;
  1206.      animation: fadeInOut 3s ease;
  1207.    }
  1208.  
  1209.    .error-popup.success {
  1210.      background-color: #4CAF50;
  1211.    }
  1212.  
  1213.    @keyframes fadeInOut {
  1214.      0% { opacity: 0; transform: translateY(-20px); }
  1215.      10% { opacity: 1; transform: translateY(0); }
  1216.      90% { opacity: 1; transform: translateY(0); }
  1217.      100% { opacity: 0; transform: translateY(-20px); }
  1218.    }
  1219.  `;
  1220.  document.head.appendChild(style);
  1221. });
  1222. </script>
  1223.  
  1224. <script>
  1225.  // Initialize search buttons with proper handlers
  1226.  function initializeSearchButtons() {
  1227.    const typesenseButton = document.getElementById('show-button-typesence');
  1228.    const aiButton = document.getElementById('show-button-ai');
  1229.  
  1230.    if (typesenseButton) {
  1231.      typesenseButton.onclick = function() {
  1232.        if (typeof window.hightlightSearchBoxCursor === 'function') {
  1233.          window.hightlightSearchBoxCursor();
  1234.        } else if (typeof hightlightSearchBoxCursor === 'function') {
  1235.          hightlightSearchBoxCursor();
  1236.        } else {
  1237.          // Wait for search to load and try again
  1238.          setTimeout(() => {
  1239.            if (typeof window.hightlightSearchBoxCursor === 'function') {
  1240.              window.hightlightSearchBoxCursor();
  1241.            }
  1242.          }, 500);
  1243.        }
  1244.      };
  1245.    }
  1246.  
  1247.    if (aiButton) {
  1248.      aiButton.onclick = function() {
  1249.        if (typeof openSearchPopup === 'function') {
  1250.          openSearchPopup();
  1251.        }
  1252.      };
  1253.    }
  1254.  }
  1255.  
  1256.  // Initialize immediately and also after a delay to ensure all scripts are loaded
  1257.  initializeSearchButtons();
  1258.  setTimeout(initializeSearchButtons, 1000);
  1259. </script>
  1260.  
  1261. <style>
  1262.  .language-option.active {
  1263.    background-color: #f5f5f5;
  1264.    font-weight: bold;
  1265.    color: #6a4dff;
  1266.  }
  1267.  
  1268.  
  1269.  .dd-menu .language-option {
  1270.    display: block;
  1271.    padding: 8px 15px;
  1272.    text-decoration: none;
  1273.    color: inherit;
  1274.  }
  1275.  
  1276.  .dd-menu .language-option:hover {
  1277.    background-color: #f5f5f5;
  1278.  }
  1279.  
  1280.  .dd-menu button.dd-item {
  1281.    width: 100%;
  1282.    text-align: left;
  1283.    background: none;
  1284.    border: none;
  1285.    cursor: pointer;
  1286.    font: inherit;
  1287.    color: inherit;
  1288.  }
  1289.  
  1290.  .dd-menu button.dd-item:hover {
  1291.    background-color: #f5f5f5;
  1292.  }
  1293.  
  1294.  .language-option.active button.dd-item {
  1295.    color: #6a4dff;
  1296.    font-weight: bold;
  1297.  }
  1298. </style>
  1299.               </div>
  1300.               <div id="mobile-header" style="display: none;">
  1301.                  
  1302.  
  1303.  
  1304.  
  1305.  
  1306. <!-- Mobile Drawer -->
  1307. <div class="drawer-overlay" id="drawer-overlay"></div>
  1308. <nav class="mobile-drawer" id="mobile-drawer">
  1309.  <div class="drawer-header">
  1310.    <div class="logo">
  1311.      <a href="https://logicballs.com">
  1312.        <img src="https://logicballs.com/images/logo.svg" alt="LogicBalls" title="LogicBalls" fetchpriority="high" width="165" height="40" style="width: 165px; height: 40px;" decoding="sync" />
  1313.      </a>
  1314.    </div>
  1315.    <button class="close-drawer" id="close-drawer" aria-label="Close mobile menu">
  1316.      <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" fill="currentColor">
  1317.        <path d="m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z" />
  1318.      </svg>
  1319.    </button>
  1320.  </div>
  1321.  <div class="drawer-content">
  1322.    
  1323.    <!-- Language Accordion -->
  1324.    <div class="language-accordion">
  1325.      <button class="accordion-toggle" aria-expanded="false">
  1326.        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-world">
  1327.          <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  1328.          <path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0" />
  1329.          <path d="M3.6 9h16.8" />
  1330.          <path d="M3.6 15h16.8" />
  1331.          <path d="M11.5 3a17 17 0 0 0 0 18" />
  1332.          <path d="M12.5 3a17 17 0 0 1 0 18" />
  1333.        </svg>
  1334.        <span class="current-language">Language</span>
  1335.        <svg class="accordion-icon" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  1336.          <polyline points="6 9 12 15 18 9"></polyline>
  1337.        </svg>
  1338.      </button>
  1339.      <div class="accordion-content" style="display: none;">
  1340.        <ul class="language-list">
  1341.          <li class="language-option active" data-lang="en">
  1342.            <button type="button" class="dd-item">English</button>
  1343.          </li>
  1344.          <li class="language-option" data-lang="zh">
  1345.            <button type="button" class="dd-item">简体中文</button>
  1346.          </li>
  1347.          <li class="language-option" data-lang="ar">
  1348.            <button type="button" class="dd-item">العربية</button>
  1349.          </li>
  1350.          <li class="language-option" data-lang="fr">
  1351.            <button type="button" class="dd-item">Français</button>
  1352.          </li>
  1353.          <li class="language-option" data-lang="de">
  1354.            <button type="button" class="dd-item">German</button>
  1355.          </li>
  1356.          <li class="language-option" data-lang="pt">
  1357.            <button type="button" class="dd-item">Português</button>
  1358.          </li>
  1359.          <li class="language-option" data-lang="es">
  1360.            <button type="button" class="dd-item">Español</button>
  1361.          </li>
  1362.          <li class="language-option" data-lang="ja">
  1363.            <button type="button" class="dd-item">日本語</button>
  1364.          </li>
  1365.          <li class="language-option" data-lang="ko">
  1366.            <button type="button" class="dd-item">한국어</button>
  1367.          </li>
  1368.          <li class="language-option" data-lang="tl">
  1369.            <button type="button" class="dd-item">Tagalog</button>
  1370.          </li>
  1371.          <li class="language-option" data-lang="nl">
  1372.            <button type="button" class="dd-item">Dutch</button>
  1373.          </li>
  1374.          <li class="language-option" data-lang="hi">
  1375.            <button type="button" class="dd-item">हिन्दी</button>
  1376.          </li>
  1377.        </ul>
  1378.      </div>
  1379.    </div>
  1380.    
  1381.  
  1382.    <ul class="dd-menu" data-abc="ddmenu">
  1383.      <!-- Other menu items -->
  1384.  
  1385.      <li>
  1386.        <span class="dd-item">
  1387.          
  1388.          <a href="https://logicballs.com/auth"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-login-2">
  1389.              <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  1390.              <path d="M9 8v-2a2 2 0 0 1 2 -2h7a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-7a2 2 0 0 1 -2 -2v-2" />
  1391.              <path d="M3 12h13l-3 -3" />
  1392.              <path d="M13 15l3 -3" />
  1393.            </svg>
  1394.            Login / Signup
  1395.          </a>
  1396.          
  1397.          
  1398.  
  1399.        </span>
  1400.      </li>
  1401.      <li>
  1402.        <span class="dd-item">
  1403.          <span class="dd-text">
  1404.            <a class="nav-link" href="https://logicballs.com/pricing">
  1405.              <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-currency-dollar">
  1406.                <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  1407.                <path d="M16.7 8a3 3 0 0 0 -2.7 -2h-4a3 3 0 0 0 0 6h4a3 3 0 0 1 0 6h-4a3 3 0 0 1 -2.7 -2" />
  1408.                <path d="M12 3v3m0 12v3" />
  1409.              </svg>
  1410.              Pricing
  1411.            </a>
  1412.          </span>
  1413.        </span>
  1414.      </li>
  1415.      <li>
  1416.        <span class="dd-item">
  1417.          <span class="dd-text">
  1418.            <a class="nav-link" href="/cdn-cgi/l/email-protection#f784828787988583b79b98909e9495969b9b84d994989a">
  1419.              <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-phone">
  1420.                <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  1421.                <path d="M5 4h4l2 5l-2.5 1.5a11 11 0 0 0 5 5l1.5 -2.5l5 2v4a2 2 0 0 1 -2 2a16 16 0 0 1 -15 -15a2 2 0 0 1 2 -2" />
  1422.              </svg>
  1423.              Contact us
  1424.            </a>
  1425.          </span>
  1426.        </span>
  1427.      </li>
  1428.  
  1429.    
  1430.    
  1431.      
  1432.      
  1433.    </ul>
  1434.    
  1435.  </div>
  1436. </nav>
  1437.  
  1438. <header class="header header-mobile" id="header" role="banner">
  1439.  <nav class="navbar" role="navigation">
  1440.    <div class="d-flex">
  1441.      <div>
  1442.        <button id="mobile-menu" aria-label="Toggle mobile menu">
  1443.          <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#1f1f1f">
  1444.            <path d="M120-240v-80h720v80H120Zm0-200v-80h720v80H120Zm0-200v-80h720v80H120Z" />
  1445.          </svg>
  1446.        </button>
  1447.      </div>
  1448.      <div class="logo">
  1449.        <a href="https://logicballs.com">
  1450.          <img src="https://logicballs.com/images/logo.svg" alt="LogicBalls" title="LogicBalls" />
  1451.        </a>
  1452.      </div>
  1453.    </div>
  1454.    <div class="d-flex">
  1455.      <div class="search search-mobile">
  1456.        <div class="">
  1457.          <button onclick="if(typeof openSearchPopup === 'function') { openSearchPopup(); }" id="show-button-ai" aria-label="AI powered search">
  1458.  
  1459.            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
  1460.              <path d="M12 22C12.0333 22 12.05 21.9833 12.05 21.95C12.05 20.5833 12.3083 19.3 12.825 18.1C13.3417 16.9 14.05 15.85 14.95 14.95C15.85 14.05 16.9 13.3417 18.1 12.825C19.3 12.3083 20.5833 12.05 21.95 12.05C21.9833 12.05 22 12.0333 22 12C22 11.9667 21.9833 11.95 21.95 11.95C20.5833 11.95 19.3 11.6917 18.1 11.175C16.9 10.6583 15.85 9.95 14.95 9.05C14.05 8.15 13.3417 7.1 12.825 5.9C12.3083 4.7 12.05 3.41667 12.05 2.05C12.05 2.01667 12.0333 2 12 2C11.9667 2 11.95 2.01667 11.95 2.05C11.95 3.41667 11.6917 4.7 11.175 5.9C10.6583 7.1 9.95 8.15 9.05 9.05C8.15 9.95 7.1 10.6583 5.9 11.175C4.7 11.6917 3.41667 11.95 2.05 11.95C2.01667 11.95 2 11.9667 2 12C2 12.0333 2.01667 12.05 2.05 12.05C3.41667 12.05 4.7 12.3083 5.9 12.825C7.1 13.3417 8.15 14.05 9.05 14.95C9.95 15.85 10.6583 16.9 11.175 18.1C11.6917 19.3 11.95 20.5833 11.95 21.95C11.95 21.9833 11.9667 22 12 22Z" fill="url(#paint0_linear_849_445)" />
  1461.              <defs>
  1462.                <linearGradient id="paint0_linear_849_445" x1="12" y1="2" x2="12" y2="22" gradientUnits="userSpaceOnUse">
  1463.                  <stop stop-color="#FF4D6A" />
  1464.                  <stop offset="0.5" stop-color="#A21CAF" />
  1465.                  <stop offset="1" stop-color="#6A4DFF" />
  1466.                </linearGradient>
  1467.              </defs>
  1468.            </svg>
  1469.  
  1470.          </button>
  1471.          <button id="show-button-typesence" onclick="
  1472.                              if(typeof window.hightlightSearchBoxCursor === 'function') {
  1473.                                window.hightlightSearchBoxCursor();
  1474.                              } else if(typeof hightlightSearchBoxCursor === 'function') {
  1475.                                hightlightSearchBoxCursor();
  1476.                              } else {
  1477.                                // Wait for search to load and try again
  1478.                                setTimeout(() => {
  1479.                                  if(typeof window.hightlightSearchBoxCursor === 'function') {
  1480.                                    window.hightlightSearchBoxCursor();
  1481.                                  }
  1482.                                }, 100);
  1483.                              } " aria-label="Typesense search">
  1484.            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
  1485.              <path d="M19.6 21L13.3 14.7C12.8 15.1 12.225 15.4167 11.575 15.65C10.925 15.8833 10.2333 16 9.5 16C7.68333 16 6.14583 15.3708 4.8875 14.1125C3.62917 12.8542 3 11.3167 3 9.5C3 7.68333 3.62917 6.14583 4.8875 4.8875C6.14583 3.62917 7.68333 3 9.5 3C11.3167 3 12.8542 3.62917 14.1125 4.8875C15.3708 6.14583 16 7.68333 16 9.5C16 10.2333 15.8833 10.925 15.65 11.575C15.4167 12.225 15.1 12.8 14.7 13.3L21 19.6L19.6 21ZM9.5 14C10.75 14 11.8125 13.5625 12.6875 12.6875C13.5625 11.8125 14 10.75 14 9.5C14 8.25 13.5625 7.1875 12.6875 6.3125C11.8125 5.4375 10.75 5 9.5 5C8.25 5 7.1875 5.4375 6.3125 6.3125C5.4375 7.1875 5 8.25 5 9.5C5 10.75 5.4375 11.8125 6.3125 12.6875C7.1875 13.5625 8.25 14 9.5 14Z" fill="#374151" />
  1486.            </svg>
  1487.  
  1488.          </button>
  1489.  
  1490.  
  1491.        </div>
  1492.      </div>
  1493.    </div>
  1494.  </nav>
  1495. </header>
  1496.  
  1497. <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>
  1498.  // Initialize search buttons with proper handlers
  1499.  function initializeSearchButtons() {
  1500.    const typesenseButton = document.getElementById('show-button-typesence');
  1501.    const aiButton = document.getElementById('show-button-ai');
  1502.  
  1503.    if (typesenseButton) {
  1504.      typesenseButton.onclick = function() {
  1505.        if (typeof window.hightlightSearchBoxCursor === 'function') {
  1506.          window.hightlightSearchBoxCursor();
  1507.        } else if (typeof hightlightSearchBoxCursor === 'function') {
  1508.          hightlightSearchBoxCursor();
  1509.        } else {
  1510.          // Wait for search to load and try again
  1511.          setTimeout(() => {
  1512.            if (typeof window.hightlightSearchBoxCursor === 'function') {
  1513.              window.hightlightSearchBoxCursor();
  1514.            }
  1515.          }, 500);
  1516.        }
  1517.      };
  1518.    }
  1519.  
  1520.    if (aiButton) {
  1521.      aiButton.onclick = function() {
  1522.        if (typeof openSearchPopup === 'function') {
  1523.          openSearchPopup();
  1524.        }
  1525.      };
  1526.    }
  1527.  }
  1528.  
  1529.  // Initialize immediately and also after a delay to ensure all scripts are loaded
  1530.  initializeSearchButtons();
  1531.  setTimeout(initializeSearchButtons, 1000);
  1532. </script>
  1533.               </div>
  1534.               <main role="main" class="main-v1">
  1535.                 <div class="pricinghome">
  1536.                     <div class="specialoffer">
  1537.                        <div class="coupon">
  1538.  
  1539.                           Get discovered add your AI product to our top
  1540.                              <a href="https://logicballs.com/ai-tools" target="_blank"><span class="coupon-code">
  1541.                                 AI directory</span></a>
  1542.                                  
  1543.  
  1544.                        </div>
  1545.                        <div class="dismiss-btn" id="dismissBtn"><svg xmlns="http://www.w3.org/2000/svg"
  1546.                              viewBox="0 0 24 24" width="22" height="22" fill="currentColor">
  1547.                              <path
  1548.                                 d="M11.9997 10.5865L16.9495 5.63672L18.3637 7.05093L13.4139 12.0007L18.3637 16.9504L16.9495 18.3646L11.9997 13.4149L7.04996 18.3646L5.63574 16.9504L10.5855 12.0007L5.63574 7.05093L7.04996 5.63672L11.9997 10.5865Z">
  1549.                              </path>
  1550.                           </svg></div>
  1551.                     </div>
  1552.                  </div>  
  1553.                  <section class="home-v1">
  1554.  
  1555.  
  1556.  
  1557.                     <div class="ripple-container" id="ripple-bg"></div>
  1558.                     <div class="home-v1-wrap">
  1559.                        <div class="page-header">
  1560.                           <h1>
  1561.                              Write Something Cool
  1562.                           </h1>
  1563.                           <p>
  1564.                              Explore the First-Ever Visual ChatGPT Platform
  1565.                           </p>
  1566.                        </div>
  1567.                        <div class="input-wrapper">
  1568.                           <div class="input-card">
  1569.                              <div class="form">
  1570.                                 <textarea name="homeChat" id="homeChatInput"
  1571.                                    placeholder="Ask LogicBalls to &#39;Writing a professional email&#39;"></textarea>
  1572.                              </div>
  1573.                              <div class="actions">
  1574.                                 <div class="action-left">
  1575.                                    <div class="dropdown-container">
  1576.                                       <button class="dropdown-button" id="settingsDropdownBtn" aria-haspopup="true"
  1577.                                          aria-expanded="false" aria-label="Settings menu">
  1578.                                          <div class="icon">
  1579.                                             <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18"
  1580.                                                viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"
  1581.                                                stroke-linecap="round" stroke-linejoin="round"
  1582.                                                class="icon icon-tabler icons-tabler-outline icon-tabler-adjustments-horizontal">
  1583.                                                <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  1584.                                                <path d="M14 6m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" />
  1585.                                                <path d="M4 6l8 0" />
  1586.                                                <path d="M16 6l4 0" />
  1587.                                                <path d="M8 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" />
  1588.                                                <path d="M4 12l2 0" />
  1589.                                                <path d="M10 12l10 0" />
  1590.                                                <path d="M17 18m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" />
  1591.                                                <path d="M4 18l11 0" />
  1592.                                                <path d="M19 18l1 0" />
  1593.                                             </svg>
  1594.                                          </div>
  1595.                                       </button>
  1596.                                       <div class="dropdown-menu" id="settingsDropdown" role="menu"
  1597.                                          aria-labelledby="settingsDropdownBtn">
  1598.                                          <!-- Humanize toggle item -->
  1599.                                          <div class="dropdown-item toggle-item">
  1600.                                             <span>Humanize</span>
  1601.                                             <label class="switch">
  1602.                                                <input type="checkbox" id="humanizeToggle">
  1603.                                                <span class="slider round"></span>
  1604.                                             </label>
  1605.                                          </div>
  1606.                                          <!-- Tone category with submenu -->
  1607.                                          <div class="dropdown-category">
  1608.                                             <div class="dropdown-category-header">
  1609.                                                Tone
  1610.                                                <svg class="dropdown-arrow" width="14" height="14" viewBox="0 0 14 14"
  1611.                                                   fill="none" xmlns="http://www.w3.org/2000/svg">
  1612.                                                   <path d="M5.25 2.33334L9.91667 7L5.25 11.6667" stroke="currentColor"
  1613.                                                      stroke-width="1.5" stroke-linecap="round"
  1614.                                                      stroke-linejoin="round" />
  1615.                                                </svg>
  1616.                                             </div>
  1617.                                             <div class="dropdown-submenu">
  1618.                                                <div class="dropdown-item" data-tone="casual">
  1619.                                                   <div>Casual</div>
  1620.                                                </div>
  1621.                                                <div class="dropdown-item" data-tone="formal">
  1622.                                                   <div>Formal</div>
  1623.                                                </div>
  1624.                                                <div class="dropdown-item" data-tone="professional">
  1625.                                                   <div>Professional</div>
  1626.                                                </div>
  1627.                                                <div class="dropdown-item" data-tone="friendly">
  1628.                                                   <div>Friendly</div>
  1629.                                                </div>
  1630.                                                <div class="dropdown-item" data-tone="creative">
  1631.                                                   <div>Creative</div>
  1632.                                                </div>
  1633.                                                <div class="dropdown-item" data-tone="academic">
  1634.                                                   <div>Academic</div>
  1635.                                                </div>
  1636.                                                <div class="dropdown-item" data-tone="funny">
  1637.                                                   <div>Funny</div>
  1638.                                                </div>
  1639.                                                <div class="dropdown-item" data-tone="humble">
  1640.                                                   <div>Humble</div>
  1641.                                                </div>
  1642.                                                <div class="dropdown-item" data-tone="joyful">
  1643.                                                   <div>Joyful</div>
  1644.                                                </div>
  1645.                                                <div class="dropdown-item" data-tone="urgent">
  1646.                                                   <div>Urgent</div>
  1647.                                                </div>
  1648.                                                <div class="dropdown-item" data-tone="worried">
  1649.                                                   <div>Worried</div>
  1650.                                                </div>
  1651.                                                <div class="dropdown-item" data-tone="critical">
  1652.                                                   <div>Critical</div>
  1653.                                                </div>
  1654.                                                <div class="dropdown-item" data-tone="humorous">
  1655.                                                   <div>Humorous</div>
  1656.                                                </div>
  1657.                                                <div class="dropdown-item" data-tone="convincing">
  1658.                                                   <div>Convincing</div>
  1659.                                                </div>
  1660.                                                <div class="dropdown-item" data-tone="passionate">
  1661.                                                   <div>Passionate</div>
  1662.                                                </div>
  1663.                                                <div class="dropdown-item" data-tone="thoughtful">
  1664.                                                   <div>Thoughtful</div>
  1665.                                                </div>
  1666.                                                <div class="dropdown-item" data-tone="informative">
  1667.                                                   <div>Informative</div>
  1668.                                                </div>
  1669.                                                <div class="dropdown-item" data-tone="inspirational">
  1670.                                                   <div>Inspirational</div>
  1671.                                                </div>
  1672.                                             </div>
  1673.                                          </div>
  1674.                                       </div>
  1675.                                       <!-- Mobile: single list with all settings options -->
  1676.                                       <div class="dropdown-menu mobile-settings-list">
  1677.                                          <!-- Humanize toggle item -->
  1678.                                          <div class="dropdown-item toggle-item">
  1679.                                             <span>Humanize</span>
  1680.                                             <label class="switch">
  1681.                                                <input type="checkbox" id="humanizeToggleMobile">
  1682.                                                <span class="slider round"></span>
  1683.                                             </label>
  1684.                                          </div>
  1685.                                          <!-- Tone options -->
  1686.                                          <div class="settings-heading">Tone</div>
  1687.                                          <div class="dropdown-item" data-tone="casual">
  1688.                                             <div>Casual</div>
  1689.                                          </div>
  1690.                                          <div class="dropdown-item" data-tone="formal">
  1691.                                             <div>Formal</div>
  1692.                                          </div>
  1693.                                          <div class="dropdown-item" data-tone="professional">
  1694.                                             <div>Professional</div>
  1695.                                          </div>
  1696.                                          <div class="dropdown-item" data-tone="friendly">
  1697.                                             <div>Friendly</div>
  1698.                                          </div>
  1699.                                          <div class="dropdown-item" data-tone="creative">
  1700.                                             <div>Creative</div>
  1701.                                          </div>
  1702.                                          <div class="dropdown-item" data-tone="academic">
  1703.                                             <div>Academic</div>
  1704.                                          </div>
  1705.                                          <div class="dropdown-item" data-tone="funny">
  1706.                                             <div>Funny</div>
  1707.                                          </div>
  1708.                                          <div class="dropdown-item" data-tone="humble">
  1709.                                             <div>Humble</div>
  1710.                                          </div>
  1711.                                          <div class="dropdown-item" data-tone="joyful">
  1712.                                             <div>Joyful</div>
  1713.                                          </div>
  1714.                                          <div class="dropdown-item" data-tone="urgent">
  1715.                                             <div>Urgent</div>
  1716.                                          </div>
  1717.                                          <div class="dropdown-item" data-tone="worried">
  1718.                                             <div>Worried</div>
  1719.                                          </div>
  1720.                                          <div class="dropdown-item" data-tone="critical">
  1721.                                             <div>Critical</div>
  1722.                                          </div>
  1723.                                          <div class="dropdown-item" data-tone="humorous">
  1724.                                             <div>Humorous</div>
  1725.                                          </div>
  1726.                                          <div class="dropdown-item" data-tone="convincing">
  1727.                                             <div>Convincing</div>
  1728.                                          </div>
  1729.                                          <div class="dropdown-item" data-tone="passionate">
  1730.                                             <div>Passionate</div>
  1731.                                          </div>
  1732.                                          <div class="dropdown-item" data-tone="thoughtful">
  1733.                                             <div>Thoughtful</div>
  1734.                                          </div>
  1735.                                          <div class="dropdown-item" data-tone="informative">
  1736.                                             <div>Informative</div>
  1737.                                          </div>
  1738.                                          <div class="dropdown-item" data-tone="inspirational">
  1739.                                             <div>Inspirational</div>
  1740.                                          </div>
  1741.                                       </div>
  1742.                                    </div>
  1743.                                    <div class="dropdown-container">
  1744.                                       <button class="dropdown-button" id="modelDropdown">
  1745.                                          <div class="icon">
  1746.                                            
  1747.                                                <img src="/images/providers/anthropic.svg" width="16" height="16"
  1748.                                                   alt="Claude">
  1749.                                                
  1750.                                          </div>
  1751.                                          <span class="dropdown-text">
  1752.                                             Claude
  1753.                                          </span>
  1754.                                          <svg width="14" height="14" viewBox="0 0 14 14" fill="none"
  1755.                                             xmlns="http://www.w3.org/2000/svg">
  1756.                                             <path d="M5.25 2.33334L9.91667 7L5.25 11.6667" stroke="currentColor"
  1757.                                                stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
  1758.                                          </svg>
  1759.                                       </button>
  1760.                                       <div class="dropdown-menu ai-models-dropdown">
  1761.                                          
  1762.                                            
  1763.                                                <div class="dropdown-item" data-model-id="anthropic/claude-3.5-haiku"
  1764.                                                   data-premium="false" data-model-name="Claude"
  1765.                                                   data-provider="Anthropic" data-icon-path="/images/providers/anthropic.svg"
  1766.                                                   data-plan-type="basic">
  1767.                                                   <img src="/images/providers/anthropic.svg" width="20"
  1768.                                                         height="20" alt="Claude">
  1769.                                                      
  1770.                                                         <div>
  1771.                                                            Claude
  1772.                                                         </div>
  1773.                                                </div>
  1774.                                                
  1775.                                                <div class="dropdown-item" data-model-id="meta-llama/llama-3.3-70b-instruct"
  1776.                                                   data-premium="false" data-model-name="Llama 3.3 70B"
  1777.                                                   data-provider="Meta" data-icon-path="/images/providers/meta.svg"
  1778.                                                   data-plan-type="basic">
  1779.                                                   <img src="/images/providers/meta.svg" width="20"
  1780.                                                         height="20" alt="Llama 3.3 70B">
  1781.                                                      
  1782.                                                         <div>
  1783.                                                            Llama 3.3 70B
  1784.                                                         </div>
  1785.                                                </div>
  1786.                                                
  1787.                                                <div class="dropdown-item" data-model-id="qwen/qwen3-32b"
  1788.                                                   data-premium="false" data-model-name="Qwen3 32B"
  1789.                                                   data-provider="Qwen" data-icon-path="/images/providers/qwen.svg"
  1790.                                                   data-plan-type="basic">
  1791.                                                   <img src="/images/providers/qwen.svg" width="20"
  1792.                                                         height="20" alt="Qwen3 32B">
  1793.                                                      
  1794.                                                         <div>
  1795.                                                            Qwen3 32B
  1796.                                                         </div>
  1797.                                                </div>
  1798.                                                
  1799.                                                   <!-- Pro Plan category with submenu -->
  1800.                                                   <div class="dropdown-category">
  1801.                                                      <div class="dropdown-category-header">
  1802.                                                         Pro
  1803.                                                         <svg class="dropdown-arrow" width="14" height="14"
  1804.                                                            viewBox="0 0 14 14" fill="none"
  1805.                                                            xmlns="http://www.w3.org/2000/svg">
  1806.                                                            <path d="M5.25 2.33334L9.91667 7L5.25 11.6667"
  1807.                                                               stroke="currentColor" stroke-width="1.5"
  1808.                                                               stroke-linecap="round" stroke-linejoin="round" />
  1809.                                                         </svg>
  1810.                                                      </div>
  1811.                                                      <div class="dropdown-submenu">
  1812.                                                        
  1813.                                                            <div class="dropdown-item" data-model-id="deepseek/deepseek-chat-v3-0324"
  1814.                                                               data-premium="true" data-model-name="DeepSeek V3"
  1815.                                                               data-provider="DeepSeek"
  1816.                                                               data-icon-path="/images/providers/deepseeks.svg" data-plan-type="pro">
  1817.                                                               <img src="/images/providers/deepseeks.svg"
  1818.                                                                     width="20" height="20" alt="DeepSeek V3">
  1819.                                                                  
  1820.                                                                     <div>
  1821.                                                                        DeepSeek V3
  1822.                                                                     </div>
  1823.                                                            </div>
  1824.                                                            
  1825.                                                            <div class="dropdown-item" data-model-id="google/gemini-2.0-flash-001"
  1826.                                                               data-premium="true" data-model-name="Gemini 2.0 Flash"
  1827.                                                               data-provider="Google"
  1828.                                                               data-icon-path="/images/providers/google.svg" data-plan-type="pro">
  1829.                                                               <img src="/images/providers/google.svg"
  1830.                                                                     width="20" height="20" alt="Gemini 2.0 Flash">
  1831.                                                                  
  1832.                                                                     <div>
  1833.                                                                        Gemini 2.0 Flash
  1834.                                                                     </div>
  1835.                                                            </div>
  1836.                                                            
  1837.                                                            <div class="dropdown-item" data-model-id="google/gemini-2.0-flash-lite-001"
  1838.                                                               data-premium="true" data-model-name="Gemini 2.0 Flash Lite"
  1839.                                                               data-provider="Google"
  1840.                                                               data-icon-path="/images/providers/google.svg" data-plan-type="pro">
  1841.                                                               <img src="/images/providers/google.svg"
  1842.                                                                     width="20" height="20" alt="Gemini 2.0 Flash Lite">
  1843.                                                                  
  1844.                                                                     <div>
  1845.                                                                        Gemini 2.0 Flash Lite
  1846.                                                                     </div>
  1847.                                                            </div>
  1848.                                                            
  1849.                                                            <div class="dropdown-item" data-model-id="openai/gpt-4o-mini"
  1850.                                                               data-premium="true" data-model-name="GPT-4o-mini"
  1851.                                                               data-provider="OpenAI"
  1852.                                                               data-icon-path="/images/providers/openai.svg" data-plan-type="pro">
  1853.                                                               <img src="/images/providers/openai.svg"
  1854.                                                                     width="20" height="20" alt="GPT-4o-mini">
  1855.                                                                  
  1856.                                                                     <div>
  1857.                                                                        GPT-4o-mini
  1858.                                                                     </div>
  1859.                                                            </div>
  1860.                                                            
  1861.                                                            <div class="dropdown-item" data-model-id="mistralai/mistral-nemo"
  1862.                                                               data-premium="true" data-model-name="Mistral Nemo"
  1863.                                                               data-provider="Mistral AI"
  1864.                                                               data-icon-path="/images/providers/mistral.svg" data-plan-type="pro">
  1865.                                                               <img src="/images/providers/mistral.svg"
  1866.                                                                     width="20" height="20" alt="Mistral Nemo">
  1867.                                                                  
  1868.                                                                     <div>
  1869.                                                                        Mistral Nemo
  1870.                                                                     </div>
  1871.                                                            </div>
  1872.                                                            
  1873.                                                            <div class="dropdown-item" data-model-id="openrouter/sonoma-dusk-alpha"
  1874.                                                               data-premium="true" data-model-name="Sonoma Dusk Alpha"
  1875.                                                               data-provider="OpenRouter"
  1876.                                                               data-icon-path="/images/providers/openrouter.svg" data-plan-type="pro">
  1877.                                                               <img src="/images/providers/openrouter.svg"
  1878.                                                                     width="20" height="20" alt="Sonoma Dusk Alpha">
  1879.                                                                  
  1880.                                                                     <div>
  1881.                                                                        Sonoma Dusk Alpha
  1882.                                                                     </div>
  1883.                                                            </div>
  1884.                                                            
  1885.                                                            <div class="dropdown-item" data-model-id="openrouter/sonoma-sky-alpha"
  1886.                                                               data-premium="true" data-model-name="Sonoma Sky Alpha"
  1887.                                                               data-provider="OpenRouter"
  1888.                                                               data-icon-path="/images/providers/openrouter.svg" data-plan-type="pro">
  1889.                                                               <img src="/images/providers/openrouter.svg"
  1890.                                                                     width="20" height="20" alt="Sonoma Sky Alpha">
  1891.                                                                  
  1892.                                                                     <div>
  1893.                                                                        Sonoma Sky Alpha
  1894.                                                                     </div>
  1895.                                                            </div>
  1896.                                                            
  1897.                                                      </div>
  1898.                                                   </div>
  1899.                                                   <!-- Premium Plan category with submenu -->
  1900.                                                   <div class="dropdown-category">
  1901.                                                      <div class="dropdown-category-header">
  1902.                                                         Premium
  1903.                                                         <svg class="dropdown-arrow" width="14" height="14"
  1904.                                                            viewBox="0 0 14 14" fill="none"
  1905.                                                            xmlns="http://www.w3.org/2000/svg">
  1906.                                                            <path d="M5.25 2.33334L9.91667 7L5.25 11.6667"
  1907.                                                               stroke="currentColor" stroke-width="1.5"
  1908.                                                               stroke-linecap="round" stroke-linejoin="round" />
  1909.                                                         </svg>
  1910.                                                      </div>
  1911.                                                      <div class="dropdown-submenu">
  1912.                                                        
  1913.                                                            <div class="dropdown-item" data-model-id="anthropic/claude-3.5-sonnet"
  1914.                                                               data-premium="true" data-model-name="Claude 3.5 Sonnet"
  1915.                                                               data-provider="Anthropic"
  1916.                                                               data-icon-path="/images/providers/anthropic.svg"
  1917.                                                               data-plan-type="premium">
  1918.                                                               <img src="/images/providers/anthropic.svg"
  1919.                                                                     width="20" height="20" alt="Claude 3.5 Sonnet">
  1920.                                                                  
  1921.                                                                     <div>
  1922.                                                                        Claude 3.5 Sonnet
  1923.                                                                     </div>
  1924.                                                            </div>
  1925.                                                            
  1926.                                                            <div class="dropdown-item" data-model-id="deepseek/deepseek-r1-0528"
  1927.                                                               data-premium="true" data-model-name="DeepSeek R1 0528"
  1928.                                                               data-provider="DeepSeek"
  1929.                                                               data-icon-path="/images/providers/deepseeks.svg"
  1930.                                                               data-plan-type="premium">
  1931.                                                               <img src="/images/providers/deepseeks.svg"
  1932.                                                                     width="20" height="20" alt="DeepSeek R1 0528">
  1933.                                                                  
  1934.                                                                     <div>
  1935.                                                                        DeepSeek R1 0528
  1936.                                                                     </div>
  1937.                                                            </div>
  1938.                                                            
  1939.                                                            <div class="dropdown-item" data-model-id="google/gemini-2.5-flash-preview"
  1940.                                                               data-premium="true" data-model-name="Gemini 2.5 Flash Preview"
  1941.                                                               data-provider="Google"
  1942.                                                               data-icon-path="/images/providers/google.svg"
  1943.                                                               data-plan-type="premium">
  1944.                                                               <img src="/images/providers/google.svg"
  1945.                                                                     width="20" height="20" alt="Gemini 2.5 Flash Preview">
  1946.                                                                  
  1947.                                                                     <div>
  1948.                                                                        Gemini 2.5 Flash Preview
  1949.                                                                     </div>
  1950.                                                            </div>
  1951.                                                            
  1952.                                                            <div class="dropdown-item" data-model-id="openai/gpt-4.1-mini"
  1953.                                                               data-premium="true" data-model-name="GPT-4.1 Mini"
  1954.                                                               data-provider="OpenAI"
  1955.                                                               data-icon-path="/images/providers/openai.svg"
  1956.                                                               data-plan-type="premium">
  1957.                                                               <img src="/images/providers/openai.svg"
  1958.                                                                     width="20" height="20" alt="GPT-4.1 Mini">
  1959.                                                                  
  1960.                                                                     <div>
  1961.                                                                        GPT-4.1 Mini
  1962.                                                                     </div>
  1963.                                                            </div>
  1964.                                                            
  1965.                                                            <div class="dropdown-item" data-model-id="moonshotai/kimi-k2-0905"
  1966.                                                               data-premium="true" data-model-name="Kimi K2"
  1967.                                                               data-provider="Moonshot AI"
  1968.                                                               data-icon-path="/images/providers/moonshotai.svg"
  1969.                                                               data-plan-type="premium">
  1970.                                                               <img src="/images/providers/moonshotai.svg"
  1971.                                                                     width="20" height="20" alt="Kimi K2">
  1972.                                                                  
  1973.                                                                     <div>
  1974.                                                                        Kimi K2
  1975.                                                                     </div>
  1976.                                                            </div>
  1977.                                                            
  1978.                                                      </div>
  1979.                                                   </div>
  1980.                                                   <!-- Elite Plan category with submenu -->
  1981.                                                   <div class="dropdown-category">
  1982.                                                      <div class="dropdown-category-header">
  1983.                                                         Elite
  1984.                                                         <svg class="dropdown-arrow" width="14" height="14"
  1985.                                                            viewBox="0 0 14 14" fill="none"
  1986.                                                            xmlns="http://www.w3.org/2000/svg">
  1987.                                                            <path d="M5.25 2.33334L9.91667 7L5.25 11.6667"
  1988.                                                               stroke="currentColor" stroke-width="1.5"
  1989.                                                               stroke-linecap="round" stroke-linejoin="round" />
  1990.                                                         </svg>
  1991.                                                      </div>
  1992.                                                      <div class="dropdown-submenu position-up">
  1993.                                                        
  1994.                                                            <div class="dropdown-item" data-model-id="anthropic/claude-3.7-sonnet"
  1995.                                                               data-premium="true" data-model-name="Claude 3.7 Sonnet"
  1996.                                                               data-provider="Anthropic"
  1997.                                                               data-icon-path="/images/providers/anthropic.svg"
  1998.                                                               data-plan-type="elite">
  1999.                                                               <img src="/images/providers/anthropic.svg"
  2000.                                                                     width="20" height="20" alt="Claude 3.7 Sonnet">
  2001.                                                                  
  2002.                                                                     <div>
  2003.                                                                        Claude 3.7 Sonnet
  2004.                                                                     </div>
  2005.                                                            </div>
  2006.                                                            
  2007.                                                            <div class="dropdown-item" data-model-id="anthropic/claude-opus-4.1"
  2008.                                                               data-premium="true" data-model-name="Claude Opus 4.1"
  2009.                                                               data-provider="Anthropic"
  2010.                                                               data-icon-path="/images/providers/anthropic.svg"
  2011.                                                               data-plan-type="elite">
  2012.                                                               <img src="/images/providers/anthropic.svg"
  2013.                                                                     width="20" height="20" alt="Claude Opus 4.1">
  2014.                                                                  
  2015.                                                                     <div>
  2016.                                                                        Claude Opus 4.1
  2017.                                                                     </div>
  2018.                                                            </div>
  2019.                                                            
  2020.                                                            <div class="dropdown-item" data-model-id="anthropic/claude-sonnet-4"
  2021.                                                               data-premium="true" data-model-name="Claude Sonnet 4"
  2022.                                                               data-provider="Anthropic"
  2023.                                                               data-icon-path="/images/providers/anthropic.svg"
  2024.                                                               data-plan-type="elite">
  2025.                                                               <img src="/images/providers/anthropic.svg"
  2026.                                                                     width="20" height="20" alt="Claude Sonnet 4">
  2027.                                                                  
  2028.                                                                     <div>
  2029.                                                                        Claude Sonnet 4
  2030.                                                                     </div>
  2031.                                                            </div>
  2032.                                                            
  2033.                                                            <div class="dropdown-item" data-model-id="google/gemini-2.5-pro"
  2034.                                                               data-premium="true" data-model-name="Gemini 2.5 Pro"
  2035.                                                               data-provider="Google"
  2036.                                                               data-icon-path="/images/providers/google.svg"
  2037.                                                               data-plan-type="elite">
  2038.                                                               <img src="/images/providers/google.svg"
  2039.                                                                     width="20" height="20" alt="Gemini 2.5 Pro">
  2040.                                                                  
  2041.                                                                     <div>
  2042.                                                                        Gemini 2.5 Pro
  2043.                                                                     </div>
  2044.                                                            </div>
  2045.                                                            
  2046.                                                            <div class="dropdown-item" data-model-id="google/gemini-2.5-pro-preview"
  2047.                                                               data-premium="true" data-model-name="Gemini 2.5 Pro Preview"
  2048.                                                               data-provider="Google"
  2049.                                                               data-icon-path="/images/providers/google.svg"
  2050.                                                               data-plan-type="elite">
  2051.                                                               <img src="/images/providers/google.svg"
  2052.                                                                     width="20" height="20" alt="Gemini 2.5 Pro Preview">
  2053.                                                                  
  2054.                                                                     <div>
  2055.                                                                        Gemini 2.5 Pro Preview
  2056.                                                                     </div>
  2057.                                                            </div>
  2058.                                                            
  2059.                                                            <div class="dropdown-item" data-model-id="openai/gpt-4o:extended"
  2060.                                                               data-premium="true" data-model-name="GPT-4o"
  2061.                                                               data-provider="OpenAI"
  2062.                                                               data-icon-path="/images/providers/openai.svg"
  2063.                                                               data-plan-type="elite">
  2064.                                                               <img src="/images/providers/openai.svg"
  2065.                                                                     width="20" height="20" alt="GPT-4o">
  2066.                                                                  
  2067.                                                                     <div>
  2068.                                                                        GPT-4o
  2069.                                                                     </div>
  2070.                                                            </div>
  2071.                                                            
  2072.                                                            <div class="dropdown-item" data-model-id="openai/gpt-5"
  2073.                                                               data-premium="true" data-model-name="GPT-5"
  2074.                                                               data-provider="OpenAI"
  2075.                                                               data-icon-path="/images/providers/openai.svg"
  2076.                                                               data-plan-type="elite">
  2077.                                                               <img src="/images/providers/openai.svg"
  2078.                                                                     width="20" height="20" alt="GPT-5">
  2079.                                                                  
  2080.                                                                     <div>
  2081.                                                                        GPT-5
  2082.                                                                     </div>
  2083.                                                            </div>
  2084.                                                            
  2085.                                                            <div class="dropdown-item" data-model-id="x-ai/grok-4"
  2086.                                                               data-premium="true" data-model-name="Grok 4"
  2087.                                                               data-provider="xAI"
  2088.                                                               data-icon-path="/images/providers/xai.svg"
  2089.                                                               data-plan-type="elite">
  2090.                                                               <img src="/images/providers/xai.svg"
  2091.                                                                     width="20" height="20" alt="Grok 4">
  2092.                                                                  
  2093.                                                                     <div>
  2094.                                                                        Grok 4
  2095.                                                                     </div>
  2096.                                                            </div>
  2097.                                                            
  2098.                                                            <div class="dropdown-item" data-model-id="x-ai/grok-code-fast-1"
  2099.                                                               data-premium="true" data-model-name="Grok Code Fast 1"
  2100.                                                               data-provider="xAI"
  2101.                                                               data-icon-path="/images/providers/xai.svg"
  2102.                                                               data-plan-type="elite">
  2103.                                                               <img src="/images/providers/xai.svg"
  2104.                                                                     width="20" height="20" alt="Grok Code Fast 1">
  2105.                                                                  
  2106.                                                                     <div>
  2107.                                                                        Grok Code Fast 1
  2108.                                                                     </div>
  2109.                                                            </div>
  2110.                                                            
  2111.                                                            <div class="dropdown-item" data-model-id="perplexity/sonar-reasoning"
  2112.                                                               data-premium="true" data-model-name="Perplexity: Sonar Reasoning"
  2113.                                                               data-provider="Perplexity"
  2114.                                                               data-icon-path="/images/providers/perplexity.svg"
  2115.                                                               data-plan-type="elite">
  2116.                                                               <img src="/images/providers/perplexity.svg"
  2117.                                                                     width="20" height="20" alt="Perplexity: Sonar Reasoning">
  2118.                                                                  
  2119.                                                                     <div>
  2120.                                                                        Perplexity: Sonar Reasoning
  2121.                                                                     </div>
  2122.                                                            </div>
  2123.                                                            
  2124.                                                            <div class="dropdown-item" data-model-id="qwen/qwen3-max"
  2125.                                                               data-premium="true" data-model-name="Qwen3 Max"
  2126.                                                               data-provider="Qwen"
  2127.                                                               data-icon-path="/images/providers/qwen.svg"
  2128.                                                               data-plan-type="elite">
  2129.                                                               <img src="/images/providers/qwen.svg"
  2130.                                                                     width="20" height="20" alt="Qwen3 Max">
  2131.                                                                  
  2132.                                                                     <div>
  2133.                                                                        Qwen3 Max
  2134.                                                                     </div>
  2135.                                                            </div>
  2136.                                                            
  2137.                                                      </div>
  2138.                                                   </div>
  2139.                                       </div>
  2140.                                       <!-- Mobile: single list with plan headings and all models -->
  2141.                                       <div class="dropdown-menu ai-models-dropdown mobile-models-list">
  2142.                                          
  2143.                                             <div class="models-heading">Basic</div>
  2144.                                            
  2145.                                                <div class="dropdown-item" data-model-id="anthropic/claude-3.5-haiku"
  2146.                                                   data-premium="false" data-model-name="Claude"
  2147.                                                   data-provider="Anthropic" data-icon-path="/images/providers/anthropic.svg"
  2148.                                                   data-plan-type="basic">
  2149.                                                   <img src="/images/providers/anthropic.svg" width="20"
  2150.                                                         height="20" alt="Claude">
  2151.                                                      
  2152.                                                         <div>
  2153.                                                            Claude
  2154.                                                         </div>
  2155.                                                </div>
  2156.                                                
  2157.                                                <div class="dropdown-item" data-model-id="meta-llama/llama-3.3-70b-instruct"
  2158.                                                   data-premium="false" data-model-name="Llama 3.3 70B"
  2159.                                                   data-provider="Meta" data-icon-path="/images/providers/meta.svg"
  2160.                                                   data-plan-type="basic">
  2161.                                                   <img src="/images/providers/meta.svg" width="20"
  2162.                                                         height="20" alt="Llama 3.3 70B">
  2163.                                                      
  2164.                                                         <div>
  2165.                                                            Llama 3.3 70B
  2166.                                                         </div>
  2167.                                                </div>
  2168.                                                
  2169.                                                <div class="dropdown-item" data-model-id="qwen/qwen3-32b"
  2170.                                                   data-premium="false" data-model-name="Qwen3 32B"
  2171.                                                   data-provider="Qwen" data-icon-path="/images/providers/qwen.svg"
  2172.                                                   data-plan-type="basic">
  2173.                                                   <img src="/images/providers/qwen.svg" width="20"
  2174.                                                         height="20" alt="Qwen3 32B">
  2175.                                                      
  2176.                                                         <div>
  2177.                                                            Qwen3 32B
  2178.                                                         </div>
  2179.                                                </div>
  2180.                                                
  2181.                                                  
  2182.                                                      
  2183.                                                         <div class="models-heading">Pro</div>
  2184.                                                        
  2185.                                                            <div class="dropdown-item" data-model-id="deepseek/deepseek-chat-v3-0324"
  2186.                                                               data-premium="true" data-model-name="DeepSeek V3"
  2187.                                                               data-provider="DeepSeek"
  2188.                                                               data-icon-path="/images/providers/deepseeks.svg" data-plan-type="pro">
  2189.                                                               <img src="/images/providers/deepseeks.svg"
  2190.                                                                     width="20" height="20" alt="DeepSeek V3">
  2191.                                                                  
  2192.                                                                     <div>
  2193.                                                                        DeepSeek V3
  2194.                                                                     </div>
  2195.                                                            </div>
  2196.                                                            
  2197.                                                            <div class="dropdown-item" data-model-id="google/gemini-2.0-flash-001"
  2198.                                                               data-premium="true" data-model-name="Gemini 2.0 Flash"
  2199.                                                               data-provider="Google"
  2200.                                                               data-icon-path="/images/providers/google.svg" data-plan-type="pro">
  2201.                                                               <img src="/images/providers/google.svg"
  2202.                                                                     width="20" height="20" alt="Gemini 2.0 Flash">
  2203.                                                                  
  2204.                                                                     <div>
  2205.                                                                        Gemini 2.0 Flash
  2206.                                                                     </div>
  2207.                                                            </div>
  2208.                                                            
  2209.                                                            <div class="dropdown-item" data-model-id="google/gemini-2.0-flash-lite-001"
  2210.                                                               data-premium="true" data-model-name="Gemini 2.0 Flash Lite"
  2211.                                                               data-provider="Google"
  2212.                                                               data-icon-path="/images/providers/google.svg" data-plan-type="pro">
  2213.                                                               <img src="/images/providers/google.svg"
  2214.                                                                     width="20" height="20" alt="Gemini 2.0 Flash Lite">
  2215.                                                                  
  2216.                                                                     <div>
  2217.                                                                        Gemini 2.0 Flash Lite
  2218.                                                                     </div>
  2219.                                                            </div>
  2220.                                                            
  2221.                                                            <div class="dropdown-item" data-model-id="openai/gpt-4o-mini"
  2222.                                                               data-premium="true" data-model-name="GPT-4o-mini"
  2223.                                                               data-provider="OpenAI"
  2224.                                                               data-icon-path="/images/providers/openai.svg" data-plan-type="pro">
  2225.                                                               <img src="/images/providers/openai.svg"
  2226.                                                                     width="20" height="20" alt="GPT-4o-mini">
  2227.                                                                  
  2228.                                                                     <div>
  2229.                                                                        GPT-4o-mini
  2230.                                                                     </div>
  2231.                                                            </div>
  2232.                                                            
  2233.                                                            <div class="dropdown-item" data-model-id="mistralai/mistral-nemo"
  2234.                                                               data-premium="true" data-model-name="Mistral Nemo"
  2235.                                                               data-provider="Mistral AI"
  2236.                                                               data-icon-path="/images/providers/mistral.svg" data-plan-type="pro">
  2237.                                                               <img src="/images/providers/mistral.svg"
  2238.                                                                     width="20" height="20" alt="Mistral Nemo">
  2239.                                                                  
  2240.                                                                     <div>
  2241.                                                                        Mistral Nemo
  2242.                                                                     </div>
  2243.                                                            </div>
  2244.                                                            
  2245.                                                            <div class="dropdown-item" data-model-id="openrouter/sonoma-dusk-alpha"
  2246.                                                               data-premium="true" data-model-name="Sonoma Dusk Alpha"
  2247.                                                               data-provider="OpenRouter"
  2248.                                                               data-icon-path="/images/providers/openrouter.svg" data-plan-type="pro">
  2249.                                                               <img src="/images/providers/openrouter.svg"
  2250.                                                                     width="20" height="20" alt="Sonoma Dusk Alpha">
  2251.                                                                  
  2252.                                                                     <div>
  2253.                                                                        Sonoma Dusk Alpha
  2254.                                                                     </div>
  2255.                                                            </div>
  2256.                                                            
  2257.                                                            <div class="dropdown-item" data-model-id="openrouter/sonoma-sky-alpha"
  2258.                                                               data-premium="true" data-model-name="Sonoma Sky Alpha"
  2259.                                                               data-provider="OpenRouter"
  2260.                                                               data-icon-path="/images/providers/openrouter.svg" data-plan-type="pro">
  2261.                                                               <img src="/images/providers/openrouter.svg"
  2262.                                                                     width="20" height="20" alt="Sonoma Sky Alpha">
  2263.                                                                  
  2264.                                                                     <div>
  2265.                                                                        Sonoma Sky Alpha
  2266.                                                                     </div>
  2267.                                                            </div>
  2268.                                                            
  2269.                                                              
  2270.                                                                  
  2271.                                                                     <div class="models-heading">Premium</div>
  2272.                                                                    
  2273.                                                                        <div class="dropdown-item"
  2274.                                                                           data-model-id="anthropic/claude-3.5-sonnet"
  2275.                                                                           data-premium="true"
  2276.                                                                           data-model-name="Claude 3.5 Sonnet"
  2277.                                                                           data-provider="Anthropic"
  2278.                                                                           data-icon-path="/images/providers/anthropic.svg"
  2279.                                                                           data-plan-type="premium">
  2280.                                                                           <img
  2281.                                                                                 src="/images/providers/anthropic.svg" width="20"
  2282.                                                                                 height="20" alt="Claude 3.5 Sonnet">
  2283.                                                                              
  2284.                                                                                 <div>
  2285.                                                                                    Claude 3.5 Sonnet
  2286.                                                                                 </div>
  2287.                                                                        </div>
  2288.                                                                        
  2289.                                                                        <div class="dropdown-item"
  2290.                                                                           data-model-id="deepseek/deepseek-r1-0528"
  2291.                                                                           data-premium="true"
  2292.                                                                           data-model-name="DeepSeek R1 0528"
  2293.                                                                           data-provider="DeepSeek"
  2294.                                                                           data-icon-path="/images/providers/deepseeks.svg"
  2295.                                                                           data-plan-type="premium">
  2296.                                                                           <img
  2297.                                                                                 src="/images/providers/deepseeks.svg" width="20"
  2298.                                                                                 height="20" alt="DeepSeek R1 0528">
  2299.                                                                              
  2300.                                                                                 <div>
  2301.                                                                                    DeepSeek R1 0528
  2302.                                                                                 </div>
  2303.                                                                        </div>
  2304.                                                                        
  2305.                                                                        <div class="dropdown-item"
  2306.                                                                           data-model-id="google/gemini-2.5-flash-preview"
  2307.                                                                           data-premium="true"
  2308.                                                                           data-model-name="Gemini 2.5 Flash Preview"
  2309.                                                                           data-provider="Google"
  2310.                                                                           data-icon-path="/images/providers/google.svg"
  2311.                                                                           data-plan-type="premium">
  2312.                                                                           <img
  2313.                                                                                 src="/images/providers/google.svg" width="20"
  2314.                                                                                 height="20" alt="Gemini 2.5 Flash Preview">
  2315.                                                                              
  2316.                                                                                 <div>
  2317.                                                                                    Gemini 2.5 Flash Preview
  2318.                                                                                 </div>
  2319.                                                                        </div>
  2320.                                                                        
  2321.                                                                        <div class="dropdown-item"
  2322.                                                                           data-model-id="openai/gpt-4.1-mini"
  2323.                                                                           data-premium="true"
  2324.                                                                           data-model-name="GPT-4.1 Mini"
  2325.                                                                           data-provider="OpenAI"
  2326.                                                                           data-icon-path="/images/providers/openai.svg"
  2327.                                                                           data-plan-type="premium">
  2328.                                                                           <img
  2329.                                                                                 src="/images/providers/openai.svg" width="20"
  2330.                                                                                 height="20" alt="GPT-4.1 Mini">
  2331.                                                                              
  2332.                                                                                 <div>
  2333.                                                                                    GPT-4.1 Mini
  2334.                                                                                 </div>
  2335.                                                                        </div>
  2336.                                                                        
  2337.                                                                        <div class="dropdown-item"
  2338.                                                                           data-model-id="moonshotai/kimi-k2-0905"
  2339.                                                                           data-premium="true"
  2340.                                                                           data-model-name="Kimi K2"
  2341.                                                                           data-provider="Moonshot AI"
  2342.                                                                           data-icon-path="/images/providers/moonshotai.svg"
  2343.                                                                           data-plan-type="premium">
  2344.                                                                           <img
  2345.                                                                                 src="/images/providers/moonshotai.svg" width="20"
  2346.                                                                                 height="20" alt="Kimi K2">
  2347.                                                                              
  2348.                                                                                 <div>
  2349.                                                                                    Kimi K2
  2350.                                                                                 </div>
  2351.                                                                        </div>
  2352.                                                                        
  2353.                                                                          
  2354.                                                                              
  2355.                                                                                 <div class="models-heading">Elite</div>
  2356.                                                                                
  2357.                                                                                    <div class="dropdown-item"
  2358.                                                                                       data-model-id="anthropic/claude-3.7-sonnet"
  2359.                                                                                       data-premium="true"
  2360.                                                                                       data-model-name="Claude 3.7 Sonnet"
  2361.                                                                                       data-provider="Anthropic"
  2362.                                                                                       data-icon-path="/images/providers/anthropic.svg"
  2363.                                                                                       data-plan-type="elite">
  2364.                                                                                       <img
  2365.                                                                                             src="/images/providers/anthropic.svg"
  2366.                                                                                             width="20" height="20"
  2367.                                                                                             alt="Claude 3.7 Sonnet">
  2368.                                                                                          
  2369.                                                                                             <div>
  2370.                                                                                                Claude 3.7 Sonnet
  2371.                                                                                             </div>
  2372.                                                                                    </div>
  2373.                                                                                    
  2374.                                                                                    <div class="dropdown-item"
  2375.                                                                                       data-model-id="anthropic/claude-opus-4.1"
  2376.                                                                                       data-premium="true"
  2377.                                                                                       data-model-name="Claude Opus 4.1"
  2378.                                                                                       data-provider="Anthropic"
  2379.                                                                                       data-icon-path="/images/providers/anthropic.svg"
  2380.                                                                                       data-plan-type="elite">
  2381.                                                                                       <img
  2382.                                                                                             src="/images/providers/anthropic.svg"
  2383.                                                                                             width="20" height="20"
  2384.                                                                                             alt="Claude Opus 4.1">
  2385.                                                                                          
  2386.                                                                                             <div>
  2387.                                                                                                Claude Opus 4.1
  2388.                                                                                             </div>
  2389.                                                                                    </div>
  2390.                                                                                    
  2391.                                                                                    <div class="dropdown-item"
  2392.                                                                                       data-model-id="anthropic/claude-sonnet-4"
  2393.                                                                                       data-premium="true"
  2394.                                                                                       data-model-name="Claude Sonnet 4"
  2395.                                                                                       data-provider="Anthropic"
  2396.                                                                                       data-icon-path="/images/providers/anthropic.svg"
  2397.                                                                                       data-plan-type="elite">
  2398.                                                                                       <img
  2399.                                                                                             src="/images/providers/anthropic.svg"
  2400.                                                                                             width="20" height="20"
  2401.                                                                                             alt="Claude Sonnet 4">
  2402.                                                                                          
  2403.                                                                                             <div>
  2404.                                                                                                Claude Sonnet 4
  2405.                                                                                             </div>
  2406.                                                                                    </div>
  2407.                                                                                    
  2408.                                                                                    <div class="dropdown-item"
  2409.                                                                                       data-model-id="google/gemini-2.5-pro"
  2410.                                                                                       data-premium="true"
  2411.                                                                                       data-model-name="Gemini 2.5 Pro"
  2412.                                                                                       data-provider="Google"
  2413.                                                                                       data-icon-path="/images/providers/google.svg"
  2414.                                                                                       data-plan-type="elite">
  2415.                                                                                       <img
  2416.                                                                                             src="/images/providers/google.svg"
  2417.                                                                                             width="20" height="20"
  2418.                                                                                             alt="Gemini 2.5 Pro">
  2419.                                                                                          
  2420.                                                                                             <div>
  2421.                                                                                                Gemini 2.5 Pro
  2422.                                                                                             </div>
  2423.                                                                                    </div>
  2424.                                                                                    
  2425.                                                                                    <div class="dropdown-item"
  2426.                                                                                       data-model-id="google/gemini-2.5-pro-preview"
  2427.                                                                                       data-premium="true"
  2428.                                                                                       data-model-name="Gemini 2.5 Pro Preview"
  2429.                                                                                       data-provider="Google"
  2430.                                                                                       data-icon-path="/images/providers/google.svg"
  2431.                                                                                       data-plan-type="elite">
  2432.                                                                                       <img
  2433.                                                                                             src="/images/providers/google.svg"
  2434.                                                                                             width="20" height="20"
  2435.                                                                                             alt="Gemini 2.5 Pro Preview">
  2436.                                                                                          
  2437.                                                                                             <div>
  2438.                                                                                                Gemini 2.5 Pro Preview
  2439.                                                                                             </div>
  2440.                                                                                    </div>
  2441.                                                                                    
  2442.                                                                                    <div class="dropdown-item"
  2443.                                                                                       data-model-id="openai/gpt-4o:extended"
  2444.                                                                                       data-premium="true"
  2445.                                                                                       data-model-name="GPT-4o"
  2446.                                                                                       data-provider="OpenAI"
  2447.                                                                                       data-icon-path="/images/providers/openai.svg"
  2448.                                                                                       data-plan-type="elite">
  2449.                                                                                       <img
  2450.                                                                                             src="/images/providers/openai.svg"
  2451.                                                                                             width="20" height="20"
  2452.                                                                                             alt="GPT-4o">
  2453.                                                                                          
  2454.                                                                                             <div>
  2455.                                                                                                GPT-4o
  2456.                                                                                             </div>
  2457.                                                                                    </div>
  2458.                                                                                    
  2459.                                                                                    <div class="dropdown-item"
  2460.                                                                                       data-model-id="openai/gpt-5"
  2461.                                                                                       data-premium="true"
  2462.                                                                                       data-model-name="GPT-5"
  2463.                                                                                       data-provider="OpenAI"
  2464.                                                                                       data-icon-path="/images/providers/openai.svg"
  2465.                                                                                       data-plan-type="elite">
  2466.                                                                                       <img
  2467.                                                                                             src="/images/providers/openai.svg"
  2468.                                                                                             width="20" height="20"
  2469.                                                                                             alt="GPT-5">
  2470.                                                                                          
  2471.                                                                                             <div>
  2472.                                                                                                GPT-5
  2473.                                                                                             </div>
  2474.                                                                                    </div>
  2475.                                                                                    
  2476.                                                                                    <div class="dropdown-item"
  2477.                                                                                       data-model-id="x-ai/grok-4"
  2478.                                                                                       data-premium="true"
  2479.                                                                                       data-model-name="Grok 4"
  2480.                                                                                       data-provider="xAI"
  2481.                                                                                       data-icon-path="/images/providers/xai.svg"
  2482.                                                                                       data-plan-type="elite">
  2483.                                                                                       <img
  2484.                                                                                             src="/images/providers/xai.svg"
  2485.                                                                                             width="20" height="20"
  2486.                                                                                             alt="Grok 4">
  2487.                                                                                          
  2488.                                                                                             <div>
  2489.                                                                                                Grok 4
  2490.                                                                                             </div>
  2491.                                                                                    </div>
  2492.                                                                                    
  2493.                                                                                    <div class="dropdown-item"
  2494.                                                                                       data-model-id="x-ai/grok-code-fast-1"
  2495.                                                                                       data-premium="true"
  2496.                                                                                       data-model-name="Grok Code Fast 1"
  2497.                                                                                       data-provider="xAI"
  2498.                                                                                       data-icon-path="/images/providers/xai.svg"
  2499.                                                                                       data-plan-type="elite">
  2500.                                                                                       <img
  2501.                                                                                             src="/images/providers/xai.svg"
  2502.                                                                                             width="20" height="20"
  2503.                                                                                             alt="Grok Code Fast 1">
  2504.                                                                                          
  2505.                                                                                             <div>
  2506.                                                                                                Grok Code Fast 1
  2507.                                                                                             </div>
  2508.                                                                                    </div>
  2509.                                                                                    
  2510.                                                                                    <div class="dropdown-item"
  2511.                                                                                       data-model-id="perplexity/sonar-reasoning"
  2512.                                                                                       data-premium="true"
  2513.                                                                                       data-model-name="Perplexity: Sonar Reasoning"
  2514.                                                                                       data-provider="Perplexity"
  2515.                                                                                       data-icon-path="/images/providers/perplexity.svg"
  2516.                                                                                       data-plan-type="elite">
  2517.                                                                                       <img
  2518.                                                                                             src="/images/providers/perplexity.svg"
  2519.                                                                                             width="20" height="20"
  2520.                                                                                             alt="Perplexity: Sonar Reasoning">
  2521.                                                                                          
  2522.                                                                                             <div>
  2523.                                                                                                Perplexity: Sonar Reasoning
  2524.                                                                                             </div>
  2525.                                                                                    </div>
  2526.                                                                                    
  2527.                                                                                    <div class="dropdown-item"
  2528.                                                                                       data-model-id="qwen/qwen3-max"
  2529.                                                                                       data-premium="true"
  2530.                                                                                       data-model-name="Qwen3 Max"
  2531.                                                                                       data-provider="Qwen"
  2532.                                                                                       data-icon-path="/images/providers/qwen.svg"
  2533.                                                                                       data-plan-type="elite">
  2534.                                                                                       <img
  2535.                                                                                             src="/images/providers/qwen.svg"
  2536.                                                                                             width="20" height="20"
  2537.                                                                                             alt="Qwen3 Max">
  2538.                                                                                          
  2539.                                                                                             <div>
  2540.                                                                                                Qwen3 Max
  2541.                                                                                             </div>
  2542.                                                                                    </div>
  2543.                                                                                    
  2544.                                                                                      
  2545.                                       </div>
  2546.                                    </div>
  2547.                                 </div>
  2548.  
  2549.                                 <div class="action-right">
  2550.                                    <button id="homeChatSubmit" class="dropdown-button"
  2551.                                       aria-label="Submit your question">
  2552.                                       <div class="icon">
  2553.                                          <svg width="20" height="20" viewBox="0 0 20 20" fill="none"
  2554.                                             xmlns="http://www.w3.org/2000/svg">
  2555.                                             <g clip-path="url(#clip0_924_75)">
  2556.                                                <path d="M10 4.16663V15.8333" stroke="white" stroke-width="1.5"
  2557.                                                   stroke-linecap="round" stroke-linejoin="round" />
  2558.                                                <path d="M15 9.16663L10 4.16663" stroke="white" stroke-width="1.5"
  2559.                                                   stroke-linecap="round" stroke-linejoin="round" />
  2560.                                                <path d="M5 9.16663L10 4.16663" stroke="white" stroke-width="1.5"
  2561.                                                   stroke-linecap="round" stroke-linejoin="round" />
  2562.                                             </g>
  2563.                                             <defs>
  2564.                                                <clipPath id="clip0_924_75">
  2565.                                                   <rect width="20" height="20" fill="white" />
  2566.                                                </clipPath>
  2567.                                             </defs>
  2568.                                          </svg>
  2569.                                       </div>
  2570.                                    </button>
  2571.                                 </div>
  2572.                              </div>
  2573.                           </div>
  2574.                        </div>
  2575.                        <div class="popular-tools">
  2576.                           <ul>
  2577.  
  2578.                              
  2579.                                
  2580.                                    <li class="">
  2581.                                       <a href="https://logicballs.com/tools/paraphrasing-tool">
  2582.                                          Paraphrasing Tool
  2583.                                       </a>
  2584.                                    </li>
  2585.                                    
  2586.                                    <li class="">
  2587.                                       <a href="https://logicballs.com/tools/email-writer-and-generator">
  2588.                                          Email Writer &amp; Generator
  2589.                                       </a>
  2590.                                    </li>
  2591.                                    
  2592.                                    <li class="">
  2593.                                       <a href="https://logicballs.com/tools/amazon-product-description-generator">
  2594.                                          Amazon Product Description Generator
  2595.                                       </a>
  2596.                                    </li>
  2597.                                    
  2598.                                    <li class="">
  2599.                                       <a href="https://logicballs.com/tools/headline-generator">
  2600.                                          Headline Generator
  2601.                                       </a>
  2602.                                    </li>
  2603.                                    
  2604.                                    <li class="hidden-mobile">
  2605.                                       <a href="https://logicballs.com/tools/ai-twitch-stream-title-generator">
  2606.                                          AI Twitch Stream Title Generator
  2607.                                       </a>
  2608.                                    </li>
  2609.                                    
  2610.                                    <li class="hidden-mobile">
  2611.                                       <a href="https://logicballs.com/tools/amazon-product-title-generator">
  2612.                                          Amazon Product Title Generator
  2613.                                       </a>
  2614.                                    </li>
  2615.                                    
  2616.                                    <li class="hidden-mobile">
  2617.                                       <a href="https://logicballs.com/tools/chat-reply-writer">
  2618.                                          Chat Reply Writer
  2619.                                       </a>
  2620.                                    </li>
  2621.                                    
  2622.                                      
  2623.                                          <li>
  2624.                                             <a
  2625.                                                href="https://logicballs.com/browse-ai-tools">
  2626.                                                All Categories
  2627.                                             </a>
  2628.                                          </li>
  2629.                           </ul>
  2630.                        </div>
  2631.                     </div>
  2632.                  </section>
  2633.               </main>
  2634.               <div id="model_stripe_modal" class="pricingModal modal modal-new pricing-modal" open="" style="display: none">
  2635.    <div id="model-modal-inside" class="modal-box limit-exceed">
  2636.        <form method="dialog">
  2637.            <button id="modelCloseBtn" class="btn btn-circle btn-sm btn-ghost absolute right-2 top-2 rounded-full">
  2638.                ✕
  2639.            </button>
  2640.        </form>
  2641.        <div style="display: none;" id="model-error-div" class="error">
  2642.            <p id="model-error-message">Error message</p>
  2643.        </div>
  2644.        <div class="modal-container">
  2645.            <div class="modal-head">
  2646.                <h2>10x your writing output @ 1/4 price of ChatGPT <span>($200/month)</span></h2>
  2647.            </div>
  2648.            <div class="modal-body">
  2649.                <div class="plan-yearly">
  2650.                    <div class="plan-header">
  2651.                        <div class="guarantee">
  2652.                            <p>Enjoy a
  2653.                               <span class="bg-highlight">7-Day Money-Back Guarantee</span>
  2654.                               Without Question.
  2655.                            </p>
  2656.                        </div>
  2657.                        <div class="pricing">
  2658.                            <div class="pricing-card">
  2659.                                <ul class="features pricing-list">
  2660.                                    <li>AI Agents for deep research like human</li>
  2661.                                    <li>Premium AI models (ChatGPT 4, Claude Sonnet etc.)</li>
  2662.                                    <li>2000+ Premium AI Tools and AI Agents</li>
  2663.                                </ul>
  2664.                            </div>
  2665.                        </div>
  2666.                    </div>
  2667.                    <div class="plan-section short-term">
  2668.                        <div class="price">
  2669.                            <div class="offer text-blue-700 font-semibold">
  2670.                                <s class="text-gray-500 font-normal model-original-price">$240</s>
  2671.                                <div class="gradient">75% Off</div>
  2672.                            </div>
  2673.                            <b>
  2674.                                <div class="gradient model-monthly-price">$4.99</div>
  2675.                                <span class="text-gray-500 font-normal gradient">/month</span>
  2676.                            </b>
  2677.                            <p class="yearly model-yearly-billing">Billed $59.99/year</p>
  2678.                        </div>
  2679.  
  2680.                        <div>
  2681.                            
  2682.                                <a href="/auth?return_to=https%3A%2F%2Flogicballs.com%2F?price_id=price_1PHluTD2JaitlRcw865YZ5uG"
  2683.                                   class="btn btn-gradient model-auth-link">
  2684.                                    Upgrade Now
  2685.                                </a>
  2686.                            
  2687.  
  2688.                            
  2689.                        </div>
  2690.                    </div>
  2691.                </div>
  2692.            </div>
  2693.        </div>
  2694.    </div>
  2695. </div>
  2696.  
  2697. <script>
  2698.    // Close button handler
  2699.    document.getElementById("modelCloseBtn").addEventListener("click", function (e) {
  2700.        closeModelPopup();
  2701.          e.preventDefault(); // Prevent any form submission
  2702.        e.stopPropagation();
  2703.        
  2704.    });
  2705.  
  2706.    // ✅ Updated: Close when clicking outside modal content
  2707.    document.addEventListener('click', function(e) {
  2708.        const modal = document.getElementById('model_stripe_modal');
  2709.        const insideModal = e.target.closest('.modal-box');
  2710.        if (modal.style.display === 'grid' && !insideModal) {
  2711.            closeModelPopup();
  2712.        }
  2713.    });
  2714.  
  2715.    // Close popup on Escape key
  2716.    document.addEventListener('keydown', function(e) {
  2717.        const modal = document.getElementById('model_stripe_modal');
  2718.        if (e.key === 'Escape' && modal.style.display === 'grid') {
  2719.            closeModelPopup();
  2720.        }
  2721.    });
  2722.  
  2723.    function closeModelPopup() {
  2724.        const errorDiv = document.getElementById('model-error-div');
  2725.        const modal = document.getElementById('model_stripe_modal');
  2726.        
  2727.        if (errorDiv) errorDiv.style.display = 'none';
  2728.        if (modal) modal.style.display = 'none';
  2729.    }
  2730.  
  2731.    function handleModelSubscription(button) {
  2732.        const yearlyPriceId = button.getAttribute('data-yearly-price-id');
  2733.        const monthlyPriceId = button.getAttribute('data-monthly-price-id');
  2734.        if (typeof YearlySubscription === 'function') {
  2735.            YearlySubscription(yearlyPriceId, monthlyPriceId);
  2736.        }
  2737.    }
  2738.  
  2739.    function updateModelPrices(planType) {
  2740.        const priceData = {
  2741.            pro: {
  2742.                yearlyPrice: '$59.9/year',
  2743.                monthlyPrice: '$5',
  2744.                yearlyPriceId: 'price_1PHluTD2JaitlRcw865YZ5uG',
  2745.                monthlyPriceId: 'price_1PH474D2JaitlRcw7k2LZ1oT',
  2746.                yearlyBillingText: 'Billed $59.9/year'
  2747.            },
  2748.            premium: {
  2749.                yearlyPrice: '$99/year',
  2750.                monthlyPrice: '$8.25',
  2751.                yearlyPriceId: 'price_1P65sRD2JaitlRcw295gmUjF',
  2752.                monthlyPriceId: '',
  2753.                yearlyBillingText: 'Billed $99/year'
  2754.            },
  2755.            elite: {
  2756.                yearlyPrice: '$139.9/year',
  2757.                monthlyPrice: '$11.67',
  2758.                yearlyPriceId: 'price_1RL0vTD2JaitlRcwXVr04220',
  2759.                monthlyPriceId: 'price_1RL0x3D2JaitlRcwrzIfdYnG',
  2760.                yearlyBillingText: 'Billed $139.9/year'
  2761.            }
  2762.        };
  2763.  
  2764.        const selectedPlan = priceData[planType] || priceData.pro;
  2765.  
  2766.        const monthlyPrice = document.querySelector('.model-monthly-price');
  2767.        const yearlyBilling = document.querySelector('.model-yearly-billing');
  2768.        const upgradeBtn = document.querySelector('.model-upgrade-btn');
  2769.        const authLink = document.querySelector('.model-auth-link');
  2770.  
  2771.        if (monthlyPrice) monthlyPrice.textContent = selectedPlan.monthlyPrice;
  2772.        if (yearlyBilling) yearlyBilling.textContent = selectedPlan.yearlyBillingText;
  2773.  
  2774.        if (upgradeBtn) {
  2775.            upgradeBtn.setAttribute('data-yearly-price-id', selectedPlan.yearlyPriceId);
  2776.            upgradeBtn.setAttribute('data-monthly-price-id', selectedPlan.monthlyPriceId);
  2777.        }
  2778.  
  2779.        if (authLink) {
  2780.            const baseUrl = '/auth?return_to=' + encodeURIComponent('https://logicballs.com/');
  2781.            authLink.href = `${baseUrl}?price_id=${selectedPlan.yearlyPriceId}`;
  2782.        }
  2783.    }
  2784.  
  2785.    function showModelStripePopup(planType) {
  2786.        const modal = document.getElementById('model_stripe_modal');
  2787.        if (modal) {
  2788.            updateModelPrices(planType);
  2789.            modal.style.display = 'grid';
  2790.        }
  2791.    }
  2792. </script>
  2793.  
  2794.                  <div id="toast" class="toast"></div>
  2795.                  <div id="my_modal_12" class="pricingModal modal modal-new refer-modal" open="" style="display: none">
  2796.    <div id="inside-modal12" class="modal-box limit-exceed">
  2797.        <form method="dialog">
  2798.            <button id="closeBtn12" class="btn btn-circle btn-sm btn-ghost absolute right-2 top-2 rounded-full">
  2799.                ✕
  2800.            </button>
  2801.        </form>
  2802.        <div class="modal-container">
  2803.            <div class="modal-head">
  2804.                <h2>Refer a friend to get free subscription</h2>
  2805.            </div>
  2806.            <div class="modal-body">
  2807.                <div class="refer-box">
  2808.                    <div class="top-row row">
  2809.                        <div class="box box1">
  2810.                            <div class="icon">&nbsp;</div>
  2811.                            <div>
  2812.                                <div class="plan">25 Sign up</div>
  2813.                                <div class="subscription">Earn 1 Year Pro</div>
  2814.                            </div>
  2815.                        </div>
  2816.                        <div class="box box2">
  2817.                            <div class="icon">&nbsp;</div>
  2818.                            <div>
  2819.                                <div class="plan">12 Sign up</div>
  2820.                                <div class="subscription">Earn 4 Month Pro</div>
  2821.                            </div>
  2822.                        </div>
  2823.                    </div>
  2824.                    <div class="bottom-row row">
  2825.                        <div class="box box3">
  2826.                            <div class="icon">&nbsp;</div>
  2827.                            <div>
  2828.                                <div class="plan">9 Sign up</div>
  2829.                                <div class="subscription">Earn 3 Month Pro</div>
  2830.                            </div>
  2831.                        </div>
  2832.                        <div class="box box4">
  2833.                            <div class="icon">&nbsp;</div>
  2834.                            <div>
  2835.                                <div class="plan">6 Sign up</div>
  2836.                                <div class="subscription">Earn 2 Month Pro</div>
  2837.                            </div>
  2838.                        </div>
  2839.                        <div class="box box4">
  2840.                            <div class="icon">&nbsp;</div>
  2841.                            <div>
  2842.                                <div class="plan">3 Sign up</div>
  2843.                                <div class="subscription">Earn 1 Month Pro</div>
  2844.                            </div>
  2845.                        </div>
  2846.                    </div>
  2847.                </div>
  2848.                <div class="referel-info">
  2849.                    <div class="subheading">
  2850.                        Share the following link with your friends. You can get free subscription if they sign up or subscribe through this link.
  2851.                    </div>
  2852.                    <div class="form" id="tool-form">
  2853.                        <div class=" form-group">
  2854.                            <input id="refer-link-share" type="text" value="https://logicballs.com/?invite_code=l3Nlqm"  aria-label="Referral link">
  2855.                        </div>
  2856.                        <button class="btn btn-gradient" id="refer-button-copy">Copy link</button>
  2857.                    </div>
  2858.                </div>
  2859.            </div>
  2860.        </div>
  2861.    </div>
  2862. </div>
  2863. <script>
  2864.    document.getElementById("closeBtn12").addEventListener("click", function () {
  2865.        document.getElementById("my_modal_12").style.display = "none";
  2866.    });
  2867. </script>
  2868.                     <div id="my_modal_11" class="pricingModal modal modal-new pricing-modal" open="" style="display: none">
  2869.  <div id="inside-modal1" class="modal-box limit-exceed">
  2870.    <form method="dialog">
  2871.      <button id="closeBtn1" class="btn btn-circle btn-sm btn-ghost absolute right-2 top-2 rounded-full">
  2872.        ✕
  2873.      </button>
  2874.    </form>
  2875.    <div style="display: none;" id="error-div" class="error">
  2876.      <p id="error-message-print">Error message</p>
  2877.    </div>
  2878.    <div class="modal-container">
  2879.      <div class="modal-head">
  2880.        <h2>10x your writing output @ 1/4 price of ChatGPT <span>($200/month)</span></h2>
  2881.      </div>
  2882.      <div class="modal-body">
  2883.        <div class="plan-yearly">
  2884.          <div class="plan-header">
  2885.            <div class="guarantee">
  2886.              <p>Enjoy a <span class="bg-highlight">7-Day Money-Back Guarantee</span> Without Question.</p>
  2887.            </div>
  2888.            <div class="pricing">
  2889.              <div class="pricing-card">
  2890.                <ul class="features pricing-list">
  2891.                  <li>AI Agents for deep research like human</li>
  2892.                  <li>Premium AI models (ChatGPT 4, Claude Sonnet etc.)</li>
  2893.                  <li>2000+ Premium AI Tools and AI Agents</li>
  2894.                </ul>
  2895.              </div>
  2896.            </div>
  2897.          </div>
  2898.          <div class="plan-section short-term">
  2899.            <div class="price">
  2900.              <div class="offer text-blue-700 font-semibold">
  2901.                <s class="text-gray-500 font-normal">$240</s>
  2902.                <div class="gradient">75% Off</div>
  2903.              </div>
  2904.              <b>
  2905.                <div class="gradient">$4.99</div>
  2906.                <span class="text-gray-500 font-normal gradient">/month</span>
  2907.              </b>
  2908.              <p class="yearly">Billed $59.99/year</p>
  2909.            </div>
  2910.  
  2911.            <div>
  2912.              
  2913.                <a href="/auth?return_to=https%3A%2F%2Flogicballs.com%2F?price_id=price_1PHluTD2JaitlRcw865YZ5uG" class="btn btn-gradient">
  2914.                  Upgrade Now
  2915.                </a>
  2916.              
  2917.  
  2918.              
  2919.            </div>
  2920.          </div>
  2921.        </div>
  2922.      </div>
  2923.    </div>
  2924.  </div>
  2925. </div>
  2926. <script>
  2927.  document.getElementById("closeBtn1").addEventListener("click", function () {
  2928.    const errorDiv = document.getElementById("error-div");
  2929.    if (errorDiv) {
  2930.      errorDiv.style.display = "none";
  2931.    }
  2932.    if (document.getElementById("my_modal_11")) {
  2933.      document.getElementById("my_modal_11").style.display = "none";
  2934.    }
  2935.    const userAuth = 'false';
  2936.    if (userAuth == 'true') {
  2937.      window.handleReferral();
  2938.    }
  2939.  });
  2940. </script>
  2941.                        
  2942.  
  2943. <footer class="footer-v1 bg-gray" role="contentinfo">
  2944.  <section class="footer-section bottom">
  2945.    <div>
  2946.      <div class="section-05">
  2947.        <div class="copyright">
  2948.          <p>Made with ❤️ for everyone | &copy; LogicBalls 2025 - All Rights Reserved</p>
  2949.        </div>
  2950.        <ul class="link">
  2951.          <li>
  2952.            <a href="https://logicballs.com/about">About</a>
  2953.          </li>
  2954.          <li>
  2955.            <a href="https://logicballs.com/blog">Our Blog</a>
  2956.          </li>
  2957.          <li>
  2958.            <a href="https://logicballs.com/privacy">Privacy</a>
  2959.          </li>
  2960.          <li>
  2961.            <a href="https://logicballs.com/terms">Terms</a>
  2962.          </li>
  2963.        </ul>
  2964.  
  2965.      </div>
  2966.    </div>
  2967.  </section>
  2968. </footer>
  2969.  
  2970. <div class="custom-search hidden" id="my-hidden-element">
  2971.    <div class="search-wrap">
  2972.        <div id="searchbox"></div>
  2973.        <button id="hide-button" class="close">
  2974.            <span>✕</span>
  2975.            <span>Close</span>
  2976.        </button>
  2977.        <button id="filterElementsToggle" class="btn btn-primary btn-md">
  2978.            <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
  2979.                stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
  2980.                class="icon-tabler-adjustments">
  2981.                <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  2982.                <path d="M14 6m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" />
  2983.                <path d="M4 6l8 0" />
  2984.                <path d="M16 6l4 0" />
  2985.                <path d="M8 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" />
  2986.                <path d="M4 12l2 0" />
  2987.                <path d="M10 12l10 0" />
  2988.                <path d="M17 18m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" />
  2989.                <path d="M4 18l11 0" />
  2990.                <path d="M19 18l1 0" />
  2991.            </svg>
  2992.            <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
  2993.                stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
  2994.                class="icon-tabler-x">
  2995.                <path stroke="none" d="M0 0h24v24H0z" fill="none" />
  2996.                <path d="M18 6l-12 12" />
  2997.                <path d="M6 6l12 12" />
  2998.            </svg>
  2999.        </button>
  3000.    </div>
  3001.    <div>
  3002.        <div class="custom-search-wrap">
  3003.            <div class="filter hidden" id="filterElements">
  3004.                <div id="tags-refinement-list"></div>
  3005.                <div id="category-refinement-list"></div>
  3006.  
  3007.            </div>
  3008.            <div class="result">
  3009.                <div id="hits"></div>
  3010.                <div id="pagination"></div>
  3011.            </div>
  3012.        </div>
  3013.    </div>
  3014. </div>
  3015.  
  3016.  
  3017.  
  3018. <script>
  3019. // Search lazy loader utility - only declare if not already defined
  3020. if (typeof window.SearchLazyLoader === 'undefined') {
  3021.    window.SearchLazyLoader = {
  3022.        loaded: false,
  3023.        loading: false,
  3024.        loadPromise: null,
  3025.        
  3026.        async loadScripts() {
  3027.            if (this.loaded) return Promise.resolve();
  3028.            if (this.loading) return this.loadPromise;
  3029.            
  3030.            this.loading = true;
  3031.            this.loadPromise = new Promise((resolve, reject) => {
  3032.                let scriptsToLoad = 2;
  3033.                let scriptsLoaded = 0;
  3034.                
  3035.                const onScriptLoad = () => {
  3036.                    scriptsLoaded++;
  3037.                    if (scriptsLoaded === scriptsToLoad) {
  3038.                        this.loaded = true;
  3039.                        this.loading = false;
  3040.                        resolve();
  3041.                    }
  3042.                };
  3043.                
  3044.                const onScriptError = (error) => {
  3045.                    this.loading = false;
  3046.                    reject(error);
  3047.                };
  3048.                
  3049.                // Load Typesense InstantSearch Adapter
  3050.                const script1 = document.createElement('script');
  3051.                script1.src = 'https://cdn.jsdelivr.net/npm/typesense-instantsearch-adapter@2/dist/typesense-instantsearch-adapter.min.js';
  3052.                script1.crossOrigin = 'anonymous';
  3053.                script1.onload = onScriptLoad;
  3054.                script1.onerror = onScriptError;
  3055.                document.head.appendChild(script1);
  3056.                
  3057.                // Load InstantSearch.js
  3058.                const script2 = document.createElement('script');
  3059.                script2.src = 'https://cdn.jsdelivr.net/npm/instantsearch.js@4.71.1/dist/instantsearch.production.min.js';
  3060.                script2.crossOrigin = 'anonymous';
  3061.                script2.onload = onScriptLoad;
  3062.                script2.onerror = onScriptError;
  3063.                document.head.appendChild(script2);
  3064.            });
  3065.            
  3066.            return this.loadPromise;
  3067.        }
  3068.    };
  3069. }
  3070.  
  3071. // Wait for scripts to load before initializing - only declare if not already defined
  3072. if (typeof window.initializeSearch === 'undefined') {
  3073.    window.initializeSearch = async function() {
  3074.    try {
  3075.        // Load search scripts first
  3076.        await window.SearchLazyLoader.loadScripts();
  3077.        
  3078.        // Check if libraries are available
  3079.        if (typeof instantsearch === 'undefined' || typeof TypesenseInstantSearchAdapter === 'undefined') {
  3080.            console.error('Search libraries failed to load');
  3081.            return;
  3082.        }
  3083.    } catch (error) {
  3084.        console.error('Failed to load search scripts:', error);
  3085.        return;
  3086.    }
  3087.    var { searchBox } = instantsearch.widgets;
  3088.    const { hits, sortBy, refinementList } = instantsearch.widgets;
  3089.    const { dynamicWidgets, menu, hierarchicalMenu, pagination, trendingItems } = instantsearch.widgets;
  3090.    const common = {"footer":{"links":{"about":"About","terms":"Terms","privacy":"Privacy"},"badges":{"easyToUse":"Easy to Use","lightningFast":"Lightning Fast","safeAndSecure":"Safe & Secure","happyCustomers":"200K+ Happy Customers"},"labels":{"new":"New"},"sections":{"moreAI":{"links":{"imageAI":"Image AI Agents - Smart image tools","securePDF":"Secure PDF - Protect your documents","socialMediaAI":"Social Media AI Agent - Craft engaging posts","passwordLessAI":"Passwordless API for AI - Secure & Fast Auth","aiAgentsForRetail":"AI Agents for Retail - Boost your sales","generativeVoiceAI":"Generative Voice AI - Create natural speech","productLaunchDirectory":"Product Launch Directory - Launch smarter","cybersecurityMarketingAI":"AI-Powered Growth Engine Builds AI + pSEO Portals"},"title":" Featured Partners"},"community":{"links":{"blog":"Our Blog","forum":"Community Forum","media":"Media","tones":"Tones","aiNews":"AI News","aiModels":"Explore AI Models","questions":"Questions","aiGlossary":"AI Glossary","writeforUS":"Write for Us","successStories":"Success Stories","exploreAppPacks":"Explore Our App Packs","earnWithLogicBalls":"Earn With LogicBalls","backlinkPartnership":"Advertise with Us"},"title":"Join Our Community"},"comparisons":{"links":{"viewAll":"View all comparisons","vsCopyAI":"LogicBalls vs Copy AI - Better for writing?","vsChatGPT":"LogicBalls vs ChatGPT - What's different?","vsGoogleBard":"LogicBalls vs Bard - Which is easier?"},"title":"See How We Compare"},"popularTools":{"links":{"chatbot":"Chatbot","aiAgents":"AI Agents","characters":"Characters","translator":"Translator","aiImageEdit":"AI Image Edit","tripPlanner":"Trip Planner","wordCounter":"Word Counter","aiFactChecker":"AI Fact Checker","chat_with_pdf":"Chat with PDF","imageGenerator":"Image Generator","LLMTxtGenerator":"LLMs.Txt Generator","aiToolDirectory":"AI Tool Directory","videoSummarizer":"YouTube Video Summarizer","aiVoiceGenerator":"AI Voice Generator","ai_prompt_builder":"AI Prompt Builder","youtubeTranscript":"YouTube Transcript Generator","chatWithYoutubeVideo":"Chat with YouTube Video"},"title":"Popular Tools"}},"copyright":{"logicBalls":"LogicBalls","madeWithLove":"Made with ❤️ for everyone","allRightsReserved":"All Rights Reserved"},"ctaSection":{"title":"Make AI Work For You","buttonText":"Try Now -->","description":"Join over 200,000+ customers who use LogicBalls to write, create, and get more done with AI - no tech skills needed!"},"trustedPartners":{"title":"Trusted Partners & Compliance"}},"header":{"earn":"Earn","logo":{"alt":"LogicBalls","title":"LogicBalls"},"search":{"askAI":"Ask AI ","placeholde2":"Try 'tool for writing a professional email'... ","placeholder":"Search","thinkingText":"AI is Thinking","errormessage1":"Please enter at least 2 characters to search...","errormessage2":"I couldn't find any tools matching your search. Try describing your task differently, for example 'create marketing content' instead of just 'marketing'.","errormessage3":"No tools found matching your search","errormessage4":"Sorry, I encountered an error while searching. Please try again or rephrase your search.","errormessage5":"An error occurred while searching. Please try again.","errormessage6":"Sorry, something went wrong. Please try again in a moment."},"navigation":{"userMenu":{"auth":{"login":"Login / Signup","logout":"Logout","dashboard":"Dashboard"},"links":{"tags":"Tags","pricing":"Pricing","support":"Contact us","categories":"Categories","comparison":"Comparison","referFriend":"Refer a friend"}}},"write_for_us":"Write for us"},"submit":"Submit","clickUP":{"try_next":"Try Next","get_started_free":"Get Started Free","streamline_your_projects":"Streamline Your Projects"},"competitor":{"title":"Why LogicBalls is the Best AI Writer & Copywriting Assistant","features":[{"title":"Best Output Quality","description":"We harness the power of GPT-3.5, GPT-4, and LLMs like BARD, LlaMA, and Cohere, combined with our proprietary layer of best practices and templates, to eliminate grammatical errors and infuse vibrancy into the language."},{"title":"Tailored to Your Writing Needs","description":"No matter the style, tone, or context you require, LogicBalls adapts seamlessly to meet your unique writing demands. LogicBalls versatility ensures your content stands out in any domain."},{"title":"Embrace the Future of Writing","description":"Stay ahead of the curve with LogicBalls - your gateway to the future of writing. As AI technology continues to evolve, so does our platform, ensuring you always have access to the latest innovations in AI-driven content creation."},{"title":"Enhance Your Brand Voice","description":"At LogicBalls, we understand the essence of brand identity. Our AI writer not only maintains consistency with your brand's unique voice but also enriches it with fresh perspectives and creative flair. Let LogicBalls be your trusted partner in crafting compelling narratives that resonate with your target audience."},{"title":"Super Affordable","description":"LogicBalls has a Free Forever plan, which will stay free. And premium starts with $19/m for unlimited usage, LogicBalls offers one of the most cost-effective solutions in the market that gives you complete value for money."}]},"referPopup":{"title":"Refer a friend to get free subscription","rewards":{"yearPro":{"reward":"Earn 1 Year Pro","signups":"25 Sign up"},"oneMonthPro":{"reward":"Earn 1 Month Pro","signups":"3 Sign up"},"twoMonthPro":{"reward":"Earn 2 Month Pro","signups":"6 Sign up"},"fourMonthPro":{"reward":"Earn 4 Month Pro","signups":"12 Sign up"},"threeMonthPro":{"reward":"Earn 3 Month Pro","signups":"9 Sign up"}},"referralInfo":{"copyButton":"Copy link","description":"Share the following link with your friends. You can get free subscription if they sign up or subscribe through this link."}},"Translation":"Translation","competitors":{"competitorsCard":{"title1":"Best","title2":"Alternatives & Competitors 2025","metaDescription1":"Looking for an alternative to ","metaDescription2":"? Explore our extensive list of ","metaDescription3":" alternatives to choose the best one for your needs."},"competitorsPage":{"title":"LogicBalls Comparison: Compare Top AI Writing Tools","linkText":"   Here is an in-depth post we published recently about the best","alternative":"alternatives","metaDescription":"Comparisons of the top AI writing tools to help you decide which AI writing software is best for your content needs."}},"stripePopup":{"feature_1":"AI Agents for deep research like human","feature_2":"Premium AI models (ChatGPT 4, Claude Sonnet etc.)","feature_3":"2000+ Premium AI Tools and AI Agents","price_period":"/month","refer_button":"Refer a Friend","discount_text":"75% Off","modal_heading":"10x your writing output @ 1/4 price of ChatGPT","monthly_price":"$4.99","guarantee_span":"7-Day Money-Back Guarantee","guarantee_text":"Enjoy a","upgrade_button":"Upgrade Now","dropdown_default":"1 Day","dropdown_option_1":"1 Day","dropdown_option_2":"2 Days","dropdown_option_3":"7 Days","dropdown_option_4":"1 Month","guarantee_text_end":"Without Question.","modal_heading_span":"($200/month)","error_message_print":"Error message","price_strikethrough":"$240","yearly_billing_text":"Billed $59.99/year"},"Alternatives":{"AlternativesCard":{"title1":"Best","title2":"Alternatives & Competitors 2025","metaDescription1":"Looking for an alternative to ","metaDescription2":"? Explore our extensive list of ","metaDescription3":" alternatives to choose the best one for your needs."},"AlternativesPage":{"title":"The Best AI Writer Alternatives","metaDescription":"Looking for a free AI writer? Look no further than LogicBalls! We offer Unlimited words with 200+ AI templates at 5x lesser cost than our competitors."}},"testimonials":{"title":"See What Our Happy Customers Are Saying","metaTitle":"Testimonial - LogicBalls","description":"Trust their words, not just ours","toolOgTitle":"FREE AI Apps & Tools for Every Need | No Login Required","metaDescription":"Read genuine testimonials from our satisfied customers and learn how our products/services have transformed their lives and businesses. Real stories of success and satisfaction."},"chatinterface":{"heading":"Write Something Cool","paragraph":"Explore the First-Ever Visual ChatGPT Platform","placeholder":"Ask LogicBalls to 'Writing a professional email'","allCategories":{"name":"All Categories","slug":"browse-ai-tools"},"popular_tools":[{"name":"Paraphrasing Tool","slug":"tools/paraphrasing-tool"},{"name":"Email Writer & Generator","slug":"tools/email-writer-and-generator"},{"name":"Amazon Product Description Generator","slug":"tools/amazon-product-description-generator"},{"name":"Headline Generator","slug":"tools/headline-generator"},{"name":"AI Twitch Stream Title Generator","slug":"tools/ai-twitch-stream-title-generator"},{"name":"Amazon Product Title Generator","slug":"tools/amazon-product-title-generator"},{"name":"Chat Reply Writer","slug":"tools/chat-reply-writer"}]},"breadcrumbText":{"auth":"Auth","chat":"Chat","home":"Home","tags":"Tags","about":"About","terms":"Terms","tones":"Tones","tools":"Tools","pricing":"Pricing","privacy":"Privacy","academia":"Academia","ai-agents":"AI Agents","ai-images":"AI Images","translate":"Translate","categories":"Categories","comparison":"Comparison","affiliation":"Affiliation","discover-ai":"Discover AI","testimonial":"Testimonial","alternatives":"Alternatives","trip-planner":"Trip Planner","word-counter":"Word Counter","write-for-us":"Write for Us","chat-with-pdf":"Chat with PDF","academia/advisors":"Academic Advisors","chat-youtube-video":"Chat with YouTube Video","ai-answer-generator":"AI Answer Generator","earn-with-logicballs":"Earn with LogicBalls","agent/ai-fact-checker":"AI Fact Checker","agent/keywords-generator":"Keywords Generator","youtube-video-summarizer":"YouTube Video Summarizer","youtube-transcript-generator":"YouTube Transcript Generator"},"newReferPopup ":{"subtitle":"Share the power of our tools with friends and get rewarded!","bonusText":"🎉 Already a subscriber? Get a BONUS year added to your current plan when your friends join!","popupTitle":"Unlock Your FREE Year of Premium Access! 🎁","planCategories":[{"name":"Pro Plan","badge":"Most Popular","price":"$59","buttonText":"Copy Referral Link","description":"Refer 2 friends to our Pro plan and unlock a FULL YEAR of premium access absolutely FREE!"},{"name":"Premium Plan","badge":"Premium Choice","price":"$99","buttonText":"Copy Referral Link","description":"Refer 2 friends to our Premium plan and enjoy a FULL YEAR of our top-tier features FREE!"}]},"tryPremiumPopup":{"title":"Compare our Premium Output","Answer":"Answer","buttons":{"upgrade":"Upgrade Now"},"Question":"Question","comparison":{"free":{"title":"Free","example":{"answer":{"intro":"To improve your website's SEO:","points":["Use relevant keywords in your content.","Optimize meta titles and descriptions.","Build quality backlinks.","Ensure your website is mobile-friendly and has a fast loading speed."]},"question":"How can I improve website SEO?"}},"premium":{"title":"✨ Premium","example":{"answer":{"intro":"Improving your website's SEO involves a strategic approach tailored to your audience and goals. Here's a detailed guide:","points":[{"title":"Keyword Research","content":"Use tools like Ahrefs or SEMrush to find high-traffic, low-competition keywords. For instance, target long-tail keywords like \"best eco-friendly coffee brands\" for niche traffic."},{"title":"Content Optimization","content":"Write engaging content around these keywords. Include keywords in headers, body text, and alt text for images while maintaining natural readability."},{"title":"Technical SEO","content":"Ensure mobile-friendliness, optimize page speed, and implement schema markup effectively."},{"title":"Link Building","content":"Focus on quality over quantity. Reach out to authority websites for guest posting or create shareable content like infographics."},{"title":"Regular Audits","content":"Use tools like Screaming Frog to identify broken links, duplicate content, and crawl issues."}]},"question":"How can I improve website SEO?"}}}},"randomTestimonials":{"title":"See What Our Happy Customers Are Saying","viewAlltext":"View all testimonial"}};
  3091.    const language = "en";
  3092.  
  3093.  
  3094.    const tomorrow = new Date();
  3095. tomorrow.setDate(tomorrow.getDate() + 1);
  3096.  
  3097. const unixTimestamp = tomorrow.getTime(); // Get time in milliseconds
  3098.  
  3099. // Function to convert absolute URL to relative path and then to current host
  3100. // Function to convert absolute URL to relative path and then to current host
  3101. function convertUrlToCurrentHost(originalUrl) {
  3102.    try {
  3103.        const url = new URL(originalUrl);
  3104.        const pathname = url.pathname;
  3105.        const currentProtocol = window.location.protocol;
  3106.        const currentHost = window.location.host;
  3107.        return currentProtocol + '//' + currentHost + pathname;
  3108.    } catch (e) {
  3109.        // If URL parsing fails, return original URL
  3110.        return originalUrl;
  3111.    }
  3112. }
  3113.  
  3114.  
  3115.    const typesenseInstantsearchAdapter = new TypesenseInstantSearchAdapter({
  3116.    server: {
  3117.        nodes: [{
  3118.            host: 'typesense.logicballs.com',
  3119.            protocol: 'https'
  3120.        }],
  3121.        apiKey: '=&9Yl?_vO{iOW.Tx',
  3122.        connectionTimeoutSeconds: 5,
  3123.        cacheSearchResultsForSeconds: 2 * 60
  3124.    },
  3125.    additionalSearchParameters: {
  3126.        query_by: "name,category,tags",  // Search primarily in name field
  3127.        sort_by: "order:asc,_text_match:desc",  // Sort by text match score
  3128.        prefix: true,
  3129.        filter_by: `publishDate:<${unixTimestamp}`,
  3130.        per_page: 9,
  3131.        typo_tolerance_enabled: true,
  3132.        num_typos: 1,  // Reduced typo tolerance for more accurate matching
  3133.        highlight_full_fields: "name",
  3134.        token_ranking_type: "position", // Prioritize matches based on position in text
  3135.        prioritize_token_position: true, // This should help prioritize matches at start of name
  3136.        exhaustive_search: true
  3137.    }
  3138. });
  3139.  
  3140.  
  3141.    const searchClient = typesenseInstantsearchAdapter.searchClient;
  3142.     let dataIndex =  'logicballs-frontend-' + language
  3143.     if(window.location.hostname == 'logicballs.com') {
  3144.         dataIndex = 'logicballs-frontend-'  + language
  3145.     }
  3146.  
  3147.    const search = instantsearch({
  3148.        searchClient,
  3149.        indexName: dataIndex,
  3150.    });
  3151.  
  3152.    // Make search globally accessible
  3153.    window.search = search;
  3154.  
  3155.    search.addWidgets([
  3156.        searchBox({
  3157.            container: "#searchbox",
  3158.            placeholder:  common?.header?.search?.placeholder ,
  3159.            autofocus: true,
  3160.            showLoadingIndicator: true,
  3161.            cssClasses: {
  3162.    input: "ais-SearchBox-input tool-search" // ← won’t help with `id`
  3163.  },
  3164.  
  3165.        }),
  3166. hits({
  3167.    container: "#hits",
  3168.    transformItems(items) {
  3169.        return items.map(item => ({
  3170.            ...item,
  3171.            dynamicUrl: convertUrlToCurrentHost(item.url)
  3172.        }));
  3173.    },
  3174.    templates: {
  3175.        item: `
  3176.      <div class="hit-name ">
  3177.    <div class="category">
  3178.        <a href="{{dynamicUrl}}" class="new-tag">{{#helpers.highlight}}{ "attribute": "category" }{{/helpers.highlight}} </a>
  3179.    </div>
  3180.    <div class="tooltitle">
  3181.       <a href="{{dynamicUrl}}">{{#helpers.highlight}}{ "attribute": "name" }{{/helpers.highlight}}</a>
  3182.    </div>
  3183.    <div class="tags">
  3184.        <ul><li>{{tags.0}}</li><li>{{tags.1}}</li><li>{{tags.2}}</li><li>{{tags.3}}</li><li>{{tags.4}}</li><li>{{tags.5}}</li></ul>
  3185.    </div>
  3186. </div>
  3187.  `,
  3188.    },
  3189. }),
  3190.        pagination({
  3191.            container: '#pagination'
  3192.        }),
  3193.        refinementList({
  3194.            container: "#category-refinement-list",
  3195.            attribute: "category",
  3196.            searchable: true,
  3197.            searchablePlaceholder: "Search Categories",
  3198.            showMore: true,
  3199.            showMoreLimit: 40,
  3200.            cssClasses: {
  3201.                searchableInput: "form-control form-control-sm mb-2 border-light-2",
  3202.                searchableSubmit: "d-none",
  3203.                searchableReset: "d-none",
  3204.                showMore: "btn btn-outline btn-sm",
  3205.                list: "list-unstyled",
  3206.                count: "badge badge-light bg-light-2 ml-2",
  3207.                label: "d-flex align-items-center text-capitalize",
  3208.                checkbox: "mr-2",
  3209.            },
  3210.        }),
  3211.        refinementList({
  3212.            container: "#tags-refinement-list",
  3213.            attribute: "tags",
  3214.            searchable: true,
  3215.            searchablePlaceholder: "Search Tags",
  3216.            showMore: true,
  3217.            showMoreLimit: 40,
  3218.            cssClasses: {
  3219.                searchableInput: "form-control form-control-sm mb-2 border-light-2",
  3220.                searchableSubmit: "d-none",
  3221.                searchableReset: "d-none",
  3222.                showMore: "btn btn-outline btn-sm",
  3223.                list: "list-unstyled",
  3224.                count: "badge badge-light bg-light-2 ml-2",
  3225.                label: "d-flex align-items-center text-capitalize",
  3226.                checkbox: "mr-2",
  3227.            },
  3228.        }),
  3229.  
  3230.    ]);
  3231. search.on('render', function() {
  3232.    fixSearchBoxAccessibility();
  3233.    fixRefinementListAccessibility();
  3234. });
  3235.  
  3236. function fixSearchBoxAccessibility() {
  3237.    // Fix main search box
  3238.    const mainSearchInput = document.querySelector('#searchbox .ais-SearchBox-input');
  3239.    if (mainSearchInput && !mainSearchInput.id) {
  3240.        mainSearchInput.id = 'searchbox-input';
  3241.    }
  3242.    
  3243.    // Fix category refinement search
  3244.    const categorySearchInput = document.querySelector('#category-refinement-list .ais-SearchBox-input');
  3245.    if (categorySearchInput && !categorySearchInput.id) {
  3246.        categorySearchInput.id = 'category-search-input';
  3247.        
  3248.        // Create or update label
  3249.        let categoryLabel = document.querySelector('#category-search-label');
  3250.        if (!categoryLabel) {
  3251.            categoryLabel = document.createElement('label');
  3252.            categoryLabel.id = 'category-search-label';
  3253.            categoryLabel.className = 'sr-only';
  3254.            categoryLabel.textContent = 'Search Categories';
  3255.            categoryLabel.setAttribute('for', 'category-search-input');
  3256.            categorySearchInput.parentNode.insertBefore(categoryLabel, categorySearchInput);
  3257.        }
  3258.    }
  3259.    
  3260.    // Fix tags refinement search
  3261.    const tagsSearchInput = document.querySelector('#tags-refinement-list .ais-SearchBox-input');
  3262.    if (tagsSearchInput && !tagsSearchInput.id) {
  3263.        tagsSearchInput.id = 'tags-search-input';
  3264.        
  3265.        // Create or update label
  3266.        let tagsLabel = document.querySelector('#tags-search-label');
  3267.        if (!tagsLabel) {
  3268.            tagsLabel = document.createElement('label');
  3269.            tagsLabel.id = 'tags-search-label';
  3270.            tagsLabel.className = 'sr-only';
  3271.            tagsLabel.textContent = 'Search Tags';
  3272.            tagsLabel.setAttribute('for', 'tags-search-input');
  3273.            tagsSearchInput.parentNode.insertBefore(tagsLabel, tagsSearchInput);
  3274.        }
  3275.    }
  3276. }
  3277.  
  3278. function fixRefinementListAccessibility() {
  3279.    // Fix category refinement checkboxes
  3280.    fixCheckboxes('#category-refinement-list', 'category');
  3281.    
  3282.    // Fix tags refinement checkboxes
  3283.    fixCheckboxes('#tags-refinement-list', 'tags');
  3284. }
  3285.  
  3286. function fixCheckboxes(containerSelector, prefix) {
  3287.    const container = document.querySelector(containerSelector);
  3288.    if (!container) return;
  3289.    
  3290.    const checkboxes = container.querySelectorAll('.ais-RefinementList-checkbox');
  3291.    const labels = container.querySelectorAll('.ais-RefinementList-label');
  3292.    
  3293.    checkboxes.forEach((checkbox, index) => {
  3294.        if (!checkbox.id) {
  3295.            const uniqueId = `${prefix}-checkbox-${index}`;
  3296.            checkbox.id = uniqueId;
  3297.            
  3298.            // Find corresponding label and associate it
  3299.            const label = labels[index];
  3300.            if (label) {
  3301.                label.setAttribute('for', uniqueId);
  3302.            }
  3303.        }
  3304.    });
  3305. }
  3306.  
  3307.    search.start();
  3308.    
  3309.    const inbox = document.getElementById('show-button');
  3310.  
  3311.    // Add click event listener
  3312.    if (inbox) {    
  3313.    inbox.addEventListener('click', function () {
  3314.        // Call your JavaScript function here
  3315.        window.hightlightSearchBoxCursor();
  3316.    });
  3317.    }
  3318.    const inboxShowButton = document.getElementById('show-button-hero');
  3319.    // Add click event listener
  3320.    if (inboxShowButton) {
  3321.  
  3322.        inboxShowButton.addEventListener('click', function () {
  3323.            // Call your JavaScript function here
  3324.            window.hightlightSearchBoxCursor();
  3325.        });
  3326.    }
  3327.  
  3328.    const mytogglebutton = document.querySelector('#filterElementsToggle');
  3329.  
  3330.    // variable for the target element that I will show and hide
  3331.    const mytargetelement = document.querySelector('#filterElements');
  3332.    const mybuttonlement = document.querySelector('#filterElementsToggle');
  3333.  
  3334.    // event listener (onclick) with a function to toggle the class on the target element to show and hide it
  3335.    mytogglebutton.onclick = function () {
  3336.        // function actions/statements go here
  3337.        mytargetelement.classList.toggle('hidden');
  3338.        mybuttonlement.classList.toggle('active');
  3339.  
  3340.        // If the target element is not hidden, scroll it into view
  3341.        if (!mytargetelement.classList.contains('hidden')) {
  3342.            mytargetelement.scrollIntoView({ behavior: 'smooth' });
  3343.        }
  3344.    };
  3345.    }; // Close initializeSearch function
  3346. }
  3347.  
  3348. // Create global function to initialize search when needed - only declare if not already defined
  3349. if (typeof window.lazyInitializeSearch === 'undefined') {
  3350.    window.lazyInitializeSearch = async function() {
  3351.        if (!window.SearchLazyLoader.loaded && !window.SearchLazyLoader.loading) {
  3352.            try {
  3353.                await window.initializeSearch();
  3354.            } catch (error) {
  3355.                console.error('Search initialization failed:', error);
  3356.            }
  3357.        } else if (window.SearchLazyLoader.loading) {
  3358.            try {
  3359.                await window.SearchLazyLoader.loadPromise;
  3360.            } catch (error) {
  3361.                console.error('Search loading failed:', error);
  3362.            }
  3363.        }
  3364.    };
  3365. }
  3366.  
  3367. // Export hightlightSearchBoxCursor for global access - only declare if not already defined
  3368. if (typeof window.hightlightSearchBoxCursor === 'undefined') {
  3369.    window.hightlightSearchBoxCursor = async function() {
  3370.        // First, show the search overlay if it's hidden
  3371.        const targetElement = document.querySelector('#my-hidden-element');
  3372.        const showButton = document.querySelector('#show-button-typesence');
  3373.        const hideButton = document.querySelector('#hide-button');
  3374.        const bodyElement = document.body;
  3375.        
  3376.        if (targetElement) {
  3377.            if (targetElement.classList.contains('hidden')) {
  3378.                // Show the search overlay first
  3379.                targetElement.classList.remove('hidden');
  3380.                if (showButton) showButton.classList.add('hidden');
  3381.                if (hideButton) hideButton.classList.remove('hidden');
  3382.                bodyElement.classList.add('searchOpen');
  3383.            }
  3384.        } else {
  3385.            console.error('Search overlay element (#my-hidden-element) not found!');
  3386.            return;
  3387.        }
  3388.        
  3389.        // If search hasn't been initialized yet, initialize it first
  3390.        if (window.SearchLazyLoader && !window.SearchLazyLoader.loaded) {
  3391.            await window.lazyInitializeSearch();
  3392.            // Try again after scripts are loaded
  3393.            setTimeout(() => {
  3394.                const textSearchElements = document.getElementsByClassName('ais-SearchBox-input');
  3395.                if (textSearchElements.length > 0) {
  3396.                    textSearchElements[0].focus();
  3397.                    textSearchElements[0].select();
  3398.                }
  3399.            }, 100);
  3400.            return;
  3401.        }
  3402.        
  3403.        // Search already loaded, focusing input...
  3404.        const textSearchElements = document.getElementsByClassName('ais-SearchBox-input');
  3405.        if (textSearchElements.length > 0) {
  3406.            textSearchElements[0].focus();
  3407.            textSearchElements[0].select();
  3408.        } else {
  3409.            await window.lazyInitializeSearch();
  3410.            setTimeout(() => {
  3411.                const textSearchElements = document.getElementsByClassName('ais-SearchBox-input');
  3412.                if (textSearchElements.length > 0) {
  3413.                    textSearchElements[0].focus();
  3414.                    textSearchElements[0].select();
  3415.                }
  3416.            }, 200);
  3417.        }
  3418.    };
  3419. }
  3420.  
  3421. // Add hide button functionality - only declare if not already defined
  3422. if (typeof window.hideSearchOverlay === 'undefined') {
  3423.    window.hideSearchOverlay = function() {
  3424.        const targetElement = document.querySelector('#my-hidden-element');
  3425.        const showButton = document.querySelector('#show-button-typesence');
  3426.        const hideButton = document.querySelector('#hide-button');
  3427.        const bodyElement = document.body;
  3428.        
  3429.        if (targetElement && !targetElement.classList.contains('hidden')) {
  3430.            targetElement.classList.add('hidden');
  3431.            if (showButton) showButton.classList.remove('hidden');
  3432.            if (hideButton) hideButton.classList.add('hidden');
  3433.            bodyElement.classList.remove('searchOpen');
  3434.        }
  3435.    };
  3436. }
  3437.  
  3438. // Initialize hide button event listener when DOM is ready
  3439. document.addEventListener('DOMContentLoaded', function() {
  3440.    const hideButton = document.querySelector('#hide-button');
  3441.    if (hideButton) {
  3442.        hideButton.addEventListener('click', window.hideSearchOverlay);
  3443.    }
  3444. });
  3445.  
  3446. // Don't auto-initialize - wait for user interaction
  3447. // Search will be initialized when first opened
  3448. </script>
  3449. <script src="/js/footer.min.js" defer></script>
  3450. <!-- Mobile Drawer Script -->
  3451. <script src="/js/mobile-drawer.min.js" defer></script>
  3452. <script>
  3453.  document.querySelectorAll('.form-group input, .form-group textarea, .form-group select').forEach(field => {
  3454.    const placeholderText = field.getAttribute('data-placeholder');
  3455.  
  3456.    // Focus
  3457.    field.addEventListener('focus', () => {
  3458.      if (placeholderText) field.setAttribute('placeholder', placeholderText);
  3459.    });
  3460.  
  3461.    // Blur
  3462.    field.addEventListener('blur', () => {
  3463.      if (!field.value.trim()) {
  3464.        field.removeAttribute('placeholder');
  3465.        field.classList.remove('filled');
  3466.      } else {
  3467.        field.classList.add('filled');
  3468.      }
  3469.    });
  3470.  
  3471.    // On change (for select, color, date, etc.)
  3472.    field.addEventListener('change', () => {
  3473.      if (field.value.trim()) {
  3474.        field.classList.add('filled');
  3475.      } else {
  3476.        field.classList.remove('filled');
  3477.      }
  3478.    });
  3479.  
  3480.    // Initial load
  3481.    if (field.value.trim()) {
  3482.      field.classList.add('filled');
  3483.    }
  3484.  });
  3485. </script>
  3486.                           <script src="/js/new-chat-interface.min.js" defer></script>
  3487.                           <script src="/js/language-manager.js" defer></script>
  3488. <script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"version":"2024.11.0","token":"2c826315da9048f295419651abcaa729","server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
  3489. </body>
  3490.  
  3491. </html>
Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda