{{/*
 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.html" . }}
</head>
<body class="body body--index">
  {{ partial "header.html" . }}
  <div class="body__contained no__padding">
    {{ block "hero-section" . }}{{ end }}
    {{ block "ctas-section" . }}{{ end }}
    {{ block "pillars-section" . }}{{ end }}
    {{ block "graphic-section" . }}{{ end }}
    {{ block "calendar-section" . }}{{ end }}
    {{ block "quotes-section" . }}{{ end }}
    {{ block "quotes-mobile-section" . }}{{ end }}
    {{ block "logos-section" . }}{{ end }}
  </div>
  <div class="main-padding">
    {{ partial "footer.html" . }}
  </div>
  {{ partial "hooks/body-end.html"}}
</body>
</html>
