aboutsummaryrefslogtreecommitdiff
path: root/themes/ananke/layouts
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2019-06-19 21:18:55 +0200
committerDimitri Staessens <dimitri@ouroboros.rocks>2019-06-19 21:18:55 +0200
commit615d2211463e073a65b0de60c61ab1184b14b958 (patch)
treea7635aec59a689152061c00e8a462382112792f4 /themes/ananke/layouts
parent2a2311ea3fb1b89a266668bfd16aa96475fc183e (diff)
downloadwebsite-615d2211463e073a65b0de60c61ab1184b14b958.tar.gz
website-615d2211463e073a65b0de60c61ab1184b14b958.zip
theme: Switch to ananke theme
Diffstat (limited to 'themes/ananke/layouts')
-rwxr-xr-xthemes/ananke/layouts/404.html8
-rwxr-xr-xthemes/ananke/layouts/_default/baseof.html58
-rwxr-xr-xthemes/ananke/layouts/_default/list.html15
-rwxr-xr-xthemes/ananke/layouts/_default/single.html55
-rw-r--r--themes/ananke/layouts/_default/taxonomy.html16
-rw-r--r--themes/ananke/layouts/_default/terms.html22
-rwxr-xr-xthemes/ananke/layouts/index.html55
-rw-r--r--themes/ananke/layouts/page/single.html18
-rw-r--r--themes/ananke/layouts/partials/commento.html2
-rw-r--r--themes/ananke/layouts/partials/i18nlist.html10
-rw-r--r--themes/ananke/layouts/partials/menu-contextual.html33
-rw-r--r--themes/ananke/layouts/partials/new-window-icon.html2
-rw-r--r--themes/ananke/layouts/partials/page-header.html26
-rw-r--r--themes/ananke/layouts/partials/site-favicon.html3
-rwxr-xr-xthemes/ananke/layouts/partials/site-footer.html8
-rwxr-xr-xthemes/ananke/layouts/partials/site-header.html36
-rw-r--r--themes/ananke/layouts/partials/site-navigation.html22
-rw-r--r--themes/ananke/layouts/partials/site-scripts.html4
-rw-r--r--themes/ananke/layouts/partials/social-follow.html56
-rw-r--r--themes/ananke/layouts/partials/summary-with-image.html29
-rw-r--r--themes/ananke/layouts/partials/summary.html13
-rw-r--r--themes/ananke/layouts/partials/svg/facebook.svg1
-rw-r--r--themes/ananke/layouts/partials/svg/github.svg3
-rw-r--r--themes/ananke/layouts/partials/svg/gitlab.svg1
-rw-r--r--themes/ananke/layouts/partials/svg/instagram.svg1
-rw-r--r--themes/ananke/layouts/partials/svg/linkedin.svg3
-rw-r--r--themes/ananke/layouts/partials/svg/mastodon.svg4
-rw-r--r--themes/ananke/layouts/partials/svg/medium.svg3
-rw-r--r--themes/ananke/layouts/partials/svg/new-window.svg3
-rw-r--r--themes/ananke/layouts/partials/svg/twitter.svg1
-rw-r--r--themes/ananke/layouts/partials/svg/youtube.svg1
-rw-r--r--themes/ananke/layouts/partials/tags.html9
-rw-r--r--themes/ananke/layouts/post/list.html21
-rw-r--r--themes/ananke/layouts/post/summary-with-image.html19
-rw-r--r--themes/ananke/layouts/post/summary.html15
-rw-r--r--themes/ananke/layouts/robots.txt7
-rw-r--r--themes/ananke/layouts/shortcodes/form-contact.html20
37 files changed, 603 insertions, 0 deletions
diff --git a/themes/ananke/layouts/404.html b/themes/ananke/layouts/404.html
new file mode 100755
index 0000000..4da44e2
--- /dev/null
+++ b/themes/ananke/layouts/404.html
@@ -0,0 +1,8 @@
+{{ define "header" }}{{ partial "page-header.html" . }}{{ end }}
+{{ define "main" }}
+ <article class="center cf pv5 measure-wide-l">
+ <h1>
+ This is not the page you were looking for
+ </h1>
+ </article>
+{{ end }}
diff --git a/themes/ananke/layouts/_default/baseof.html b/themes/ananke/layouts/_default/baseof.html
new file mode 100755
index 0000000..9dece9f
--- /dev/null
+++ b/themes/ananke/layouts/_default/baseof.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<html lang="{{ $.Site.LanguageCode | default "en" }}">
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ {{/* NOTE: the Site's title, and if there is a page title, that is set too */}}
+ <title>{{ block "title" . }}{{ .Site.Title }} {{ with .Params.Title }} | {{ . }}{{ end }}{{ end }}</title>
+ <meta name="HandheldFriendly" content="True">
+ <meta name="MobileOptimized" content="320">
+
+ <meta name="viewport" content="width=device-width,minimum-scale=1">
+ {{ .Hugo.Generator }}
+ {{/* NOTE: For Production make sure you add `HUGO_ENV="production"` before your build command */}}
+ {{ if eq (getenv "HUGO_ENV") "production" | or (eq .Site.Params.env "production") }}
+ <META NAME="ROBOTS" CONTENT="INDEX, FOLLOW">
+ {{ else }}
+ <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
+ {{ end }}
+
+ {{ $stylesheet := .Site.Data.webpack_assets.app }}
+ {{ with $stylesheet.css }}
+ <link href="{{ relURL (printf "%s%s" "dist/" .) }}" rel="stylesheet">
+ {{ end }}
+
+ {{ range .Site.Params.custom_css }}
+ <link rel="stylesheet" href="{{ relURL ($.Site.BaseURL) }}{{ . }}">
+ {{ end }}
+
+ {{ block "favicon" . }}
+ {{ partialCached "site-favicon.html" . }}
+ {{ end }}
+
+ {{ if .RSSLink }}
+ <link href="{{ .RSSLink }}" rel="alternate" type="application/rss+xml" title="{{ .Site.Title }}" />
+ <link href="{{ .RSSLink }}" rel="feed" type="application/rss+xml" title="{{ .Site.Title }}" />
+ {{ end }}
+
+ {{/* NOTE: These Hugo Internal Templates can be found starting at https://github.com/spf13/hugo/blob/master/tpl/tplimpl/template_embedded.go#L158 */}}
+ {{- template "_internal/opengraph.html" . -}}
+ {{- template "_internal/google_news.html" . -}}
+ {{- template "_internal/schema.html" . -}}
+ {{- template "_internal/twitter_cards.html" . -}}
+
+ {{ if eq (getenv "HUGO_ENV") "production" | or (eq .Site.Params.env "production") }}
+ {{ template "_internal/google_analytics_async.html" . }}
+ {{ end }}
+ </head>
+
+ <body class="ma0 {{ $.Param "body_classes" | default "avenir bg-near-white"}}{{ with getenv "HUGO_ENV" }} {{ . }}{{ end }}">
+
+ {{ block "header" . }}{{ partial "site-header.html" .}}{{ end }}
+ <main class="pb7" role="main">
+ {{ block "main" . }}{{ end }}
+ </main>
+ {{ block "footer" . }}{{ partialCached "site-footer.html" . }}{{ end }}
+ {{ block "scripts" . }}{{ partialCached "site-scripts.html" . }}{{ end }}
+ </body>
+</html>
diff --git a/themes/ananke/layouts/_default/list.html b/themes/ananke/layouts/_default/list.html
new file mode 100755
index 0000000..130a357
--- /dev/null
+++ b/themes/ananke/layouts/_default/list.html
@@ -0,0 +1,15 @@
+{{ define "main" }}
+ <article class="pa3 pa4-ns nested-copy-line-height nested-img">
+ <section class="cf ph3 ph5-l pv3 pv4-l f4 tc-l center measure-wide lh-copy mid-gray">
+ {{- .Content -}}
+ </section>
+ <section class="flex-ns flex-wrap justify-around mt5">
+ {{ range .Paginator.Pages }}
+ <div class="relative w-100 w-30-l mb4 bg-white">
+ {{- partial "summary.html" . -}}
+ </div>
+ {{ end }}
+ </section>
+ {{- template "_internal/pagination.html" . -}}
+ </article>
+{{ end }}
diff --git a/themes/ananke/layouts/_default/single.html b/themes/ananke/layouts/_default/single.html
new file mode 100755
index 0000000..fde3f74
--- /dev/null
+++ b/themes/ananke/layouts/_default/single.html
@@ -0,0 +1,55 @@
+{{ define "header" }}
+ {{/* We can override any block in the baseof file be defining it in the template */}}
+ {{ partial "page-header.html" . }}
+{{ end }}
+
+{{ define "main" }}
+ {{ $section := .Site.GetPage "section" .Section }}
+ <article class="flex-l flex-wrap justify-between mw8 center ph3">
+
+ <header class="mt4 w-100">
+ <p class="f6 b helvetica tracked">
+ {{/*
+ CurrentSection allows us to use the section title instead of inferring from the folder.
+ https://gohugo.io/variables/page/#section-variables-and-methods
+ */}}
+ {{with .CurrentSection.Title }}{{. | upper }}{{end}}
+ </p>
+ <h1 class="f1 athelas mb1">
+ {{- .Title -}}
+ </h1>
+ {{/* Hugo uses Go's date formatting is set by example. Here are two formats */}}
+ <time class="f6 mv4 dib tracked" datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}">
+ {{- .Date.Format "January 2, 2006" -}}
+ </time>
+ {{/*
+ Show "reading time" and "word count" but only if one of the following are true:
+ 1) A global config `params` value is set `show_reading_time = true`
+ 2) A section front matter value is set `show_reading_time = true`
+ 3) A page front matter value is set `show_reading_time = true`
+ */}}
+ {{ if (or (eq (.Param "show_reading_time") true) (eq $section.Params.show_reading_time true) )}}
+ <span class="f6 mv4 dib tracked"> - {{ .ReadingTime}} minutes read</span>
+ <span class="f6 mv4 dib tracked"> - {{ .WordCount}} words</span>
+ {{ end }}
+ </header>
+
+ <section class="nested-copy-line-height lh-copy serif f4 nested-links nested-img mid-gray pr4-l w-two-thirds-l">
+ {{- .Content -}}
+ {{- partial "tags.html" . -}}
+ <div class="mt6">
+ {{ if .Site.DisqusShortname }}
+ {{ template "_internal/disqus.html" . }}
+ {{ end }}
+ {{ if .Site.Params.commentoEnable }}
+ {{- partial "commento.html" . -}}
+ {{ end }}
+ </div>
+ </section>
+
+ <aside class="w-30-l mt6-l">
+ {{- partial "menu-contextual.html" . -}}
+ </aside>
+
+ </article>
+{{ end }}
diff --git a/themes/ananke/layouts/_default/taxonomy.html b/themes/ananke/layouts/_default/taxonomy.html
new file mode 100644
index 0000000..e2d1505
--- /dev/null
+++ b/themes/ananke/layouts/_default/taxonomy.html
@@ -0,0 +1,16 @@
+{{ define "main" }}
+ <article class="cf pa3 pa4-m pa4-l">
+ <div class="measure-wide-l center f4 lh-copy nested-copy-line-height nested-links nested-img mid-gray">
+ <p>Below you will find pages that utilize the taxonomy term “{{ .Title }}”</p>
+ </div>
+ </article>
+ <div class="mw8 center">
+ <section class="flex-ns flex-wrap justify-around mt5">
+ {{ range .Pages }}
+ <div class="relative w-100 mb4 bg-white">
+ {{ partial "summary.html" . }}
+ </div>
+ {{ end }}
+ </section>
+ </div>
+{{ end }}
diff --git a/themes/ananke/layouts/_default/terms.html b/themes/ananke/layouts/_default/terms.html
new file mode 100644
index 0000000..87275c7
--- /dev/null
+++ b/themes/ananke/layouts/_default/terms.html
@@ -0,0 +1,22 @@
+{{ define "main" }}
+ {{ $data := .Data }}
+ <article class="cf pa3 pa4-m pa4-l">
+ <div class="measure-wide-l center f4 lh-copy nested-copy-line-height nested-links nested-img mid-gray">
+ {{ .Content }}
+ </div>
+ </article>
+ <div class="mw8 center">
+ <section class="ph4">
+ {{ range $key, $value := .Data.Terms }}
+ <h2 class="f1">
+ <a href="{{ "/" | relLangURL }}{{ $.Data.Plural | urlize }}/{{ $key | urlize }}" class="link blue hover-black">
+ {{ $.Data.Singular | humanize }}: {{ $key }}
+ </a>
+ </h2>
+ {{ range $value.Pages }}
+ {{ partial "summary.html" . }}
+ {{ end }}
+ {{ end }}
+ </section>
+ </div>
+{{ end }}
diff --git a/themes/ananke/layouts/index.html b/themes/ananke/layouts/index.html
new file mode 100755
index 0000000..0361bce
--- /dev/null
+++ b/themes/ananke/layouts/index.html
@@ -0,0 +1,55 @@
+{{ define "main" }}
+ <article class="cf ph3 ph5-l pv3 pv4-l f4 tc-l center measure-wide lh-copy mid-gray">
+ {{ .Content }}
+ </article>
+ {{/* Define a section to pull recent posts from. For Hugo 0.20 this will default to the section with the most number of pages. */}}
+ {{ $mainSections := .Site.Params.mainSections | default (slice "post") }}
+ {{/* Create a variable with that section to use in multiple places. */}}
+ {{ $section := where .Site.RegularPages "Section" "in" $mainSections }}
+ {{/* Check to see if the section is defined for ranging through it */}}
+ {{ $section_count := len $section }}
+ {{ if ge $section_count 1 }}
+ {{/* Derive the section name */}}
+ {{ $section_name := index (.Site.Params.mainSections) 0 }}
+
+ <div class="pa3 pa4-ns w-100 w-70-ns center">
+ {{/* Use $section_name to get the section title. Use "with" to only show it if it exists */}}
+ {{ with .Site.GetPage "section" $section_name }}
+ <h1 class="flex-none">
+ {{ $.Param "recent_copy" | default (i18n "recentTitle" .) }}
+ </h1>
+ {{ end }}
+
+ {{ $n_posts := $.Param "recent_posts_number" | default 3 }}
+
+ <section class="w-100 mw8">
+ {{/* Range through the first $n_posts items of the section */}}
+ {{ range (first $n_posts $section) }}
+ <div class="relative w-100 mb4">
+ {{ partial "summary-with-image.html" . }}
+ </div>
+ {{ end }}
+ </section>
+
+ {{ if ge $section_count (add $n_posts 1) }}
+ <section class="w-100">
+ <h1 class="f3">{{ i18n "more" }}</h1>
+ {{/* Now, range through the next four after the initial $n_posts items. Nest the requirements, "after" then "first" on the outside */}}
+ {{ range (first 4 (after $n_posts $section)) }}
+ <h2 class="f5 fw4 mb4 dib mr3">
+ <a href="{{ .URL }}" class="link black dim">
+ {{ .Title }}
+ </a>
+ </h2>
+ {{ end }}
+
+ {{/* As above, Use $section_name to get the section title, and URL. Use "with" to only show it if it exists */}}
+ {{ with .Site.GetPage "section" $section_name }}
+ <a href="{{ .URL }}" class="link db f6 pa2 br3 bg-mid-gray white dim w4 tc">{{ i18n "allTitle" . }}</a>
+ {{ end }}
+ </section>
+ {{ end }}
+
+ </div>
+ {{ end }}
+{{ end }}
diff --git a/themes/ananke/layouts/page/single.html b/themes/ananke/layouts/page/single.html
new file mode 100644
index 0000000..ac9d199
--- /dev/null
+++ b/themes/ananke/layouts/page/single.html
@@ -0,0 +1,18 @@
+{{ define "header" }}{{ partial "page-header.html" . }}{{ end }}
+{{ define "main" }}
+ <div class="flex-l mt2 mw8 center">
+ <article class="center cf pv5 ph3 ph4-ns mw7">
+ <header>
+ <p class="f6 b helvetica tracked">
+ {{ humanize .Section | upper }}
+ </p>
+ <h1 class="f1">
+ {{ .Title }}
+ </h1>
+ </header>
+ <div class="nested-copy-line-height lh-copy f4 nested-links nested-img mid-gray">
+ {{ .Content }}
+ </div>
+ </article>
+ </div>
+{{ end }}
diff --git a/themes/ananke/layouts/partials/commento.html b/themes/ananke/layouts/partials/commento.html
new file mode 100644
index 0000000..54e7589
--- /dev/null
+++ b/themes/ananke/layouts/partials/commento.html
@@ -0,0 +1,2 @@
+<div id="commento"></div>
+<script defer src="https://cdn.commento.io/js/commento.js"></script>
diff --git a/themes/ananke/layouts/partials/i18nlist.html b/themes/ananke/layouts/partials/i18nlist.html
new file mode 100644
index 0000000..ba7c1ea
--- /dev/null
+++ b/themes/ananke/layouts/partials/i18nlist.html
@@ -0,0 +1,10 @@
+{{ if .IsTranslated }}
+<h4>{{ i18n "translations" }}</h4>
+<ul class="pl0 mr3">
+ {{ range .Translations }}
+ <li class="list f5 f4-ns fw4 dib pr3">
+ <a class="hover-white no-underline white-90" href="{{ .Permalink }}">{{ .Lang }}</a>
+ </li>
+ {{ end}}
+</ul>
+{{ end }}
diff --git a/themes/ananke/layouts/partials/menu-contextual.html b/themes/ananke/layouts/partials/menu-contextual.html
new file mode 100644
index 0000000..ae50dc6
--- /dev/null
+++ b/themes/ananke/layouts/partials/menu-contextual.html
@@ -0,0 +1,33 @@
+{{/*
+ Use Hugo's native Table of contents feature. You must set `toc: true` in your parameters for this to show.
+ https://gohugo.io/content-management/toc/
+*/}}
+
+{{- if .Params.toc -}}
+ <div class="bg-light-gray pa3 nested-list-reset nested-copy-line-height nested-links">
+ <p class="f5 b mb3">{{ i18n "whatsInThis" . }}</p>
+ {{ .TableOfContents }}
+ </div>
+{{- end -}}
+
+{{/*
+ Use Hugo's native related content feature to pull in content that may have similar parameters, like tags. etc.
+ https://gohugo.io/content-management/related/
+*/}}
+
+{{ $related := .Site.RegularPages.Related . | first 15 }}
+
+{{ with $related }}
+ <div class="bg-light-gray pa3 nested-list-reset nested-copy-line-height nested-links">
+ <p class="f5 b mb3">{{ i18n "related" }}</p>
+ <ul class="pa0 list">
+ {{ range . }}
+ <li class="mb2">
+ <a href="{{ .RelPermalink }}">
+ {{- .Title -}}
+ </a>
+ </li>
+ {{ end }}
+ </ul>
+</div>
+{{ end }}
diff --git a/themes/ananke/layouts/partials/new-window-icon.html b/themes/ananke/layouts/partials/new-window-icon.html
new file mode 100644
index 0000000..8f422ca
--- /dev/null
+++ b/themes/ananke/layouts/partials/new-window-icon.html
@@ -0,0 +1,2 @@
+{{ $new_window_icon_size := "8px" }}
+<span class="new-window">{{ partial "svg/new-window.svg" (dict "size" $new_window_icon_size) }}</span> \ No newline at end of file
diff --git a/themes/ananke/layouts/partials/page-header.html b/themes/ananke/layouts/partials/page-header.html
new file mode 100644
index 0000000..8cd6d4f
--- /dev/null
+++ b/themes/ananke/layouts/partials/page-header.html
@@ -0,0 +1,26 @@
+{{ $featured_image := .Params.featured_image }}
+{{ if $featured_image }}
+ {{/* Trimming the slash and adding absURL make sure the image works no matter where our site lives */}}
+ {{ $featured_image := (trim $featured_image "/") | absURL }}
+ <header class="cover bg-top" style="background-image: url('{{ $featured_image }}');">
+ <div class="pb3-m pb6-l bg-black-60">
+ {{ partial "site-navigation.html" . }}
+ <div class="tc-l pv6 ph3 ph4-ns">
+ {{ if not .Params.omit_header_text }}
+ <h1 class="f2 f1-l fw2 white-90 mb0 lh-title">{{ .Title | default .Site.Title }}</h1>
+ {{ with .Params.description }}
+ <h2 class="fw1 f5 f3-l white-80 measure-wide-l center lh-copy mt3 mb4">
+ {{ . }}
+ </h2>
+ {{ end }}
+ {{ end }}
+ </div>
+ </div>
+ </header>
+{{ else }}
+ <header>
+ <div class="{{ .Site.Params.background_color_class | default "bg-black" }}">
+ {{ partial "site-navigation.html" . }}
+ </div>
+ </header>
+{{ end }}
diff --git a/themes/ananke/layouts/partials/site-favicon.html b/themes/ananke/layouts/partials/site-favicon.html
new file mode 100644
index 0000000..ffb9642
--- /dev/null
+++ b/themes/ananke/layouts/partials/site-favicon.html
@@ -0,0 +1,3 @@
+{{ if .Site.Params.favicon }}
+<link rel="shortcut icon" href="/{{ .Site.Params.favicon }}" type="image/x-icon" />
+{{ end }} \ No newline at end of file
diff --git a/themes/ananke/layouts/partials/site-footer.html b/themes/ananke/layouts/partials/site-footer.html
new file mode 100755
index 0000000..d014f77
--- /dev/null
+++ b/themes/ananke/layouts/partials/site-footer.html
@@ -0,0 +1,8 @@
+<footer class="{{ .Site.Params.background_color_class | default "bg-black" }} bottom-0 w-100 pa3" role="contentinfo">
+ <div class="flex justify-between">
+ <a class="f4 fw4 hover-white no-underline white-70 dn dib-ns pv2 ph3" href="{{ .Site.BaseURL }}" >
+ &copy; {{ now.Format "2006" }} {{ .Site.Title }}
+ </a>
+ <div>{{ partial "social-follow.html" . }}</div>
+ </div>
+</footer>
diff --git a/themes/ananke/layouts/partials/site-header.html b/themes/ananke/layouts/partials/site-header.html
new file mode 100755
index 0000000..10a682f
--- /dev/null
+++ b/themes/ananke/layouts/partials/site-header.html
@@ -0,0 +1,36 @@
+{{ $featured_image := .Param "featured_image"}}
+{{ if $featured_image }}
+ {{/* Trimming the slash and adding absURL make sure the image works no matter where our site lives */}}
+ {{ $featured_image := (trim $featured_image "/") | absURL }}
+ <header class="cover bg-top" style="background-image: url('{{ $featured_image }}');">
+ <div class="{{ .Site.Params.cover_dimming_class | default "bg-black-60" }}">
+ {{ partial "site-navigation.html" .}}
+ <div class="tc-l pv4 pv6-l ph3 ph4-ns">
+ <h1 class="f2 f-subheadline-l fw2 white-90 mb0 lh-title">
+ {{ .Title | default .Site.Title }}
+ </h1>
+ {{ with .Params.description }}
+ <h2 class="fw1 f5 f3-l white-80 measure-wide-l center mt3">
+ {{ . }}
+ </h2>
+ {{ end }}
+ </div>
+ </div>
+ </header>
+{{ else }}
+ <header>
+ <div class="pb3-m pb6-l {{ .Site.Params.background_color_class | default "bg-black" }}">
+ {{ partial "site-navigation.html" . }}
+ <div class="tc-l pv3 ph3 ph4-ns">
+ <h1 class="f2 f-subheadline-l fw2 light-silver mb0 lh-title">
+ {{ .Title | default .Site.Title }}
+ </h1>
+ {{ with .Params.description }}
+ <h2 class="fw1 f5 f3-l white-80 measure-wide-l center lh-copy mt3 mb4">
+ {{ . }}
+ </h2>
+ {{ end }}
+ </div>
+ </div>
+ </header>
+{{ end }}
diff --git a/themes/ananke/layouts/partials/site-navigation.html b/themes/ananke/layouts/partials/site-navigation.html
new file mode 100644
index 0000000..d1f31da
--- /dev/null
+++ b/themes/ananke/layouts/partials/site-navigation.html
@@ -0,0 +1,22 @@
+<nav class="pv3 ph3 ph4-ns" role="navigation">
+ <div class="flex-l justify-between items-center center">
+ <a href="{{ .Site.BaseURL }}" class="f3 fw2 hover-white no-underline white-90 dib">
+ {{ .Site.Title }}
+ </a>
+ <div class="flex-l items-center">
+ {{ partial "i18nlist.html" . }}
+ {{ if .Site.Menus.main }}
+ <ul class="pl0 mr3">
+ {{ range .Site.Menus.main }}
+ <li class="list f5 f4-ns fw4 dib pr3">
+ <a class="hover-white no-underline white-90" href="{{ .URL }}" title="{{ .Name }} page">
+ {{ .Name }}
+ </a>
+ </li>
+ {{ end }}
+ </ul>
+ {{ end }}
+ {{ partialCached "social-follow.html" . }}
+ </div>
+ </div>
+</nav>
diff --git a/themes/ananke/layouts/partials/site-scripts.html b/themes/ananke/layouts/partials/site-scripts.html
new file mode 100644
index 0000000..bd6c7f5
--- /dev/null
+++ b/themes/ananke/layouts/partials/site-scripts.html
@@ -0,0 +1,4 @@
+{{ $script := .Site.Data.webpack_assets.app }}
+{{ with $script.js }}
+ <script src="{{ relURL (printf "%s%s" "dist/" .) }}"></script>
+{{ end }}
diff --git a/themes/ananke/layouts/partials/social-follow.html b/themes/ananke/layouts/partials/social-follow.html
new file mode 100644
index 0000000..249a2a0
--- /dev/null
+++ b/themes/ananke/layouts/partials/social-follow.html
@@ -0,0 +1,56 @@
+<!-- TODO: Add follow intents where available TODO: Revisit color and hover color -->
+{{ $icon_size := "32px" }}
+{{ with .Param "facebook" }}
+<a href="{{ . }}" target="_blank" class="link-transition facebook link dib z-999 pt3 pt0-l mr1" title="Facebook link" rel="noopener" aria-label="follow on Facebook——Opens in a new window">
+ {{ partial "svg/facebook.svg" (dict "size" $icon_size) }}
+ {{- partial "new-window-icon.html" . -}}
+</a>
+{{ end }}
+{{ with .Param "twitter" }}
+<a href="{{ . }}" target="_blank" class="link-transition twitter link dib z-999 pt3 pt0-l mr1" title="Twitter link" rel="noopener" aria-label="follow on Twitter——Opens in a new window">
+ {{ partial "svg/twitter.svg" (dict "size" $icon_size) }}
+ {{- partial "new-window-icon.html" . -}}
+</a>
+{{ end }}
+{{ with .Param "instagram" }}
+<a href="{{ . }}" target="_blank" class="link-transition instagram link dib z-999 pt3 pt0-l mr1" title="Instagram link" rel="noopener" aria-label="follow on Instagram——Opens in a new window">
+ {{ partial "svg/instagram.svg" (dict "size" $icon_size) }}
+ {{- partial "new-window-icon.html" . -}}
+</a>
+{{ end }}
+{{ with .Param "youtube" }}
+<a href="{{ . }}" target="_blank" class="link-transition youtube link dib z-999 pt3 pt0-l mr1" title="Youtube link" rel="noopener" aria-label="follow on Youtube——Opens in a new window">
+ {{ partial "svg/youtube.svg" (dict "size" $icon_size) }}
+ {{- partial "new-window-icon.html" . -}}
+</a>
+{{ end }}
+{{ with .Param "linkedin" }}
+<a href="{{ . }}" target="_blank" class="link-transition linkedin link dib z-999 pt3 pt0-l mr1" title="LinkedIn link" rel="noopener" aria-label="follow on LinkedIn——Opens in a new window">
+ {{ partial "svg/linkedin.svg" (dict "size" $icon_size) }}
+ {{- partial "new-window-icon.html" . -}}
+</a>
+{{ end }}
+{{ with .Param "github" }}
+<a href="{{ . }}" target="_blank" class="link-transition github link dib z-999 pt3 pt0-l mr1" title="Github link" rel="noopener" aria-label="follow on Github——Opens in a new window">
+ {{ partial "svg/github.svg" (dict "size" $icon_size) }}
+ {{- partial "new-window-icon.html" . -}}
+</a>
+{{ end }}
+{{ with .Param "gitlab" }}
+<a href="{{ . }}" target="_blank" class="link-transition gitlab link dib z-999 pt3 pt0-l mr1" title="Gitlab link" rel="noopener" aria-label="follow on Gitlab——Opens in a new window">
+ {{ partial "svg/gitlab.svg" (dict "size" $icon_size) }}
+ {{- partial "new-window-icon.html" . -}}
+</a>
+{{ end }}
+{{ with .Param "medium" }}
+<a href="{{ . }}" target="_blank" class="link-transition medium link dib z-999 pt3 pt0-l mr1" title="Medium link" rel="noopener" aria-label="follow on Medium——Opens in a new window">
+ {{ partial "svg/medium.svg" (dict "size" $icon_size) }}
+ {{- partial "new-window-icon.html" . -}}
+</a>
+{{ end }}
+{{ with .Param "mastodon" }}
+<a href="{{ . }}" target="_blank" class="link-transition mastodon link dib z-999 pt3 pt0-l mr1" title="Mastodon link" rel="noopener" aria-label="follow on Mastodon——Opens in a new window">
+ {{ partial "svg/mastodon.svg" (dict "size" $icon_size) }}
+ {{- partial "new-window-icon.html" . -}}
+</a>
+{{ end }}
diff --git a/themes/ananke/layouts/partials/summary-with-image.html b/themes/ananke/layouts/partials/summary-with-image.html
new file mode 100644
index 0000000..da162e3
--- /dev/null
+++ b/themes/ananke/layouts/partials/summary-with-image.html
@@ -0,0 +1,29 @@
+{{ $featured_image := .Params.featured_image }}
+<article class="bb b--black-10">
+ <div class="db pv4 ph3 ph0-l no-underline dark-gray">
+ <div class="flex flex-column flex-row-ns">
+ {{ if .Params.featured_image }}
+ {{/* Trimming the slash and adding absURL make sure the image works no matter where our site lives */}}
+ {{ $featured_image := (trim $featured_image "/") | absURL }}
+ <div class="pr3-ns mb4 mb0-ns w-100 w-40-ns">
+ <a href="{{.URL}}" class="db grow">
+ <img src="{{ $featured_image }}" class="img" alt="image from {{ .Title }}">
+ </a>
+ </div>
+ {{ end }}
+ <div class="blah w-100{{ if .Params.featured_image }} w-60-ns pl3-ns{{ end }}">
+ <h1 class="f3 fw1 athelas mt0 lh-title">
+ <a href="{{.URL}}" class="color-inherit dim link">
+ {{ .Title }}
+ </a>
+ </h1>
+ <div class="f6 f5-l lh-copy nested-copy-line-height nested-links">
+ {{ .Summary }}
+ </div>
+ <a href="{{.URL}}" class="ba b--moon-gray bg-light-gray br2 color-inherit dib f7 hover-bg-moon-gray link mt2 ph2 pv1">{{ $.Param "read_more_copy" | default (i18n "readMore") }}</a>
+ {{/* TODO: add author
+ <p class="f6 lh-copy mv0">By {{ .Author }}</p> */}}
+ </div>
+ </div>
+ </div>
+</article>
diff --git a/themes/ananke/layouts/partials/summary.html b/themes/ananke/layouts/partials/summary.html
new file mode 100644
index 0000000..0f140cf
--- /dev/null
+++ b/themes/ananke/layouts/partials/summary.html
@@ -0,0 +1,13 @@
+<div class="relative w-100 mb4 bg-white nested-copy-line-height">
+ <div class="bg-white mb3 pa4 gray overflow-hidden">
+ <span class="f6 db">{{ humanize .Section }}</span>
+ <h1 class="f3 near-black">
+ <a href="{{ .URL }}" class="link black dim">
+ {{ .Title }}
+ </a>
+ </h1>
+ <div class="nested-links f5 lh-copy nested-copy-line-height">
+ {{ .Summary }}
+ </div>
+ </div>
+</div>
diff --git a/themes/ananke/layouts/partials/svg/facebook.svg b/themes/ananke/layouts/partials/svg/facebook.svg
new file mode 100644
index 0000000..0afb80f
--- /dev/null
+++ b/themes/ananke/layouts/partials/svg/facebook.svg
@@ -0,0 +1 @@
+<svg{{ with .size }} height="{{ . }}" {{ end }} style="enable-background:new 0 0 67 67;" version="1.1" viewBox="0 0 67 67" width="{{ .size }}" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M28.765,50.32h6.744V33.998h4.499l0.596-5.624h-5.095 l0.007-2.816c0-1.466,0.14-2.253,2.244-2.253h2.812V17.68h-4.5c-5.405,0-7.307,2.729-7.307,7.317v3.377h-3.369v5.625h3.369V50.32z M33,64C16.432,64,3,50.569,3,34S16.432,4,33,4s30,13.431,30,30S49.568,64,33,64z" style="fill-rule:evenodd;clip-rule:evenodd;"/></svg>
diff --git a/themes/ananke/layouts/partials/svg/github.svg b/themes/ananke/layouts/partials/svg/github.svg
new file mode 100644
index 0000000..a362a60
--- /dev/null
+++ b/themes/ananke/layouts/partials/svg/github.svg
@@ -0,0 +1,3 @@
+<svg {{ with .size }} height="{{ . }}" {{ end }} style="enable-background:new 0 0 512 512;" version="1.1" viewBox="0 0 512 512" width="{{ .size }}" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
+ <path d="M256,32C132.3,32,32,134.8,32,261.7c0,101.5,64.2,187.5,153.2,217.9c11.2,2.1,15.3-5,15.3-11.1 c0-5.5-0.2-19.9-0.3-39.1c-62.3,13.9-75.5-30.8-75.5-30.8c-10.2-26.5-24.9-33.6-24.9-33.6c-20.3-14.3,1.5-14,1.5-14 c22.5,1.6,34.3,23.7,34.3,23.7c20,35.1,52.4,25,65.2,19.1c2-14.8,7.8-25,14.2-30.7c-49.7-5.8-102-25.5-102-113.5 c0-25.1,8.7-45.6,23-61.6c-2.3-5.8-10-29.2,2.2-60.8c0,0,18.8-6.2,61.6,23.5c17.9-5.1,37-7.6,56.1-7.7c19,0.1,38.2,2.6,56.1,7.7 c42.8-29.7,61.5-23.5,61.5-23.5c12.2,31.6,4.5,55,2.2,60.8c14.3,16.1,23,36.6,23,61.6c0,88.2-52.4,107.6-102.3,113.3 c8,7.1,15.2,21.1,15.2,42.5c0,30.7-0.3,55.5-0.3,63c0,6.1,4,13.3,15.4,11C415.9,449.1,480,363.1,480,261.7 C480,134.8,379.7,32,256,32z"/>
+</svg>
diff --git a/themes/ananke/layouts/partials/svg/gitlab.svg b/themes/ananke/layouts/partials/svg/gitlab.svg
new file mode 100644
index 0000000..36a3bed
--- /dev/null
+++ b/themes/ananke/layouts/partials/svg/gitlab.svg
@@ -0,0 +1 @@
+<svg {{ with .size }} height="{{ . }}" {{ end }} style="enable-background:new 0 0 512 512;" version="1.1" viewBox="0 0 512 512" width="{{ .size }}" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="M29.782 199.732L256 493.714 8.074 309.699c-6.856-5.142-9.712-13.996-7.141-21.993l28.849-87.974zm75.405-174.806c-3.142-8.854-15.709-8.854-18.851 0L29.782 199.732h131.961L105.187 24.926zm56.556 174.806L256 493.714l94.257-293.982H161.743zm349.324 87.974l-28.849-87.974L256 493.714l247.926-184.015c6.855-5.142 9.711-13.996 7.141-21.993zm-85.404-262.78c-3.142-8.854-15.709-8.854-18.851 0l-56.555 174.806h131.961L425.663 24.926z"></path></svg>
diff --git a/themes/ananke/layouts/partials/svg/instagram.svg b/themes/ananke/layouts/partials/svg/instagram.svg
new file mode 100644
index 0000000..2fa7d47
--- /dev/null
+++ b/themes/ananke/layouts/partials/svg/instagram.svg
@@ -0,0 +1 @@
+<svg{{ with .size }} height="{{ . }}" {{ end }} style="enable-background:new 0 0 67 67;" version="1.1" viewBox="0 0 67 67" width="{{ .size }}" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M42.271,26.578v-0.006c0.502,0,1.005,0.01,1.508-0.002 c0.646-0.017,1.172-0.57,1.172-1.217c0-0.963,0-1.927,0-2.89c0-0.691-0.547-1.24-1.236-1.241c-0.961,0-1.922-0.001-2.883,0 c-0.688,0.001-1.236,0.552-1.236,1.243c-0.001,0.955-0.004,1.91,0.003,2.865c0.001,0.143,0.028,0.291,0.073,0.426 c0.173,0.508,0.639,0.82,1.209,0.823C41.344,26.579,41.808,26.578,42.271,26.578z M33,27.817c-3.384-0.002-6.135,2.721-6.182,6.089 c-0.049,3.46,2.72,6.201,6.04,6.272c3.454,0.074,6.248-2.686,6.321-6.043C39.254,30.675,36.462,27.815,33,27.817z M21.046,31.116 v0.082c0,4.515-0.001,9.03,0,13.545c0,0.649,0.562,1.208,1.212,1.208c7.16,0.001,14.319,0.001,21.479,0 c0.656,0,1.215-0.557,1.215-1.212c0.001-4.509,0-9.02,0-13.528v-0.094h-2.912c0.411,1.313,0.537,2.651,0.376,4.014 c-0.161,1.363-0.601,2.631-1.316,3.803s-1.644,2.145-2.779,2.918c-2.944,2.006-6.821,2.182-9.946,0.428 c-1.579-0.885-2.819-2.12-3.685-3.713c-1.289-2.373-1.495-4.865-0.739-7.451C22.983,31.116,22.021,31.116,21.046,31.116z M45.205,49.255c0.159-0.026,0.318-0.049,0.475-0.083c1.246-0.265,2.264-1.304,2.508-2.557c0.025-0.137,0.045-0.273,0.067-0.409 V21.794c-0.021-0.133-0.04-0.268-0.065-0.401c-0.268-1.367-1.396-2.428-2.78-2.618c-0.058-0.007-0.113-0.02-0.17-0.03H20.761 c-0.147,0.027-0.296,0.047-0.441,0.08c-1.352,0.308-2.352,1.396-2.545,2.766c-0.008,0.057-0.02,0.114-0.029,0.171V46.24 c0.028,0.154,0.05,0.311,0.085,0.465c0.299,1.322,1.427,2.347,2.77,2.52c0.064,0.008,0.13,0.021,0.195,0.03H45.205z M33,64 C16.432,64,3,50.569,3,34S16.432,4,33,4s30,13.431,30,30S49.568,64,33,64z" style="fill-rule:evenodd;clip-rule:evenodd;fill:{{ .fill }};"/></svg>
diff --git a/themes/ananke/layouts/partials/svg/linkedin.svg b/themes/ananke/layouts/partials/svg/linkedin.svg
new file mode 100644
index 0000000..3381996
--- /dev/null
+++ b/themes/ananke/layouts/partials/svg/linkedin.svg
@@ -0,0 +1,3 @@
+<svg {{ with .size }} height="{{ . }}" {{ end }} style="enable-background:new 0 0 65 65;" version="1.1" viewBox="0 0 65 65" width="{{ .size }}" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <path d="M50.837,48.137V36.425c0-6.275-3.35-9.195-7.816-9.195 c-3.604,0-5.219,1.983-6.119,3.374V27.71h-6.79c0.09,1.917,0,20.427,0,20.427h6.79V36.729c0-0.609,0.044-1.219,0.224-1.655 c0.49-1.22,1.607-2.483,3.482-2.483c2.458,0,3.44,1.873,3.44,4.618v10.929H50.837z M22.959,24.922c2.367,0,3.842-1.57,3.842-3.531 c-0.044-2.003-1.475-3.528-3.797-3.528s-3.841,1.524-3.841,3.528c0,1.961,1.474,3.531,3.753,3.531H22.959z M34,64 C17.432,64,4,50.568,4,34C4,17.431,17.432,4,34,4s30,13.431,30,30C64,50.568,50.568,64,34,64z M26.354,48.137V27.71h-6.789v20.427 H26.354z" style="fill-rule:evenodd;clip-rule:evenodd;fill:{{ .fill }};"/>
+</svg>
diff --git a/themes/ananke/layouts/partials/svg/mastodon.svg b/themes/ananke/layouts/partials/svg/mastodon.svg
new file mode 100644
index 0000000..205345b
--- /dev/null
+++ b/themes/ananke/layouts/partials/svg/mastodon.svg
@@ -0,0 +1,4 @@
+<svg{{ with .size }} height="{{ . }}" {{ end }} style="enable-background:new 0 0 230 230;" version="1.1" viewBox="0 0 230 230" width="{{ .size }}" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<path d="M211.80683 139.0875c-3.1825 16.36625-28.4925 34.2775-57.5625 37.74875-15.16 1.80875-30.0825 3.47125-45.99875 2.74125-26.0275-1.1925-46.565-6.2125-46.565-6.2125 0 2.53375.15625 4.94625.46875 7.2025 3.38375 25.68625 25.47 27.225 46.3925 27.9425 21.115.7225 39.91625-5.20625 39.91625-5.20625l.86875 19.09s-14.77 7.93125-41.08125 9.39c-14.50875.7975-32.52375-.365-53.50625-5.91875C9.23183 213.82 1.40558 165.31125.20808 116.09125c-.36375-14.61375-.14-28.39375-.14-39.91875 0-50.33 32.97625-65.0825 32.97625-65.0825C49.67058 3.45375 78.20308.2425 107.86433 0h.72875c29.66125.2425 58.21125 3.45375 74.8375 11.09 0 0 32.97625 14.7525 32.97625 65.0825 0 0 .4125 37.13375-4.6 62.915" style="fill-rule:evenodd;clip-rule:evenodd;fill:{{ .fill }};"/>
+<path d="M65.68743 96.45938c0 9.01375-7.3075 16.32125-16.3225 16.32125-9.01375 0-16.32-7.3075-16.32-16.32125 0-9.01375 7.30625-16.3225 16.32-16.3225 9.015 0 16.3225 7.30875 16.3225 16.3225M124.52893 96.45938c0 9.01375-7.30875 16.32125-16.3225 16.32125-9.01375 0-16.32125-7.3075-16.32125-16.32125 0-9.01375 7.3075-16.3225 16.32125-16.3225 9.01375 0 16.3225 7.30875 16.3225 16.3225M183.36933 96.45938c0 9.01375-7.3075 16.32125-16.32125 16.32125-9.01375 0-16.32125-7.3075-16.32125-16.32125 0-9.01375 7.3075-16.3225 16.32125-16.3225 9.01375 0 16.32125 7.30875 16.32125 16.3225" fill="#fff"/>
+</svg>
diff --git a/themes/ananke/layouts/partials/svg/medium.svg b/themes/ananke/layouts/partials/svg/medium.svg
new file mode 100644
index 0000000..cc5dc23
--- /dev/null
+++ b/themes/ananke/layouts/partials/svg/medium.svg
@@ -0,0 +1,3 @@
+<svg {{ with .size }} height="{{ . }}" {{ end }} style="enable-background:new 0 0 170 170;" version="1.1" viewBox="0 0 170 170" width="{{ .size }}" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
+<path d="M46.5340803,65.2157554 C46.6968378,63.6076572 46.0836,62.018231 44.8828198,60.93592 L32.6512605,46.2010582 L32.6512605,44 L70.6302521,44 L99.9859944,108.380952 L125.794585,44 L162,44 L162,46.2010582 L151.542017,56.2281011 C150.640424,56.9153477 150.193188,58.0448862 150.380019,59.1628454 L150.380019,132.837155 C150.193188,133.955114 150.640424,135.084652 151.542017,135.771899 L161.755369,145.798942 L161.755369,148 L110.38282,148 L110.38282,145.798942 L120.963119,135.527337 C122.002801,134.487948 122.002801,134.182246 122.002801,132.592593 L122.002801,73.0417402 L92.585901,147.755438 L88.6106443,147.755438 L54.3622782,73.0417402 L54.3622782,123.115814 C54.0767278,125.221069 54.7759199,127.3406 56.2581699,128.863022 L70.0186741,145.55438 L70.0186741,147.755438 L31,147.755438 L31,145.55438 L44.7605042,128.863022 C46.2319621,127.338076 46.8903838,125.204485 46.5340803,123.115814 L46.5340803,65.2157554 Z" style="fill-rule:evenodd;clip-rule:evenodd;fill:{{ .fill }};"/>
+</svg>
diff --git a/themes/ananke/layouts/partials/svg/new-window.svg b/themes/ananke/layouts/partials/svg/new-window.svg
new file mode 100644
index 0000000..ba148ad
--- /dev/null
+++ b/themes/ananke/layouts/partials/svg/new-window.svg
@@ -0,0 +1,3 @@
+<svg {{ with .size }} height="{{ . }}" {{ end }} style="enable-background:new 0 0 1000 1000;" version="1.1" viewBox="0 0 1000 1000" width="{{ .size }}" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
+<path d="M598 128h298v298h-86v-152l-418 418-60-60 418-418h-152v-86zM810 810v-298h86v298c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-596c0-46 38-86 86-86h298v86h-298v596h596z" style="fill-rule:evenodd;clip-rule:evenodd;fill:{{ .fill }};"/>
+</svg>
diff --git a/themes/ananke/layouts/partials/svg/twitter.svg b/themes/ananke/layouts/partials/svg/twitter.svg
new file mode 100644
index 0000000..6803558
--- /dev/null
+++ b/themes/ananke/layouts/partials/svg/twitter.svg
@@ -0,0 +1 @@
+<svg{{ with .size }} height="{{ . }}" {{ end }} style="enable-background:new 0 0 67 67;" version="1.1" viewBox="0 0 67 67" width="{{ .size }}" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M37.167,22.283c-2.619,0.953-4.274,3.411-4.086,6.101 l0.063,1.038l-1.048-0.127c-3.813-0.487-7.145-2.139-9.974-4.915l-1.383-1.377l-0.356,1.017c-0.754,2.267-0.272,4.661,1.299,6.271 c0.838,0.89,0.649,1.017-0.796,0.487c-0.503-0.169-0.943-0.296-0.985-0.233c-0.146,0.149,0.356,2.076,0.754,2.839 c0.545,1.06,1.655,2.097,2.871,2.712l1.027,0.487l-1.215,0.021c-1.173,0-1.215,0.021-1.089,0.467 c0.419,1.377,2.074,2.839,3.918,3.475l1.299,0.444l-1.131,0.678c-1.676,0.976-3.646,1.526-5.616,1.568 C19.775,43.256,19,43.341,19,43.405c0,0.211,2.557,1.397,4.044,1.864c4.463,1.377,9.765,0.783,13.746-1.568 c2.829-1.673,5.657-5,6.978-8.221c0.713-1.716,1.425-4.851,1.425-6.354c0-0.975,0.063-1.102,1.236-2.267 c0.692-0.678,1.341-1.419,1.467-1.631c0.21-0.403,0.188-0.403-0.88-0.043c-1.781,0.636-2.033,0.551-1.152-0.402 c0.649-0.678,1.425-1.907,1.425-2.267c0-0.063-0.314,0.042-0.671,0.233c-0.377,0.212-1.215,0.53-1.844,0.72l-1.131,0.361l-1.027-0.7 c-0.566-0.381-1.361-0.805-1.781-0.932C39.766,21.902,38.131,21.944,37.167,22.283z M33,64C16.432,64,3,50.569,3,34S16.432,4,33,4 s30,13.431,30,30S49.568,64,33,64z" style="fill-rule:evenodd;clip-rule:evenodd;fill:{{ .fill }};"/></svg>
diff --git a/themes/ananke/layouts/partials/svg/youtube.svg b/themes/ananke/layouts/partials/svg/youtube.svg
new file mode 100644
index 0000000..9a55379
--- /dev/null
+++ b/themes/ananke/layouts/partials/svg/youtube.svg
@@ -0,0 +1 @@
+<svg{{ with .size }} height="{{ . }}" {{ end }} style="enable-background:new 0 0 67 67;" version="1.1" viewBox="0 0 67 67" width="{{ .size }}" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M42.527,41.34c-0.278,0-0.478,0.078-0.6,0.244 c-0.121,0.156-0.18,0.424-0.18,0.796v0.896h1.543V42.38c0-0.372-0.062-0.64-0.185-0.796C42.989,41.418,42.792,41.34,42.527,41.34z M36.509,41.309c0.234,0,0.417,0.076,0.544,0.23c0.123,0.155,0.185,0.383,0.185,0.682v4.584c0,0.286-0.053,0.487-0.153,0.611 c-0.1,0.127-0.256,0.189-0.47,0.189c-0.148,0-0.287-0.033-0.421-0.096c-0.135-0.062-0.274-0.171-0.415-0.313v-5.531 c0.119-0.122,0.239-0.213,0.36-0.271C36.26,41.335,36.383,41.309,36.509,41.309z M41.748,44.658v1.672 c0,0.468,0.057,0.792,0.17,0.974c0.118,0.181,0.313,0.269,0.592,0.269c0.289,0,0.491-0.076,0.606-0.229 c0.114-0.153,0.175-0.489,0.175-1.013v-0.405h1.795v0.456c0,0.911-0.217,1.596-0.657,2.059c-0.435,0.459-1.089,0.687-1.958,0.687 c-0.781,0-1.398-0.242-1.847-0.731c-0.448-0.486-0.676-1.157-0.676-2.014v-3.986c0-0.768,0.249-1.398,0.742-1.882 c0.493-0.484,1.128-0.727,1.911-0.727c0.799,0,1.413,0.225,1.843,0.674c0.429,0.448,0.642,1.093,0.642,1.935v2.264H41.748z M38.623,48.495c-0.271,0.336-0.669,0.501-1.187,0.501c-0.343,0-0.646-0.062-0.912-0.192c-0.267-0.129-0.519-0.327-0.746-0.601 v0.681h-1.764V36.852h1.764v3.875c0.237-0.27,0.485-0.478,0.748-0.616c0.267-0.143,0.534-0.212,0.805-0.212 c0.554,0,0.975,0.189,1.265,0.565c0.294,0.379,0.438,0.933,0.438,1.66v4.926C39.034,47.678,38.897,48.159,38.623,48.495z M30.958,48.884v-0.976c-0.325,0.361-0.658,0.636-1.009,0.822c-0.349,0.191-0.686,0.282-1.014,0.282 c-0.405,0-0.705-0.129-0.913-0.396c-0.201-0.266-0.305-0.658-0.305-1.189v-7.422h1.744v6.809c0,0.211,0.037,0.362,0.107,0.457 c0.077,0.095,0.196,0.141,0.358,0.141c0.128,0,0.292-0.062,0.488-0.188c0.197-0.125,0.375-0.283,0.542-0.475v-6.744h1.744v8.878 H30.958z M24.916,38.6v10.284h-1.968V38.6h-2.034v-1.748h6.036V38.6H24.916z M32.994,32.978c0-0.001,12.08,0.018,13.514,1.45 c1.439,1.435,1.455,8.514,1.455,8.555c0,0-0.012,7.117-1.455,8.556C45.074,52.969,32.994,53,32.994,53s-12.079-0.031-13.516-1.462 c-1.438-1.435-1.441-8.502-1.441-8.556c0-0.041,0.004-7.12,1.441-8.555C20.916,32.996,32.994,32.977,32.994,32.978z M42.52,29.255 h-1.966v-1.08c-0.358,0.397-0.736,0.703-1.13,0.909c-0.392,0.208-0.771,0.312-1.14,0.312c-0.458,0-0.797-0.146-1.027-0.437 c-0.229-0.291-0.345-0.727-0.345-1.311v-8.172h1.962v7.497c0,0.231,0.045,0.399,0.127,0.502c0.08,0.104,0.216,0.156,0.399,0.156 c0.143,0,0.327-0.069,0.548-0.206c0.22-0.137,0.423-0.312,0.605-0.527v-7.422h1.966V29.255z M31.847,27.588 c0.139,0.147,0.339,0.219,0.6,0.219c0.266,0,0.476-0.075,0.634-0.223c0.157-0.152,0.235-0.358,0.235-0.618v-5.327 c0-0.214-0.08-0.387-0.241-0.519c-0.16-0.131-0.37-0.196-0.628-0.196c-0.241,0-0.435,0.065-0.586,0.196 c-0.148,0.132-0.225,0.305-0.225,0.519v5.327C31.636,27.233,31.708,27.439,31.847,27.588z M30.408,19.903 c0.528-0.449,1.241-0.674,2.132-0.674c0.812,0,1.48,0.237,2.001,0.711c0.517,0.473,0.777,1.083,0.777,1.828v5.051 c0,0.836-0.255,1.491-0.762,1.968c-0.513,0.476-1.212,0.714-2.106,0.714c-0.858,0-1.547-0.246-2.064-0.736 c-0.513-0.492-0.772-1.152-0.772-1.983v-5.068C29.613,20.954,29.877,20.351,30.408,19.903z M24.262,16h-2.229l2.634,8.003v5.252 h2.213v-5.5L29.454,16h-2.25l-1.366,5.298h-0.139L24.262,16z M33,64C16.432,64,3,50.569,3,34S16.432,4,33,4s30,13.431,30,30 S49.568,64,33,64z" style="fill-rule:evenodd;clip-rule:evenodd;fill:{{ .fill }};"/></svg>
diff --git a/themes/ananke/layouts/partials/tags.html b/themes/ananke/layouts/partials/tags.html
new file mode 100644
index 0000000..4fce241
--- /dev/null
+++ b/themes/ananke/layouts/partials/tags.html
@@ -0,0 +1,9 @@
+<ul class="pa0">
+ {{ range .Params.tags }}
+ <li class="list">
+ <a href="{{ "/tags/" | relLangURL }}{{ . | urlize }}" class="link f5 grow no-underline br-pill ba ph3 pv2 mb2 dib black sans-serif">
+ {{- . -}}
+ </a>
+ </li>
+ {{ end }}
+</ul>
diff --git a/themes/ananke/layouts/post/list.html b/themes/ananke/layouts/post/list.html
new file mode 100644
index 0000000..73c9b5c
--- /dev/null
+++ b/themes/ananke/layouts/post/list.html
@@ -0,0 +1,21 @@
+{{ define "main" }}
+{{/*
+ This template is the same as the default and is here to demonstrate that if you have a content directory called "post" you can create a layouts directory, just for that section.
+ */}}
+ <article class="pa3 pa4-ns nested-copy-line-height nested-img">
+ <section class="cf ph3 ph5-l pv3 pv4-l f4 tc-l center measure-wide lh-copy mid-gray">
+ {{ .Content }}
+ </section>
+ <aside class="flex-ns flex-wrap justify-around mt5">
+ {{ range .Paginator.Pages }}
+ <div class="relative w-100 w-30-l mb4 bg-white">
+ {{/*
+ Note we can use `.Render` here for items just in this section, instead of a partial to pull in items for the list page. https://gohugo.io/functions/render/
+ */}}
+ {{ .Render "summary" }}
+ </div>
+ {{ end }}
+ </aside>
+ {{ template "_internal/pagination.html" . }}
+ </article>
+{{ end }}
diff --git a/themes/ananke/layouts/post/summary-with-image.html b/themes/ananke/layouts/post/summary-with-image.html
new file mode 100644
index 0000000..d72cb35
--- /dev/null
+++ b/themes/ananke/layouts/post/summary-with-image.html
@@ -0,0 +1,19 @@
+<article class="bb b--black-10">
+ <a class="db pv4 ph3 ph0-l no-underline dark-gray dim" href="{{ .URL }}">
+ <div class="flex flex-column flex-row-ns">
+ {{ if .Params.featured_image }}
+ <div class="pr3-ns mb4 mb0-ns w-100 w-40-ns">
+ <img src="{{ .Params.featured_image }}" class="db" alt="image from {{ .Title }}">
+ </div>
+ {{ end }}
+ <div class="w-100{{ if .Params.featured_image }} w-60-ns pl3-ns{{ end }}">
+ <h1 class="f3 fw1 athelas mt0 lh-title">{{ .Title }}</h1>
+ <div class="f6 f5-l lh-copy nested-copy-line-height">
+ {{ .Summary }}
+ </div>
+ {{/* TODO: add author
+ <p class="f6 lh-copy mv0">By {{ .Author }}</p> */}}
+ </div>
+ </div>
+ </a>
+</article>
diff --git a/themes/ananke/layouts/post/summary.html b/themes/ananke/layouts/post/summary.html
new file mode 100644
index 0000000..c06c325
--- /dev/null
+++ b/themes/ananke/layouts/post/summary.html
@@ -0,0 +1,15 @@
+ <div class="mb3 pa4 mid-gray overflow-hidden">
+ {{ if .Date }}
+ <div class="f6">
+ {{ .Date.Format "January 2, 2006" }}
+ </div>
+ {{ end }}
+ <h1 class="f3 near-black">
+ <a href="{{ .URL }}" class="link black dim">
+ {{ .Title }}
+ </a>
+ </h1>
+ <div class="nested-links f5 lh-copy nested-copy-line-height">
+ {{ .Summary }}
+ </div>
+ </div>
diff --git a/themes/ananke/layouts/robots.txt b/themes/ananke/layouts/robots.txt
new file mode 100644
index 0000000..b18c6e9
--- /dev/null
+++ b/themes/ananke/layouts/robots.txt
@@ -0,0 +1,7 @@
+User-agent: *
+# robotstxt.org - if ENV production variable is false robots will be disallowed.
+{{ if eq (getenv "HUGO_ENV") "production" | or (eq .Site.Params.env "production") }}
+ Disallow:
+{{ else }}
+ Disallow: /
+{{ end }}
diff --git a/themes/ananke/layouts/shortcodes/form-contact.html b/themes/ananke/layouts/shortcodes/form-contact.html
new file mode 100644
index 0000000..e2ceb6b
--- /dev/null
+++ b/themes/ananke/layouts/shortcodes/form-contact.html
@@ -0,0 +1,20 @@
+{{ $.Scratch.Add "labelClasses" "f6 b db mb1 mt3 sans-serif mid-gray" }}
+{{ $.Scratch.Add "inputClasses" "w-100 f5 pv3 ph3 bg-light-gray bn" }}
+
+<form class="black-80 sans-serif" accept-charset="UTF-8" action="{{ .Get "action" }}" method="POST" role="form">
+
+ <label class="{{ $.Scratch.Get "labelClasses" }}" for="name">Your Name</label>
+ <input type="text" id="name" name="name" class="{{ $.Scratch.Get "inputClasses" }}" required placeholder=" " aria-labelledby="name"/>
+
+ <label class="{{ $.Scratch.Get "labelClasses" }}" for="email">Email Address</label>
+ <input type="email" id="email" name="email" class="{{ $.Scratch.Get "inputClasses" }}" required placeholder=" " aria-labelledby="email"/>
+ <div class="requirements f6 gray glow i ph3 overflow-hidden">
+ An email address is required.
+ </div>
+
+ <label class="{{ $.Scratch.Get "labelClasses" }}" for="message">Message</label>
+ <textarea id="message" name="message" class="{{ $.Scratch.Get "inputClasses" }} h4" aria-labelledby="message"></textarea>
+
+ <input class="db w-100 mv2 white pa3 bn hover-shadow hover-bg-blck bg-animate bg-black" type="submit" value="Send" />
+
+</form>