Privacy Policy

This privacy statement was last updated on January 15, 2023, and applies worldwide. It encompasses citizens, legal permanent residents of the European Economic Area, Switzerland, and individuals globally.

 

In this privacy statement, we explain what we do with the data we obtain about you via https://www.hypnosisfortraders.co.uk

 

We recommend you carefully read this statement. In our processing we comply with the requirements of privacy legislation. That means, among other things, that:

 

  • we clearly state the purposes for which we process personal data. We do this by means of this privacy statement;
  • we aim to limit our collection of personal data to only the personal data required for legitimate purposes;
  • we first request your explicit consent to process your personal data in cases requiring your consent;
  • we take appropriate security measures to protect your personal data and also require this from parties that process personal data on our behalf;
  • we respect your right to access your personal data or have it corrected or deleted, at your request.

 

If you have any questions, or want to know exactly what data we keep of you, please contact us.

1. Purpose, data and retention period

We may collect or receive personal information for a number of purposes connected with our business operations which may include the following: (click to expand)

For this purpose we use the following data:

 

  • A first and last name
  • Account name or alias
  • An email address
  • A telephone number

 

The basis on which we may process these data is:

Upon the provision of consent.

Retention period

We retain this data until the service is terminated.

For this purpose we use the following data:

 

  • A first and last name
  • Account name or alias
  • An email address
  • A telephone number

 

The basis on which we may process these data is:

Upon the provision of consent.

Retention period

We retain this data until the service is terminated.

For this purpose we use the following data:

 

  • A first and last name
  • Account name or alias
  • An email address
  • A telephone number

 

The basis on which we may process these data is:

Upon the provision of consent.

Retention period

We retain this data until the service is terminated.

For this purpose we use the following data:

 

  • A first and last name
  • Account name or alias
  • An email address
  • A telephone number

 

The basis on which we may process these data is:

Upon the provision of consent.

Retention period

We retain this data until the service is terminated.

For this purpose we use the following data:

 

  • A first and last name
  • Account name or alias
  • An email address
  • A telephone number

 

The basis on which we may process these data is:

Upon the provision of consent.

Retention period

We retain this data until the service is terminated.

For this purpose we use the following data:

 

  • A first and last name
  • Account name or alias
  • An email address
  • A telephone number

 

The basis on which we may process these data is:

Upon the provision of consent.

Retention period

We retain this data until the service is terminated.

For this purpose we use the following data:

 

  • A first and last name
  • Account name or alias
  • An email address
  • A telephone number

 

The basis on which we may process these data is:

Upon the provision of consent.

Retention period

We retain this data until the service is terminated.

For this purpose we use the following data:

 

  • A first and last name
  • Account name or alias
  • An email address
  • A telephone number

 

The basis on which we may process these data is:

Upon the provision of consent.

Retention period

We retain this data until the service is terminated.

2. Cookies

Our website uses cookies. For more information about cookies, please refer to our Cookie Policy.

3. Disclosure practices

We disclose personal information if we are required by law or by a court order, in response to a law enforcement agency, to the extent permitted under other provisions of law, to provide information, or for an investigation on a matter related to public safety.

If our website or organisation is taken over, sold, or involved in a merger or acquisition, your details may be disclosed to our advisers and any prospective purchasers and will be passed on to the new owners.

4. Security

We are committed to the security of personal data. We take appropriate security measures to limit abuse of and unauthorised access to personal data. This ensures that only the necessary persons have access to your data, that access to the data is protected, and that our security measures are regularly reviewed.

5. Third-party websites

This privacy statement does not apply to third-party websites connected by links on our website. We cannot guarantee that these third parties handle your personal data in a reliable or secure manner. We recommend you read the privacy statements of these websites prior to making use of these websites.

6. Amendments to this privacy statement

We reserve the right to make amendments to this privacy statement. It is recommended that you consult this privacy statement regularly in order to be aware of any changes. In addition, we will actively inform you wherever possible.

7. Accessing and modifying your data

If you have any questions or want to know which personal data we have about you, please contact us. You can contact us by using the information below. You have the following rights:

  • You have the right to know why your personal data is needed, what will happen to it, and how long it will be retained for.
  • Right of access: You have the right to access your personal data that is known to us.
  • Right to rectification: you have the right to supplement, correct, have deleted or blocked your personal data whenever you wish.
  • If you give us your consent to process your data, you have the right to revoke that consent and to have your personal data deleted.
  • Right to transfer your data: you have the right to request all your personal data from the controller and transfer it in its entirety to another controller.
  • Right to object: you may object to the processing of your data. We comply with this, unless there are justified grounds for processing.

Please make sure to always clearly state who you are, so that we can be certain that we do not modify or delete any data of the wrong person.

8. Submitting a complaint

If you are not satisfied with the way in which we handle (a complaint about) the processing of your personal data, you have the right to submit a complaint to the Data Protection Authority.

9. Contact details

Hypnosis for Traders
27 Old Gloucester Street London, WC1 3AX
United Kingdom
Website: https://www.hypnosisfortraders.co.uk
Email: hypnosisfortraders@gmail.com

document.addEventListener("DOMContentLoaded", function () { if (typeof gsap === 'undefined' || typeof ScrollTrigger === 'undefined') { console.error('GSAP or ScrollTrigger is not loaded'); return; } gsap.registerPlugin(ScrollTrigger); const cards = gsap.utils.toArray(".stack-card"); if (cards.length === 0) return; const lastCard = cards[cards.length - 1]; const stackWrapper = document.querySelector(".stack-wrapper"); const nextSection = stackWrapper?.nextElementSibling; // Animation settings const scrollDistancePerCard = 400; // Scroll distance for each card animation const cardScale = 0.94; // Scale for cards that move up const cardMoveY = -120; // How much cards move up // Get the tallest card height to ensure full visibility let maxCardHeight = 0; cards.forEach(card => { const cardH = Math.max(card.scrollHeight, card.offsetHeight, card.clientHeight); if (cardH > maxCardHeight) maxCardHeight = cardH; }); // Calculate total wrapper height needed for all sequential animations const totalScrollDistance = cards.length * scrollDistancePerCard; // Set wrapper height to accommodate all sequential scroll animations if (stackWrapper) { const wrapperHeight = totalScrollDistance + maxCardHeight + 300; stackWrapper.style.height = wrapperHeight + "px"; stackWrapper.style.minHeight = wrapperHeight + "px"; } // Track cumulative scroll offset for sequential animation let cumulativeOffset = 0; cards.forEach((card, i) => { const isLastCard = i === cards.length - 1; // Calculate start and end points for sequential animation // Each card starts after the previous one finishes const cardStartOffset = cumulativeOffset; const cardEndOffset = cumulativeOffset + scrollDistancePerCard; // Update cumulative offset for next card cumulativeOffset += scrollDistancePerCard; gsap.to(card, { y: cardMoveY, scale: isLastCard ? 1 : cardScale, scrollTrigger: { trigger: stackWrapper, start: `top+=${cardStartOffset} top+=120`, end: `top+=${cardEndOffset} top+=120`, scrub: true, onLeave: () => { if (isLastCard && stackWrapper) { // Release the last card first card.classList.add("released"); stackWrapper.classList.add("collapsed"); // Remove spacing card.style.marginBottom = "0"; card.style.paddingBottom = "0"; stackWrapper.style.marginBottom = "0"; stackWrapper.style.paddingBottom = "0"; // Ensure card overflow is visible card.style.overflow = "visible"; card.style.maxHeight = "none"; // Use double requestAnimationFrame to ensure DOM is fully updated requestAnimationFrame(() => { requestAnimationFrame(() => { // Get the card's full height - use scrollHeight for complete content const cardFullHeight = Math.max( card.scrollHeight, card.offsetHeight, card.clientHeight ); // Get wrapper's current top position const wrapperRect = stackWrapper.getBoundingClientRect(); const wrapperTop = wrapperRect.top + window.scrollY; // Get card's current position relative to wrapper const cardRect = card.getBoundingClientRect(); const cardTop = cardRect.top + window.scrollY; const cardOffsetFromWrapper = Math.max(0, cardTop - wrapperTop); // Calculate wrapper height: card offset + full card height + generous buffer const wrapperHeight = cardOffsetFromWrapper + cardFullHeight + 100; stackWrapper.style.height = wrapperHeight + "px"; stackWrapper.style.minHeight = wrapperHeight + "px"; stackWrapper.style.maxHeight = "none"; // Force a reflow to ensure height is applied stackWrapper.offsetHeight; }); }); // Ensure next section starts right after with no gap if (nextSection) { nextSection.style.marginTop = "0"; nextSection.style.paddingTop = "0"; nextSection.style.position = "relative"; nextSection.style.zIndex = "10"; } } }, onEnterBack: () => { if (isLastCard && stackWrapper) { // Restore sticky behavior card.classList.remove("released"); stackWrapper.classList.remove("collapsed"); // Restore wrapper height let maxCardHeight = 0; cards.forEach(c => { const cardH = Math.max(c.scrollHeight, c.offsetHeight, c.clientHeight); if (cardH > maxCardHeight) maxCardHeight = cardH; }); const totalScroll = cards.length * scrollDistancePerCard; const wrapperHeight = totalScroll + maxCardHeight + 300; stackWrapper.style.height = wrapperHeight + "px"; stackWrapper.style.minHeight = wrapperHeight + "px"; } } } }); }); });