Add website files
822
content/files/css/index.css
Normal file
@@ -0,0 +1,822 @@
|
||||
/* ==========================================================================
|
||||
Fonts
|
||||
========================================================================== */
|
||||
|
||||
@import url('https://fonts.cdnfonts.com/css/jetbrains-mono-2');
|
||||
|
||||
/* ==========================================================================
|
||||
Berkeley Mono™
|
||||
© Copyright 2025, U.S. Graphics, LLC.
|
||||
Licensed under SKU LT-02 to Eric Taylor (Taylor IT Solutions LLC)
|
||||
https://usgraphics.com/products/berkeley-mono
|
||||
========================================================================== */
|
||||
|
||||
@font-face {
|
||||
font-family: 'Berkeley Mono';
|
||||
src: url('http://erictaylor.me/files/font/BerkeleyMono-Regular.woff2') format('woff2'),
|
||||
url('http://erictaylor.me/files/font/BerkeleyMono-Regular.woff') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Berkeley Mono';
|
||||
src: url('http://erictaylor.me/files/font/BerkeleyMono-Bold.woff2') format('woff2'),
|
||||
url('http://erictaylor.me/files/font/BerkeleyMono-Bold.woff') format('woff');
|
||||
font-weight: bold;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Berkeley Mono';
|
||||
src: url('http://erictaylor.me/files/font/BerkeleyMono-Italic.woff2') format('woff2'),
|
||||
url('http://erictaylor.me/files/font/BerkeleyMono-Italic.woff') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Base & Variables
|
||||
========================================================================== */
|
||||
|
||||
@font-face {
|
||||
font-family: 'Berkeley Mono';
|
||||
src: url('http://erictaylor.me/files/font/BerkeleyMono-BoldItalic.woff2') format('woff2'),
|
||||
url('http://erictaylor.me/files/font/BerkeleyMono-BoldItalic.woff') format('woff');
|
||||
font-weight: bold;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
:root {
|
||||
--font-family: "Berkeley Mono", "JetBrains Mono", "Cascadia Code", "Fira Code", "Source Code Pro",
|
||||
Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||
--line-height: 1.20rem;
|
||||
--border-thickness: 2px;
|
||||
--text-color: #000;
|
||||
--text-color-alt: #666;
|
||||
--background-color: #fff;
|
||||
--background-color-alt: #eee;
|
||||
|
||||
--font-weight-normal: 500;
|
||||
--font-weight-medium: 600;
|
||||
--font-weight-bold: 800;
|
||||
|
||||
font-family: var(--font-family);
|
||||
font-optical-sizing: auto;
|
||||
font-weight: var(--font-weight-normal);
|
||||
font-style: normal;
|
||||
font-variant-numeric: tabular-nums lining-nums;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--text-color: #fff;
|
||||
--text-color-alt: #aaa;
|
||||
--background-color: #000;
|
||||
--background-color-alt: #222;
|
||||
}
|
||||
}
|
||||
|
||||
[data-theme="dark"] {
|
||||
--text-color: #fff;
|
||||
--text-color-alt: #aaa;
|
||||
--background-color: #000;
|
||||
--background-color-alt: #222;
|
||||
}
|
||||
|
||||
[data-theme="light"] {
|
||||
--text-color: #000;
|
||||
--text-color-alt: #666;
|
||||
--background-color: #fff;
|
||||
--background-color-alt: #eee;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
*+* {
|
||||
margin-top: var(--line-height);
|
||||
}
|
||||
|
||||
.theme-toggle {
|
||||
cursor: pointer;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
vertical-align: middle;
|
||||
width: 1.5ch;
|
||||
height: 1.5ch;
|
||||
margin: 0 0 0 0;
|
||||
}
|
||||
|
||||
.theme-toggle svg {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
fill: var(--text-color);
|
||||
}
|
||||
|
||||
.theme-toggle:hover svg {
|
||||
fill: var(--text-color-alt);
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Layout & Grid
|
||||
========================================================================== */
|
||||
|
||||
html {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
background: var(--background-color);
|
||||
color: var(--text-color);
|
||||
}
|
||||
|
||||
body {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: var(--line-height) 2ch;
|
||||
max-width: calc(min(80ch, round(down, 100%, 1ch)));
|
||||
line-height: var(--line-height);
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 480px) {
|
||||
:root {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
body {
|
||||
padding: var(--line-height) 1ch;
|
||||
}
|
||||
}
|
||||
|
||||
@media print {
|
||||
.page, .page-break { break-after: page; }
|
||||
}
|
||||
|
||||
/* Override universal margins for grid */
|
||||
.grid {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.grid>* {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
/* Fix grid spacing */
|
||||
.grid {
|
||||
--grid-cells: 0;
|
||||
display: flex;
|
||||
gap: 1ch;
|
||||
width: calc(round(down, 100%, (1ch * var(--grid-cells)) - (1ch * var(--grid-cells) - 1)));
|
||||
margin-bottom: var(--line-height);
|
||||
}
|
||||
|
||||
.grid>*,
|
||||
.grid>input {
|
||||
flex: 0 0 calc(round(down, (100% - (1ch * (var(--grid-cells) - 1))) / var(--grid-cells), 1ch));
|
||||
}
|
||||
|
||||
.grid:has(> :last-child:nth-child(1)) {
|
||||
--grid-cells: 1;
|
||||
}
|
||||
|
||||
.grid:has(> :last-child:nth-child(2)) {
|
||||
--grid-cells: 2;
|
||||
}
|
||||
|
||||
.grid:has(> :last-child:nth-child(3)) {
|
||||
--grid-cells: 3;
|
||||
}
|
||||
|
||||
.grid:has(> :last-child:nth-child(4)) {
|
||||
--grid-cells: 4;
|
||||
}
|
||||
|
||||
.grid:has(> :last-child:nth-child(5)) {
|
||||
--grid-cells: 5;
|
||||
}
|
||||
|
||||
.grid:has(> :last-child:nth-child(6)) {
|
||||
--grid-cells: 6;
|
||||
}
|
||||
|
||||
.grid:has(> :last-child:nth-child(7)) {
|
||||
--grid-cells: 7;
|
||||
}
|
||||
|
||||
.grid:has(> :last-child:nth-child(8)) {
|
||||
--grid-cells: 8;
|
||||
}
|
||||
|
||||
.grid:has(> :last-child:nth-child(9)) {
|
||||
--grid-cells: 9;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Typography
|
||||
========================================================================== */
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-weight: var(--font-weight-bold);
|
||||
margin: calc(var(--line-height) * 2) 0 var(--line-height);
|
||||
line-height: var(--line-height);
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 2rem;
|
||||
line-height: calc(2 * var(--line-height));
|
||||
margin-bottom: calc(var(--line-height) * 2);
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1rem;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.header-anchor {
|
||||
opacity: 0;
|
||||
text-decoration: none;
|
||||
margin-left: 1ch;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
h1:hover .header-anchor,
|
||||
h2:hover .header-anchor,
|
||||
h3:hover .header-anchor,
|
||||
h4:hover .header-anchor,
|
||||
h5:hover .header-anchor,
|
||||
h6:hover .header-anchor {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
hr {
|
||||
position: relative;
|
||||
display: block;
|
||||
height: var(--line-height);
|
||||
margin: calc(var(--line-height) * 1.5) 0;
|
||||
border: none;
|
||||
color: var(--text-color);
|
||||
}
|
||||
|
||||
hr:after {
|
||||
display: block;
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: calc(var(--line-height) / 2 - var(--border-thickness));
|
||||
left: 0;
|
||||
width: 100%;
|
||||
border-top: calc(var(--border-thickness) * 3) double var(--text-color);
|
||||
height: 0;
|
||||
}
|
||||
|
||||
hr.thin {
|
||||
position: relative;
|
||||
height: var(--line-height);
|
||||
margin: var(--line-height) 0;
|
||||
}
|
||||
|
||||
hr.thin:after {
|
||||
display: block;
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: calc(var(--line-height) / 2);
|
||||
left: 0;
|
||||
width: 100%;
|
||||
border-top: var(--border-thickness) solid var(--text-color-alt);
|
||||
height: 0;
|
||||
}
|
||||
|
||||
p {
|
||||
word-break: break-word;
|
||||
word-wrap: break-word;
|
||||
hyphens: auto;
|
||||
margin-bottom: var(--line-height);
|
||||
}
|
||||
|
||||
strong {
|
||||
font-weight: var(--font-weight-bold);
|
||||
}
|
||||
|
||||
em {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration-thickness: var(--border-thickness);
|
||||
}
|
||||
|
||||
a:link,
|
||||
a:visited {
|
||||
color: var(--text-color);
|
||||
}
|
||||
|
||||
sub {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
margin: 0;
|
||||
vertical-align: sub;
|
||||
line-height: 0;
|
||||
width: calc(1ch / 0.75);
|
||||
font-size: .75rem;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Components
|
||||
========================================================================== */
|
||||
|
||||
|
||||
/* Tables */
|
||||
table {
|
||||
position: relative;
|
||||
top: calc(var(--line-height) / 2);
|
||||
width: calc(round(down, 100%, 1ch));
|
||||
border-collapse: collapse;
|
||||
margin: 0 0 calc(var(--line-height) * 2);
|
||||
}
|
||||
|
||||
th,
|
||||
td {
|
||||
border: var(--border-thickness) solid var(--text-color);
|
||||
padding:
|
||||
calc((var(--line-height) / 2)) calc(1ch - var(--border-thickness) / 2) calc((var(--line-height) / 2) - (var(--border-thickness)));
|
||||
line-height: var(--line-height);
|
||||
vertical-align: top;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
table tbody tr:first-child>* {
|
||||
padding-top: calc((var(--line-height) / 2) - var(--border-thickness));
|
||||
}
|
||||
|
||||
th {
|
||||
font-weight: var(--font-weight-bold);
|
||||
}
|
||||
|
||||
/* Forms */
|
||||
input,
|
||||
button,
|
||||
textarea {
|
||||
border: var(--border-thickness) solid var(--text-color);
|
||||
padding: calc(var(--line-height) / 2 - var(--border-thickness)) calc(1ch - var(--border-thickness));
|
||||
margin: 0;
|
||||
font: inherit;
|
||||
font-weight: inherit;
|
||||
height: calc(var(--line-height) * 2);
|
||||
width: auto;
|
||||
overflow: visible;
|
||||
background: var(--background-color);
|
||||
color: var(--text-color);
|
||||
line-height: normal;
|
||||
-webkit-font-smoothing: inherit;
|
||||
-moz-osx-font-smoothing: inherit;
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
input[type=checkbox],
|
||||
input[type=radio] {
|
||||
display: inline-grid;
|
||||
place-content: center;
|
||||
vertical-align: top;
|
||||
width: 2ch;
|
||||
height: var(--line-height);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
input[type=checkbox]:checked:before,
|
||||
input[type=radio]:checked:before {
|
||||
content: "";
|
||||
width: 1ch;
|
||||
height: calc(var(--line-height) / 2);
|
||||
background: var(--text-color);
|
||||
}
|
||||
|
||||
input[type=radio],
|
||||
input[type=radio]:before {
|
||||
border-radius: 100%;
|
||||
}
|
||||
|
||||
button:focus,
|
||||
input:focus {
|
||||
--border-thickness: 3px;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
input {
|
||||
width: calc(round(down, 100%, 1ch));
|
||||
}
|
||||
|
||||
::placeholder {
|
||||
color: var(--text-color-alt);
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
::-ms-input-placeholder {
|
||||
color: var(--text-color-alt);
|
||||
}
|
||||
|
||||
button::-moz-focus-inner {
|
||||
padding: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
button {
|
||||
text-transform: uppercase;
|
||||
font-weight: var(--font-weight-medium);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background: var(--background-color-alt);
|
||||
}
|
||||
|
||||
button:active {
|
||||
transform: translate(2px, 2px);
|
||||
}
|
||||
|
||||
label {
|
||||
display: block;
|
||||
width: calc(round(down, 100%, 1ch));
|
||||
height: auto;
|
||||
line-height: var(--line-height);
|
||||
font-weight: var(--font-weight-medium);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
label input {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.tree, .tree ul {
|
||||
position: relative;
|
||||
padding-left: 0;
|
||||
list-style-type: none;
|
||||
line-height: var(--line-height);
|
||||
}
|
||||
.tree ul {
|
||||
margin: 0;
|
||||
}
|
||||
.tree ul li {
|
||||
position: relative;
|
||||
padding-left: 1.5ch;
|
||||
margin-left: calc(1.5ch - var(--border-thickness));
|
||||
border-left: var(--border-thickness) solid var(--text-color);
|
||||
}
|
||||
.tree ul li:before {
|
||||
position: absolute;
|
||||
display: block;
|
||||
top: calc(var(--line-height) / 2);
|
||||
left: 0;
|
||||
content: "";
|
||||
width: 1ch;
|
||||
border-bottom: var(--border-thickness) solid var(--text-color);
|
||||
}
|
||||
.tree ul li:last-child {
|
||||
border-left: none;
|
||||
padding-left: calc(1.5ch + var(--border-thickness));
|
||||
}
|
||||
.tree ul li:last-child:after {
|
||||
position: absolute;
|
||||
display: block;
|
||||
top: 0;
|
||||
left: 0;
|
||||
content: "";
|
||||
height: calc(var(--line-height) / 2);
|
||||
border-left: var(--border-thickness) solid var(--text-color);
|
||||
}
|
||||
|
||||
/* Code Blocks */
|
||||
pre {
|
||||
white-space: pre;
|
||||
overflow-x: auto;
|
||||
margin: var(--line-height) 0;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
||||
pre,
|
||||
code {
|
||||
font-family: var(--font-family);
|
||||
}
|
||||
|
||||
code {
|
||||
font-weight: var(--font-weight-medium);
|
||||
}
|
||||
|
||||
code:not(pre code) {
|
||||
background: var(--background-color-alt);
|
||||
padding: 0 0.5ch;
|
||||
border-radius: 2px;
|
||||
font-size: 0.95em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
pre code {
|
||||
display: block;
|
||||
padding: calc(var(--line-height) / 2) 2ch;
|
||||
background: var(--background-color-alt);
|
||||
border-radius: 2px;
|
||||
overflow-x: auto;
|
||||
line-height: var(--line-height);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
pre code::-webkit-scrollbar {
|
||||
height: calc(var(--line-height) / 2);
|
||||
}
|
||||
|
||||
pre code::-webkit-scrollbar-thumb {
|
||||
background: var(--text-color-alt);
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
pre code::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
/* Lists */
|
||||
ul,
|
||||
ol {
|
||||
padding: 0;
|
||||
margin: 0 0 var(--line-height);
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-type: square;
|
||||
padding: 0 0 0 2ch;
|
||||
}
|
||||
|
||||
ol {
|
||||
list-style-type: none;
|
||||
counter-reset: item;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ol ul,
|
||||
ol ol,
|
||||
ul ol,
|
||||
ul ul {
|
||||
padding: 0 0 0 3ch;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
ol li:before {
|
||||
content: counters(item, ".") ". ";
|
||||
counter-increment: item;
|
||||
font-weight: var(--font-weight-medium);
|
||||
}
|
||||
|
||||
li {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
li::marker {
|
||||
line-height: 0;
|
||||
}
|
||||
|
||||
/* Blockquotes */
|
||||
blockquote {
|
||||
margin: var(--line-height) 3ch;
|
||||
padding-left: 2ch;
|
||||
border-left: var(--border-thickness) solid var(--text-color);
|
||||
color: var(--text-color-alt);
|
||||
}
|
||||
|
||||
blockquote p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
blockquote+blockquote {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
/* Details */
|
||||
details {
|
||||
border: var(--border-thickness) solid var(--text-color);
|
||||
padding: calc(var(--line-height) - var(--border-thickness)) 1ch;
|
||||
margin-bottom: var(--line-height);
|
||||
}
|
||||
|
||||
summary {
|
||||
font-weight: var(--font-weight-medium);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
details[open] summary {
|
||||
margin-bottom: var(--line-height);
|
||||
}
|
||||
|
||||
details ::marker {
|
||||
display: inline-block;
|
||||
content: '▶';
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
details[open] ::marker {
|
||||
content: '▼';
|
||||
}
|
||||
|
||||
details :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
/* Media */
|
||||
img,
|
||||
video {
|
||||
display: block;
|
||||
width: 100%;
|
||||
object-fit: contain;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
img {
|
||||
font-style: italic;
|
||||
color: var(--text-color-alt);
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: calc(var(--line-height) * 2) 3ch;
|
||||
overflow-x: auto;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
||||
figcaption {
|
||||
display: block;
|
||||
font-style: italic;
|
||||
margin-top: var(--line-height);
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Utilities
|
||||
========================================================================== */
|
||||
|
||||
.width-min {
|
||||
width: 0%;
|
||||
}
|
||||
|
||||
.width-auto {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.header {
|
||||
margin-bottom: calc(var(--line-height) * 2);
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.header tr td:last-child {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
|
||||
/* ==========================================================================
|
||||
Debug
|
||||
========================================================================== */
|
||||
|
||||
.debug .debug-grid {
|
||||
--color: color-mix(in srgb, var(--text-color) 10%, var(--background-color) 90%);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
z-index: -1;
|
||||
background-image:
|
||||
repeating-linear-gradient(var(--color) 0 1px, transparent 1px 100%),
|
||||
repeating-linear-gradient(90deg, var(--color) 0 1px, transparent 1px 100%);
|
||||
background-size: 1ch var(--line-height);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.debug .off-grid {
|
||||
background: rgba(255, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.debug-toggle-label {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
|
||||
/* ==========================================================================
|
||||
Miscellaneous
|
||||
========================================================================== */
|
||||
|
||||
/* Product Cards */
|
||||
.product-card {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.product-card > *:not(nav) {
|
||||
flex: 1 0 auto;
|
||||
}
|
||||
|
||||
.product-card nav {
|
||||
display: flex;
|
||||
gap: 1ch;
|
||||
align-items: stretch;
|
||||
margin-top: auto;
|
||||
}
|
||||
|
||||
.product-card nav a {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: calc(var(--line-height) / 4) 0;
|
||||
background: var(--background-color-alt);
|
||||
text-decoration: none;
|
||||
min-height: calc(var(--line-height) * 1.5);
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.product-card nav a:hover {
|
||||
background: var(--text-color);
|
||||
color: var(--background-color);
|
||||
}
|
||||
|
||||
.product-card {
|
||||
border: var(--border-thickness) solid var(--text-color);
|
||||
padding: calc(var(--line-height) - var(--border-thickness)) 1ch;
|
||||
width: 100%;
|
||||
margin-top: var(--line-height);
|
||||
}
|
||||
|
||||
.product-card img, .product-card video {
|
||||
margin: 0 -1ch;
|
||||
width: calc(100% + 2ch);
|
||||
max-height: calc(var(--line-height) * 8);
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.product-card h3 {
|
||||
margin-top: var(--line-height);
|
||||
margin-bottom: 0;
|
||||
font-weight: var(--font-weight-bold);
|
||||
}
|
||||
|
||||
.product-card p {
|
||||
color: var(--text-color-alt);
|
||||
margin-bottom: var(--line-height);
|
||||
}
|
||||
|
||||
.product-card table {
|
||||
font-size: 0.9em;
|
||||
margin-bottom: var(--line-height);
|
||||
}
|
||||
|
||||
/* Override the universal margin for nav elements and their children */
|
||||
nav,
|
||||
nav + *,
|
||||
nav > *,
|
||||
nav > * + * {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
/* Also override for nav when it's inside a product-card */
|
||||
.product-card nav {
|
||||
margin-top: auto; /* This pushes the nav to the bottom while removing the default margin */
|
||||
}
|
||||
|
||||
/* Ensure nav children (links/buttons) don't have top margin */
|
||||
.product-card nav > * {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
|
||||
/* Transformations */
|
||||
.rotate-90 {
|
||||
transform: rotate(90deg);
|
||||
transform-origin: center center;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
/* theme-aware images */
|
||||
.theme-aware-image {
|
||||
filter: none;
|
||||
}
|
||||
|
||||
[data-theme="dark"] .theme-aware-image:not(.no-invert) {
|
||||
filter: invert(1) hue-rotate(180deg);
|
||||
}
|
||||
|
||||
/* Optional: Add specific adjustments for certain images if needed */
|
||||
[data-theme="dark"] .theme-aware-image.adjust-contrast {
|
||||
filter: invert(1) hue-rotate(180deg) contrast(0.8);
|
||||
}
|
||||
48
content/files/css/reset.css
Normal file
@@ -0,0 +1,48 @@
|
||||
/* http://meyerweb.com/eric/tools/css/reset/
|
||||
v2.0 | 20110126
|
||||
License: none (public domain)
|
||||
*/
|
||||
|
||||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
a, abbr, acronym, address, big, cite, code,
|
||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var,
|
||||
b, u, i, center,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||
article, aside, canvas, details, embed,
|
||||
figure, figcaption, footer, header, hgroup,
|
||||
menu, nav, output, ruby, section, summary,
|
||||
time, mark, audio, video {
|
||||
/*margin: 0;*/
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
/* HTML5 display-role reset for older browsers */
|
||||
article, aside, details, figcaption, figure,
|
||||
footer, header, hgroup, menu, nav, section {
|
||||
display: block;
|
||||
}
|
||||
body {
|
||||
line-height: 1;
|
||||
}
|
||||
ol, ul {
|
||||
list-style: none;
|
||||
}
|
||||
blockquote, q {
|
||||
quotes: none;
|
||||
}
|
||||
blockquote:before, blockquote:after,
|
||||
q:before, q:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
13
content/files/eric-taylor.asc
Normal file
@@ -0,0 +1,13 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mDMEYPuwoBYJKwYBBAHaRw8BAQdA0o4SMwujFo4me0pY/KZwsl8OapGixHt7JeSk
|
||||
q3EY6bK0EzxlcmljQHRheWxvcnMubGlmZT6IiwQQFggAMwIZAQUCYPuwoAIbAwQL
|
||||
CQgHBhUICQoLAgMWAgEWIQSOLnHXzCf2q8YL9YDnB41H4BDimAAKCRDnB41H4BDi
|
||||
mKGKAQCB7x/JKdvB86WYXSHllbPHe8F9BythI7kCsfSctX5JOAEAuYLXle9eVq0T
|
||||
7pzroQio0UxSd3nMbwNpn6lsjXBQfA+4OARg+7CgEgorBgEEAZdVAQUBAQdAJtEu
|
||||
vle4g4RvUz8hVKGccuxe4yDN7s33mFehysaK0DYDAQgHiHgEGBYIACAFAmD7sKAC
|
||||
GwwWIQSOLnHXzCf2q8YL9YDnB41H4BDimAAKCRDnB41H4BDimALWAPsFBaBRyXL+
|
||||
Ezrx3gUOJWyNFyDBPaW5tL6FqZdwY3ORCQD6Ajww2CwOUIFlbB6JJImc/TLe5GA6
|
||||
VgO+I+9vbeMEmwE=
|
||||
=RgtN
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
BIN
content/files/img/1_atom.png
Normal file
|
After Width: | Height: | Size: 251 B |
BIN
content/files/img/1_clipart.png
Normal file
|
After Width: | Height: | Size: 255 B |
BIN
content/files/img/1_saturn.png
Normal file
|
After Width: | Height: | Size: 918 B |
|
After Width: | Height: | Size: 108 KiB |
BIN
content/files/img/2_macintosh.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
content/files/img/2_mail_compose.png
Normal file
|
After Width: | Height: | Size: 161 B |
BIN
content/files/img/2_small_speech.png
Normal file
|
After Width: | Height: | Size: 197 B |
BIN
content/files/img/3_compact.png
Normal file
|
After Width: | Height: | Size: 98 B |
BIN
content/files/img/4_clockman.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
content/files/img/4_shoe.png
Normal file
|
After Width: | Height: | Size: 412 B |
BIN
content/files/img/5_globe.png
Normal file
|
After Width: | Height: | Size: 694 B |
BIN
content/files/img/5_ruler.png
Normal file
|
After Width: | Height: | Size: 235 B |
BIN
content/files/img/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
content/files/img/eric-jaime.gif
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
content/files/img/favicon-96x96.png
Normal file
|
After Width: | Height: | Size: 808 B |
BIN
content/files/img/favicon.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
3
content/files/img/favicon.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 200 200"><rect width="200" height="200" fill="url('#gradient')"></rect><defs><linearGradient id="SvgjsLinearGradient1001" gradientTransform="rotate(107 0.5 0.5)"><stop offset="0%" stop-color="#000000"></stop><stop offset="100%" stop-color="#191819"></stop></linearGradient></defs><g><g fill="#ffffff" transform="matrix(7.007016024252923,0,0,7.007016024252923,13.49475061577499,149.81925973446147)" stroke="#ffffff" stroke-width="0.95"><path d="M9.89-8.57L9.89-6.03L4.50-6.03L4.50-2.64L10.87-2.64L10.87 0L1.07 0L1.07-14.22L10.89-14.22L10.89-11.57L4.50-11.57L4.50-8.57L9.89-8.57ZM23.62-14.22L23.62-11.57L19.36-11.57L19.36 0L15.93 0L15.93-11.57L11.74-11.57L11.74-14.22L23.62-14.22Z"></path></g></g></svg><style>@media (prefers-color-scheme: light) { :root { filter: none; } }
|
||||
@media (prefers-color-scheme: dark) { :root { filter: none; } }
|
||||
</style></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
BIN
content/files/img/job-suffering.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
65
content/files/img/mail-message-new.svg
Normal file
|
After Width: | Height: | Size: 22 KiB |
69
content/files/img/mail-unread.svg
Normal file
@@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg1180"
|
||||
width="640px"
|
||||
version="1.1"
|
||||
height="640px"
|
||||
sodipodi:docname="chicago95_tmp_file.svg"
|
||||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="640"
|
||||
inkscape:window-height="480"
|
||||
id="namedview593"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.36875"
|
||||
inkscape:cx="320"
|
||||
inkscape:cy="320"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg1180" />
|
||||
<metadata
|
||||
id="metadata1184">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs2" />
|
||||
<path
|
||||
style="fill:#c0c0c0"
|
||||
d="M 60 180 L 60 201 L 80 201 L 80 221 L 100 221 L 100 241 L 120 241 L 120 261 L 140 261 L 140 281 L 160 281 L 160 301 L 180 301 L 180 320 L 180 321 L 180 340 L 160 340 L 160 360 L 140 360 L 140 380 L 120 380 L 120 400 L 100 400 L 100 420 L 80 420 L 80 440 L 60 440 L 60 461 L 81 461 L 81 441 L 101 441 L 101 421 L 121 421 L 121 401 L 141 401 L 141 381 L 161 381 L 161 361 L 181 361 L 181 341 L 200 341 L 201 341 L 220 341 L 220 361 L 240 361 L 240 381 L 260 381 L 260 401 L 280 401 L 281 401 L 300 401 L 301 401 L 320 401 L 321 401 L 340 401 L 341 401 L 361 401 L 361 381 L 380 381 L 381 381 L 401 381 L 401 361 L 421 361 L 421 341 L 440 341 L 440 361 L 460 361 L 460 381 L 480 381 L 480 401 L 500 401 L 500 421 L 520 421 L 520 441 L 540 441 L 540 461 L 561 461 L 561 440 L 541 440 L 541 420 L 521 420 L 521 400 L 501 400 L 501 380 L 481 380 L 481 360 L 461 360 L 461 340 L 441 340 L 441 321 L 441 320 L 441 301 L 461 301 L 461 281 L 481 281 L 481 261 L 501 261 L 501 241 L 521 241 L 521 221 L 541 221 L 541 201 L 561 201 L 561 180 L 540 180 L 540 200 L 520 200 L 520 220 L 500 220 L 500 240 L 480 240 L 480 260 L 460 260 L 460 280 L 440 280 L 440 300 L 420 300 L 420 320 L 400 320 L 400 340 L 380 340 L 380 360 L 360 360 L 360 380 L 341 380 L 340 380 L 321 380 L 320 380 L 301 380 L 300 380 L 281 380 L 280 380 L 261 380 L 261 360 L 241 360 L 241 340 L 221 340 L 221 320 L 201 320 L 201 300 L 181 300 L 181 280 L 161 280 L 161 260 L 141 260 L 141 240 L 121 240 L 121 220 L 101 220 L 101 200 L 81 200 L 81 180 L 60 180 z "
|
||||
id="rect950" />
|
||||
<path
|
||||
style="fill:#ffff00"
|
||||
d="M 520 140 L 520 161 L 541 161 L 541 140 L 520 140 z M 480 160 L 480 181 L 501 181 L 501 160 L 480 160 z M 480 200 L 480 221 L 501 221 L 501 200 L 480 200 z M 440 220 L 440 241 L 461 241 L 461 220 L 440 220 z M 520 220 L 520 241 L 541 241 L 541 220 L 520 220 z M 400 240 L 400 261 L 421 261 L 421 240 L 400 240 z M 520 260 L 520 281 L 541 281 L 541 260 L 520 260 z M 400 280 L 400 301 L 421 301 L 421 280 L 400 280 z M 480 280 L 480 301 L 501 301 L 501 280 L 480 280 z M 360 300 L 360 321 L 381 321 L 381 300 L 360 300 z M 440 300 L 440 321 L 461 321 L 461 300 L 440 300 z M 520 300 L 520 321 L 541 321 L 541 300 L 520 300 z M 160 320 L 160 341 L 181 341 L 181 320 L 160 320 z M 240 320 L 240 341 L 261 341 L 261 320 L 240 320 z M 280 320 L 280 341 L 301 341 L 301 320 L 280 320 z M 320 320 L 320 341 L 341 341 L 341 320 L 320 320 z M 480 320 L 480 341 L 501 341 L 501 320 L 480 320 z M 120 340 L 120 361 L 141 361 L 141 340 L 120 340 z M 520 340 L 520 361 L 541 361 L 541 340 L 520 340 z M 160 360 L 160 381 L 181 381 L 181 360 L 160 360 z M 400 360 L 400 381 L 421 381 L 421 360 L 400 360 z M 480 360 L 480 381 L 501 381 L 501 360 L 480 360 z M 200 380 L 200 401 L 221 401 L 221 380 L 200 380 z M 360 380 L 360 401 L 381 401 L 381 380 L 360 380 z M 440 380 L 440 401 L 461 401 L 461 380 L 440 380 z M 520 380 L 520 401 L 541 401 L 541 380 L 520 380 z M 80 400 L 80 421 L 101 421 L 101 400 L 80 400 z M 240 400 L 240 421 L 261 421 L 261 400 L 240 400 z M 320 400 L 320 421 L 341 421 L 341 400 L 320 400 z M 400 400 L 400 421 L 421 421 L 421 400 L 400 400 z M 480 400 L 480 421 L 501 421 L 501 400 L 480 400 z M 120 420 L 120 441 L 141 441 L 141 420 L 120 420 z M 200 420 L 200 441 L 221 441 L 221 420 L 200 420 z M 280 420 L 280 441 L 301 441 L 301 420 L 280 420 z M 360 420 L 360 441 L 381 441 L 381 420 L 360 420 z M 440 420 L 440 441 L 461 441 L 461 420 L 440 420 z M 160 440 L 160 461 L 181 461 L 181 440 L 160 440 z M 240 440 L 240 461 L 261 461 L 261 440 L 240 440 z M 320 440 L 320 461 L 341 461 L 341 440 L 320 440 z M 400 440 L 400 461 L 421 461 L 421 440 L 400 440 z M 480 440 L 480 461 L 501 461 L 501 440 L 480 440 z M 200 460 L 200 481 L 221 481 L 221 460 L 200 460 z M 280 460 L 280 481 L 301 481 L 301 460 L 280 460 z M 360 460 L 360 481 L 381 481 L 381 460 L 360 460 z M 440 460 L 440 481 L 461 481 L 461 460 L 440 460 z M 520 460 L 520 481 L 541 481 L 541 460 L 520 460 z M 80 480 L 80 501 L 101 501 L 101 480 L 80 480 z M 160 480 L 160 501 L 181 501 L 181 480 L 160 480 z M 240 480 L 240 501 L 261 501 L 261 480 L 240 480 z M 320 480 L 320 501 L 341 501 L 341 480 L 320 480 z M 400 480 L 400 501 L 421 501 L 421 480 L 400 480 z M 480 480 L 480 501 L 501 501 L 501 480 L 480 480 z "
|
||||
id="rect1056" />
|
||||
<path
|
||||
style="fill:#ffffff"
|
||||
d="M 60 140 L 60 161 L 80 161 L 80 181 L 100 181 L 100 201 L 120 201 L 120 221 L 140 221 L 140 241 L 160 241 L 160 261 L 180 261 L 180 281 L 200 281 L 200 301 L 220 301 L 220 321 L 240 321 L 241 321 L 260 321 L 260 340 L 260 341 L 260 361 L 280 361 L 281 361 L 300 361 L 301 361 L 320 361 L 321 361 L 340 361 L 341 361 L 361 361 L 361 341 L 381 341 L 381 321 L 401 321 L 401 301 L 401 300 L 401 281 L 420 281 L 421 281 L 441 281 L 441 261 L 461 261 L 461 241 L 481 241 L 481 221 L 481 220 L 481 201 L 500 201 L 501 201 L 521 201 L 521 181 L 541 181 L 541 161 L 561 161 L 561 140 L 540 140 L 540 160 L 521 160 L 521 140 L 501 140 L 500 140 L 481 140 L 480 140 L 461 140 L 460 140 L 441 140 L 440 140 L 421 140 L 420 140 L 401 140 L 400 140 L 381 140 L 380 140 L 361 140 L 360 140 L 341 140 L 340 140 L 321 140 L 320 140 L 301 140 L 300 140 L 281 140 L 280 140 L 261 140 L 260 140 L 241 140 L 240 140 L 221 140 L 220 140 L 201 140 L 200 140 L 181 140 L 180 140 L 161 140 L 160 140 L 141 140 L 140 140 L 121 140 L 120 140 L 101 140 L 100 140 L 81 140 L 80 140 L 60 140 z M 481 161 L 500 161 L 500 180 L 481 180 L 481 161 z M 60 200 L 60 220 L 60 221 L 60 240 L 60 241 L 60 260 L 60 261 L 60 280 L 60 281 L 60 300 L 60 301 L 60 320 L 60 321 L 60 340 L 60 341 L 60 360 L 60 361 L 60 380 L 60 381 L 60 400 L 60 401 L 60 420 L 60 421 L 60 441 L 80 441 L 80 460 L 60 460 L 60 480 L 60 481 L 60 501 L 81 501 L 81 481 L 100 481 L 100 501 L 120 501 L 121 501 L 140 501 L 141 501 L 161 501 L 161 481 L 180 481 L 180 501 L 200 501 L 201 501 L 220 501 L 221 501 L 241 501 L 241 481 L 260 481 L 260 501 L 280 501 L 281 501 L 300 501 L 301 501 L 321 501 L 321 481 L 340 481 L 340 501 L 360 501 L 361 501 L 380 501 L 381 501 L 401 501 L 401 481 L 420 481 L 420 501 L 440 501 L 441 501 L 460 501 L 461 501 L 481 501 L 481 481 L 500 481 L 500 501 L 520 501 L 521 501 L 540 501 L 541 501 L 561 501 L 561 481 L 561 480 L 561 460 L 541 460 L 541 441 L 561 441 L 561 421 L 561 420 L 561 401 L 561 400 L 561 381 L 561 380 L 561 361 L 561 360 L 561 341 L 561 340 L 561 321 L 561 320 L 561 301 L 561 300 L 561 281 L 561 280 L 561 261 L 561 260 L 561 241 L 561 240 L 561 221 L 561 220 L 561 200 L 540 200 L 540 220 L 540 221 L 540 240 L 521 240 L 520 240 L 500 240 L 500 260 L 480 260 L 480 280 L 460 280 L 460 300 L 460 301 L 460 320 L 440 320 L 440 340 L 420 340 L 420 360 L 420 361 L 420 380 L 401 380 L 400 380 L 380 380 L 380 400 L 361 400 L 360 400 L 340 400 L 340 420 L 321 420 L 321 400 L 301 400 L 300 400 L 281 400 L 280 400 L 261 400 L 261 380 L 241 380 L 241 360 L 221 360 L 221 340 L 201 340 L 200 340 L 180 340 L 180 360 L 180 361 L 180 380 L 161 380 L 160 380 L 141 380 L 141 361 L 161 361 L 161 341 L 161 340 L 161 321 L 181 321 L 181 300 L 161 300 L 161 280 L 141 280 L 141 260 L 121 260 L 121 240 L 101 240 L 101 220 L 81 220 L 81 200 L 60 200 z M 441 221 L 460 221 L 460 240 L 441 240 L 441 221 z M 401 241 L 420 241 L 420 260 L 401 260 L 401 241 z M 521 261 L 540 261 L 540 280 L 521 280 L 521 261 z M 481 281 L 500 281 L 500 300 L 481 300 L 481 281 z M 361 301 L 380 301 L 380 320 L 361 320 L 361 301 z M 521 301 L 540 301 L 540 320 L 521 320 L 521 301 z M 281 321 L 300 321 L 300 340 L 281 340 L 281 321 z M 321 321 L 340 321 L 340 340 L 321 340 L 321 321 z M 481 321 L 500 321 L 500 340 L 481 340 L 481 321 z M 121 341 L 140 341 L 140 360 L 121 360 L 121 341 z M 441 341 L 460 341 L 460 360 L 441 360 L 441 341 z M 521 341 L 540 341 L 540 360 L 521 360 L 521 341 z M 461 361 L 480 361 L 481 361 L 500 361 L 500 380 L 500 381 L 500 401 L 520 401 L 520 420 L 501 420 L 500 420 L 481 420 L 481 401 L 481 400 L 481 380 L 461 380 L 461 361 z M 121 381 L 140 381 L 140 400 L 121 400 L 121 381 z M 201 381 L 220 381 L 220 400 L 201 400 L 201 381 z M 441 381 L 460 381 L 460 400 L 441 400 L 441 381 z M 521 381 L 540 381 L 540 400 L 521 400 L 521 381 z M 81 401 L 100 401 L 101 401 L 120 401 L 120 420 L 100 420 L 100 440 L 81 440 L 81 421 L 81 420 L 81 401 z M 241 401 L 260 401 L 260 420 L 241 420 L 241 401 z M 401 401 L 420 401 L 420 420 L 401 420 L 401 401 z M 121 421 L 140 421 L 140 440 L 121 440 L 121 421 z M 201 421 L 220 421 L 220 440 L 201 440 L 201 421 z M 281 421 L 300 421 L 300 440 L 281 440 L 281 421 z M 361 421 L 380 421 L 380 440 L 361 440 L 361 421 z M 441 421 L 460 421 L 460 440 L 441 440 L 441 421 z M 521 421 L 540 421 L 540 440 L 521 440 L 521 421 z M 161 441 L 180 441 L 180 460 L 161 460 L 161 441 z M 241 441 L 260 441 L 260 460 L 241 460 L 241 441 z M 321 441 L 340 441 L 340 460 L 321 460 L 321 441 z M 401 441 L 420 441 L 420 460 L 401 460 L 401 441 z M 481 441 L 500 441 L 500 460 L 481 460 L 481 441 z M 201 461 L 220 461 L 220 480 L 201 480 L 201 461 z M 281 461 L 300 461 L 300 480 L 281 480 L 281 461 z M 361 461 L 380 461 L 380 480 L 361 480 L 361 461 z M 441 461 L 460 461 L 460 480 L 441 480 L 441 461 z M 521 461 L 540 461 L 540 480 L 521 480 L 521 461 z "
|
||||
id="rect1062" />
|
||||
<path
|
||||
style="fill:#808080"
|
||||
d="M 40 120 L 40 140 L 40 141 L 40 160 L 40 161 L 40 180 L 40 181 L 40 200 L 40 201 L 40 220 L 40 221 L 40 240 L 40 241 L 40 260 L 40 261 L 40 280 L 40 281 L 40 300 L 40 301 L 40 320 L 40 321 L 40 340 L 40 341 L 40 360 L 40 361 L 40 380 L 40 381 L 40 400 L 40 401 L 40 420 L 40 421 L 40 440 L 40 441 L 40 460 L 40 461 L 40 480 L 40 481 L 40 500 L 40 501 L 40 521 L 60 521 L 61 521 L 80 521 L 81 521 L 100 521 L 101 521 L 120 521 L 121 521 L 140 521 L 141 521 L 160 521 L 161 521 L 180 521 L 181 521 L 200 521 L 201 521 L 220 521 L 221 521 L 240 521 L 241 521 L 260 521 L 261 521 L 280 521 L 281 521 L 300 521 L 301 521 L 320 521 L 321 521 L 340 521 L 341 521 L 360 521 L 361 521 L 380 521 L 381 521 L 400 521 L 401 521 L 420 521 L 421 521 L 440 521 L 441 521 L 460 521 L 461 521 L 480 521 L 481 521 L 500 521 L 501 521 L 520 521 L 521 521 L 540 521 L 541 521 L 560 521 L 561 521 L 581 521 L 581 501 L 581 500 L 581 481 L 581 480 L 581 461 L 581 460 L 581 441 L 581 440 L 581 421 L 581 420 L 581 401 L 581 400 L 581 381 L 581 380 L 581 361 L 581 360 L 581 341 L 581 340 L 581 321 L 581 320 L 581 301 L 581 300 L 581 281 L 581 280 L 581 261 L 581 260 L 581 241 L 581 240 L 581 221 L 581 220 L 581 201 L 581 200 L 581 181 L 581 180 L 581 161 L 581 160 L 581 141 L 581 140 L 581 120 L 561 120 L 560 120 L 541 120 L 540 120 L 521 120 L 520 120 L 501 120 L 500 120 L 481 120 L 480 120 L 461 120 L 460 120 L 441 120 L 440 120 L 421 120 L 420 120 L 401 120 L 400 120 L 381 120 L 380 120 L 361 120 L 360 120 L 341 120 L 340 120 L 321 120 L 320 120 L 301 120 L 300 120 L 281 120 L 280 120 L 261 120 L 260 120 L 241 120 L 240 120 L 221 120 L 220 120 L 201 120 L 200 120 L 181 120 L 180 120 L 161 120 L 160 120 L 141 120 L 140 120 L 121 120 L 120 120 L 101 120 L 100 120 L 81 120 L 80 120 L 61 120 L 60 120 L 40 120 z M 61 141 L 80 141 L 81 141 L 100 141 L 101 141 L 120 141 L 121 141 L 140 141 L 141 141 L 160 141 L 161 141 L 180 141 L 181 141 L 200 141 L 201 141 L 220 141 L 221 141 L 240 141 L 241 141 L 260 141 L 261 141 L 280 141 L 281 141 L 300 141 L 301 141 L 320 141 L 321 141 L 340 141 L 341 141 L 360 141 L 361 141 L 380 141 L 381 141 L 400 141 L 401 141 L 420 141 L 421 141 L 440 141 L 441 141 L 460 141 L 461 141 L 480 141 L 481 141 L 500 141 L 501 141 L 520 141 L 521 141 L 540 141 L 541 141 L 560 141 L 560 160 L 540 160 L 540 180 L 520 180 L 520 200 L 500 200 L 500 220 L 480 220 L 480 240 L 460 240 L 460 260 L 440 260 L 440 280 L 420 280 L 420 300 L 400 300 L 400 320 L 380 320 L 380 340 L 360 340 L 360 360 L 341 360 L 340 360 L 321 360 L 320 360 L 301 360 L 300 360 L 281 360 L 280 360 L 261 360 L 261 340 L 241 340 L 241 320 L 221 320 L 221 300 L 201 300 L 201 280 L 181 280 L 181 260 L 161 260 L 161 240 L 141 240 L 141 220 L 121 220 L 121 200 L 101 200 L 101 180 L 81 180 L 81 160 L 61 160 L 61 141 z M 61 181 L 80 181 L 80 201 L 100 201 L 100 221 L 120 221 L 120 241 L 140 241 L 140 261 L 160 261 L 160 281 L 180 281 L 180 301 L 200 301 L 200 321 L 220 321 L 220 341 L 240 341 L 240 361 L 260 361 L 260 381 L 280 381 L 281 381 L 300 381 L 301 381 L 320 381 L 321 381 L 340 381 L 341 381 L 361 381 L 361 361 L 381 361 L 381 341 L 401 341 L 401 321 L 421 321 L 421 301 L 441 301 L 441 281 L 461 281 L 461 261 L 481 261 L 481 241 L 501 241 L 501 221 L 521 221 L 521 201 L 541 201 L 541 181 L 560 181 L 560 200 L 560 201 L 560 220 L 560 221 L 560 240 L 560 241 L 560 260 L 560 261 L 560 280 L 560 281 L 560 300 L 560 301 L 560 320 L 560 321 L 560 340 L 560 341 L 560 360 L 560 361 L 560 380 L 560 381 L 560 400 L 560 401 L 560 420 L 560 421 L 560 440 L 560 441 L 560 460 L 560 461 L 560 480 L 560 481 L 560 500 L 541 500 L 540 500 L 521 500 L 520 500 L 501 500 L 500 500 L 481 500 L 480 500 L 461 500 L 460 500 L 441 500 L 440 500 L 421 500 L 420 500 L 401 500 L 400 500 L 381 500 L 380 500 L 361 500 L 360 500 L 341 500 L 340 500 L 321 500 L 320 500 L 301 500 L 300 500 L 281 500 L 280 500 L 261 500 L 260 500 L 241 500 L 240 500 L 221 500 L 220 500 L 201 500 L 200 500 L 181 500 L 180 500 L 161 500 L 160 500 L 141 500 L 140 500 L 121 500 L 120 500 L 101 500 L 100 500 L 81 500 L 80 500 L 61 500 L 61 481 L 61 480 L 61 461 L 61 460 L 61 441 L 61 440 L 61 421 L 61 420 L 61 401 L 61 400 L 61 381 L 61 380 L 61 361 L 61 360 L 61 341 L 61 340 L 61 321 L 61 320 L 61 301 L 61 300 L 61 281 L 61 280 L 61 261 L 61 260 L 61 241 L 61 240 L 61 221 L 61 220 L 61 201 L 61 200 L 61 181 z "
|
||||
id="rect1120" />
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="M 580 120 L 580 140 L 580 141 L 580 160 L 580 161 L 580 180 L 580 181 L 580 200 L 580 201 L 580 220 L 580 221 L 580 240 L 580 241 L 580 260 L 580 261 L 580 280 L 580 281 L 580 300 L 580 301 L 580 320 L 580 321 L 580 340 L 580 341 L 580 360 L 580 361 L 580 380 L 580 381 L 580 400 L 580 401 L 580 420 L 580 421 L 580 440 L 580 441 L 580 460 L 580 461 L 580 480 L 580 481 L 580 500 L 580 501 L 580 520 L 561 520 L 560 520 L 541 520 L 540 520 L 521 520 L 520 520 L 501 520 L 500 520 L 481 520 L 480 520 L 461 520 L 460 520 L 441 520 L 440 520 L 421 520 L 420 520 L 401 520 L 400 520 L 381 520 L 380 520 L 361 520 L 360 520 L 341 520 L 340 520 L 321 520 L 320 520 L 301 520 L 300 520 L 281 520 L 280 520 L 261 520 L 260 520 L 241 520 L 240 520 L 221 520 L 220 520 L 201 520 L 200 520 L 181 520 L 180 520 L 161 520 L 160 520 L 141 520 L 140 520 L 121 520 L 120 520 L 101 520 L 100 520 L 81 520 L 80 520 L 61 520 L 60 520 L 40 520 L 40 541 L 60 541 L 61 541 L 80 541 L 81 541 L 100 541 L 101 541 L 120 541 L 121 541 L 140 541 L 141 541 L 160 541 L 161 541 L 180 541 L 181 541 L 200 541 L 201 541 L 220 541 L 221 541 L 240 541 L 241 541 L 260 541 L 261 541 L 280 541 L 281 541 L 300 541 L 301 541 L 320 541 L 321 541 L 340 541 L 341 541 L 360 541 L 361 541 L 380 541 L 381 541 L 400 541 L 401 541 L 420 541 L 421 541 L 440 541 L 441 541 L 460 541 L 461 541 L 480 541 L 481 541 L 500 541 L 501 541 L 520 541 L 521 541 L 540 541 L 541 541 L 560 541 L 561 541 L 580 541 L 581 541 L 601 541 L 601 521 L 601 520 L 601 501 L 601 500 L 601 481 L 601 480 L 601 461 L 601 460 L 601 441 L 601 440 L 601 421 L 601 420 L 601 401 L 601 400 L 601 381 L 601 380 L 601 361 L 601 360 L 601 341 L 601 340 L 601 321 L 601 320 L 601 301 L 601 300 L 601 281 L 601 280 L 601 261 L 601 260 L 601 241 L 601 240 L 601 221 L 601 220 L 601 201 L 601 200 L 601 181 L 601 180 L 601 161 L 601 160 L 601 141 L 601 140 L 601 120 L 580 120 z "
|
||||
id="rect1178" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 186 KiB |
BIN
content/files/img/portrait.gif
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
content/files/img/runner-running-on-track.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
content/files/img/sig/kitsune-sig.gif
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
content/files/img/sig/sig0003.gif
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
21
content/files/img/site.webmanifest
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "EricTaylor.Me",
|
||||
"short_name": "ET",
|
||||
"icons": [
|
||||
{
|
||||
"src": "http://erictaylor.me/files/img/web-app-manifest-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "http://erictaylor.me/files/img/web-app-manifest-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
}
|
||||
],
|
||||
"theme_color": "#ffffff",
|
||||
"background_color": "#000",
|
||||
"display": "standalone"
|
||||
}
|
||||
BIN
content/files/img/slag-pot.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
content/files/img/sun_ultra98_01.jpg
Normal file
|
After Width: | Height: | Size: 231 KiB |
BIN
content/files/img/sun_ultra98_01_thumb.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
content/files/img/sun_ultra98_02.jpg
Normal file
|
After Width: | Height: | Size: 369 KiB |
BIN
content/files/img/sun_ultra98_02_thumb.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
content/files/img/sun_ultra98_03.jpg
Normal file
|
After Width: | Height: | Size: 297 KiB |
BIN
content/files/img/sun_ultra98_03_thumb.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
content/files/img/sun_ultra98_04.jpg
Normal file
|
After Width: | Height: | Size: 355 KiB |
BIN
content/files/img/sun_ultra98_04_thumb.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
content/files/img/sun_ultra98_05.png
Normal file
|
After Width: | Height: | Size: 209 KiB |
BIN
content/files/img/sun_ultra98_05_thumb.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
content/files/img/sun_ultra98_06.png
Normal file
|
After Width: | Height: | Size: 195 KiB |
BIN
content/files/img/sun_ultra98_06_thumb.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
content/files/img/sun_ultra98_07.jpg
Normal file
|
After Width: | Height: | Size: 487 KiB |
BIN
content/files/img/sun_ultra98_07_thumb.png
Normal file
|
After Width: | Height: | Size: 97 KiB |
BIN
content/files/img/sun_ultra98_08.jpg
Normal file
|
After Width: | Height: | Size: 350 KiB |
BIN
content/files/img/sun_ultra98_08_thumb.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
content/files/img/sun_ultra98_09.jpg
Normal file
|
After Width: | Height: | Size: 280 KiB |
BIN
content/files/img/sun_ultra98_09_thumb.png
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
content/files/img/sun_ultra98_10.jpg
Normal file
|
After Width: | Height: | Size: 239 KiB |
BIN
content/files/img/sun_ultra98_10_thumb.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
content/files/img/unshakeable-joy.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
content/files/img/web-app-manifest-192x192.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
content/files/img/web-app-manifest-512x512.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
120
content/files/js/index.js
Normal file
@@ -0,0 +1,120 @@
|
||||
function gridCellDimensions() {
|
||||
const element = document.createElement("div");
|
||||
element.style.position = "fixed";
|
||||
element.style.height = "var(--line-height)";
|
||||
element.style.width = "1ch";
|
||||
document.body.appendChild(element);
|
||||
const rect = element.getBoundingClientRect();
|
||||
document.body.removeChild(element);
|
||||
return { width: rect.width, height: rect.height };
|
||||
}
|
||||
|
||||
// Add padding to each media to maintain grid.
|
||||
function adjustMediaPadding() {
|
||||
const cell = gridCellDimensions();
|
||||
|
||||
function setHeightFromRatio(media, ratio) {
|
||||
const rect = media.getBoundingClientRect();
|
||||
const realHeight = rect.width / ratio;
|
||||
const diff = cell.height - (realHeight % cell.height);
|
||||
media.style.setProperty("padding-bottom", `${diff}px`);
|
||||
}
|
||||
|
||||
function setFallbackHeight(media) {
|
||||
const rect = media.getBoundingClientRect();
|
||||
const height = Math.round((rect.width / 2) / cell.height) * cell.height;
|
||||
media.style.setProperty("height", `${height}px`);
|
||||
}
|
||||
|
||||
function onMediaLoaded(media) {
|
||||
var width, height;
|
||||
switch (media.tagName) {
|
||||
case "IMG":
|
||||
width = media.naturalWidth;
|
||||
height = media.naturalHeight;
|
||||
break;
|
||||
case "VIDEO":
|
||||
width = media.videoWidth;
|
||||
height = media.videoHeight;
|
||||
break;
|
||||
}
|
||||
if (width > 0 && height > 0) {
|
||||
setHeightFromRatio(media, width / height);
|
||||
} else {
|
||||
setFallbackHeight(media);
|
||||
}
|
||||
}
|
||||
|
||||
const medias = document.querySelectorAll("img, video");
|
||||
for (media of medias) {
|
||||
switch (media.tagName) {
|
||||
case "IMG":
|
||||
if (media.complete) {
|
||||
onMediaLoaded(media);
|
||||
} else {
|
||||
media.addEventListener("load", () => onMediaLoaded(media));
|
||||
media.addEventListener("error", function() {
|
||||
setFallbackHeight(media);
|
||||
});
|
||||
}
|
||||
break;
|
||||
case "VIDEO":
|
||||
switch (media.readyState) {
|
||||
case HTMLMediaElement.HAVE_CURRENT_DATA:
|
||||
case HTMLMediaElement.HAVE_FUTURE_DATA:
|
||||
case HTMLMediaElement.HAVE_ENOUGH_DATA:
|
||||
onMediaLoaded(media);
|
||||
break;
|
||||
default:
|
||||
media.addEventListener("loadeddata", () => onMediaLoaded(media));
|
||||
media.addEventListener("error", function() {
|
||||
setFallbackHeight(media);
|
||||
});
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
adjustMediaPadding();
|
||||
window.addEventListener("load", adjustMediaPadding);
|
||||
window.addEventListener("resize", adjustMediaPadding);
|
||||
|
||||
function checkOffsets() {
|
||||
const ignoredTagNames = new Set([
|
||||
"THEAD",
|
||||
"TBODY",
|
||||
"TFOOT",
|
||||
"TR",
|
||||
"TD",
|
||||
"TH",
|
||||
]);
|
||||
const cell = gridCellDimensions();
|
||||
const elements = document.querySelectorAll("body :not(.debug-grid, .debug-toggle)");
|
||||
for (const element of elements) {
|
||||
if (ignoredTagNames.has(element.tagName)) {
|
||||
continue;
|
||||
}
|
||||
const rect = element.getBoundingClientRect();
|
||||
if (rect.width === 0 && rect.height === 0) {
|
||||
continue;
|
||||
}
|
||||
const top = rect.top + window.scrollY;
|
||||
const left = rect.left + window.scrollX;
|
||||
const offset = top % (cell.height / 2);
|
||||
if(offset > 0) {
|
||||
element.classList.add("off-grid");
|
||||
console.error("Incorrect vertical offset for", element, "with remainder", top % cell.height, "when expecting divisible by", cell.height / 2);
|
||||
} else {
|
||||
element.classList.remove("off-grid");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const debugToggle = document.querySelector(".debug-toggle");
|
||||
function onDebugToggle() {
|
||||
document.body.classList.toggle("debug", debugToggle.checked);
|
||||
}
|
||||
debugToggle.addEventListener("change", onDebugToggle);
|
||||
onDebugToggle();
|
||||