(Effective March 18th 2022) 

 

Table of Contents

 

  • Welcome
  • What is personal data?
  • What does GDPR-compliance mean?
  • Our Commitment to Data Security
  • Your Rights as a Data Subject
  • Service / Website Updates
  • Privacy Policy
  • Data Security
  • Contact us

Hypnosis for Traders created this GDPR section so you can go over what GDPR means for you and the steps we’ve taken to ensure your personal data is protected. The European Union General Data Protection Regulation (GDPR) provides new obligations for organisations which hold and process personally identifiable information (PII) about European Union Users.

 

What is personal data?

According to the GDPR directive, personal data can be any information related to an individual such as a name, email address, a computer IP address etc. 

 

What does GDPR-compliance mean?

Hypnosis for Traders complies with all GDPR regulation and statutory authority by working with an external auditor to ensure a complete GDPR compliance. Part of the compliance includes below.

 

Our Commitment to Data Security

Personal data collected by Hypnosis for Traders are processed in accordance with the law on legal protection of personal data and other legal acts. Article 32 of the GDPR requires that controllers and processors have adequate levels of security in place for ensuring the confidentiality, integrity, availability – and more, of processing and other related activities. 

 

GDPR Article 32 requires Hypnosis for Traders to implement appropriate technical and organisational measures to ensure a level of security to reduce data breach risk. Monitoring, as necessary, of all relevant third-party providers for which Hypnosis for Traders has a business relationship with in terms of storing, processing, and/or transmitting personal data for EU residents.

 

Your Rights as a Data Subject

Subject to applicable law including relevant data protection laws, in addition to your ability to withdraw any consent you have given to our processing your personal information, you may have a number of rights in connection with the processing of your personal information, including:

 

The right to request access to your personal information that we process or control.

 

The right to request rectification of any inaccuracies in your personal information or, taking into account the purposes of our processing, to request that incomplete data is completed;

 

The right to request, on legitimate grounds as specified in law: (i) erasure of your personal information that we process or control or (ii) restriction of processing of your personal information that we process or control;

 

The right to object, on legitimate grounds as specified in law, to the processing of your personal information;

 

The right to receive your personal information in a structured, commonly used and machine-readable format and to have your personal information transferred to another controller, to the extent applicable in law; and

The right to lodge complaints regarding the processing of your personal information with the Information.

 

Commissioner’s Office (if in the UK) or other relevant supervisory body.

 

Service /website Updates

Our service and website are being updated to help users comply with the GDPR obligations relating to obtaining and recording consent.

 

Consent approval will be available upon request. Other technology designed to automated data access requests received from users will be released.

 

Privacy Policy 

We have created our privacy policy to ensure it complies with our obligations under the EU GDPR Regulation. You can learn more regarding our collection and use of your personal information on our privacy policy page.

 

Data Security 

Hypnosis for Traders is committed to ensuring all user data as secured and protected. To learn more about our Data Security Policy and consistency with the GDPR Directive; please visit our website terms and condition page.

 

Contact Us

To send us your questions, comments, or complaints or receiving communications from us kindly email us using 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"; } } } }); }); });