<!DOCTYPE html>
<html lang="en">
  <head>

  <!-- Google Tag Manager -->
  <script>
    // default consent
    window.dataLayer = window.dataLayer || [];
    function gtag() {
      dataLayer.push(arguments);
    }

    gtag('consent', 'default', {
      ad_user_data: 'granted',
      ad_personalization: 'granted',
      ad_storage: 'granted',
      analytics_storage: 'granted',
      functionality_storage: 'granted',
      personalization_storage: 'granted',
      security_storage: 'granted',
      wait_for_update: 2000, // milliseconds to wait for update
    });
  </script>

  <script>
    (function (w, d, s, l, i) {
      w[l] = w[l] || [];
      w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });
      var f = d.getElementsByTagName(s)[0],
        j = d.createElement(s),
        dl = l != 'dataLayer' ? '&l=' + l : '';
      j.async = true;
      j.src = '//www.googletagmanager.com/gtm.js?id=' + i + dl;
      f.parentNode.insertBefore(j, f);
    })(window, document, 'script', 'dataLayer', 'GTM-N7TMBR');
  </script>
  <!-- End Google Tag Manager -->


  <meta charset="utf-8">
  <title>Online Math Program for Early Learners &ndash; Math Made Fun! - Mathseeds</title>
  <meta name="description" content="30-Day Free Trial of the Award-Winning Online Math Program! Fun Math Games, Lessons & Tutoring Where Children Can Learn As They Play.">
  <meta name="keywords" content="learn to read,learn,read,learning,reading,abc,parent,teacher,interactive,kid,kids,play,playful,game,games,activity,activities,fun,online">
  <meta name="author" content="">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- Favicon -->
  <link rel="apple-touch-icon" sizes="57x57" href="/favicon/apple-touch-icon-57x57.png">
  <link rel="apple-touch-icon" sizes="60x60" href="/favicon/apple-touch-icon-60x60.png">
  <link rel="apple-touch-icon" sizes="72x72" href="/favicon/apple-touch-icon-72x72.png">
  <link rel="apple-touch-icon" sizes="76x76" href="/favicon/apple-touch-icon-76x76.png">
  <link rel="apple-touch-icon" sizes="114x114" href="/favicon/apple-touch-icon-114x114.png">
  <link rel="apple-touch-icon" sizes="120x120" href="/favicon/apple-touch-icon-120x120.png">
  <link rel="apple-touch-icon" sizes="144x144" href="/favicon/apple-touch-icon-144x144.png">
  <link rel="apple-touch-icon" sizes="152x152" href="/favicon/apple-touch-icon-152x152.png">
  <link rel="apple-touch-icon" sizes="180x180" href="/favicon/apple-touch-icon-180x180.png">
  <link rel="icon" type="image/png" href="/favicon/favicon-32x32.png" sizes="32x32">
  <link rel="icon" type="image/png" href="/favicon/android-chrome-192x192.png" sizes="192x192">
  <link rel="icon" type="image/png" href="/favicon/favicon-96x96.png" sizes="96x96">
  <link rel="icon" type="image/png" href="/favicon/favicon-16x16.png" sizes="16x16">
  <link rel="manifest" href="/favicon/manifest.json">
  <meta name="msapplication-TileColor" content="#ffc40d">
  <meta name="msapplication-TileImage" content="/favicon/mstile-144x144.png">
  <meta name="theme-color" content="#ffffff">
  <link href="/favicon.ico" rel="shortcut icon">
  
  <link rel="alternate" hreflang="x-default"
        href="https://mathseeds.com" />
  <link rel="alternate" hreflang="en-gb"
        href="https://mathseeds.co.uk" />
  <link rel="alternate" hreflang="en-us"
        href="https://mathseeds.com" />
  <link rel="alternate" hreflang="en-au"
        href="https://mathseeds.com.au" />
  <link rel="alternate" hreflang="en-nz"
        href="https://mathseeds.co.nz" />
        <link rel="alternate" hreflang="en-ca"
        href="https://mathseeds.ca" />
  
  
  <!-- Le styles -->
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  <link href="https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap" rel="stylesheet">
  <link href='https://unpkg.com/boxicons@2.1.4/css/boxicons.min.css' rel='stylesheet'>

  <link rel="stylesheet" href="/stylesheets/tailwind.css">
  <link rel="stylesheet" href="/stylesheets/screen.css">
  <!-- <link href="https://vjs.zencdn.net/8.16.1/video-js.css" rel="stylesheet" /> -->

  <script type="text/javascript" src="//use.typekit.net/jzu3msm.js"></script>
  <script type="text/javascript">try{Typekit.load();}catch(e){}</script>

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
  <script src="/javascripts/modernizr-2.6.1.min.js"></script>

  
  
  <link rel="canonical" href="https://mathseeds.com/"/>
  

<script>
  var cfTurnstileSiteKey = "0x4AAAAAAAftzHfeIqK3jFbb";
  var readingeggsUrl = "https://app.readingeggs.com/";
  
</script>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit"></script>
<script src="/javascripts/phoenix-signup-v2.js"></script>

  

  

  <!-- http://ogp.me/ -->
<meta property="og:title" content='Online Math Program for Early Learners &ndash; Math Made Fun!' />
<meta property="og:type" content="website" />

<meta property="og:image" content="https://mathseeds.com/images/fb-thumb_200x200.png" />


<meta property="og:url" content="https://mathseeds.com/" />


<meta property="og:description" content="30-Day Free Trial of the Award-Winning Online Math Program! Fun Math Games, Lessons & Tutoring Where Children Can Learn As They Play." />




</head>

  <body class="">
    
    
<!-- Google Tag Manager noscript -->
<noscript
  ><iframe
    src="//www.googletagmanager.com/ns.html?id=GTM-N7TMBR"
    height="0"
    width="0"
    style="display: none; visibility: hidden"
  ></iframe
></noscript>
<!-- End Google Tag Manager noscript -->


    <div id="wrapper">
      <nav id="blake-global" class="block w-full sticky top-0 bg-[#119ed6] z-10">
  <div class="tailwind-container flex justify-end md:justify-between space-x-2">
    <div class="global-links hidden md:!flex items-center space-x-1">
      <a href="https://readingeggs.com/">Reading Eggs</a>
      <a href="https://readingeggsjunior.com/">Reading Eggs Junior</a>
      <a href="https://readingeggspress.com/">Reading Eggspress</a>
      <a href="/" class="selected">Mathseeds</a>
    </div>
    <div class="account-links flex items-center space-x-1">
      <a
        id="login"
        class="account-login whitespace-nowrap"
        href="https://app.readingeggs.com/login"
        onclick="_gaq.push(['_link', 'https://app.readingeggs.com/login']); return false;"
      >
        <i class='bx bxs-lock-alt'></i> Login
      </a>
      <a class="account-signup whitespace-nowrap" href="/signup/">
        Sign&nbsp;up <i class='bx bxs-right-arrow'></i>
      </a>
    </div>
 </div>
</nav>

<header id="global-header-banner" class="h-[150px] bg-[url('/images/header/mathseeds-header-background.jpg')] bg-center bg-no-repeat bg-cover">
  <div class="h-full bg-none lg:bg-[url('/images/header/mathseeds-header-foreground.png')] bg-center bg-no-repeat bg-cover">
    <div class="h-full tailwind-container">
      <a href="/" class="h-full hover:no-underline">
        <div class="h-full flex items-center justify-center lg:justify-start">
          <img
            src="/images/logos/ms-new-logo-shadow.png"
            alt="Mathseeds online math learning"
            class="w-64 m-0 lg:!ml-6"
          />
          <img
            src="/images/logos/program-logos-svg/buddy-welcome-shadow.png"
            alt="Welcome to Mathseeds online math learning"
            class="w-24 m-0 hidden sm:!block lg:!hidden"
          />
        </div>
      </a>
    </div>
  </div>
</header>

<nav id="site-nav">
  <div class="tailwind-container">
    <div class="py-2 md:py-0">
      <button
        type="button"
        class="
          block md:hidden
          relative px-2 ml-auto
          border border-solid border-white rounded
        "
        data-toggle="tailwind-collapse"
        data-target="#mobile-nav-dropdown"
        aria-expanded="false"
      >
        <span class="sr-only">Toggle navigation</span>
        <i class='bx bx-menu text-white text-3xl'></i>
      </button>
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div id="mobile-nav-dropdown" class="hidden md:!block border-t border-solid border-white md:border-0">
      <ul class="md:flex">
        <li><a href="/">Home</a></li>
        <li>
          <a
            href="#"
            data-toggle="tailwind-collapse"
            data-target="#about-dropdown"
            class="whitespace-nowrap"
            role="button"
            aria-haspopup="true"
            aria-expanded="false"
          >
            About <i class='bx bx-caret-down'></i>
          </a>
          <ul id="about-dropdown" class="tailwind-dropdown-menu">
            <li><a href="/about/">About</a></li>
            <li><a href="/about/why-it-works/">Why it Works</a></li>
            <li><a href="/about/homeschool-math-program/">Homeschool</a></li>
            <li><a href="/about/sample-lesson/">Sample Lessons</a></li>
            <li><a href="/about/lesson-overview/">Content Overview</a></li>
            <li><a href="/about/testimonials/">Testimonials</a></li>
            <li><a href="/about/awards/">Awards</a></li>
            <li><a href="/about/faqs/">FAQs</a></li>
            <li><a href="/about/technical-requirements/">Technical Requirements</a></li>
            <li><a href="/accessibility/">Accessibility</a></li>
            <li><a href="/contact_us/">Contact Us</a></li>
            <li><a href="/schools/">Schools</a></li>
          </ul>
        </li>
        <li><a href="/pricing/">Pricing</a></li>
        <li><a href="/apps/">Apps</a></li>
        <li><a href="/schools/">Schools</a></li>
      </ul>
    </div>
  </div>
</nav>

      <main class="tailwind-container my-5" id="main">
        <div class="flex flex-wrap">
  <article class="w-full md:w-2/3 md:px-4">
    

<script src="https://cdn.jsdelivr.net/npm/dayjs@1.11.19/dayjs.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dayjs@1.11.19/plugin/utc.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dayjs@1.11.19/plugin/timezone.min.js"></script>
<script>
  (() => {
    if (!("globalJsonConfig" in window)) {
      window.globalJsonConfig = { fns: {}, json: {}, locale: "en-AU", localeFallback: [], domain: "mathseeds.com", tz:"Australia/Sydney" };      
      window.globalJsonConfig.fns.fetchJsonConfig = fetchJsonConfig;
      window.globalJsonConfig.fns.getJsonConfig = getJsonConfig;
      window.globalJsonConfig.fns.localiseField = localiseField;
      window.globalJsonConfig.fns.localiseSubField = localiseSubField;
      window.globalJsonConfig.fns.makeEl = makeEl;
      window.globalJsonConfig.fns.timeout = timeout;
      window.globalJsonConfig.fns.isDateInRange = isDateInRange;
      window.globalJsonConfig.fns.getStartDate = getStartDate;
      window.globalJsonConfig.fns.getEndDate = getEndDate;
    }

    const domains = {
      "mathseeds.com.au": {locale: "en-AU", tz:"Australia/Sydney"},
      "mathseeds.co.nz": {locale: "en-NZ", localeFallback:["en-AU"], tz:"Pacific/Auckland"},
      "mathseeds.co.uk": {locale: "en-GB", localeFallback:["en-AU"], tz:"Europe/London"},
      "mathseeds.com": {locale: "en-US", localeFallback:["en-AU"], tz:"America/New_York"},    
      "mathseeds.ca": {locale: "en-CA", localeFallback:["en-US","en-AU"], tz:"America/Toronto"},            
    };    

    let urlParams = null;    
    let currentMoment = null;
    function init() {         
      urlParams = new URLSearchParams(window.location.search);

      //jsonUrl
      const hostname = window.location.hostname;
      const isDevelopment = hostname.endsWith('.pages.dev') || hostname.includes("localhost");      
      window.globalJsonConfig.isProduction = !isDevelopment;
      window.globalJsonConfig.jsonUrl = isDevelopment
        ? "https://contentful-store.blake-staging.com/json-data/preview"
        : "https://contentful-store.readingeggs.com/json-data/live";

      if(window.globalJsonConfig.domain in domains) {
        //locale
        const domainSettings = domains[window.globalJsonConfig.domain];
        window.globalJsonConfig.locale = domainSettings.locale;
        window.globalJsonConfig.localeFallback = domainSettings?.localeFallback || [];

        //timezone
        window.globalJsonConfig.tz = domainSettings?.tz || "Australia/Sydney";
      }

      //dayjs init
      dayjs.extend(dayjs_plugin_utc);
      dayjs.extend(dayjs_plugin_timezone);       

      //current moment / date
      currentMoment = dayjs();
      if (urlParams.get("date")) {
        const _currentTime = getStartDate(urlParams.get("date"));
        if (_currentTime) currentMoment = dayjs.tz(_currentTime, window.globalJsonConfig.tz);
      }
    }
    init();

    async function getJsonConfig(key) {
      const resource = window.globalJsonConfig.json[key];
      return await resource;
    }    

    function fetchJsonConfig(url, key) {
      // Check if the key already exists in our cache.
      if (window.globalJsonConfig.json.hasOwnProperty(key)) {
        console.log(
          `Resource for key '${key}' already exists. No new fetch initiated.`
        );
        return getJsonConfig(key);
      }

      // Start the fetch and immediately store the promise.
      const timestamp = new Date().getTime();
      const fetchPromise = fetch(url+"?v="+timestamp)
        .then((response) => {
          if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
          }
          return response.json();
        })
        .catch((error) => {
          console.error(`Fetch failed for key '${key}':`, error);
          return null;
        });

      // Store the promise in the global config.
      window.globalJsonConfig.json[key] = fetchPromise;

      return fetchPromise;
    }

    function localiseField(jsonConfig, fieldKey, locale, localeFallback, localeFallbackIndex=0) {
      locale = locale ?? window.globalJsonConfig.locale;
      localeFallback = localeFallback ?? window.globalJsonConfig.localeFallback;
      let result = null;      
      
      //get the field e.g. jsonConfig.json
      const field = jsonConfig?.[fieldKey];      
      if(field){
        if(locale in field) {
          //if locale in field e.g. jsonConfig.json.en-AU
          result = field[locale];
        } else {
          //if locale not in field, check the fallback locale(s) (recursive)
          if(localeFallbackIndex < localeFallback.length) {
            result = localiseField(jsonConfig, fieldKey, localeFallback[localeFallbackIndex], localeFallback, localeFallbackIndex + 1);
          }          
        }
      }

      return result;
    }

    function localiseSubField(jsonConfig, fieldKey, subFieldKey, locale, localeFallback, localeFallbackIndex=0) {
      locale = locale ?? window.globalJsonConfig.locale;
      localeFallback = localeFallback ?? window.globalJsonConfig.localeFallback;
      let result = null;
      
      //get the localised field e.g. jsonConfig.json.en-AU
      const field = localiseField(jsonConfig, fieldKey, locale, localeFallback, localeFallbackIndex);      

      //get the subField e.g. jsonConfig.json.en-AU.bannerMessages
      const subField = field?.[subFieldKey];
      let pass = false;
      if(subField){
        if("items" in subField){
          //if items in subField and not empty
          if((subField?.items || []).length > 0){
            pass = true;
            result = subField;
          }
        } else if(!isBlankOrEmptyObject(subField)){
          //if subField exists and is not empty
          pass = true;
          result = subField;
        }
      }
      
      //if subField is empty (pass==false), check the fallback locale(s) (recursive)
      if(!pass && localeFallbackIndex < localeFallback.length){
        result = localiseSubField(jsonConfig, fieldKey, subFieldKey, localeFallback[localeFallbackIndex], localeFallback, localeFallbackIndex + 1);
      }

      return result;
    }

    function makeEl(tagName, attributes, targetElement) {
      const newElement = document.createElement(tagName);

      for (const key in attributes) {
        if (attributes.hasOwnProperty(key)) {
          newElement.setAttribute(key, attributes[key]);
        }
      }
      targetElement.appendChild(newElement);
      return newElement;
    }

    function isDateInRange(startDate, endDate) {
      if(startDate == 0 || endDate == 0){
        return false;
      }      
      const tz = window.globalJsonConfig.tz;            
      const startMoment = dayjs.tz(startDate, tz);            
      const endMoment = dayjs.tz(endDate, tz);          
      const isAfterOrEqualStart = currentMoment.isAfter(startMoment) || currentMoment.isSame(startMoment);
      const isBeforeEnd = currentMoment.isBefore(endMoment);      
      return isAfterOrEqualStart && isBeforeEnd;
    }

    function getStartDate(dateString) {
      if(!dayjs(dateString).isValid()){
        return 0;
      }
      if(dateString.includes("T")) {
        return dateString;
      } else {
        return `${dateString}T00:00:00`;
      }      
    }

    function getEndDate(dateString) {
      if(!dayjs(dateString).isValid()){
        return 0;
      }
      if(dateString.includes("T")) {
        return dateString;
      } else {
        return `${dateString}T23:59:59`;
      }  
    }

    async function timeout(ms) {
      return new Promise((resolve) => setTimeout(resolve, ms));
    }

    function isBlank(str) {
      return !str || /^\s*$/.test(String(str));
    }

    function isBlankOrEmptyObject(item) {
      if (!item) return true;
      if (typeof item === "object") {
        return Object.keys(item).length == 0 ? true : false;
      } else {
        return isBlank(item);
      }
    }    
  })();
</script>


<section class="flex flex-wrap">
  <div class="w-full md:w-2/3 md:pr-2">
    <h1>Grow your child&apos;s math skills with the fun&#8209;filled online math program!</h1>
    <p>
      Mathseeds is the
      <strong>award&#8209;winning online math program for kids aged 3&#8288;&ndash;&#8288;9.</strong>
      Your child can enjoy fun, interactive and rewarding lessons that
      <strong>teach foundational math and problem&#8209;solving skills</strong>
      while nurturing an early love of math.
    </p>
    <p>
      Mathseeds combines
      <strong>structured one&#8209;on&#8209;one lessons and highly motivational elements</strong>
      that keep children engaged and eager to keep learning and improving their skills.
    </p>
    <p>
      Your children can start learning with Mathseeds anytime and anywhere there is a computer or tablet.
      <strong>Get started with your free 30&#8209;day trial today!</strong>
    </p>
  </div>

  <div class="w-full md:w-1/3 md:pl-2">
    <div class="register-box flex flex-col items-center justify-end h-[332px] space-y-1 p-1 bg-[url('/images/free-trial-background.png')] bg-center bg-no-repeat bg-msBlue200 rounded">
  <a href="/parents/signup/">
    <img src="/images/signup_btn_parents.jpg" alt="parents start here">
  </a>
  <a href="/schools/getstarted/">
    <img src="/images/signup_btn_teachers.jpg" alt="teachers start here">
  </a>
  <a href="https://app.readingeggs.com/login" class="text-xs text-msBlue200 focus:text-msBlue200 hover:text-msBlue200">
    Already a member? <strong>LOG IN</strong>.
  </a>
</div>
    <div class="my-3 mx-0 px-4 py-3 bg-msBlue200 rounded">
      <p
        class="mb-0 text-center text-white text-sm tracking-wide font-semibold text-shadow"
      >
        Parents, you can also download the app:<br>
        <a
          href="https://apps.apple.com/app/mathseeds-fun-math-games/id1632175905"
          target="_blank"
          class="gtmfire-AppLinks"
          data-ga_action="iOS"
          data-ga_label="Home-iOS-Button"
        >
          <img
            src="/images/btn-app-download-ios_570w.png"
            alt="education math app"
            class="img-responsive max-w-[140px] mt-3 app-download-button"
          >
        </a>
      </p>
    </div>
  </div>
</section>

<div class="my-3">
  
<script>
  (async () => {
    const result = await globalJsonConfig.fns.fetchJsonConfig(
      `${globalJsonConfig.jsonUrl}/3p1cFgGAwBeHHuOyv7uWZ1.json`,
      "home"
    );
  })();
</script>


<!-- default backup slider (if R2 is not available) -->
<div class="swiper-container" data-slider="default" style="display: none;">
  <div class="swiper-wrapper">
    <div class="swiper-slide">
      <a href="/parents/signup/">
        <img
          src="https://images.ctfassets.net/lhzh8coidz9i/7audCVwKwB4HAGjSC0QyYV/40ed869b894a2fad83cafb228f5e304f/homepage-30days-mathseeds.jpg?w=650&fm=webp&q=95"
          class="img-responsive"
          alt="Learn Maths Skills Online in 30 Days for FREE! For ages 3-9. FREE 30-Day Trial"
        />
      </a>
    </div>
    <div class="swiper-slide">
      <a href="/about/remote-learning/"
        ><img
          src="https://images.ctfassets.net/lhzh8coidz9i/1CN8ZPj2veOlBfqIxel5ES/1fe945e435fed8eed31137db51fcd633/homepage-lockdown-study-mathseeds.jpg?w=650&fm=webp&q=95"
          class="img-responsive"
          alt="School Shutdown Study. How students improved their maths skills online during the COVID-19 lockdown. Find out how"
      /></a>
    </div>
  </div>
  <div class="swiper-pagination"></div>
</div>

<!-- dynamic slider (if R2 is available) -->
<div class="swiper-container" data-slider="dynamic">
  <div id="home-swiper-loader"></div>
  <div class="swiper-wrapper" id="home-swiper-wrapper">
    <!-- slides populated here -->
  </div>
  <!-- Add Pagination -->
  <div class="swiper-pagination"></div>
  <!-- Add Arrows -->
  <!-- <div class="swiper-button-next"></div> -->
  <!-- <div class="swiper-button-prev"></div> -->
</div>

<style>
  #home-swiper-loader {
    width: 100%;
    padding-bottom: 41.7%;
    background-color: #eeeeee;
    border-radius: 8px;
    animation: home-swiper-pulse 2.5s infinite;
  }

  @keyframes home-swiper-pulse {
    50% {
      opacity: 0.5;
    }
  }
</style>

<!-- Swiper CSS -->
<link rel="stylesheet" href="/stylesheets/swiper-bundle.css" />
<!-- Swiper JS -->
<script src="/javascripts/min/swiper-bundle.min.js"></script>
<!-- Populate slides from JSON data -->
<script>
  document.addEventListener("DOMContentLoaded", async () => {
    const {
      localiseSubField,
      getJsonConfig,
      makeEl,
      timeout,
      getStartDate,
      getEndDate,
      isDateInRange,
    } = globalJsonConfig.fns;
    const rootEl = document.querySelector("#home-swiper-wrapper");
    const loaderEl = document.querySelector("#home-swiper-loader");
    const jsonConfig = await getJsonConfig("home");
    const slides = localiseSubField(jsonConfig, "json", "slides")?.items;    
    const imageModifications = "?w=650&fm=webp&q=95";
    
    //create slides if config fetch successful
    if (slides) {
      //prettier-ignore
      slides.forEach((slide)=>{
        const startDate = getStartDate(slide.startDate);
        const endDate = getEndDate(slide.endDate);
        const dateActive = isDateInRange(startDate, endDate);
        
        //if date is active, create slide
        if (dateActive) {
          const els = {};
          els.div = makeEl("div", {class: "swiper-slide"}, rootEl);
          els.a = makeEl("a", {href: slide.url, class: "gtmfire-SliderLink", "data-ga-label": slide.ga_label}, els.div);
          els.img = makeEl("img", {src: slide?.image?.[0]?.url + imageModifications, class: "img-responsive", alt: slide.alt}, els.a);      
        }
      });
    }

    const swiperSelector = slides ? "[data-slider='dynamic']" : "[data-slider='default']";
    if(!slides){
      //something went wrong, show the default slider
      document.querySelector("[data-slider='default']").style.display = "block";
      document.querySelector("[data-slider='dynamic']").style.display = "none";
    }

    //initialize swiper
    new Swiper(swiperSelector, {
      spaceBetween: 30,
      centeredSlides: true,
      loop: true,
      autoplay: {
        delay: 6000,
        disableOnInteraction: false,
      },
      pagination: {
        el: ".swiper-pagination",
        clickable: true,
      },
    });

    //hide loader
    loaderEl.style.display = "none";
  });
</script>
</div>

<script>
  (async () => {
    const result = await globalJsonConfig.fns.fetchJsonConfig(
      `${globalJsonConfig.jsonUrl}/1RnCVa5xGRk3od05MS1EsS.json`,
      "banner-multi"
    );
  })();
</script>





<input type="checkbox" id="promo-banner-close" style="display: none" />
<div class="fixed-promo-banner-bottom" id="banner-multi-container">
  <label for="promo-banner-close" class="promo-banner-close-btn">
    <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none"><path d="M10.192.344 5.949 4.586 1.707.344.293 1.758 4.535 6 .293 10.242l1.414 1.414 4.242-4.242 4.243 4.242 1.414-1.414L7.364 6l4.242-4.242L10.192.344Z" fill="currentColor"/></svg>
  </label>
  <!-- messages populated here -->
</div>

<style>
  #banner-multi-container {
    opacity: 0;
    transition: opacity 0.5s ease-in-out;
  }

  .initial-hide {
    display: none;
  }

  .fixed-promo-banner-bottom {
    background-color: rgba(249, 6, 63, 0.85);    
    position: fixed;
    width: 100%;
    bottom: 0;
    left: 0;
    z-index: 1111;
    padding: 15px 20px;
  }
  .fixed-promo-banner-bottom a {
    display: block;
    margin: 0;
    line-height: 1.2;
    text-align: center;
    color: #fff;
  }
  .fixed-promo-banner-bottom a:hover, .fixed-promo-banner-bottom a:active {
    color: #fcf35a;    
    text-decoration: none;
  }
  .banner-multi-gh {
    margin: 0;
  }

  input#promo-banner-close:checked + .fixed-promo-banner-bottom {
    display: none !important;
  }
  
  .promo-banner-close-btn {
    display: block;
    border-radius: 50%;
    color: #ffffff;    
    cursor: pointer;
    position: absolute;
    top: 0;
    right: 0;
    padding: 8px;
  }  
</style>

<!-- Populate banner messages from JSON data -->
<script>
  document.addEventListener("DOMContentLoaded", async () => {
    const { localiseSubField, getJsonConfig, makeEl, timeout, getStartDate, getEndDate, isDateInRange } = globalJsonConfig.fns;
    const rootEl = document.querySelector("#banner-multi-container");
    const jsonConfig = await getJsonConfig("banner-multi");    
    const bannerMessages = localiseSubField(jsonConfig, "json", "bannerMessages")?.items;

    //create banner messages
    if (bannerMessages) {
      let enabledBannerMessages = [];

      //get enabled banner messages
      bannerMessages.forEach((message)=>{
        const startDate = getStartDate(message.startDate);
        const endDate = getEndDate(message.endDate);
        const dateActive = isDateInRange(startDate, endDate);  
        if(dateActive) {
          enabledBannerMessages.push(message);
        }
      });

      //if there is only one enabled banner message, duplicate it
      if(enabledBannerMessages.length == 1){
        enabledBannerMessages = [...enabledBannerMessages, ...enabledBannerMessages];
      }
      
      const bannerEls = [];
      //prettier-ignore
      enabledBannerMessages.forEach((message, messageIndex)=>{        
        const els = {};
        els.p = makeEl("p", {class: `banner-multi-gh ${messageIndex > 0 ? "initial-hide" : ""}`}, rootEl);        
        els.a = makeEl("a", {href: message.url}, els.p);
        els.a.innerHTML = message.text;        
        els.icon = makeEl("span", {"aria-hidden": "true", "style": "margin-left:8px; display:inline-block;"}, els.a);
        els.icon.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="0.45em" height="1em" viewBox="0 0 576 1280" style="display:inline-block; margin-bottom:3px;"><g transform="translate(576 0) scale(-1 1)"><path fill="currentColor" d="M576 192v896q0 26-19 45t-45 19t-45-19L19 685Q0 666 0 640t19-45l448-448q19-19 45-19t45 19t19 45"/></g></svg>';                  
        bannerEls.push(els.p);                  
      });

      //fade in banner
      rootEl.style.opacity = "1";
      //start cycling through the messages
      orderedShow(bannerEls, 4000);
    }
  });
</script>


<div class="exit-intent-popup hidden md:!block invisible">

<div class="popup-content grid md:grid-cols-2 bg-white border border-solid border-white">
  <div class="hidden md:!block m-0 p-0">
    <img src="/images/promos/popup_pricing_202109.jpg" class="img-responsive w-full" alt="" />
  </div>
  
  <div class="relative">
  
    <button
      type="button"
      class="absolute top-2 right-2"
      aria-label="Close"
    >
      <i class="close bx bx-x text-dustyBlack200 text-xl font-bold hover:text-dustyBlack300 focus:text-dustyBlack300"></i>
    </button>
    <div class="mx-auto md:mx-0">
      
        <div class="w-10/12 mx-auto space-y-[1.5vw] mb-4">
          <h2 class="text-center mb-[0.75vw] text-[8.5vw] md:text-[3vw] leading-none">
            Leaving already?
          </h2>
          <p class="text-center font-bold text-msBlue200 text-[4.5vw] md:text-[1.5vw] leading-normal">
            Try Mathseeds</br>and Reading Eggs</br><strong>FREE</strong> for 30 days.
          </p>
           <a 
  href="
    /exit
  "
  class="
    inline-block font-openSans text-center font-bold border border-solid focus:no-underline hover:no-underline
    !text-white focus:text-white hover:text-white
    py-2 px-8 rounded-lg text-lg
    
    
    
    
    
    
    
    
    
    
      text-shadow bg-[#fc363e] bg-gradient-to-b from-[#fd484f] to-[#fc363e] border-2 border-[#c92129]
      shadow-[inset_5px_5px_6px_rgba(253,120,126,0.7),inset_-5px_-5px_10px_rgba(162,0,52,0.4),1px_1px_1px_rgba(0,0,0,0.5)]
      hover:shadow-[inset_5px_5px_6px_rgba(252,164,168,0.7),inset_-5px_-5px_10px_rgba(185,4,3,0.4),0_1px_6px_rgba(0,0,0,0.5)]
      focus:shadow-[inset_5px_5px_6px_rgba(252,164,168,0.7),inset_-5px_-5px_10px_rgba(185,4,3,0.4),0_1px_6px_rgba(0,0,0,0.5)]
    
    
    block w-full
          !text-[4.25vw] md:!text-[1.25vw] leading-normal
  "
  
  
  
>
  Sign me up NOW for FREE!
</a> 
        </div>
    </div>
</div>

<script>
(function() {
    'use strict';

    // Configuration from Jekyll include parameters
    var msDebug = JSON.parse(`false`);
    var msMobile = JSON.parse(`true`);
    var msCookieName = JSON.parse(`"exitIntentShownMS"`);
    var msEventLabel = JSON.parse(`"ExitPopup-Home"`);
    var msTriggerOnScrollToBottom = JSON.parse(`false`);
    var msDelayMs = JSON.parse(`10000`);
    var msDebounceMs = JSON.parse(`250`);
    var msCookieExpireDays = JSON.parse(`30`);

    const config = {
        debug: msDebug,
        mobile: msMobile,
        cookieName: msCookieName,
        eventLabel: msEventLabel,
        triggerOnScrollToBottom: msTriggerOnScrollToBottom,
        delayMs: msDelayMs,
        debounceMs: msDebounceMs,
        cookieExpireDays: msCookieExpireDays
    };

    class PopupManager {
        constructor(popupId, config) {
            this.popupId = popupId;
            this.config = config;

            // State
            this.isVisible = false;
            this.isInitialized = false;
            this.lastScrollY = 0;
            this.mediaQuery = window.matchMedia('(max-width: 767px)');

            // Cached DOM elements
            this.elements = {};

            // Bound methods for event listeners
            this.boundMethods = {
                handleMouseOut: this.debounce(this.handleMouseOut.bind(this), this.config.debounceMs),
                handleScroll: this.debounce(this.handleScroll.bind(this), this.config.debounceMs),
                handleKeyDown: this.handleKeyDown.bind(this),
                handleClick: this.handleClick.bind(this),
                handleImageLoad: this.handleImageLoad.bind(this),
                handleImageError: this.handleImageError.bind(this)
            };

            this.init();
        }

        init() {
            if (this.isInitialized) return;
            try {
                this.cacheElements();
                this.setupEventListeners();
                this.scheduleAutoTrigger();
                this.isInitialized = true;
                if (this.config.debug) {
                    console.log(`PopupManager initialized for ${this.popupId}`, this.config);
                }
            } catch (error) {
                console.error(`PopupManager initialization failed for ${this.popupId}:`, error);
            }
        }

        cacheElements() {
            const overlay = document.getElementById(`popupOverlay-${this.popupId}`);
            if (!overlay) {
                throw new Error(`Popup overlay not found: popupOverlay-${this.popupId}`);
            }
            this.elements = {
                overlay: overlay,
                container: overlay.querySelector('.popup-container'),
                closeBtn: overlay.querySelector('.popup-close'),
                image: overlay.querySelector('.popup-image img'),
                imageContainer: overlay.querySelector('.popup-image'),
                button: overlay.querySelector('.popup-button')
            };
            var objectPosition = `top center`;
            if (this.elements.image && objectPosition) {
                try { this.elements.image.style.objectPosition = objectPosition; } catch (e) {}
            }
        }

        setupEventListeners() {
            document.addEventListener('keydown', this.boundMethods.handleKeyDown);
            document.addEventListener('click', this.boundMethods.handleClick);
            if (this.elements.image) {
                this.elements.image.addEventListener('load', this.boundMethods.handleImageLoad);
                this.elements.image.addEventListener('error', this.boundMethods.handleImageError);
            }
        }

        scheduleAutoTrigger() {
            if (this.shouldShowPopup()) {
                const delay = this.config.debug ? 3000 : this.config.delayMs;
                setTimeout(() => { this.enableTriggers(); }, delay);
            }
        }

        enableTriggers() {
            const isMobile = this.mediaQuery.matches;
            if (isMobile && this.config.mobile) {
                document.addEventListener('scroll', this.boundMethods.handleScroll, { passive: true });
            } else {
                document.addEventListener('mouseout', this.boundMethods.handleMouseOut);
                if (this.config.triggerOnScrollToBottom) {
                    document.addEventListener('scroll', this.boundMethods.handleScroll, { passive: true });
                }
            }
        }

        disableTriggers() {
            document.removeEventListener('mouseout', this.boundMethods.handleMouseOut);
            document.removeEventListener('scroll', this.boundMethods.handleScroll);
        }

        handleMouseOut(event) {
            const shouldTrigger = !event.toElement && !event.relatedTarget && event.clientY < 10;
            if (shouldTrigger) { this.showPopup(); }
        }

        handleScroll() {
            const isMobile = this.mediaQuery.matches;
            const currentScrollY = window.scrollY;
            if (isMobile) {
                if (this.lastScrollY > currentScrollY && currentScrollY > 100) {
                    this.showPopup();
                }
            } else if (this.config.triggerOnScrollToBottom) {
                const isAtBottom = (window.innerHeight + currentScrollY) >= (document.documentElement.scrollHeight - 100);
                if (isAtBottom) { this.showPopup(); }
            }
            this.lastScrollY = currentScrollY;
        }

        handleKeyDown(event) {
            if (event.key === 'Escape' && this.isVisible) { this.hidePopup(); }
        }

        handleClick(event) {
            if (!this.isVisible) return;
            const isInThisPopup = this.elements.overlay.contains(event.target);
            if (!isInThisPopup) return;
            const isOverlayClick = event.target === this.elements.overlay;
            const isCloseClick = event.target === this.elements.closeBtn;
            const isButtonClick = event.target === this.elements.button;
            if (isOverlayClick || isCloseClick) {
                this.hidePopup();
            } else if (isButtonClick) {
                this.handleAction();
            }
        }

        handleImageLoad(event) {
            const img = event.target;
            const aspectRatio = img.naturalWidth / img.naturalHeight;
            const container = this.elements.imageContainer;
            if (!container) return;
            img.classList.remove('wide-image', 'tall-image');
            if (aspectRatio > 2.5) {
                img.classList.add('wide-image');
                container.style.height = '180px';
            } else if (aspectRatio < 0.8) {
                img.classList.add('tall-image');
                container.style.height = '300px';
        } else {
                const idealHeight = Math.min(400, Math.max(150, 400 / aspectRatio));
                container.style.height = idealHeight + 'px';
            }
        }

        handleImageError() {
            const container = this.elements.imageContainer;
            if (container) {
                container.innerHTML = '<div style="color:white;font-size:48px;">📱</div>';
            }
        }

        showPopup() {
            if (this.isVisible || !this.elements.overlay) return;
            this.elements.overlay.classList.remove('hidden');
            this.isVisible = true;
            this.setCookie();
            this.disableTriggers();
            this.trackEvent('ExitPopup-Viewed');
            if (this.config.debug) { console.log(`Popup shown: ${this.popupId}`); }
        }

        hidePopup() {
            if (!this.isVisible || !this.elements.overlay) return;
            this.elements.overlay.classList.add('hidden');
            this.isVisible = false;
            if (this.config.debug) { console.log(`Popup hidden: ${this.popupId}`); }
        }

        handleAction() {
            this.trackEvent('ExitPopup-Clicked');
            this.hidePopup();
            if (this.config.debug) { console.log(`Popup action clicked: ${this.popupId}`); }
        }

        // Popup close handler
        const exit = e => {
            const shouldExit = [...e.target.classList].includes('exit-intent-popup') || // user clicks on mask
                [...e.target.classList].includes('close') || // user clicks on the close icon
                e.keyCode === 27; // user hits escape
        shouldShowPopup() {
            const cookieExists = this.getCookie(this.config.cookieName);
            return !cookieExists || this.config.debug;
        }

        setCookie() {
            try {
                const expires = new Date();
                expires.setTime(expires.getTime() + (this.config.cookieExpireDays * 24 * 60 * 60 * 1000));
                document.cookie = `${this.config.cookieName}=true; expires=${expires.toUTCString()}; path=/; SameSite=Lax`;
            } catch (error) {
                console.warn('Failed to set cookie:', error);
            }
        }

        getCookie(name) {
            try {
                const value = `; ${document.cookie}`;
                const parts = value.split(`; ${name}=`);
                if (parts.length === 2) { return parts.pop().split(';').shift(); }
            } catch (error) {
                console.warn('Failed to get cookie:', error);
            }
            return null;
        }

        trackEvent(action) {
            try {
                if (typeof window.dataLayer !== 'undefined') {
                    window.dataLayer.push({
                        'event': 'exitBannerPopup',
                        'ExitBanner-Popup': {
                            'eventLabel': this.config.eventLabel,
                            'eventAction': action
                        }
                    });
                }
            } catch (error) {
                console.warn('Analytics tracking failed:', error);
            }
        }

        // Utility: debounce function
        debounce(func, wait) {
            let timeout;
            return function executedFunction(...args) {
                const later = () => { clearTimeout(timeout); func.apply(this, args); };
                clearTimeout(timeout);
                timeout = setTimeout(later, wait);
            };
        }

        // Public methods for manual control
        reset() {
            document.cookie = `${this.config.cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;
            if (this.config.debug) { console.log(`Popup reset: ${this.popupId}`); }
        }

        destroy() {
            this.disableTriggers();
            document.removeEventListener('keydown', this.boundMethods.handleKeyDown);
            document.removeEventListener('click', this.boundMethods.handleClick);
            if (this.elements.image) {
                this.elements.image.removeEventListener('load', this.boundMethods.handleImageLoad);
                this.elements.image.removeEventListener('error', this.boundMethods.handleImageError);
            }
            this.isInitialized = false;
            if (this.config.debug) { console.log(`PopupManager destroyed: ${this.popupId}`); }
        }
    }

    // Initialize popup manager for this specific instance
    const popupId = 'exitIntentShownMS';

    // Wait for DOM to be ready
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', function() { new PopupManager(popupId, config); });
    } else {
        new PopupManager(popupId, config);
    }

    // Global access for debugging (only in debug mode)
    if (config.debug) {
        window[`popupManager_${popupId}`] = new PopupManager(popupId, config);
    }
})();
</script>


  </article>
  <aside class="w-full md:w-1/3 md:px-4">
    <div itemscope itemtype="http://schema.org/VideoObject">
  <span itemprop="name" style='display:none'>Mathseeds</span>
  <meta itemprop="thumbnailURL" content="/images/video_poster/promo_video_poster.png" />
  <meta itemprop="embedUrl" content="https://assets.readingeggs.com/mkt/mathseeds/videos/480p/promo_ms_2022_us_480p.mp4" />
  <meta itemprop="description" content="Overview of the ABC Reading Eggs learn to read program" />
  <meta itemprop="duration" content="T1M56S" />
  <meta itemprop="uploadDate" content="2022-10-24T13:11:00-0700" /><!-- https://www.infobyip.com/epochtimeconverter.php -->
  <div class="video-js-box">
    <a href="#" class="" aria-label="mathseeds promo video"></a>
    <video id="my_video_1" controls preload="none" poster="/images/video_poster/ms-video-ploaceholder.jpg" data-setup="{}">
      <source src="https://assets.readingeggs.com/mkt/mathseeds/videos/480p/promo_ms_2022_us_480p.mp4" type="video/mp4">
    </video>
  </div>
</div>


<a 
  href="
    https://app.readingeggs.com/login
  "
  class="
    inline-block font-openSans text-center font-bold border border-solid focus:no-underline hover:no-underline
    !text-white focus:text-white hover:text-white
    py-1 px-3 rounded text-base
    
    
    border-msGreen500 bg-msGreen300 focus:bg-msGreen500 hover:bg-msGreen500
    
    
    
    
    
    
    
    
    w-full py-3 !px-1 mt-3
  "
  
  
  
>
  Already a member?&nbsp;LOGIN HERE
</a>

<div
  id="testimonials"
  class="
    relative my-3 p-5 rounded bg-white
    border border-solid border-forestGreen350
    text-forestGreen350 text-sm
  "
>
  <div data-testimonial-slide>
    &ldquo;My daughter LOVES Mathseeds and is actually excited to be doing math, which is so amazing to see. I wish
    there were fun programs like this around when I was a kid.&rdquo;
    <strong> &ndash; Tracey </strong>
  </div>
  <div class="hidden" data-testimonial-slide>
    &ldquo;Great program!! My child loved the characters and looked forward to his lessons every day. He mastered the
    concepts quickly and has retained them. Highly, highly recommend to parents of young children.&rdquo;
    <strong> &ndash; Laurine </strong>
  </div>
  <div class="hidden" data-testimonial-slide>
    &ldquo;I've been using since my kids were in kindergarten. They not only love math but are doing great as far as
    meeting or exceeding grade level skills. I would never choose a different math program!&rdquo;
    <strong> &ndash; Coralie </strong>
  </div>
  <div class="hidden" data-testimonial-slide>
    &ldquo;We have been subscribers for several years now. Great program, and it makes learning math so much easier. The
    supplemental worksheets are great for making sure they really master the material.&rdquo;
    <strong> &ndash; Cami </strong>
  </div>
  <div class="hidden" data-testimonial-slide>
    &ldquo;My 8&#8209;year&#8209;old was struggling with the math program we were using, but he loves that Mathseeds
    feels like a game. We have had a great experience.&rdquo;
    <strong> &ndash; Andrea </strong>
  </div>
  <a 
  href="
    /about/testimonials
  "
  class="
    inline-block font-openSans text-center font-bold border border-solid focus:no-underline hover:no-underline
    !text-white focus:text-white hover:text-white
    py-1 px-3 rounded text-base
    
    border-msBlue450 bg-msBlue400 focus:bg-msBlue450 hover:bg-msBlue450
    
    
    
    
    
    
    
    
    
    border-b-2 mt-3
  "
  
  
  
>
  Read more
</a>
</div>

<div>
  <a id="re-ad" href="https://readingeggs.com">
    <img
      src="/images/re-ad-201908.png"
      class="w-full max-w-full block rounded border border-solid border-dustyBlack250"
      alt="Reading Eggs"
    />
  </a>
</div>

  </aside>
</div>

      </main>
    </div>
    <footer class="parent-footer bg-forestGreen350 py-5">
  <div class="w-full max-w-[970px] flex flex-wrap justify-between mx-auto px-[15px] pb-14">
    <div class="w-full md:w-2/12 mt-2">
      <a title="Blake eLearning &ndash; Education programs for children" id="blake" href="https://readingeggs.com.au/about-blake">
        <img src="/images/blake.png" class="mx-auto" alt="Blake eLearning" width="56px" height="63px" />
      </a>
      <a title="3p logo" id="threep-logo-white" href="https://www.3plearning.com/">
        <img src="/images/logos/logo-3p-white.svg" class="my-3 mx-auto h-[25px]" alt="3p logo" />
      </a>
    </div>
    <div class="w-full md:w-5/12 mt-3 mb-4 text-center text-xs leading-6">
      <ul class="list-none">
        <li><a href="http://readingeggs.com/copyright">&copy; <span id="copyright"></span></a></li>
        <li><a href="about-blake/">About Us</a></li>
        <li><a href="/terms/">Terms of Use</a></li>
      </ul>
      <ul class="list-none">
        <li><a href="/privacy/">Privacy Policy</a></li>
        <li><a href="#" id="privacy-choices">
          
          <svg class="inline-block" style="vertical-align: middle; filter:drop-shadow(0 0 1px rgba(0, 0, 0, 0.3));" width="28" height="16" viewBox="0 0 28 16" fill="none" xmlns="http://www.w3.org/2000/svg">
            <rect width="28" height="16" rx="8" fill="#36ADE1"></rect>
            <rect x="14" y="2" width="12" height="12" rx="6" fill="white"></rect>
          </svg>
          <span> Your Privacy Choices</span>
        </a></li>
        <li><a href="/refund/">Refund Policy</a></li>
        <li><a href="/contact_us/">Contact Us</a></li>
        <li><a href="/accessibility/">Accessibility</a></li>
        <li><a href="/ccpa/">Do Not Sell My Info - US Residents Only</a></li>
        <li><a href="/responsible-disclosure-program/">Responsible Disclosure Program</a></li>
        <li><a href="/data-breach-plan/">Data Breach Response Plan</a></li>
        <li><a href="https://marketing-cdn.3plearning.com/uploads/assets/3P/2024-modern-slavery.pdf" target="_blank">Modern Slavery and Human Trafficking Statement</a></li>
      </ul>
    </div>
    <div class="w-full md:w-4/12">
      <div class="block w-[200px] my-3 mx-auto">
        <meta class="netreviewsWidget" id="netreviewsWidgetNum864" data-jsurl="//cl.avis-verifies.com/us/cache/6/e/a/6ea1d77e-57c8-c744-0d90-d0f51399b030/widget4/widget01-864_script.js"/><script src="//cl.avis-verifies.com/us/widget4/widget01.min.js"></script>

      </div>
      <ul class="my-3 list-none text-center">
        <li class="facebook">
          <a href="https://facebook.com/mathseeds">
            <img src="/images/facebook-icon.png" alt="Facebook" />
          </a>
        </li>
        <li class="instagram">
          <a href="https://instagram.com/mathseeds">
            <img src="/images/instagram-icon.png" alt="Instagram" />
          </a>
        </li>
      </ul>
      <div class="flex flex-row items-center justify-center gap-2">
        <a class="text-center" href="https://www.kidsafeseal.com/certifiedproducts/mathseeds_websites.html" target="_blank">
          <img src="https://www.kidsafeseal.com/sealimage/3510299071502207282/mathseeds_websites_small_darktm.png" alt="Mathseeds Websites are certified by the kidSAFE Seal Program.">
        </a>
        <a class="text-center" href="https://www.edtechdigest.com/cool-tech-award-2025/" target="_blank">
          <img class="w-[50px] h-auto rounded" src="/images/awards/cool-tech-award-2025.png" alt="Mathseeds has been selected as a finalist for a leading math solution, one of 25 solutions.">
        </a>
      </div>
    </div>
  </div>
</footer>

    
<!-- start geoip -->
<script src="/javascripts/geoip2.js?time=2026-04-28T02%3A45%3A32%2B00%3A00"></script>
<script src="/javascripts/min/jquery.cookie.min.js"></script>
<script src="/javascripts/hosts.js?time=2026-04-28T02%3A45%3A32%2B00%3A00"></script>
<script src="/javascripts/redirector.js?time=2026-04-28T02%3A45%3A32%2B00%3A00"></script>
<!-- End geoip -->

    <!-- email verification -->
    <script src="/javascripts/spin.min.js"></script>
    <script src="/javascripts/jquery.spin.js"></script>
    <!-- X email verification -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/0.10.0/lodash.min.js"></script>
    <!-- <script src="https://vjs.zencdn.net/8.16.1/video.min.js"></script> -->
    <script src="/javascripts/app.js"></script>
  </body>
</html>
