123
assets/sass/header.scss
Normal file
123
assets/sass/header.scss
Normal file
@@ -0,0 +1,123 @@
|
||||
.header {
|
||||
padding: 2rem;
|
||||
|
||||
.header-container {
|
||||
max-width: $maxwidth;
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
.site-title {
|
||||
font-size: 1.5rem;
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
.nav {
|
||||
ul {
|
||||
display: flex;
|
||||
gap: 2.5rem;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
|
||||
li a {
|
||||
font-size: 0.85rem;
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.nav-toggle {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.nav-toggle-label {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: $mobilewidth) {
|
||||
.header {
|
||||
padding: 1rem;
|
||||
|
||||
.header-container {
|
||||
.site-title {
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.nav {
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
|
||||
opacity: 0;
|
||||
background: $color-bg;
|
||||
transition: opacity 0.3s ease;
|
||||
|
||||
pointer-events: none;
|
||||
|
||||
ul {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 2rem;
|
||||
|
||||
li a {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.nav-toggle-label {
|
||||
z-index: 1;
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
width: 1.5rem;
|
||||
height: 0.75rem;
|
||||
cursor: pointer;
|
||||
|
||||
span {
|
||||
display: block;
|
||||
height: 0.125rem;
|
||||
width: 100%;
|
||||
border-radius: 1px;
|
||||
background: currentColor;
|
||||
transition:
|
||||
transform 0.3s ease,
|
||||
opacity 0.3s ease;
|
||||
}
|
||||
|
||||
span+span {
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-toggle:checked+.nav-toggle-label+.nav {
|
||||
opacity: 1;
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
.nav-toggle:checked+.nav-toggle-label span:nth-child(1) {
|
||||
transform: translateY(0.3rem) rotate(45deg);
|
||||
}
|
||||
|
||||
.nav-toggle:checked+.nav-toggle-label span:nth-child(2) {
|
||||
transform: translateY(-0.3rem) rotate(-45deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
11
assets/sass/main.scss
Normal file
11
assets/sass/main.scss
Normal file
@@ -0,0 +1,11 @@
|
||||
@import "variables";
|
||||
|
||||
html {
|
||||
font-size: 100%;
|
||||
font-family:
|
||||
system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif,
|
||||
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
@import "header";
|
5
assets/sass/variables.scss
Normal file
5
assets/sass/variables.scss
Normal file
@@ -0,0 +1,5 @@
|
||||
$mobilewidth: 32rem;
|
||||
$contentwidth: 48rem;
|
||||
$maxwidth: 60rem;
|
||||
|
||||
$color-bg: white;
|
53
layouts/_default/baseof.html
Normal file
53
layouts/_default/baseof.html
Normal file
@@ -0,0 +1,53 @@
|
||||
<!doctype html>
|
||||
<html lang="{{- .Site.LanguageCode -}}">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
|
||||
<title>
|
||||
{{- if .IsHome -}}
|
||||
{{ .Site.Title }}
|
||||
{{- else -}}
|
||||
{{ .Site.Title }} ·
|
||||
{{ .Title }}
|
||||
{{- end -}}
|
||||
</title>
|
||||
|
||||
{{ with .Site.Params.description }}
|
||||
<meta name="description" content="{{- . -}}" />
|
||||
{{ end }}
|
||||
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="robots" content="all,follow" />
|
||||
<meta name="googlebot" content="index,follow,snippet,archive" />
|
||||
|
||||
{{ with resources.Get "sass/main.scss" }}
|
||||
{{ with . | toCSS (dict "targetPath" "css/main.css") | fingerprint }}
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="{{- .RelPermalink -}}"
|
||||
integrity="{{- .Data.Integrity -}}"
|
||||
/>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ with .OutputFormats.Get "RSS" }}
|
||||
{{ printf `
|
||||
<link href="%s" rel="%s" type="%s" title="%s" />` .Permalink .Rel .MediaType.Type $.Site.Title | safeHTML
|
||||
}}
|
||||
{{ end }}
|
||||
|
||||
{{ partial "opengraph.html" . }}
|
||||
{{ partial "twitter.html" . }}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{{ partial "header.html" . }}
|
||||
|
||||
{{ block "main" . }}
|
||||
{{ end }}
|
||||
|
||||
{{ partial "footer.html" . }}
|
||||
</body>
|
||||
</html>
|
2
layouts/index.html
Normal file
2
layouts/index.html
Normal file
@@ -0,0 +1,2 @@
|
||||
{{ define "main" }}
|
||||
{{ end }}
|
0
layouts/partials/footer.html
Normal file
0
layouts/partials/footer.html
Normal file
26
layouts/partials/header.html
Normal file
26
layouts/partials/header.html
Normal file
@@ -0,0 +1,26 @@
|
||||
<header class="header">
|
||||
<div class="header-container">
|
||||
<div class="site-title">
|
||||
<a href="{{- "/" | relURL -}}">{{ .Site.Title }}</a>
|
||||
</div>
|
||||
|
||||
<input
|
||||
type="checkbox"
|
||||
id="nav-toggle"
|
||||
class="nav-toggle"
|
||||
aria-label="Toggle navigation"
|
||||
/>
|
||||
<label for="nav-toggle" class="nav-toggle-label">
|
||||
<span></span>
|
||||
<span></span>
|
||||
</label>
|
||||
|
||||
<nav class="nav">
|
||||
<ul>
|
||||
{{ range .Site.Params.navigation }}
|
||||
<li><a href="{{- .url -}}">{{ .name }}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
80
layouts/partials/opengraph.html
Normal file
80
layouts/partials/opengraph.html
Normal file
@@ -0,0 +1,80 @@
|
||||
<meta property="og:title" content="{{ .Title }}" />
|
||||
<meta
|
||||
property="og:description"
|
||||
content="{{- with .Description -}}
|
||||
{{- . -}}
|
||||
{{- else -}}
|
||||
{{- if .IsPage -}}
|
||||
{{- with .Site.Params.description -}}{{- . -}}{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}"
|
||||
/>
|
||||
<meta
|
||||
property="og:type"
|
||||
content="{{- if .IsPage -}}
|
||||
article
|
||||
{{- else -}}
|
||||
website
|
||||
{{- end -}}"
|
||||
/>
|
||||
<meta property="og:url" content="{{- .Permalink -}}" />
|
||||
|
||||
{{ with .Params.image }}
|
||||
{{ $image := $.Resources.GetMatch . }}
|
||||
{{ with $image }}
|
||||
{{ $thumb := .Resize "400x" }}
|
||||
<meta property="og:image" content="{{- $thumb.Permalink -}}" />
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ $iso8601 := "2000-01-01T00:00:00-01:00" }}
|
||||
{{ if .IsPage }}
|
||||
{{ if not .PublishDate.IsZero }}
|
||||
<meta
|
||||
property="article:published_time"
|
||||
{{ .PublishDate.Format $iso8601 | printf "content=%q" | safeHTMLAttr }}
|
||||
/>
|
||||
{{ else if not .Date.IsZero }}
|
||||
<meta
|
||||
property="article:published_time"
|
||||
{{ .Date.Format $iso8601 | printf "content=%q" | safeHTMLAttr }}
|
||||
/>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{/* .IsPage */}}
|
||||
|
||||
{{ with .Params.audio }}
|
||||
<meta property="og:audio" content="{{- . -}}" />
|
||||
{{ end }}
|
||||
{{ with .Params.locale }}
|
||||
<meta property="og:locale" content="{{- . -}}" />
|
||||
{{ end }}
|
||||
{{ with .Site.Params.title }}
|
||||
<meta property="og:site_name" content="{{- . -}}" />
|
||||
{{ end }}
|
||||
{{ with .Params.videos }}
|
||||
{{ range . }}
|
||||
<meta property="og:video" content="{{- . | absURL -}}" />
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ $permalink := .Permalink }}
|
||||
{{ $siteSeries := .Site.Taxonomies.series }}{{ with .Params.series }}
|
||||
{{ range $name := . }}
|
||||
{{ $series := index $siteSeries $name }}
|
||||
{{ range $page := first 6 $series.Pages }}
|
||||
{{ if ne $page.Permalink $permalink }}
|
||||
<meta property="og:see_also" content="{{- $page.Permalink -}}" />
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{ if .IsPage }}
|
||||
<meta property="article:section" content="{{- .Section -}}" />
|
||||
{{ with .Params.tags }}
|
||||
{{ range . }}
|
||||
<meta property="article:tag" content="{{- . -}}" />
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
23
layouts/partials/twitter.html
Normal file
23
layouts/partials/twitter.html
Normal file
@@ -0,0 +1,23 @@
|
||||
{{ with .Params.image }}
|
||||
{{ $image := $.Resources.GetMatch . }}
|
||||
{{ with $image }}
|
||||
{{ $thumb := .Resize "400x" }}
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:image" content="{{- $thumb.Permalink -}}" />
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
|
||||
<meta name="twitter:title" content="{{- .Title -}}" />
|
||||
<meta
|
||||
name="twitter:description"
|
||||
content="{{- with .Description -}}
|
||||
{{- . -}}
|
||||
{{- else -}}
|
||||
{{- if .IsPage -}}
|
||||
{{- .Summary -}}
|
||||
{{- else -}}
|
||||
{{- with .Site.Params.description -}}{{- . -}}{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}"
|
||||
/>
|
Reference in New Issue
Block a user