{{/*
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at
   http://www.apache.org/licenses/LICENSE-2.0
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License. See accompanying LICENSE file.
*/}}

<!DOCTYPE html>
<html lang="{{ .Site.Language.Lang }}" class="no-js">
<head>
  {{ partial "head_homepage" . }}
</head>
<body class="body body--index">
  {{ partial "header.html" . }}
  <div class="body__contained no__padding">
    {{ block "hero-section" . }}{{ end }}
    {{ block "ctas-section" . }}{{ end }}
    {{ block "graphic-section" . }}{{ end }}
    {{ block "pillars-section" . }}{{ end }}
    {{ block "logos-section" . }}{{ end }}
    {{ block "pipelines-section" . }}{{ end }}
    {{ block "playground-section" . }}{{ end }}
    {{ block "quotes-section" . }}{{ end }}
    {{ block "quotes-mobile-section" . }}{{ end }}
    {{ block "calendar-section" . }}{{ end }}
  </div>
  <div class="main-padding">
    {{ partial "footer.html" . }}
  </div>
  {{ partial "hooks/body-end.html"}}
</body>
</html>
