Initial version
This commit is contained in:
commit
ef156e49d1
26 changed files with 1003 additions and 0 deletions
21
LICENSE
Normal file
21
LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) [year] [fullname]
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
7
README.md
Normal file
7
README.md
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# Theme Name
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
## Configuration
|
5
archetypes/default.md
Normal file
5
archetypes/default.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
+++
|
||||||
|
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
|
||||||
|
date = {{ .Date }}
|
||||||
|
draft = true
|
||||||
|
+++
|
660
assets/css/main.css
Normal file
660
assets/css/main.css
Normal file
|
@ -0,0 +1,660 @@
|
||||||
|
::backdrop,
|
||||||
|
:root {
|
||||||
|
--sans-font: -apple-system, BlinkMacSystemFont, "Avenir Next", Avenir,
|
||||||
|
"Nimbus Sans L", Roboto, "Noto Sans", "Segoe UI", Arial, Helvetica,
|
||||||
|
"Helvetica Neue", sans-serif;
|
||||||
|
--mono-font: Consolas, Menlo, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
|
||||||
|
--standard-border-radius: 6px;
|
||||||
|
--bg: #fff;
|
||||||
|
--accent-bg: #0077aa;
|
||||||
|
--text: #212121;
|
||||||
|
--text-light: #585858;
|
||||||
|
--border: #898ea4;
|
||||||
|
--accent: #0099cc;
|
||||||
|
--accent-hover: #0088dd;
|
||||||
|
--accent-text: var(--bg);
|
||||||
|
--code: #0099cc;
|
||||||
|
--preformatted: #444;
|
||||||
|
--marked: #ff8036;
|
||||||
|
--disabled: #efefef;
|
||||||
|
--caution: #ff3333;
|
||||||
|
--warning: red;
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
::backdrop,
|
||||||
|
:root {
|
||||||
|
color-scheme: dark;
|
||||||
|
--bg: black;
|
||||||
|
--accent-bg: #0066aa;
|
||||||
|
--text: #dcdcdc;
|
||||||
|
--text-light: #ababab;
|
||||||
|
--accent: #0099cc;
|
||||||
|
--accent-hover: #0088dd;
|
||||||
|
--accent-text: var(--bg);
|
||||||
|
--code: #0099cc;
|
||||||
|
--preformatted: #fff;
|
||||||
|
--disabled: #111;
|
||||||
|
--caution: #ff3333;
|
||||||
|
--warning: red;
|
||||||
|
}
|
||||||
|
img,
|
||||||
|
video {
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*,
|
||||||
|
*::after,
|
||||||
|
*::before {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
input,
|
||||||
|
progress,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
appearance: none;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
-moz-appearance: none;
|
||||||
|
}
|
||||||
|
html {
|
||||||
|
font-family: var(--sans-font);
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
color: var(--text);
|
||||||
|
background-color: var(--bg);
|
||||||
|
font-size: 1.15rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr min(60rem, 90%) 1fr;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
body > * {
|
||||||
|
grid-column: 2;
|
||||||
|
}
|
||||||
|
body > header {
|
||||||
|
background-color: var(--accent-bg);
|
||||||
|
border-bottom: 1px solid var(--border);
|
||||||
|
text-align: center;
|
||||||
|
padding: 0 0.5rem 2rem;
|
||||||
|
grid-column: 1 / -1;
|
||||||
|
}
|
||||||
|
body > header > *:only-child {
|
||||||
|
margin-block-start: 2rem;
|
||||||
|
}
|
||||||
|
body > header h1 {
|
||||||
|
max-width: 1200px;
|
||||||
|
margin: 1rem auto;
|
||||||
|
}
|
||||||
|
body > header p {
|
||||||
|
max-width: 40rem;
|
||||||
|
margin: 1rem auto;
|
||||||
|
}
|
||||||
|
main {
|
||||||
|
padding-top: 1.5rem;
|
||||||
|
}
|
||||||
|
body > footer {
|
||||||
|
margin-top: 4rem;
|
||||||
|
padding: 2rem 1rem 1.5rem;
|
||||||
|
color: var(--text-light);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
text-align: center;
|
||||||
|
border-top: 1px solid var(--border);
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 3rem;
|
||||||
|
text-decoration: solid underline #0099cc 6px;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
font-size: 2.6rem;
|
||||||
|
margin-top: 3rem;
|
||||||
|
text-decoration: solid underline #0099cc 4px;
|
||||||
|
}
|
||||||
|
h3 {
|
||||||
|
font-size: 2rem;
|
||||||
|
margin-top: 3rem;
|
||||||
|
text-decoration: solid underline #0099cc 3px;
|
||||||
|
}
|
||||||
|
h4 {
|
||||||
|
font-size: 1.44rem;
|
||||||
|
text-decoration: double underline #0099cc 1px;
|
||||||
|
}
|
||||||
|
h5 {
|
||||||
|
font-size: 1.15rem;
|
||||||
|
text-decoration: dotted underline #0099cc 1px;
|
||||||
|
}
|
||||||
|
h6 {
|
||||||
|
font-size: 0.96rem;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
margin: 1.5rem 0;
|
||||||
|
}
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6,
|
||||||
|
p {
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
}
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3 {
|
||||||
|
line-height: 1.1;
|
||||||
|
}
|
||||||
|
@media only screen and (max-width: 720px) {
|
||||||
|
h1 {
|
||||||
|
font-size: 2.5rem;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
font-size: 2.1rem;
|
||||||
|
}
|
||||||
|
h3 {
|
||||||
|
font-size: 1.75rem;
|
||||||
|
}
|
||||||
|
h4 {
|
||||||
|
font-size: 1.25rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
a,
|
||||||
|
a:visited {
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.button,
|
||||||
|
a.button,
|
||||||
|
button,
|
||||||
|
input[type="submit"],
|
||||||
|
input[type="button"],
|
||||||
|
input[type="reset"],
|
||||||
|
label[type="button"] {
|
||||||
|
border: 1px solid var(--accent);
|
||||||
|
background-color: var(--accent);
|
||||||
|
color: var(--accent-text);
|
||||||
|
padding: 0.5rem 0.9rem;
|
||||||
|
text-decoration: none;
|
||||||
|
line-height: normal;
|
||||||
|
}
|
||||||
|
.button[aria-disabled="true"],
|
||||||
|
input:disabled,
|
||||||
|
textarea:disabled,
|
||||||
|
select:disabled,
|
||||||
|
button[disabled] {
|
||||||
|
cursor: not-allowed;
|
||||||
|
background-color: var(--disabled);
|
||||||
|
border-color: var(--disabled);
|
||||||
|
color: var(--text-light);
|
||||||
|
}
|
||||||
|
input[type="range"] {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
abbr[title] {
|
||||||
|
color: var(--accent);
|
||||||
|
cursor: help;
|
||||||
|
text-decoration-line: underline;
|
||||||
|
text-decoration-style: dashed;
|
||||||
|
}
|
||||||
|
.button:not([aria-disabled="true"]):hover,
|
||||||
|
input[type="submit"]:enabled:hover,
|
||||||
|
input[type="reset"]:enabled:hover,
|
||||||
|
input[type="button"]:enabled:hover,
|
||||||
|
label[type="button"]:hover,
|
||||||
|
button:enabled:hover {
|
||||||
|
background-color: var(--accent-hover);
|
||||||
|
border-color: var(--accent-hover);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.button:not([aria-disabled="true"]):hover,
|
||||||
|
button[type="reset"]:enabled:hover,
|
||||||
|
input[type="reset"]:enabled:hover,
|
||||||
|
label[type="button"]:hover {
|
||||||
|
background-color: var(--warning);
|
||||||
|
border-color: var(--warning);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
button[type="reset"],
|
||||||
|
input[type="reset"]:enabled,
|
||||||
|
label[type="button"] {
|
||||||
|
background-color: var(--caution);
|
||||||
|
border-color: var(--caution);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.button:focus-visible,
|
||||||
|
button:focus-visible:where(:enabled),
|
||||||
|
input:enabled:focus-visible:where(
|
||||||
|
[type="submit"],
|
||||||
|
[type="reset"],
|
||||||
|
[type="button"]
|
||||||
|
) {
|
||||||
|
outline: 2px solid var(--accent);
|
||||||
|
outline-offset: 1px;
|
||||||
|
}
|
||||||
|
header > nav {
|
||||||
|
font-size: 2rem;
|
||||||
|
line-height: 2;
|
||||||
|
padding: 1rem 0 0;
|
||||||
|
}
|
||||||
|
header > nav ol,
|
||||||
|
header > nav ul {
|
||||||
|
align-content: space-around;
|
||||||
|
align-items: center;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: center;
|
||||||
|
list-style-type: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
header > nav ol li,
|
||||||
|
header > nav ul li {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tags {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0.1rem;
|
||||||
|
}
|
||||||
|
header > nav a,
|
||||||
|
header > nav a:visited {
|
||||||
|
margin: 0 0.5rem 1rem;
|
||||||
|
color: var(--text);
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0.1rem 1rem;
|
||||||
|
text-decoration: solid underline white 2px;
|
||||||
|
}
|
||||||
|
header > nav a.current,
|
||||||
|
header > nav a:hover,
|
||||||
|
header > nav a[aria-current="page"] {
|
||||||
|
color: var(--preformatted);
|
||||||
|
cursor: pointer;
|
||||||
|
text-decoration: solid underline var(--accent) 4px;
|
||||||
|
}
|
||||||
|
@media only screen and (max-width: 720px) {
|
||||||
|
header > nav a {
|
||||||
|
border: none;
|
||||||
|
padding: 0;
|
||||||
|
text-decoration: underline;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
aside,
|
||||||
|
details,
|
||||||
|
pre {
|
||||||
|
background-color: var(--bg);
|
||||||
|
border: 3px solid var(--accent);
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
aside {
|
||||||
|
font-size: 1rem;
|
||||||
|
width: 30%;
|
||||||
|
padding: 0 15px;
|
||||||
|
margin-inline-start: 15px;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
*[dir="rtl"] aside {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
@media only screen and (max-width: 720px) {
|
||||||
|
aside {
|
||||||
|
width: 100%;
|
||||||
|
float: none;
|
||||||
|
margin-inline-start: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
article,
|
||||||
|
dialog,
|
||||||
|
fieldset {
|
||||||
|
border: 1px solid var(--accent);
|
||||||
|
padding: 1rem;
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
article h2:first-child,
|
||||||
|
article h3:first-child,
|
||||||
|
section h2:first-child,
|
||||||
|
section h3:first-child {
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
section {
|
||||||
|
border-top: 1px solid var(--border);
|
||||||
|
border-bottom: 1px solid var(--border);
|
||||||
|
padding: 2rem 1rem;
|
||||||
|
margin: 3rem 0;
|
||||||
|
}
|
||||||
|
section + section,
|
||||||
|
section:first-child {
|
||||||
|
border-top: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
section + section {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
section:last-child {
|
||||||
|
border-bottom: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
details {
|
||||||
|
padding: 0.7rem 1rem;
|
||||||
|
}
|
||||||
|
summary {
|
||||||
|
cursor: pointer;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 0.7rem 1rem;
|
||||||
|
margin: -0.7rem -1rem;
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
details[open] > summary + * {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
details[open] > summary {
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
details[open] > :last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin: 1.5rem 0;
|
||||||
|
}
|
||||||
|
figure > table {
|
||||||
|
width: max-content;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
td,
|
||||||
|
th {
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
text-align: start;
|
||||||
|
padding: 0.5rem;
|
||||||
|
}
|
||||||
|
th {
|
||||||
|
background-color: var(--accent-bg);
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
tr:nth-child(even) {
|
||||||
|
background-color: var(--accent-bg);
|
||||||
|
}
|
||||||
|
table caption {
|
||||||
|
font-weight: bold;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
.button,
|
||||||
|
button,
|
||||||
|
input,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
font-size: inherit;
|
||||||
|
font-family: inherit;
|
||||||
|
padding: 0.5rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
box-shadow: none;
|
||||||
|
max-width: 100%;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
input,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
color: var(--text);
|
||||||
|
background-color: var(--bg);
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
}
|
||||||
|
label {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
textarea:not([cols]) {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
select:not([multiple]) {
|
||||||
|
background-image: linear-gradient(45deg, transparent 49%, var(--text) 51%),
|
||||||
|
linear-gradient(135deg, var(--text) 51%, transparent 49%);
|
||||||
|
background-position: calc(100% - 15px), calc(100% - 10px);
|
||||||
|
background-size:
|
||||||
|
5px 5px,
|
||||||
|
5px 5px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
padding-inline-end: 25px;
|
||||||
|
}
|
||||||
|
*[dir="rtl"] select:not([multiple]) {
|
||||||
|
background-position: 10px, 15px;
|
||||||
|
}
|
||||||
|
input[type="checkbox"],
|
||||||
|
input[type="radio"] {
|
||||||
|
vertical-align: middle;
|
||||||
|
position: relative;
|
||||||
|
width: min-content;
|
||||||
|
}
|
||||||
|
input[type="checkbox"] + label,
|
||||||
|
input[type="radio"] + label {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
input[type="radio"] {
|
||||||
|
border-radius: 100%;
|
||||||
|
}
|
||||||
|
input[type="checkbox"]:checked,
|
||||||
|
input[type="radio"]:checked {
|
||||||
|
background-color: var(--accent);
|
||||||
|
}
|
||||||
|
input[type="checkbox"]:checked::after {
|
||||||
|
content: " ";
|
||||||
|
width: 0.18em;
|
||||||
|
height: 0.32em;
|
||||||
|
border-radius: 0;
|
||||||
|
position: absolute;
|
||||||
|
top: 0.05em;
|
||||||
|
left: 0.17em;
|
||||||
|
background-color: transparent;
|
||||||
|
border-right: solid var(--bg) 0.08em;
|
||||||
|
border-bottom: solid var(--bg) 0.08em;
|
||||||
|
font-size: 1.8em;
|
||||||
|
transform: rotate(45deg);
|
||||||
|
}
|
||||||
|
input[type="radio"]:checked::after {
|
||||||
|
content: " ";
|
||||||
|
width: 0.25em;
|
||||||
|
height: 0.25em;
|
||||||
|
border-radius: 100%;
|
||||||
|
position: absolute;
|
||||||
|
top: 0.125em;
|
||||||
|
background-color: var(--bg);
|
||||||
|
left: 0.125em;
|
||||||
|
font-size: 32px;
|
||||||
|
}
|
||||||
|
@media only screen and (max-width: 720px) {
|
||||||
|
button,
|
||||||
|
input,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
input[type="color"] {
|
||||||
|
height: 2.5rem;
|
||||||
|
padding: 0.2rem;
|
||||||
|
}
|
||||||
|
input[type="file"] {
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
hr {
|
||||||
|
border: none;
|
||||||
|
height: 1px;
|
||||||
|
background: var(--border);
|
||||||
|
margin: 1rem auto;
|
||||||
|
}
|
||||||
|
mark {
|
||||||
|
padding: 2px 5px;
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
background-color: var(--marked);
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
mark a {
|
||||||
|
color: #0d47a1;
|
||||||
|
}
|
||||||
|
audio,
|
||||||
|
img,
|
||||||
|
video {
|
||||||
|
max-width: 100%;
|
||||||
|
height: auto;
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
}
|
||||||
|
figure {
|
||||||
|
margin: 0;
|
||||||
|
display: block;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
figure > img,
|
||||||
|
figure > picture > img {
|
||||||
|
display: block;
|
||||||
|
margin-inline: auto;
|
||||||
|
}
|
||||||
|
figcaption {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
color: var(--text-light);
|
||||||
|
margin-block: 1rem;
|
||||||
|
}
|
||||||
|
blockquote {
|
||||||
|
margin-inline-start: 2rem;
|
||||||
|
margin-inline-end: 0;
|
||||||
|
margin-block: 2rem;
|
||||||
|
padding: 0.4rem 0.8rem;
|
||||||
|
border-inline-start: 0.35rem solid var(--accent);
|
||||||
|
color: var(--text-light);
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
cite {
|
||||||
|
font-size: 0.9rem;
|
||||||
|
color: var(--text-light);
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
dt {
|
||||||
|
color: var(--text-light);
|
||||||
|
}
|
||||||
|
code,
|
||||||
|
kbd,
|
||||||
|
pre,
|
||||||
|
pre span,
|
||||||
|
samp {
|
||||||
|
font-family: var(--mono-font);
|
||||||
|
color: var(--code);
|
||||||
|
}
|
||||||
|
kbd {
|
||||||
|
padding: 0.1rem 0.4rem;
|
||||||
|
background-color: var(--accent);
|
||||||
|
color: var(--accent-text);
|
||||||
|
border-radius: 0.25rem;
|
||||||
|
border: 1px solid var(--accent-bg);
|
||||||
|
box-shadow: 0 2px 0 1px var(--accent-bg);
|
||||||
|
cursor: default;
|
||||||
|
font-family: var(--font-family-sans-serif);
|
||||||
|
font-size: 0.75em;
|
||||||
|
line-height: 1;
|
||||||
|
min-width: 0.75rem;
|
||||||
|
max-width: 3rem;
|
||||||
|
text-align: center;
|
||||||
|
padding: 2px 5px;
|
||||||
|
position: relative;
|
||||||
|
top: -1px;
|
||||||
|
&:hover {
|
||||||
|
box-shadow: 0 1px 0 0.5px var(--accent-bg);
|
||||||
|
top: 1px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pre {
|
||||||
|
padding: 1rem 1.4rem;
|
||||||
|
max-width: 100%;
|
||||||
|
overflow: auto;
|
||||||
|
color: var(--preformatted);
|
||||||
|
}
|
||||||
|
pre code {
|
||||||
|
color: var(--preformatted);
|
||||||
|
background: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
meter,
|
||||||
|
progress {
|
||||||
|
border: solid black 0.3px;
|
||||||
|
width: 100%;
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
}
|
||||||
|
progress:indeterminate {
|
||||||
|
background-color: grey;
|
||||||
|
}
|
||||||
|
progress::-webkit-progress-bar {
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
}
|
||||||
|
progress::-webkit-progress-value {
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
background-color: var(--accent);
|
||||||
|
}
|
||||||
|
progress::-moz-progress-bar {
|
||||||
|
background-size: 100% 100%;
|
||||||
|
transition-property: width;
|
||||||
|
transition-duration: 0.3s;
|
||||||
|
background-color: var(--accent);
|
||||||
|
}
|
||||||
|
dialog {
|
||||||
|
max-width: 40rem;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
dialog::backdrop {
|
||||||
|
background-color: var(--bg);
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
@media only screen and (max-width: 720px) {
|
||||||
|
dialog {
|
||||||
|
max-width: 100%;
|
||||||
|
margin: auto 1em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sub,
|
||||||
|
sup {
|
||||||
|
vertical-align: baseline;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
sup {
|
||||||
|
top: -0.4em;
|
||||||
|
}
|
||||||
|
sub {
|
||||||
|
top: 0.3em;
|
||||||
|
}
|
||||||
|
.notice {
|
||||||
|
background: var(--accent-bg);
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
padding: 1.5rem;
|
||||||
|
margin: 2rem 0;
|
||||||
|
}
|
||||||
|
meter {
|
||||||
|
display: block;
|
||||||
|
margin: 0 auto;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
-moz-appearance: none;
|
||||||
|
appearance: none;
|
||||||
|
border-radius: var(--standard-border-radius);
|
||||||
|
background: none;
|
||||||
|
background-color: whitesmoke;
|
||||||
|
}
|
||||||
|
meter::-webkit-meter-bar {
|
||||||
|
background: none;
|
||||||
|
background-color: var(--text);
|
||||||
|
}
|
||||||
|
meter::-webkit-meter-optimum-value {
|
||||||
|
transition: width 0.5s;
|
||||||
|
background-image: linear-gradient(90deg, var(--accent));
|
||||||
|
background-size: 100% 100%;
|
||||||
|
}
|
||||||
|
meter::-webkit-meter-optimum-value:hover {
|
||||||
|
background-image: linear-gradient(90deg, var(--accent));
|
||||||
|
transition: width 0.5s;
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
meter::-moz-meter-bar {
|
||||||
|
background-color: var(--accent);
|
||||||
|
background-image: linear-gradient(0deg, var(--accent));
|
||||||
|
background-size: 100% 100%;
|
||||||
|
}
|
5
assets/js/main.js
Normal file
5
assets/js/main.js
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
console.log("This site was generated by Hugo.");
|
||||||
|
function copyText() {
|
||||||
|
const text = document.getElementById("copyText").innerText;
|
||||||
|
navigator.clipboard.writeText(text);
|
||||||
|
}
|
9
content/_index.md
Normal file
9
content/_index.md
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
+++
|
||||||
|
title = 'Home'
|
||||||
|
date = 2023-01-01T08:00:00-07:00
|
||||||
|
draft = false
|
||||||
|
+++
|
||||||
|
|
||||||
|
Laborum voluptate pariatur ex culpa magna nostrud est incididunt fugiat
|
||||||
|
pariatur do dolor ipsum enim. Consequat tempor do dolor eu. Non id id anim anim
|
||||||
|
excepteur excepteur pariatur nostrud qui irure ullamco.
|
5
go.mod
Normal file
5
go.mod
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
module git.musselman.dev/musselman/smolboi
|
||||||
|
|
||||||
|
go 1.22.5
|
||||||
|
|
||||||
|
require github.com/kaushalmodi/hugo-atom-feed v0.2.0 // indirect
|
2
go.sum
Normal file
2
go.sum
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
github.com/kaushalmodi/hugo-atom-feed v0.2.0 h1:7jeUfQTBal7SjcAR0fPMKIsfMXb8OLoTo1BPMkLO1vQ=
|
||||||
|
github.com/kaushalmodi/hugo-atom-feed v0.2.0/go.mod h1:eNCxNrqVpeR5IvtTrAB1J8ruthtI3KtHMlOIwp0rafo=
|
27
hugo.toml
Normal file
27
hugo.toml
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
baseURL = 'https://example.org/'
|
||||||
|
languageCode = 'en-US'
|
||||||
|
title = 'My New Hugo Site'
|
||||||
|
|
||||||
|
[[menus.main]]
|
||||||
|
name = 'Home'
|
||||||
|
pageRef = '/'
|
||||||
|
weight = 10
|
||||||
|
|
||||||
|
[[menus.main]]
|
||||||
|
name = 'Posts'
|
||||||
|
pageRef = '/posts'
|
||||||
|
weight = 20
|
||||||
|
|
||||||
|
[[menus.main]]
|
||||||
|
name = 'About Pages'
|
||||||
|
pageRef = '/about-pages'
|
||||||
|
weight = 30
|
||||||
|
|
||||||
|
[module]
|
||||||
|
[module.hugoVersion]
|
||||||
|
extended = false
|
||||||
|
min = "0.116.0"
|
||||||
|
|
||||||
|
|
||||||
|
[[module.imports]]
|
||||||
|
path = "github.com/kaushalmodi/hugo-atom-feed"
|
15
layouts/_default/baseof.html
Normal file
15
layouts/_default/baseof.html
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html
|
||||||
|
lang="{{ or site.Language.LanguageCode }}"
|
||||||
|
dir="{{ or site.Language.LanguageDirection `ltr` }}"
|
||||||
|
>
|
||||||
|
<head>
|
||||||
|
{{ partial "head.html" . }}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header>{{ partial "header.html" . }}</header>
|
||||||
|
<main>{{ block "main" . }}{{ end }}</main>
|
||||||
|
<!--TODO: ADD author and share section-->
|
||||||
|
<footer>{{ partial "footer.html" . }}</footer>
|
||||||
|
</body>
|
||||||
|
</html>
|
15
layouts/_default/home.html
Normal file
15
layouts/_default/home.html
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
<article class="prose max-w-full dark:prose-invert">
|
||||||
|
{{ with .Title }}
|
||||||
|
<header>
|
||||||
|
<h1>{{ . | emojify }}</h1>
|
||||||
|
</header>
|
||||||
|
{{ end }}
|
||||||
|
<section>{{ .Content | emojify }}</section>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
{{ range first 3 ( where .Site.RegularPages "Type" "posts"
|
||||||
|
).ByPublishDate.Reverse }}
|
||||||
|
<h4><a href="{{ .Permalink }}">{{ .Title }}</a></h4>
|
||||||
|
<p>{{.Summary}}</p>
|
||||||
|
{{ end }} {{ end }}
|
12
layouts/_default/list.html
Normal file
12
layouts/_default/list.html
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
<h2>{{ .Title }}</h2>
|
||||||
|
{{ .Content }} {{ range .Pages }}
|
||||||
|
<h3><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h3>
|
||||||
|
<p>
|
||||||
|
{{ .ReadingTime }} mins · {{ $dateMachine := .Date | time.Format
|
||||||
|
"2006-01-02T15:04:05-07:00" }} {{ $dateHuman := .Date | time.Format
|
||||||
|
":date_long" }}
|
||||||
|
|
||||||
|
<time datetime="{{ $dateMachine }}">{{ $dateHuman }}</time>
|
||||||
|
</p>
|
||||||
|
{{ .Summary }} {{ end }} {{ end }}
|
11
layouts/_default/single.html
Normal file
11
layouts/_default/single.html
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
<h1>{{ .Title }}</h1>
|
||||||
|
|
||||||
|
{{ .ReadingTime }} mins · {{ $dateMachine := .Date | time.Format
|
||||||
|
"2006-01-02T15:04:05-07:00" }} {{ $dateHuman := .Date | time.Format ":date_long"
|
||||||
|
}}
|
||||||
|
|
||||||
|
<time datetime="{{ $dateMachine }}">{{ $dateHuman }}</time>
|
||||||
|
|
||||||
|
{{ .Content }} {{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }} {{
|
||||||
|
end }}
|
74
layouts/partials/article-link.html
Normal file
74
layouts/partials/article-link.html
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
<article >
|
||||||
|
{{- $images := $.Resources.ByType "image" }}
|
||||||
|
{{- $thumbnail := $images.GetMatch (.Params.thumbnail | default "*thumb*") }}
|
||||||
|
{{- $feature := $images.GetMatch (.Params.feature | default "*feature*") | default $thumbnail }}
|
||||||
|
{{- with $feature }}
|
||||||
|
<div class="flex-none pe-4 sm:pe-6 ">
|
||||||
|
<a
|
||||||
|
href="{{ with $.Params.externalUrl }}
|
||||||
|
{{ . }}
|
||||||
|
{{ else }}
|
||||||
|
{{ $.RelPermalink }}
|
||||||
|
{{ end }}"
|
||||||
|
aria-label="{{ $.Title | emojify }}"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
alt="{{ $.Params.featureAlt | default $.Params.thumbnailAlt | default "" }}"
|
||||||
|
{{ if eq .MediaType.SubType "svg" }}
|
||||||
|
class="w-24 max-w-[6rem] max-h-[4.5rem] rounded-md sm:max-h-[7.5rem] sm:w-40
|
||||||
|
sm:max-w-[10rem]" src="{{ .RelPermalink }}"
|
||||||
|
{{ else }}
|
||||||
|
class="w-24 rounded-md sm:w-40" srcset="
|
||||||
|
{{- (.Fill "160x120 smart").RelPermalink }}
|
||||||
|
160w, {{- (.Fill "320x240 smart").RelPermalink }} 2x"
|
||||||
|
src="{{ (.Fill "160x120 smart").RelPermalink }}" width="160" height="120"
|
||||||
|
{{ end }}
|
||||||
|
{{ if $.Site.Params.enableImageLazyLoading | default true }}
|
||||||
|
loading="lazy"
|
||||||
|
{{ end }}
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{{- end }}
|
||||||
|
<div>
|
||||||
|
<h3 >
|
||||||
|
{{ with .Params.externalUrl }}
|
||||||
|
<div>
|
||||||
|
<a
|
||||||
|
href="{{ . }}"
|
||||||
|
target="_blank"
|
||||||
|
rel="external"
|
||||||
|
>{{ $.Title | emojify }}</a
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
title="{{ i18n "list.externalurl_title" }}"
|
||||||
|
>
|
||||||
|
<span class="rtl:hidden">↗</span>
|
||||||
|
<span class="ltr:hidden">↖</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
{{ else }}
|
||||||
|
<a
|
||||||
|
href="{{ .RelPermalink }}"
|
||||||
|
>{{ .Title | emojify }}</a
|
||||||
|
>
|
||||||
|
{{ end }}
|
||||||
|
{{ if and .Draft .Site.Params.article.showDraftLabel }}
|
||||||
|
<div class="ms-2">
|
||||||
|
{{ partial "badge.html" (i18n "article.draft" | emojify) }}
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
{{ if templates.Exists "partials/extend-article-link.html" }}
|
||||||
|
{{ partial "extend-article-link.html" . }}
|
||||||
|
{{ end }}
|
||||||
|
</h3>
|
||||||
|
<div>
|
||||||
|
{{ partial "article-meta.html" . }}
|
||||||
|
</div>
|
||||||
|
{{ if .Params.showSummary | default (.Site.Params.list.showSummary | default false) }}
|
||||||
|
<div >
|
||||||
|
{{ .Summary | emojify }}
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
</article>
|
1
layouts/partials/footer.html
Normal file
1
layouts/partials/footer.html
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<p>Copyright {{ now.Year }}. All rights reserved.</p>
|
5
layouts/partials/head.html
Normal file
5
layouts/partials/head.html
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width">
|
||||||
|
<title>{{ if .IsHome }}{{ site.Title }}{{ else }}{{ printf "%s | %s" .Title site.Title }}{{ end }}</title>
|
||||||
|
{{ partialCached "head/css.html" . }}
|
||||||
|
{{ partialCached "head/js.html" . }}
|
9
layouts/partials/head/css.html
Normal file
9
layouts/partials/head/css.html
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{{- with resources.Get "css/main.css" }}
|
||||||
|
{{- if eq hugo.Environment "development" }}
|
||||||
|
<link rel="stylesheet" href="{{ .RelPermalink }}">
|
||||||
|
{{- else }}
|
||||||
|
{{- with . | minify | fingerprint }}
|
||||||
|
<link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
12
layouts/partials/head/js.html
Normal file
12
layouts/partials/head/js.html
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{{- with resources.Get "js/main.js" }}
|
||||||
|
{{- if eq hugo.Environment "development" }}
|
||||||
|
{{- with . | js.Build }}
|
||||||
|
<script src="{{ .RelPermalink }}"></script>
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
{{- $opts := dict "minify" true }}
|
||||||
|
{{- with . | js.Build $opts | fingerprint }}
|
||||||
|
<script src="{{ .RelPermalink }}" integrity="{{- .Data.Integrity }}" crossorigin="anonymous"></script>
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
2
layouts/partials/header.html
Normal file
2
layouts/partials/header.html
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
<h1>{{ site.Title }}</h1>
|
||||||
|
{{ partial "menu.html" (dict "menuID" "main" "page" .) }}
|
51
layouts/partials/menu.html
Normal file
51
layouts/partials/menu.html
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
{{- /*
|
||||||
|
Renders a menu for the given menu ID.
|
||||||
|
|
||||||
|
@context {page} page The current page.
|
||||||
|
@context {string} menuID The menu ID.
|
||||||
|
|
||||||
|
@example: {{ partial "menu.html" (dict "menuID" "main" "page" .) }}
|
||||||
|
*/}}
|
||||||
|
|
||||||
|
{{- $page := .page }}
|
||||||
|
{{- $menuID := .menuID }}
|
||||||
|
|
||||||
|
{{- with index site.Menus $menuID }}
|
||||||
|
<nav>
|
||||||
|
<ul>
|
||||||
|
{{- partial "inline/menu/walk.html" (dict "page" $page "menuEntries" .) }}
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- define "partials/inline/menu/walk.html" }}
|
||||||
|
{{- $page := .page }}
|
||||||
|
{{- range .menuEntries }}
|
||||||
|
{{- $attrs := dict "href" .URL }}
|
||||||
|
{{- if $page.IsMenuCurrent .Menu . }}
|
||||||
|
{{- $attrs = merge $attrs (dict "class" "active" "aria-current" "page") }}
|
||||||
|
{{- else if $page.HasMenuCurrent .Menu .}}
|
||||||
|
{{- $attrs = merge $attrs (dict "class" "ancestor" "aria-current" "true") }}
|
||||||
|
{{- end }}
|
||||||
|
{{- $name := .Name }}
|
||||||
|
{{- with .Identifier }}
|
||||||
|
{{- with T . }}
|
||||||
|
{{- $name = . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
{{- range $k, $v := $attrs }}
|
||||||
|
{{- with $v }}
|
||||||
|
{{- printf " %s=%q" $k $v | safeHTMLAttr }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
||||||
|
>{{ $name }}</a>
|
||||||
|
{{- with .Children }}
|
||||||
|
<ul>
|
||||||
|
{{- partial "inline/menu/walk.html" (dict "page" $page "menuEntries" .) }}
|
||||||
|
</ul>
|
||||||
|
{{- end }}
|
||||||
|
</li>
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
0
layouts/partials/recent-articles.html
Normal file
0
layouts/partials/recent-articles.html
Normal file
13
layouts/partials/terms.html
Normal file
13
layouts/partials/terms.html
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{{- /* For a given taxonomy, renders a list of terms assigned to the page.
|
||||||
|
@context {page} page The current page. @context {string} taxonomy The taxonomy.
|
||||||
|
@example: {{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }} */}} {{-
|
||||||
|
$page := .page }} {{- $taxonomy := .taxonomy }} {{- with $page.GetTerms
|
||||||
|
$taxonomy }} {{- $label := (index . 0).Parent.LinkTitle }}
|
||||||
|
<div>
|
||||||
|
<p class="tags">
|
||||||
|
{{ $label }}: {{- range . }}
|
||||||
|
<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
|
||||||
|
{{- end }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{{- end }}
|
3
layouts/shortcodes/alert.html
Normal file
3
layouts/shortcodes/alert.html
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<div>
|
||||||
|
<span>{{- .Inner | markdownify -}} </span>
|
||||||
|
</div>
|
8
layouts/shortcodes/button.html
Normal file
8
layouts/shortcodes/button.html
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<a
|
||||||
|
{{ with .Get "href" }}href="{{ . }}"{{ end }}
|
||||||
|
{{ with .Get "target" }}target="{{ . }}"{{ end }}
|
||||||
|
{{ with .Get "download" }}download="{{ . }}"{{ end }}
|
||||||
|
role="button"
|
||||||
|
>
|
||||||
|
{{ .Inner }}
|
||||||
|
</a>
|
BIN
static/favicon.ico
Normal file
BIN
static/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
31
theme.toml
Normal file
31
theme.toml
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
name = 'Theme name'
|
||||||
|
license = 'MIT'
|
||||||
|
licenselink = 'https://github.com/owner/repo/LICENSE'
|
||||||
|
description = 'Theme description'
|
||||||
|
|
||||||
|
# The home page of the theme, where the source can be found
|
||||||
|
homepage = 'https://github.com/owner/repo'
|
||||||
|
|
||||||
|
# If you have a running demo of the theme
|
||||||
|
demosite = 'https://owner.github.io/repo'
|
||||||
|
|
||||||
|
# Taxonomy terms
|
||||||
|
tags = ['blog', 'company']
|
||||||
|
features = ['some', 'awesome', 'features']
|
||||||
|
|
||||||
|
# If the theme has multiple authors
|
||||||
|
authors = [
|
||||||
|
{name = 'Name of author', homepage = 'Website of author'},
|
||||||
|
{name = 'Name of author', homepage = 'Website of author'}
|
||||||
|
]
|
||||||
|
|
||||||
|
# If the theme has a single author
|
||||||
|
[author]
|
||||||
|
name = 'Your name'
|
||||||
|
homepage = 'Your website'
|
||||||
|
|
||||||
|
# If porting an existing theme
|
||||||
|
[original]
|
||||||
|
author = 'Name of original author'
|
||||||
|
homepage = 'Website of original author'
|
||||||
|
repo = 'https://github.com/owner/repo'
|
Loading…
Reference in a new issue