https://www.windlab.com/

已提交的 URL:
https://windlab.com/已重新導向
報告完成時間:

連結 · 找到 3 個

從頁面中識別的傳出連結

JavaScript 變數 · 找到 24 個

在頁面的視窗物件上載入的全域 JavaScript 變數是在函數外部宣告的變數,可從目前範圍內程式碼中的任何位置存取

主控台記錄訊息 · 找到 0 條

記錄到 Web 主控台的訊息

HTML

頁面的原始 HTML 主體

<!DOCTYPE html><!-- This site was created in Webflow. https://webflow.com --><!-- Last Published: Fri Dec 13 2024 04:08:10 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="www.windlab.com" data-wf-page="66fcbbebd35ce4d5379972d7" data-wf-site="66fcbbebd35ce4d5379972d1" lang="en" class=" w-mod-js w-mod-ix" style="--border-radius-menu: 35px;"><head><style>.wf-force-outline-none[tabindex="-1"]:focus{outline:none;}</style><meta http-equiv="origin-trial" content="A/kargTFyk8MR5ueravczef/wIlTkbVk1qXQesp39nV+xNECPdLBVeYffxrM8TmZT6RArWGQVCJ0LRivD7glcAUAAACQeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZS5jb206NDQzIiwiZmVhdHVyZSI6IkRpc2FibGVUaGlyZFBhcnR5U3RvcmFnZVBhcnRpdGlvbmluZzIiLCJleHBpcnkiOjE3NDIzNDIzOTksImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9"><meta http-equiv="origin-trial" content="A/kargTFyk8MR5ueravczef/wIlTkbVk1qXQesp39nV+xNECPdLBVeYffxrM8TmZT6RArWGQVCJ0LRivD7glcAUAAACQeyJvcmlnaW4iOiJodHRwczovL2dvb2dsZS5jb206NDQzIiwiZmVhdHVyZSI6IkRpc2FibGVUaGlyZFBhcnR5U3RvcmFnZVBhcnRpdGlvbmluZzIiLCJleHBpcnkiOjE3NDIzNDIzOTksImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWV9"><meta charset="utf-8"><title>Windlab</title><meta content="Windlab is the Australian renewable energy company championing our clean energy future." name="description"><meta content="width=device-width, initial-scale=1" name="viewport"><meta content="Webflow" name="generator"><link href="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/css/windlab-interim.webflow.875599f8a.css" rel="stylesheet" type="text/css"><script type="text/javascript" async="" charset="utf-8" src="https://www.gstatic.com/recaptcha/releases/pPK749sccDmVW_9DSeTMVvh2/recaptcha__en.js" crossorigin="anonymous" integrity="sha384-BJuEtmqk8gvp2kvOiXzxtaoRQQS7QjSOSAczV0tKC29lpbOt/RFR43n1iVnzO4Em"></script><script type="text/javascript" async="" charset="utf-8" src="https://www.gstatic.com/recaptcha/releases/pPK749sccDmVW_9DSeTMVvh2/recaptcha__en.js" crossorigin="anonymous" integrity="sha384-BJuEtmqk8gvp2kvOiXzxtaoRQQS7QjSOSAczV0tKC29lpbOt/RFR43n1iVnzO4Em"></script><script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script><link href="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/672dc24d56dd37b516e5388c_Favicon.png" rel="shortcut icon" type="image/x-icon"><link href="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/672dc253f32772c4676140ff_Webclip.png" rel="apple-touch-icon"><script src="https://www.google.com/recaptcha/api.js" type="text/javascript"></script><style>

body {
  	overflow-x: hidden;
}
  
/* ----- Bullet point color */
::marker {
    color: var(--renew-blue);
}
.blue-block ::marker {
    color: white;
}

/* ----- Nav Link Effect */

/* Make underline full length on hover */
.navlink:hover::after,
.navlink:hover::before {
      width: 100%;
      left: 0;
    }
/* Create underline */
.navlink::after,
.navlink::before {
    content: ''; 
    position: absolute;
    bottom: -2px;
    width: 0;
    right: 0;
    height: 2px;
    z-index: 100!important;
  }

/* Second underline delay and colour */
.navlink::before {
    transition: width .4s cubic-bezier(0.51, 0.18, 0, 0.88) .1s;
    background: var(--renew-blue)
  }
  
/* First underline delay and colour – Main hover colour */
.navlink::after {
    transition: width .2s cubic-bezier(0.29, 0.18, 0.26, 0.83);
    background: var(--energy-cyan);
  }

/* ----- Button arrow */
 
/* Smooth out the animation */
.button, input.button {
  transition: all 0.3s ease-out;
}

/* Arrow size buttons */
.button span svg {
  height: 0.8em;
  width: auto;
  padding-left: 7px;
  transition: all 0.3s ease-out
}

/* button hover animation */
.button:hover span svg {
  padding-left: 10px;
  margin-right: -3px;
}

/* --- Arrow on pagination */
  
/* Format svg on pagination button */
.button.w-pagination-previous span {
    display: flex;
    flex-direction: row-reverse;
    align-items: center;
  	margin-left: -2px;
}
  
/* Flipping svg around on previous button */  
.button.w-pagination-previous span svg {
	transform: rotateY(180deg);
  }

/* Flipping animation around on previous button */
.button.w-pagination-previous:hover span svg {
	transform: translateX(-3px) rotateY(180deg);
}

  
.w-nav-overlay [data-nav-menu-open] { 
  top: -25px;
}  
  
.w-nav-overlay { 
  top: 50%;
}
  
/* text underline */
 .accent {
  position: relative;
  display: inline-block;
}

.line .svg-wrapper {
    position: absolute;
    bottom: -50%;
    left: -0.1em;
    right: 0;
    width: 104%;
    height: auto;
}
  

  
.blog-tile .button path {
  stroke: var(--renew-blue)!important;
}
  
.blog-tile .button {
  color: var(--renew-blue)!important;
}
  
.blog-tile:hover .button path {
  stroke: var(--energy-cyan)!important;
}

.blog-tile:hover .button {
  color: var(--energy-cyan)!important;
}
 
.blog-tile .button, .blog-tile .button path  {
  transition: all 0.2s ease-out 0.2s;
}
.blog-tile-details {
  transform-style: preserve-3d;
}

.blog-tile {
  transition-duration: 300ms;
  transition-property: transform, box-shadow;
  transition-timing-function: ease-out;
  transform: rotate3d(0);
}

.blog-tile:hover {
  transition-duration: 150ms;
  box-shadow: 0 3px 10px 3px #00000015;
}

</style>







<!-- Additional ReCaptcha Script -->
<script src="https://www.google.com/recaptcha/enterprise.js" async="" defer=""></script>

     <script type="text/javascript">
      var onloadCallback = function() {
        grecaptcha.enterprise.render('html_element', {
          'sitekey' : '6LclQZwpAAAAAL8TQ_dUxM-hEUwL4A2FhaBroRkT',
        });
      };
</script>

<script>
window.addEventListener("load", function () {
  const underlinedElements = document.querySelectorAll('.accent.line');

  underlinedElements.forEach(element => {
    const textWidth = element.offsetWidth;

    // Create the SVG element
    const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
    svg.setAttribute("class", "svg-wrapper");
    svg.setAttribute("width", textWidth);
    svg.setAttribute("height", 20);
    svg.setAttribute("viewBox", `0 0 ${textWidth} 20`);
    svg.setAttribute("preserveAspectRatio", "none");

    // Create the path
    const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
    path.setAttribute("fill", "none");
    path.setAttribute("stroke", "#00d5ff");
    path.setAttribute("stroke-width", "4");
    path.setAttribute("stroke-linecap", "round");

    const startX = 0.01 * textWidth + 2;
    const midX = 0.65 * textWidth;
    const endX = 0.99 * textWidth - 2;
    path.setAttribute("d", `M${startX},16 Q${midX},12 ${endX},16`);

    svg.appendChild(path);
    element.appendChild(svg);

    const length = path.getTotalLength();
    path.style.strokeDasharray = length;
    path.style.strokeDashoffset = length;

    // Initial state: path is hidden
    requestAnimationFrame(() => {
      path.style.transition = 'stroke-dashoffset 0.5s ease-out';
    });

    function animatePath() {
      requestAnimationFrame(() => {
        path.style.strokeDashoffset = '0';
      });
    }

    const observer = new IntersectionObserver(entries => {
      entries.forEach(entry => {
        if (entry.isIntersecting) {
          animatePath();
          observer.unobserve(entry.target);
        }
      });
    }, { threshold: 0.1 });

    // Check if the element is already in the viewport on page load
    const rect = element.getBoundingClientRect();
    const isVisible = rect.top < window.innerHeight && rect.bottom >= 0;

    if (isVisible) {
      // Longer delay for on-load animations
      setTimeout(animatePath, 1500);
    } else {
      observer.observe(svg);
    }
  });
});
</script>

<!-- Google tag (gtag.js) -->
<script async="" src="https://www.googletagmanager.com/gtag/js?id=G-C8FZQ0DGFD"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-C8FZQ0DGFD');
</script><style type="text/css">div.eapps-widget{position:relative}div.eapps-widget.eapps-widget-show-toolbar:before{position:absolute;content:"";display:block;bottom:0;top:0;left:0;right:0;pointer-events:none;border:1px solid transparent;transition:border .3s ease;z-index:1}.eapps-widget-toolbar{position:absolute;top:-32px;left:0;right:0;display:block;z-index:99999;padding-bottom:4px;transition:all .3s ease;pointer-events:none;opacity:0}.eapps-widget:hover .eapps-widget-toolbar{opacity:1;pointer-events:auto}.eapps-widget-toolbar a{text-decoration:none;box-shadow:none!important}.eapps-widget-toolbar-panel{border-radius:6px;background-color:#222;color:#fff;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;top:0;position:relative;transition:all .3s ease;opacity:0;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-shadow:0 0 0 1px hsla(0,0%,100%,.2);height:28px}.eapps-widget:hover .eapps-widget-toolbar-panel{opacity:1}.eapps-widget-toolbar-panel-wrapper{width:100%;position:relative}.eapps-widget-toolbar-panel-only-you{position:absolute;top:-24px;font-size:11px;line-height:14px;color:#9c9c9c;padding:5px 4px}.eapps-widget-toolbar-panel-logo{width:28px;height:28px;border-right:1px solid hsla(0,0%,100%,.2);display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.eapps-widget-toolbar-panel-logo svg{display:block;width:15px;height:15px;fill:#f93262}.eapps-widget-toolbar-panel-edit{font-size:12px;font-weight:400;line-height:14px;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding:9px;border-right:1px solid hsla(0,0%,100%,.2);color:#fff;text-decoration:none}.eapps-widget-toolbar-panel-edit-icon{width:14px;height:14px;margin-right:8px}.eapps-widget-toolbar-panel-edit-icon svg{display:block;width:100%;height:100%;fill:#fff}.eapps-widget-toolbar-panel-views{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.eapps-widget-toolbar-panel-views-label{font-size:12px;font-weight:400;line-height:14px;margin-left:8px}.eapps-widget-toolbar-panel-views-bar{display:-ms-inline-flexbox;display:inline-flex;width:70px;height:3px;border-radius:2px;margin-left:8px;background-color:hsla(0,0%,100%,.3)}.eapps-widget-toolbar-panel-views-bar-inner{border-radius:2px;background-color:#4ad504}.eapps-widget-toolbar-panel-views-green .eapps-widget-toolbar-panel-views-bar-inner{background-color:#4ad504}.eapps-widget-toolbar-panel-views-red .eapps-widget-toolbar-panel-views-bar-inner{background-color:#ff4734}.eapps-widget-toolbar-panel-views-orange .eapps-widget-toolbar-panel-views-bar-inner{background-color:#ffb400}.eapps-widget-toolbar-panel-views-percent{display:-ms-inline-flexbox;display:inline-flex;margin-left:8px;margin-right:8px;font-size:12px;font-weight:400;line-height:14px}.eapps-widget-toolbar-panel-views-get-more{padding:9px 16px;background-color:#f93262;color:#fff;font-size:12px;font-weight:400;border-radius:0 6px 6px 0}.eapps-widget-toolbar-panel-share{position:absolute;top:0;display:inline-block;margin-left:8px;width:83px;height:28px;padding-bottom:4px;box-sizing:content-box!important}.eapps-widget-toolbar-panel-share:hover .eapps-widget-toolbar-panel-share-block{opacity:1;pointer-events:all}.eapps-widget-toolbar-panel-share-button{padding:0 18px;height:28px;background-color:#1c91ff;color:#fff;font-size:12px;font-weight:400;border-radius:6px;position:absolute;top:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;cursor:default;-ms-flex-align:center;align-items:center}.eapps-widget-toolbar-panel-share-button svg{display:inline-block;margin-right:6px;fill:#fff;position:relative;top:-1px}.eapps-widget-toolbar-panel-share-block{position:absolute;background:#fff;border:1px solid hsla(0,0%,7%,.1);border-radius:10px;width:209px;top:32px;transform:translateX(-63px);opacity:0;pointer-events:none;transition:all .3s ease;box-shadow:0 4px 6px rgba(0,0,0,.05)}.eapps-widget-toolbar-panel-share-block:hover{opacity:1;pointer-events:all}.eapps-widget-toolbar-panel-share-block-text{color:#111;font-size:15px;font-weight:400;padding:12px 0;text-align:center}.eapps-widget-toolbar-panel-share-block-text-icon{padding-bottom:4px}.eapps-widget-toolbar-panel-share-block-actions{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;border-top:1px solid hsla(0,0%,7%,.1)}.eapps-widget-toolbar-panel-share-block-actions-item{width:33.333333%;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;height:39px;transition:all .3s ease;background-color:transparent}.eapps-widget-toolbar-panel-share-block-actions-item:hover{background-color:#fafafa}.eapps-widget-toolbar-panel-share-block-actions-item a{width:100%;height:100%;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.eapps-widget-toolbar-panel-share-block-actions-item-icon{width:16px;height:16px;display:block}.eapps-widget-toolbar-panel-share-block-actions-item-facebook .eapps-widget-toolbar-panel-share-block-actions-item-icon{fill:#3c5a9b}.eapps-widget-toolbar-panel-share-block-actions-item-twitter .eapps-widget-toolbar-panel-share-block-actions-item-icon{fill:#1ab2e8}.eapps-widget-toolbar-panel-share-block-actions-item-google .eapps-widget-toolbar-panel-share-block-actions-item-icon{fill:#dd4b39}.eapps-widget-toolbar-panel-share-block-actions-item:not(:last-child){border-right:1px solid hsla(0,0%,7%,.1)}</style><link href="https://core.service.elfsight.com" rel="preconnect" crossorigin=""><link href="https://static.elfsight.com" rel="preconnect" crossorigin=""><link href="https://service-reviews-ultimate.elfsight.com" rel="preconnect" crossorigin=""><link href="https://storage.elfsight.com" rel="preconnect" crossorigin=""></head><body><div class="navbar-logo-left"><div data-w-id="bb0ead5b-40a5-7789-c283-7e3d038ee020" data-animation="default" data-collapse="medium" data-duration="400" data-easing="ease-out-quad" data-easing2="ease-out-quad" role="banner" class="navbarcontainer w-nav"><div><div id="navBarWrapper" class="navbar-wrapper"><a href="/" aria-current="page" class="navbar-brand w-nav-brand w--current" aria-label="home"><img loading="lazy" src="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/672d45fdab1bec2effb93d8c_WL_Logo_RGB.svg" alt="" class="nav-logo"></a><div class="menu-button w-nav-button" style="-webkit-user-select: text;" aria-label="menu" role="button" tabindex="0" aria-controls="w-nav-overlay-0" aria-haspopup="menu" aria-expanded="false"><div class="icon-3 w-icon-nav-menu"></div></div><nav role="navigation" class="nav-menu-wrapper w-nav-menu" style="height: 0px;"><a href="/" aria-current="page" class="navlink firstchild w--current">About</a><div data-delay="500" data-hover="true" data-w-id="a7bf9f40-9503-d3ec-10c2-4b161d7f9247" class="dropdown-cont w-dropdown"><div data-w-id="a7bf9f40-9503-d3ec-10c2-4b161d7f9248" class="drop-down w-dropdown-toggle" id="w-dropdown-toggle-0" aria-controls="w-dropdown-list-0" aria-haspopup="menu" aria-expanded="false" role="button" tabindex="0"><a href="/who-we-are" class="navlink drop-down-link">Who we are</a><div class="nav-arrow-3 w-embed"><style>
  .drop-down .arrow {
    display: block;
    cursor: pointer;
    width: 17px;
    height: 20px;
    margin: 0 auto;
  }

 .drop-down .arrow .path {
    background-color: #333;
    display: block;
    float: left;
    transition: all 0.3s ease-in-out;
  }
 .drop-down:hover .arrow .path {
    background-color: var(--renew-blue);
    }

  .drop-down .down-arrow .path {
    width: 2px;
    height: 13px;
    margin: 3px;
  }
  
  .drop-down.w--open .down-arrow .path {
    height: 14px;
    margin-top: 1px;
  }
  
 .dropdown:hover .drop-down .down-arrow .path {
	  background-color: #001cff;
  }

 .drop-down .arrow .down-arrow .path:nth-child(1) {
  -webkit-transform: translateX(0px) rotate(-45deg);
  -ms-transform: translateX(0px) rotate(-45deg);
  -o-transform: translateX(0px) rotate(-45deg);
  transform: translateX(0px) rotate(-45deg); 
  }

 .drop-down .arrow .down-arrow .path:nth-child(2) {
  -webkit-transform: translateY(0px) rotate(45deg);
  -ms-transform: translateY(0px) rotate(45deg);
  -o-transform: translateY(0px) rotate(45deg);
  transform: translateY(0px) rotate(45deg);  
  }
.drop-down.w--open .arrow .down-arrow .path:nth-child(1) {
  -webkit-transform: translateX(4px) rotate(45deg);
  -ms-transform: translateX(4px) rotate(45deg);
  -o-transform: translateX(4px) rotate(45deg);
  transform: translateX(4px) rotate(45deg);
  }

.drop-down.w--open .arrow .down-arrow .path:nth-child(2) {
  -webkit-transform: translateX(-4px) rotate(-45deg);
  -ms-transform: translateX(-4px) rotate(-45deg);
  -o-transform: translateX(-4px) rotate(-45deg);
  transform: translateX(-4px) rotate(-45deg);
  }
  
@media (max-width: 991px) {

  .drop-down .arrow {
    width: 14px;
    height: 18px;
  }
  
  .drop-down .down-arrow .path {
    width: 1.5px;
    height: 10px;
    margin: 2.5px;
  }
  
  .drop-down.w--open .down-arrow .path {
    height: 14px;
    margin-top: 2px;
  }
  
  .drop-down.w--open .arrow .down-arrow .path:nth-child(1) {
  -webkit-transform: translateX(3.5px) rotate(45deg);
  -ms-transform: translateX(3.5px) rotate(45deg);
  -o-transform: translateX(3.5px) rotate(45deg);
  transform: translateX(3.5px) rotate(45deg);
  }

.drop-down.w--open .arrow .down-arrow .path:nth-child(2) {
  -webkit-transform: translateX(-3.5px) rotate(-45deg);
  -ms-transform: translateX(-3.5px) rotate(-45deg);
  -o-transform: translateX(-3.5px) rotate(-45deg);
  transform: translateX(-3.5px) rotate(-45deg);
  }
}
</style>


<div class="arrow">
  <div class="down-arrow">
    <span class="path"></span>
    <span class="path"></span>
  </div>
</div></div></div><nav class="dropdown-menu-lvl2 w-dropdown-list" id="w-dropdown-list-0" aria-labelledby="w-dropdown-toggle-0" style="display: none; height: 0px;"><div class="nav-divider-2"></div><a href="/careers" class="navlink dropdown-item" tabindex="0">Careers</a><div class="nav-divider-2 hide"></div><a href="/our-leadership-team" class="navlink dropdown-item hide" tabindex="0">Our leadership team</a></nav></div><div data-delay="500" data-hover="true" data-w-id="77105aed-ff2d-0e08-0dfc-63b04a1897aa" class="dropdown-cont w-dropdown"><div data-w-id="77105aed-ff2d-0e08-0dfc-63b04a1897ab" class="drop-down w-dropdown-toggle" id="w-dropdown-toggle-1" aria-controls="w-dropdown-list-1" aria-haspopup="menu" aria-expanded="false" role="button" tabindex="0"><a href="/what-we-do" class="navlink drop-down-link">What we do</a><div class="nav-arrow-3 w-embed"><style>
  .drop-down .arrow {
    display: block;
    cursor: pointer;
    width: 17px;
    height: 20px;
    margin: 0 auto;
  }

 .drop-down .arrow .path {
    background-color: #333;
    display: block;
    float: left;
    transition: all 0.3s ease-in-out;
  }
 .drop-down:hover .arrow .path {
    background-color: var(--renew-blue);
    }

  .drop-down .down-arrow .path {
    width: 2px;
    height: 13px;
    margin: 3px;
  }
  
  .drop-down.w--open .down-arrow .path {
    height: 14px;
    margin-top: 1px;
  }
  
 .dropdown:hover .drop-down .down-arrow .path {
	  background-color: #001cff;
  }

 .drop-down .arrow .down-arrow .path:nth-child(1) {
  -webkit-transform: translateX(0px) rotate(-45deg);
  -ms-transform: translateX(0px) rotate(-45deg);
  -o-transform: translateX(0px) rotate(-45deg);
  transform: translateX(0px) rotate(-45deg); 
  }

 .drop-down .arrow .down-arrow .path:nth-child(2) {
  -webkit-transform: translateY(0px) rotate(45deg);
  -ms-transform: translateY(0px) rotate(45deg);
  -o-transform: translateY(0px) rotate(45deg);
  transform: translateY(0px) rotate(45deg);  
  }
.drop-down.w--open .arrow .down-arrow .path:nth-child(1) {
  -webkit-transform: translateX(4px) rotate(45deg);
  -ms-transform: translateX(4px) rotate(45deg);
  -o-transform: translateX(4px) rotate(45deg);
  transform: translateX(4px) rotate(45deg);
  }

.drop-down.w--open .arrow .down-arrow .path:nth-child(2) {
  -webkit-transform: translateX(-4px) rotate(-45deg);
  -ms-transform: translateX(-4px) rotate(-45deg);
  -o-transform: translateX(-4px) rotate(-45deg);
  transform: translateX(-4px) rotate(-45deg);
  }
  
@media (max-width: 991px) {

  .drop-down .arrow {
    width: 14px;
    height: 18px;
  }
  
  .drop-down .down-arrow .path {
    width: 1.5px;
    height: 10px;
    margin: 2.5px;
  }
  
  .drop-down.w--open .down-arrow .path {
    height: 14px;
    margin-top: 2px;
  }
  
  .drop-down.w--open .arrow .down-arrow .path:nth-child(1) {
  -webkit-transform: translateX(3.5px) rotate(45deg);
  -ms-transform: translateX(3.5px) rotate(45deg);
  -o-transform: translateX(3.5px) rotate(45deg);
  transform: translateX(3.5px) rotate(45deg);
  }

.drop-down.w--open .arrow .down-arrow .path:nth-child(2) {
  -webkit-transform: translateX(-3.5px) rotate(-45deg);
  -ms-transform: translateX(-3.5px) rotate(-45deg);
  -o-transform: translateX(-3.5px) rotate(-45deg);
  transform: translateX(-3.5px) rotate(-45deg);
  }
}
</style>


<div class="arrow">
  <div class="down-arrow">
    <span class="path"></span>
    <span class="path"></span>
  </div>
</div></div></div><nav class="dropdown-menu-lvl2 w-dropdown-list" id="w-dropdown-list-1" aria-labelledby="w-dropdown-toggle-1" style="display: none; height: 0px;"><div class="nav-divider-2"></div><a href="/our-projects" class="navlink dropdown-item" tabindex="0">Our projects</a></nav></div><div data-delay="500" data-hover="true" data-w-id="32e3fc22-43b4-663e-25f3-eb2b35d9127e" class="dropdown-cont w-dropdown"><div data-w-id="32e3fc22-43b4-663e-25f3-eb2b35d9127f" class="drop-down w-dropdown-toggle" id="w-dropdown-toggle-2" aria-controls="w-dropdown-list-2" aria-haspopup="menu" aria-expanded="false" role="button" tabindex="0"><a href="/our-impact" class="navlink drop-down-link">Our impact</a><div class="nav-arrow-3 w-embed"><style>
  .drop-down .arrow {
    display: block;
    cursor: pointer;
    width: 17px;
    height: 20px;
    margin: 0 auto;
  }

 .drop-down .arrow .path {
    background-color: #333;
    display: block;
    float: left;
    transition: all 0.3s ease-in-out;
  }
 .drop-down:hover .arrow .path {
    background-color: var(--renew-blue);
    }

  .drop-down .down-arrow .path {
    width: 2px;
    height: 13px;
    margin: 3px;
  }
  
  .drop-down.w--open .down-arrow .path {
    height: 14px;
    margin-top: 1px;
  }
  
 .dropdown:hover .drop-down .down-arrow .path {
	  background-color: #001cff;
  }

 .drop-down .arrow .down-arrow .path:nth-child(1) {
  -webkit-transform: translateX(0px) rotate(-45deg);
  -ms-transform: translateX(0px) rotate(-45deg);
  -o-transform: translateX(0px) rotate(-45deg);
  transform: translateX(0px) rotate(-45deg); 
  }

 .drop-down .arrow .down-arrow .path:nth-child(2) {
  -webkit-transform: translateY(0px) rotate(45deg);
  -ms-transform: translateY(0px) rotate(45deg);
  -o-transform: translateY(0px) rotate(45deg);
  transform: translateY(0px) rotate(45deg);  
  }
.drop-down.w--open .arrow .down-arrow .path:nth-child(1) {
  -webkit-transform: translateX(4px) rotate(45deg);
  -ms-transform: translateX(4px) rotate(45deg);
  -o-transform: translateX(4px) rotate(45deg);
  transform: translateX(4px) rotate(45deg);
  }

.drop-down.w--open .arrow .down-arrow .path:nth-child(2) {
  -webkit-transform: translateX(-4px) rotate(-45deg);
  -ms-transform: translateX(-4px) rotate(-45deg);
  -o-transform: translateX(-4px) rotate(-45deg);
  transform: translateX(-4px) rotate(-45deg);
  }
  
@media (max-width: 991px) {

  .drop-down .arrow {
    width: 14px;
    height: 18px;
  }
  
  .drop-down .down-arrow .path {
    width: 1.5px;
    height: 10px;
    margin: 2.5px;
  }
  
  .drop-down.w--open .down-arrow .path {
    height: 14px;
    margin-top: 2px;
  }
  
  .drop-down.w--open .arrow .down-arrow .path:nth-child(1) {
  -webkit-transform: translateX(3.5px) rotate(45deg);
  -ms-transform: translateX(3.5px) rotate(45deg);
  -o-transform: translateX(3.5px) rotate(45deg);
  transform: translateX(3.5px) rotate(45deg);
  }

.drop-down.w--open .arrow .down-arrow .path:nth-child(2) {
  -webkit-transform: translateX(-3.5px) rotate(-45deg);
  -ms-transform: translateX(-3.5px) rotate(-45deg);
  -o-transform: translateX(-3.5px) rotate(-45deg);
  transform: translateX(-3.5px) rotate(-45deg);
  }
}
</style>


<div class="arrow">
  <div class="down-arrow">
    <span class="path"></span>
    <span class="path"></span>
  </div>
</div></div></div><nav class="dropdown-menu-lvl2 w-dropdown-list" id="w-dropdown-list-2" aria-labelledby="w-dropdown-toggle-2" style="display: none; height: 0px;"><div class="nav-divider-2"></div><a href="/community" class="navlink dropdown-item" tabindex="0">Windlab in the community</a><div class="nav-divider-2"></div><a href="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/673d5f6774ad30d74132f976_CEC%20Windlab%20-%20Best%20practice%20charter.pdf" target="_blank" class="navlink dropdown-item" tabindex="0">CEC Best Practice Charter</a></nav></div><a href="/partner-with-us" class="navlink">Partner with us</a><div data-delay="500" data-hover="true" data-w-id="77bad361-df50-542e-2893-806d81c84f0a" class="dropdown-cont w-dropdown"><div data-w-id="77bad361-df50-542e-2893-806d81c84f0b" class="drop-down w-dropdown-toggle" id="w-dropdown-toggle-3" aria-controls="w-dropdown-list-3" aria-haspopup="menu" aria-expanded="false" role="button" tabindex="0"><div href="#" class="no-link">News and resources</div><div class="nav-arrow-3 w-embed"><style>
  .drop-down .arrow {
    display: block;
    cursor: pointer;
    width: 17px;
    height: 20px;
    margin: 0 auto;
  }

 .drop-down .arrow .path {
    background-color: #333;
    display: block;
    float: left;
    transition: all 0.3s ease-in-out;
  }
 .drop-down:hover .arrow .path {
    background-color: var(--renew-blue);
    }

  .drop-down .down-arrow .path {
    width: 2px;
    height: 13px;
    margin: 3px;
  }
  
  .drop-down.w--open .down-arrow .path {
    height: 14px;
    margin-top: 1px;
  }
  
 .dropdown:hover .drop-down .down-arrow .path {
	  background-color: #001cff;
  }

 .drop-down .arrow .down-arrow .path:nth-child(1) {
  -webkit-transform: translateX(0px) rotate(-45deg);
  -ms-transform: translateX(0px) rotate(-45deg);
  -o-transform: translateX(0px) rotate(-45deg);
  transform: translateX(0px) rotate(-45deg); 
  }

 .drop-down .arrow .down-arrow .path:nth-child(2) {
  -webkit-transform: translateY(0px) rotate(45deg);
  -ms-transform: translateY(0px) rotate(45deg);
  -o-transform: translateY(0px) rotate(45deg);
  transform: translateY(0px) rotate(45deg);  
  }
.drop-down.w--open .arrow .down-arrow .path:nth-child(1) {
  -webkit-transform: translateX(4px) rotate(45deg);
  -ms-transform: translateX(4px) rotate(45deg);
  -o-transform: translateX(4px) rotate(45deg);
  transform: translateX(4px) rotate(45deg);
  }

.drop-down.w--open .arrow .down-arrow .path:nth-child(2) {
  -webkit-transform: translateX(-4px) rotate(-45deg);
  -ms-transform: translateX(-4px) rotate(-45deg);
  -o-transform: translateX(-4px) rotate(-45deg);
  transform: translateX(-4px) rotate(-45deg);
  }
  
@media (max-width: 991px) {

  .drop-down .arrow {
    width: 14px;
    height: 18px;
  }
  
  .drop-down .down-arrow .path {
    width: 1.5px;
    height: 10px;
    margin: 2.5px;
  }
  
  .drop-down.w--open .down-arrow .path {
    height: 14px;
    margin-top: 2px;
  }
  
  .drop-down.w--open .arrow .down-arrow .path:nth-child(1) {
  -webkit-transform: translateX(3.5px) rotate(45deg);
  -ms-transform: translateX(3.5px) rotate(45deg);
  -o-transform: translateX(3.5px) rotate(45deg);
  transform: translateX(3.5px) rotate(45deg);
  }

.drop-down.w--open .arrow .down-arrow .path:nth-child(2) {
  -webkit-transform: translateX(-3.5px) rotate(-45deg);
  -ms-transform: translateX(-3.5px) rotate(-45deg);
  -o-transform: translateX(-3.5px) rotate(-45deg);
  transform: translateX(-3.5px) rotate(-45deg);
  }
}
</style>


<div class="arrow">
  <div class="down-arrow">
    <span class="path"></span>
    <span class="path"></span>
  </div>
</div></div></div><nav class="dropdown-menu-lvl2 w-dropdown-list" id="w-dropdown-list-3" aria-labelledby="w-dropdown-toggle-3" style="display: none; height: 0px;"><div class="nav-divider-2"></div><a href="/news" class="navlink dropdown-item" tabindex="0">Latest news</a><div class="nav-divider-2"></div><a href="/media-library" class="navlink dropdown-item" tabindex="0">Media library</a><div class="nav-divider-2"></div><a href="/resources" class="navlink dropdown-item" tabindex="0">Resources</a></nav></div><a href="/fact-sheets" class="navlink hide">Fact sheets</a><a href="/contact" class="navlink last-child">Contact</a></nav></div></div><div class="w-nav-overlay" data-wf-ignore="" id="w-nav-overlay-0"></div></div></div><section class="header"><img class="image header home" src="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/670626cf80701b33e5725a31_0K3A7938.jpg" width="823" height="Auto" alt="" sizes="100vw" object-position="50% 40%" loading="lazy" srcset="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/670626cf80701b33e5725a31_0K3A7938-p-500.jpg 500w, https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/670626cf80701b33e5725a31_0K3A7938-p-800.jpg 800w, https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/670626cf80701b33e5725a31_0K3A7938-p-1080.jpg 1080w, https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/670626cf80701b33e5725a31_0K3A7938-p-1600.jpg 1600w, https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/670626cf80701b33e5725a31_0K3A7938.jpg 1920w" style="object-position: 50% 40%;"><div class="header-gradient-overlay"></div><div class="hero-header"><h1 class="heading hero">Renewable energy for right <span class="accent line">now<svg class="svg-wrapper" width="100" height="20" viewBox="0 0 100 20" preserveAspectRatio="none"><path fill="none" stroke="#00d5ff" stroke-width="4" stroke-linecap="round" d="M3,16 Q65,12 97,16" style="stroke-dasharray: 94.1208; stroke-dashoffset: 94.1208;"></path></svg></span></h1></div></section><section class="blue"><div class="container blue smaller-width"><div class="half-half no-spacing" style="transform: translate3d(0px, -10%, 0px) scale3d(1, 1, 1) rotateX(0deg) rotateY(0deg) rotateZ(0deg) skew(0deg, 0deg); transform-style: preserve-3d; opacity: 0;"><div class="image-half special"><img class="half-half-image special" src="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/673145be472820398a00892b_0K3A9178.jpg" alt="" sizes="(max-width: 991px) 40vw, 380px" object-position="50% 50%" loading="lazy" srcset="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/673145be472820398a00892b_0K3A9178-p-500.jpg 500w, https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/673145be472820398a00892b_0K3A9178-p-800.jpg 800w, https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/673145be472820398a00892b_0K3A9178-p-1080.jpg 1080w, https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/673145be472820398a00892b_0K3A9178.jpg 1600w" style="object-position: 50% 50%;"></div><div class="text-half special"><div class="blue-block-single-col w-richtext"><h3>We’re the 100% Australian renewable energy company going big on renewables. </h3><h3>We use our world-leading science and expertise to find, develop, and deliver the best performing clean energy projects on the planet.</h3></div></div></div></div></section><section class="section"><div class="w-layout-blockcontainer container w-container"><div class="counter-section"><h1 class="heading-4">Impact that matters</h1><div class="counters"><div class="counter-wrapper"><div class="counter-icon-cont"><img src="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/67318a33f34a64851b575227_Hydrogen_1.svg" loading="lazy" alt="" class="counter-icon padding"></div><div class="counter-content"><div>Nearly</div><div class="counter-wrap"><h1 class="counter renew-blue"><span class="digit">5</span><span class="digit non-digit visible">.</span><span class="digit">9</span></h1></div><div class="counter-unit renew-blue">gigawatts*</div><div class="bottom-text">of new clean generation connected since 2003</div></div></div><div class="divider"></div><div class="counter-wrapper"><div class="counter-icon-cont"><img src="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/66fe2b631bf13655926ade57_lightbulb.svg" loading="lazy" alt="" class="counter-icon"></div><div class="counter-content"><div>Around</div><div class="counter-wrap"><h1 class="counter energy-cyan"><span class="digit">5</span><span class="digit">3</span><span class="digit">9</span></h1></div><div class="counter-unit energy-cyan">thousand</div><div class="bottom-text">households powered every year</div></div></div><div class="divider middle"></div><div class="counter-wrapper"><div class="counter-icon-cont"><img src="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/673189cd430d1d95198eff50_heart%20hand.svg" loading="lazy" alt="" class="counter-icon"></div><div class="counter-content"><div>Nearly</div><div class="counter-wrap"><h1 class="counter focus-blue"><span class="digit non-digit visible">$</span><span class="digit">3</span><span class="digit non-digit visible">m</span></h1></div><div class="counter-unit focus-blue">invested</div><div class="bottom-text">in regional Australian communities</div></div></div><div class="divider"></div><div class="counter-wrapper"><div class="counter-icon-cont"><img src="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/673189cc1da46b92a7f49da0_carbon.svg" loading="lazy" alt="" class="counter-icon"></div><div class="counter-content"><div>Around</div><div class="counter-wrap"><h1 class="counter sky-blue"><span class="digit">5</span><span class="digit non-digit visible">.</span><span class="digit">9</span><span class="digit non-digit visible">m</span></h1></div><div class="counter-unit sky-blue">tonnes</div><div class="bottom-text">of carbon displaced from the atmosphere</div></div></div><div class="divider middle"></div><div class="counter-wrapper"><div class="counter-icon-cont"><img src="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/66fe2b65492e7505da5bffff_turbine.svg" loading="lazy" alt="" class="counter-icon"></div><div class="counter-content"><div>&nbsp;</div><div class="counter-wrap"><h1 class="counter renew-blue"><span class="digit">5</span><span class="digit">3</span><span class="digit non-digit visible">+</span></h1></div><div class="counter-unit renew-blue">gigawatts</div><div class="bottom-text">pipeline of new development projects</div></div></div></div><div class="center">*Includes Windlab projects in South Africa, Tanzania and North America.</div></div><div class="half-half" style="transform: translate3d(0px, -10%, 0px) scale3d(1, 1, 1) rotateX(0deg) rotateY(0deg) rotateZ(0deg) skew(0deg, 0deg); transform-style: preserve-3d; opacity: 0;"><div class="text-half"><h2 class="skye"></h2><h2>Brought to you by science</h2><div class="rich-text-block w-richtext"><p>We were born out of the CSIRO, and our business model is grounded in the trust, innovation and excellence of Australia's premier scientific institution. </p><p>Our diverse in-house expertise maximises impact across the value chain, multiplying benefits to accelerate the transition.</p></div><a href="/who-we-are" class="button w-button"><span>Our story<svg xmlns="http://www.w3.org/2000/svg" width="20" height="13" viewBox="0 0 22.052 16.908"><g transform="translate(1.458 2.205)"><g transform="translate(-1760.414 -5025.357) rotate(-8)"><path d="M-8528.294-13148.675l3.6,7.122s-4.857,3.58-6.587,4.49" transform="translate(9585.62 18372.523)" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="rgb(255, 255, 255)"></path><path d="M-8525.31-13137.083s-11.022-4.321-17.14-2.507" transform="translate(9586 18368.268)" fill="none" stroke-linecap="round" stroke-width="2" stroke="rgb(255, 255, 255)"></path></g></g></svg></span></a></div><div class="image-half"><img src="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/66fcbbebd35ce4d53799731f_KEP_solar%20and%20turbrines%20WR.jpg" loading="lazy" width="Auto" object-position="0% 50%" alt="" sizes="(max-width: 991px) 100vw, 42vw" srcset="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/66fcbbebd35ce4d53799731f_KEP_solar%2520and%2520turbrines%2520WR-p-500.jpg 500w, https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/66fcbbebd35ce4d53799731f_KEP_solar%2520and%2520turbrines%2520WR-p-800.jpg 800w, https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/66fcbbebd35ce4d53799731f_KEP_solar%2520and%2520turbrines%2520WR-p-1080.jpg 1080w, https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/66fcbbebd35ce4d53799731f_KEP_solar%20and%20turbrines%20WR.jpg 1200w" class="half-half-image" style="object-position: 0% 50%;"></div></div><div class="half-half" style="transform: translate3d(0px, -10%, 0px) scale3d(1, 1, 1) rotateX(0deg) rotateY(0deg) rotateZ(0deg) skew(0deg, 0deg); transform-style: preserve-3d; opacity: 0;"><div class="image-half"><img src="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/67061f1a975b419ee4f2664a_0K3A6146.jpg" loading="lazy" object-position="50% 50%" alt="" sizes="(max-width: 991px) 100vw, 42vw" srcset="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/67061f1a975b419ee4f2664a_0K3A6146-p-500.jpg 500w, https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/67061f1a975b419ee4f2664a_0K3A6146-p-800.jpg 800w, https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/67061f1a975b419ee4f2664a_0K3A6146-p-1080.jpg 1080w, https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/67061f1a975b419ee4f2664a_0K3A6146.jpg 1200w" class="half-half-image" style="object-position: 50% 50%;"></div><div class="text-half"><h2 class="skye"></h2><h2>A new kind of energy</h2><div class="rich-text-block w-richtext"><p>We're all-in for the life of our projects. We take pride in building strong, trusting relationships and delivering projects that not only generate clean energy but improve outcomes for nature, support and enrich regional communities, and empower local people.</p></div><a href="/our-impact" class="button w-button"><span>Discover our approach<svg xmlns="http://www.w3.org/2000/svg" width="20" height="13" viewBox="0 0 22.052 16.908"><g transform="translate(1.458 2.205)"><g transform="translate(-1760.414 -5025.357) rotate(-8)"><path d="M-8528.294-13148.675l3.6,7.122s-4.857,3.58-6.587,4.49" transform="translate(9585.62 18372.523)" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="rgb(255, 255, 255)"></path><path d="M-8525.31-13137.083s-11.022-4.321-17.14-2.507" transform="translate(9586 18368.268)" fill="none" stroke-linecap="round" stroke-width="2" stroke="rgb(255, 255, 255)"></path></g></g></svg></span></a></div></div><div class="blue-block" style="opacity: 0; height: 0px;"><div id="w-node-fc32d397-9e2b-46f5-e72a-c377539a799e-379972d7" class="flex-vert"><h1 id="w-node-a40a2906-8aaf-5b68-f87e-09baaa1f261b-379972d7" class="slim">Get to know <span class="accent line">us<svg class="svg-wrapper" width="48" height="20" viewBox="0 0 48 20" preserveAspectRatio="none"><path fill="none" stroke="#00d5ff" stroke-width="4" stroke-linecap="round" d="M2.48,16 Q31.200000000000003,12 45.519999999999996,16" style="stroke-dasharray: 43.3039; stroke-dashoffset: 43.3039;"></path></svg></span></h1></div><h3 id="w-node-_4559eff4-ece7-73d2-3e04-d842e0695c5c-379972d7" class="white cta-text">Follow us on <a href="https://www.https://www.linkedin.com/company/windlab/about/.com/company/windlab/" target="_blank" class="button light in-text"><span>LinkedIn<svg xmlns="http://www.w3.org/2000/svg" width="20" height="13" viewBox="0 0 22.052 16.908"><g transform="translate(1.458 2.205)"><g transform="translate(-1760.414 -5025.357) rotate(-8)"><path d="M-8528.294-13148.675l3.6,7.122s-4.857,3.58-6.587,4.49" transform="translate(9585.62 18372.523)" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="rgb(0, 0, 163)"></path><path d="M-8525.31-13137.083s-11.022-4.321-17.14-2.507" transform="translate(9586 18368.268)" fill="none" stroke-linecap="round" stroke-width="2" stroke="rgb(0, 0, 163)"></path></g></g></svg></span></a> to stay up to date with our latest projects and industry insights.</h3></div><div class="linkedin-feed w-embed w-script"><script src="https://static.elfsight.com/platform/platform.js" async=""></script>
<div class="elfsight-app-659043a3-9def-4b77-a96b-1e9cd22b03d9" data-elfsight-app-lazy=""></div></div></div></section><section class="footer-section"><div id="w-node-ade12e54-9942-d8d1-1cff-6f9f21168894-143108bc" class="container footer-container"><div id="w-node-cdcea4e0-b051-160c-bdaf-964d83780e71-143108bc" class="footer-col-1"><img src="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/672d462e6eafccdfff9a6099_WL_Logo_RGB_White.svg" loading="lazy" alt="" class="footer-logo"><div class="footer-phone"><h6 class="footer-heading">Follow us on</h6><div class="w-layout-hflex flex-block social-icons"><a href="https://www.linkedin.com/company/windlab/about/" target="_blank" class="w-inline-block"><img src="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/66fcc44695527313c6f26820_LinkedIn%20Logo.svg" loading="lazy" alt="" class="footer-icon"></a></div></div></div><div id="w-node-fd308117-eb73-4299-91f6-757e5320870f-143108bc" class="footer-col-3"><p class="paragraph">Windlab acknowledges the Traditional Owners of Country throughout Australia and recognises their continuing connection to lands, waters and communities. <br></p><p class="paragraph">We pay our respects to Aboriginal and Torres Strait Islander cultures and to Elders past and present.<br></p></div><div id="w-node-_683b524a-4842-de7d-7675-a51404a6c2cb-143108bc" class="footer-col-2"><div class="footer-phone"><h6 class="footer-heading">General enquiries</h6><div class="w-layout-hflex flex-block"><img src="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/66fcbbebd35ce4d53799732d_Phone%20thin.svg" loading="lazy" alt="" class="footer-icon"><a href="tel:+61261754600" class="white-link">+61 2 6175 4600</a></div></div><div class="footer-phone"><h6 class="footer-heading">Media enquiries</h6><div class="w-layout-hflex flex-block"><img src="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/66fcbbebd35ce4d53799732d_Phone%20thin.svg" loading="lazy" alt="" class="footer-icon"><a href="tel:+61480006124" class="white-link">+61 480 006 124</a></div></div></div><div id="w-node-b8d6b771-a311-35d9-a38e-f0251254395b-143108bc" class="footer-footer"><div class="inline-links"><a href="/privacy-policy" class="footer-link">Privacy Statement</a><a href="#" class="footer-link">Disclaimer</a></div><p id="copyright" class="copyright w-node-_4872df09-6e69-8704-f7c2-378f143108d3-143108bc">© 2024 Windlab Pty Ltd</p></div></div></section><script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=66fcbbebd35ce4d5379972d1" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script><script src="https://cdn.prod.website-files.com/66fcbbebd35ce4d5379972d1/js/webflow.548017a4c5947274064d4a3e26166280.js" type="text/javascript"></script><!--img position -->
<script>
document.addEventListener("DOMContentLoaded", function () {
  const images = document.querySelectorAll("img[object-position]");

  images.forEach(img => {
    const position = img.getAttribute("object-position");
    if (position) {
      img.style.objectPosition = position;
    }
  });
});
</script>

<!-- Careers page -->
<script>
document.addEventListener('DOMContentLoaded', () => {
    document.querySelectorAll('a[link]').forEach(anchor => {
        const linkValue = anchor.getAttribute('link');
        if (linkValue) {
            anchor.setAttribute('href', linkValue);
        }
    });
});
</script>




<!-- 3d blog post effect -->
<script>
const threeDEffect = {
  // Helper function to calculate rotation degrees
  calcDeg: (x, maxIn, out) => (1.5 * x * out) / maxIn - out,

  // Apply 3D rotation on mouse move (with Z-axis rotation)
  onMouseMove3D(event, target, factor) {
    const rect = target.getBoundingClientRect();
    const x = event.clientX - rect.left;
    const y = event.clientY - rect.top;

    const rY = this.calcDeg(x, rect.width, factor) * 1.5; // Rotate on Y-axis
    const rX = this.calcDeg(y, rect.height, factor) * 1.5; // Rotate on X-axis

    // Calculate the Z-axis rotation based on the mouse position
    const rZ = (rX + rY) / 12; // Simple formula for Z rotation based on X and Y

    // Apply the transformation including Z-axis rotation
    target.style.transform = `
scale3d(1.05, 1.05, 1.05)
      rotateY(${-rY}deg) 
      rotateX(${rX}deg) 
      rotateZ(${rZ}deg)
    `;
    target.style.webkitTransform = `
scale3d(1.05, 1.05, 1.05)
      rotateY(${-rY}deg) 
      rotateX(${rX}deg) 
      rotateZ(${rZ}deg)
    `;
  },

  // Set event handlers for 3D interaction
  set3DHandlers(item) {
    let sensor = item; // Target the element itself (adjust if needed)

    // Mouse enter: Increase z-index and add transition
    item.addEventListener("mouseenter", (ev) => {
      ev.target.style.zIndex = 500;
      sensor.style.transition = "transform 0.1s linear";
    });

    // Mouse move: Apply the 3D rotation effect
    item.addEventListener("mousemove", (ev) => {
      this.onMouseMove3D(ev, sensor, 4); // 6 is the rotation factor, adjust as needed
    });

    // Mouse leave: Reset the 3D effect
    item.addEventListener("mouseleave", (ev) => {
      ev.target.style.zIndex = 1;
      sensor.style.transition = "transform 0.2s linear";
      sensor.style.transform = "rotateY(0deg) rotateX(0deg) rotateZ(0deg)";
      sensor.style.webkitTransform = "rotateY(0deg) rotateX(0deg) rotateZ(0deg)";
    });
  },

  // Apply to all elements with the class 'blog-tile'
  refreshAll() {
    document.querySelectorAll('.blog-tile').forEach((e) => this.set3DHandlers(e));
  }
};

// Initialize the effect when the DOM is ready
document.addEventListener("DOMContentLoaded", () => {
  threeDEffect.refreshAll(); // Apply the 3D effect to all .blog-tile elements
});

</script>




<!-- Button arrow -->
<script>
  // Original SVG string
var svgString = '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="13" viewBox="0 0 22.052 16.908"><g transform="translate(1.458 2.205)"><g transform="translate(-1760.414 -5025.357) rotate(-8)"><path d="M-8528.294-13148.675l3.6,7.122s-4.857,3.58-6.587,4.49" transform="translate(9585.62 18372.523)" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"></path><path d="M-8525.31-13137.083s-11.022-4.321-17.14-2.507" transform="translate(9586 18368.268)" fill="none" stroke-linecap="round" stroke-width="2"></path></g></g></svg>';

// SVG template for inputs
var svgInputTemplate = (color, width = 50) => `
<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="13" viewBox="0 0 22.052 16.908">
  <g transform="translate(1.458 2.205)">
    <g transform="translate(-1760.414 -5025.357) rotate(-8)">
      <path d="M-8528.294-13148.675l3.6,7.122s-4.857,3.58-6.587,4.49" transform="translate(9585.62 18372.523)" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="${color}"></path>
      <path d="M-8525.31-13137.083s-11.022-4.321-17.14-2.507" transform="translate(9586 18368.268)" fill="none" stroke-linecap="round" stroke-width="2" stroke="${color}"></path>
    </g>
  </g>
</svg>`;

// Get all elements with the class "btn"
const buttons = document.querySelectorAll('.button');

// Iterate over each button and set the HTML content with the SVG string
buttons.forEach(button => {
  // Get the computed text color of the button
  const textColor = getComputedStyle(button).color;

  if (button.tagName.toLowerCase() === 'input') {
    // Create the SVG string with the correct stroke color
    const svgStringInput = svgInputTemplate(textColor);

    // Encode the SVG string to use it as a background image
    const encodedSvg = `url('data:image/svg+xml;utf8,${encodeURIComponent(svgStringInput)}')`;

    // Set the background image directly on the input element
    button.style.backgroundImage = encodedSvg;
    button.style.backgroundRepeat = 'no-repeat';
    button.style.backgroundPosition = 'right center';
    button.style.paddingRight = '42px';

    // Add hover event listeners to change the width of the SVG
    button.addEventListener('mouseover', () => {
      const hoverSvgStringInput = svgInputTemplate(textColor, 44);
      const hoverEncodedSvg = `url('data:image/svg+xml;utf8,${encodeURIComponent(hoverSvgStringInput)}')`;
      button.style.backgroundImage = hoverEncodedSvg;
    });

    button.addEventListener('mouseout', () => {
      button.style.backgroundImage = encodedSvg;
    });
  } else {
    // Create a wrapper span for the text and SVG
    const wrapperSpan = document.createElement('span');

    // Set the existing text content
    wrapperSpan.textContent = button.textContent;

    // Append the SVG to the wrapper span and set the stroke color
    wrapperSpan.insertAdjacentHTML('beforeend', svgString);
    wrapperSpan.lastElementChild.querySelectorAll('path').forEach(path => {
      path.setAttribute('stroke', textColor);
    });

    // Clear existing content and append the wrapper span to the button
    button.innerHTML = '';
    button.appendChild(wrapperSpan);
  }
});

</script>




<!-- Recaptcha -->
<script>
import com.google.cloud.recaptchaenterprise.v1.RecaptchaEnterpriseServiceClient;
import com.google.recaptchaenterprise.v1.Assessment;
import com.google.recaptchaenterprise.v1.CreateAssessmentRequest;
import com.google.recaptchaenterprise.v1.Event;
import com.google.recaptchaenterprise.v1.ProjectName;
import com.google.recaptchaenterprise.v1.RiskAnalysis.ClassificationReason;
import java.io.IOException;

public class CreateAssessment {

  public static void main(String[] args) throws IOException {
    // TODO: Replace the token and reCAPTCHA action variables before running the sample.
    String projectID = "struber-new-1537340480425";
    String recaptchaKey = "6LebP5wpAAAAADUdPpHrI-nMf1XAvTa_9c70exIc";
    String token = "action-token";
    String recaptchaAction = "action-name";

    createAssessment(projectID, recaptchaKey, token, recaptchaAction);
  }

  /**
   * Create an assessment to analyze the risk of a UI action.
   *
   * @param projectID : Your Google Cloud Project ID.
   * @param recaptchaKey : The reCAPTCHA key associated with the site/app
   * @param token : The generated token obtained from the client.
   * @param recaptchaAction : Action name corresponding to the token.
   */
  public static void createAssessment(
      String projectID, String recaptchaKey, String token, String recaptchaAction)
      throws IOException {
    // Create the reCAPTCHA client.
    // TODO: Cache the client generation code (recommended) or call client.close() before exiting the method.
    try (RecaptchaEnterpriseServiceClient client = RecaptchaEnterpriseServiceClient.create()) {

      // Set the properties of the event to be tracked.
      Event event = Event.newBuilder().setSiteKey(recaptchaKey).setToken(token).build();

      // Build the assessment request.
      CreateAssessmentRequest createAssessmentRequest =
          CreateAssessmentRequest.newBuilder()
              .setParent(ProjectName.of(projectID).toString())
              .setAssessment(Assessment.newBuilder().setEvent(event).build())
              .build();

      Assessment response = client.createAssessment(createAssessmentRequest);

      // Check if the token is valid.
      if (!response.getTokenProperties().getValid()) {
        System.out.println(
            "The CreateAssessment call failed because the token was: "
                + response.getTokenProperties().getInvalidReason().name());
        return;
      }

      // Check if the expected action was executed.
      if (!response.getTokenProperties().getAction().equals(recaptchaAction)) {
        System.out.println(
            "The action attribute in reCAPTCHA tag is: "
                + response.getTokenProperties().getAction());
        System.out.println(
            "The action attribute in the reCAPTCHA tag "
                + "does not match the action ("
                + recaptchaAction
                + ") you are expecting to score");
        return;
      }

      // Get the risk score and the reason(s).
      // For more information on interpreting the assessment, see:
      // https://cloud.google.com/recaptcha-enterprise/docs/interpret-assessment
      for (ClassificationReason reason : response.getRiskAnalysis().getReasonsList()) {
        System.out.println(reason);
      }

      float recaptchaScore = response.getRiskAnalysis().getScore();
      System.out.println("The reCAPTCHA score is: " + recaptchaScore);

      // Get the assessment name (id). Use this to annotate the assessment.
      String assessmentName = response.getName();
      System.out.println(
          "Assessment name: " + assessmentName.substring(assessmentName.lastIndexOf("/") + 1));
    }
  }
}
</script>





<!-- Copyright Text -->
<script type="text/javascript">
  document.addEventListener('DOMContentLoaded', function(){
    const copyrightElement = document.getElementById('copyright');
    const newCopyrightText = `© ${new Date().getFullYear()} Windlab Pty Ltd`;

    if (currentYearElement) {
      currentYearElement.textContent = newCopyrightText;
    }
  });
</script><script>
document.addEventListener("DOMContentLoaded", () => {
  const counters = document.querySelectorAll(".counter");

  counters.forEach((counter) => {
    const targetText = counter.innerText.trim();
    if (!targetText) return; // Skip if no inner text

    counter.innerHTML = ""; // Clear initial content

    // Create spans for each character in the target text
    targetText.split("").forEach((char) => {
      const span = document.createElement("span");
      span.classList.add("digit");

      // Add class for decimals or non-numeric characters
      if (!/\d/.test(char)) span.classList.add("non-digit");
      span.textContent = char;
      counter.appendChild(span);
    });

    const digits = counter.querySelectorAll(".digit");

    // Animate each digit or character
    digits.forEach((digit, index) => {
      setTimeout(() => {
        if (/\d/.test(digit.textContent)) {
          // If it's a number, animate through 0-9 multiple times
          animateDigit(digit);
        } else {
          // Non-numeric characters just fade in
          digit.classList.add("visible");
        }
      }, index * 200); // Delay between each digit
    });
  });

  function animateDigit(digit) {
    const target = parseInt(digit.textContent, 10);
    if (isNaN(target)) return; // Skip if it's not a number

    let count = 0;
    let cycles = 2; // Minimum cycles (0-9) before landing
    const interval = setInterval(() => {
      digit.textContent = count;
      count = (count + 1) % 10;

      // Only decrement cycles after completing a full loop (0-9)
      if (count === 0) cycles--;

      // Stop when cycles are complete AND the count matches the target
      if (cycles < 0 && count === target) {
        clearInterval(interval);
        digit.textContent = target; // Ensure correct final number
        digit.classList.add("visible");
      }
    }, 50); // Adjust speed if needed
  }
});
</script></body></html>