first
@@ -0,0 +1,529 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
|
||||
|
||||
|
||||
<title>attribution | siblinghood of the traveling greeting card</title>
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="utf-8">
|
||||
|
||||
<!-- Meta -->
|
||||
<link rel="canonical" href="/">
|
||||
<meta name="description" content="help a greeting card travel the world">
|
||||
<meta name="robots" content="index,follow">
|
||||
<meta property="og:title" content="attribution | siblinghood of the traveling greeting card">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://siblinghood.quest/attribution/">
|
||||
<meta property="og:description" content="help a greeting card travel the world">
|
||||
|
||||
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||||
<meta property="og:image" content="https://siblinghood.quest/img/logo-light.png">
|
||||
<meta property="og:image:alt" content="blue and gold icon showing a greeting card with wings">
|
||||
|
||||
<meta name="generator" content="Eleventy v3.1.5">
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible+Mono:ital,wght@0,200..800;1,200..800&family=Atkinson+Hyperlegible+Next:ital,wght@0,200..800;1,200..800&display=swap" rel="stylesheet">
|
||||
|
||||
<!-- CSS -->
|
||||
|
||||
|
||||
|
||||
<style>:root {
|
||||
color-scheme: light dark;
|
||||
|
||||
--color-blue-light: #c8e5f5;
|
||||
--color-gold-light: #ecd399;
|
||||
--color-blue-dark: #02293e;
|
||||
--color-gold-dark: #715511;
|
||||
|
||||
--color-bg: light-dark(var(--color-blue-light), var(--color-blue-dark));
|
||||
--color-text: light-dark(var(--color-blue-dark), var(--color-blue-light));
|
||||
--color-accent: light-dark(var(--color-gold-dark), var(--color-gold-light));
|
||||
}
|
||||
|
||||
/* numbered components are from https://www.joshwcomeau.com/css/custom-css-reset/ */
|
||||
*, *::before, *::after {
|
||||
box-sizing: border-box; /* 1. Use a more-intuitive box-sizing model */
|
||||
}
|
||||
|
||||
*:not(dialog) {
|
||||
margin: 0; /* 2. Remove default margin */
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
html {
|
||||
interpolate-size: allow-keywords; /* 3. Enable keyword animations */
|
||||
}
|
||||
}
|
||||
|
||||
#root, #__next {
|
||||
isolation: isolate; /* 10. Create a root stacking context */
|
||||
}
|
||||
|
||||
body {
|
||||
line-height: 1.5; /* 4. Increase line-height */
|
||||
-webkit-font-smoothing: antialiased; /* 5. Improve text rendering */
|
||||
color: var(--color-text);
|
||||
background-color: var(--color-bg);
|
||||
font-family: "Atkinson Hyperlegible Next";
|
||||
}
|
||||
|
||||
main {
|
||||
width: 55%;
|
||||
margin: 0 auto 2rem;
|
||||
scroll-margin-top: 1.5rem;
|
||||
min-height: 50vh;
|
||||
padding-bottom: 2rem;
|
||||
max-width: 1200px;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
main {
|
||||
width: 92%;
|
||||
}
|
||||
}
|
||||
|
||||
img, picture, video, canvas, svg {
|
||||
display: block; /* 6. Improve media defaults */
|
||||
max-width: 100%; /* 6. Improve media defaults */
|
||||
height: auto; /* 6. Improve media defaults */
|
||||
}
|
||||
|
||||
input, button, textarea, select {
|
||||
font: inherit; /* 7. Inherit fonts for form controls */
|
||||
}
|
||||
|
||||
p, h1, h2, h3, h4, h5, h6 {
|
||||
overflow-wrap: break-word; /* 8. Avoid text overflows */
|
||||
}
|
||||
|
||||
p {
|
||||
text-wrap: pretty; /* 9. Improve line wrapping */
|
||||
margin: 0 auto 1.5rem;
|
||||
line-height: 1.5rem;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
p {
|
||||
font-size: .9rem;
|
||||
line-height: 1.3rem;
|
||||
}
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
text-wrap: balance; /* 9. Improve line wrapping */
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: 3rem auto 1rem;
|
||||
text-align: center;
|
||||
font-size: 2.2rem;
|
||||
}
|
||||
|
||||
h2, h3 {
|
||||
margin: 3rem auto .5rem;
|
||||
color: var(--color-accent);
|
||||
border-bottom: solid;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.35rem;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
h1 {
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--color-text);
|
||||
text-decoration: underline;
|
||||
text-decoration-style: solid;
|
||||
text-decoration-thickness: .2rem;
|
||||
text-decoration-color: var(--color-accent);
|
||||
transition: text-decoration-thickness .5s;
|
||||
padding: 0 .15rem;
|
||||
border-radius: .15rem;
|
||||
}
|
||||
|
||||
@media (any-hover: hover) {
|
||||
a:hover {
|
||||
text-decoration-thickness: .4rem;
|
||||
}
|
||||
}
|
||||
|
||||
a:focus-visible {
|
||||
text-decoration: none;
|
||||
outline: var(--color-accent) solid .15rem;
|
||||
}
|
||||
|
||||
ul {
|
||||
margin: 0 auto 1.5rem 2rem;
|
||||
line-height: 1.5rem;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
ul {
|
||||
font-size: .9rem;
|
||||
line-height: 1.3rem;
|
||||
}
|
||||
}
|
||||
|
||||
time {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
button {
|
||||
cursor: pointer;
|
||||
background-color: var(--color-bg);
|
||||
}
|
||||
|
||||
header img {
|
||||
max-height: 25vh;
|
||||
max-width: 100%;
|
||||
width: auto;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
header img {
|
||||
max-height: 20vh;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
#logo-dark {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
#logo-light {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
#author {
|
||||
text-align: right;
|
||||
margin-bottom: 3rem;
|
||||
font-style: italic;
|
||||
}
|
||||
nav {
|
||||
display: flex;
|
||||
position: relative;
|
||||
gap: 1rem;
|
||||
justify-content: center;
|
||||
margin: 1rem auto;
|
||||
}
|
||||
|
||||
nav a,
|
||||
nav button {
|
||||
font-size: 1.4rem;
|
||||
border: .1rem solid;
|
||||
border-radius: .15rem;
|
||||
padding: .15rem .3rem;
|
||||
color: var(--color-accent);
|
||||
text-decoration: none;
|
||||
line-height: 2rem;
|
||||
outline-offset: .1rem;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
nav a,
|
||||
nav button {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (any-hover: hover) {
|
||||
nav a:hover,
|
||||
nav button:hover {
|
||||
color: var(--color-bg);
|
||||
background-color: var(--color-accent);
|
||||
border-color: var(--color-accent);
|
||||
}
|
||||
}
|
||||
|
||||
nav a:focus-visible,
|
||||
nav button:focus-visible {
|
||||
outline: .1rem solid var(--color-accent);
|
||||
}
|
||||
|
||||
#skip {
|
||||
left: -999px;
|
||||
position: absolute;
|
||||
top: auto;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
overflow: hidden;
|
||||
z-index: -99;
|
||||
background-color: var(--color-bg);
|
||||
}
|
||||
|
||||
#skip:focus-visible {
|
||||
left: 1rem;
|
||||
width: auto;
|
||||
height: auto;
|
||||
overflow: auto;
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
@media (any-hover: hover) {
|
||||
#skip:hover {
|
||||
color: var(--color-bg);
|
||||
background-color: var(--color-accent);
|
||||
}
|
||||
}
|
||||
|
||||
a[aria-current="page"] {
|
||||
border-right-width: .5rem;
|
||||
border-left-width: .5rem;
|
||||
}
|
||||
|
||||
nav ul {
|
||||
list-style: none;
|
||||
display: none;
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
margin: 0 0 0 1rem;
|
||||
min-width: 10rem;
|
||||
}
|
||||
|
||||
#dropdown {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
min-width: 3rem;
|
||||
}
|
||||
|
||||
nav ul.show {
|
||||
display: block;
|
||||
}
|
||||
|
||||
nav ul li {
|
||||
margin: .5rem;
|
||||
}
|
||||
|
||||
nav ul a {
|
||||
display: inline-block;
|
||||
background-color: var(--color-bg);
|
||||
}
|
||||
|
||||
footer {
|
||||
color: var(--color-bg);
|
||||
background-color: var(--color-text);
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
footer p {
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
footer a {
|
||||
color: var(--color-bg);
|
||||
text-decoration-color: var(--color-bg);
|
||||
}
|
||||
|
||||
footer a:focus-visible {
|
||||
outline-color: var(--color-bg);
|
||||
}
|
||||
.card {
|
||||
color: var(--color-accent);
|
||||
}
|
||||
|
||||
p .card {
|
||||
text-transform: uppercase;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
ol + p {
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
|
||||
.stop {
|
||||
color: var(--color-accent);
|
||||
position: relative;
|
||||
list-style: none;
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
|
||||
.stop:not(:last-child) {
|
||||
padding-bottom: 2rem;
|
||||
}
|
||||
|
||||
.stop:before {
|
||||
background-color: var(--color-accent);
|
||||
width: .1rem;
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
svg {
|
||||
margin-left: -2.2rem;
|
||||
width: 2rem;
|
||||
fill: var(--color-accent);
|
||||
float: left;
|
||||
padding: .4rem .5rem 0 0;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
svg {
|
||||
padding-top: .2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.stop h2 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.stop img {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.stop p {
|
||||
margin: 0;
|
||||
color: var(--color-text);
|
||||
padding-top: .5rem;
|
||||
}
|
||||
|
||||
.stop .spacer {
|
||||
height: 1rem;
|
||||
}</style>
|
||||
|
||||
<!-- JS -->
|
||||
|
||||
<script type="module">const dropdown = document.getElementById("dropdown");
|
||||
const dropdownButton = document.getElementById("drop-button");
|
||||
const dropdownContent = document.getElementById("drop-content");
|
||||
|
||||
const dropdownItems = dropdownContent.querySelectorAll("a");
|
||||
const firstDropdownItem = dropdownItems[0];
|
||||
const lastDropdownItem = dropdownItems[dropdownItems.length - 1];
|
||||
|
||||
const openDropdown = function() {
|
||||
dropdownContent.classList.add("show");
|
||||
dropdownContent.ariaHidden = "false";
|
||||
dropdownButton.ariaExpanded = "true";
|
||||
}
|
||||
|
||||
const closeDropdown = function() {
|
||||
if (dropdownButton.ariaExpanded === "true") {
|
||||
dropdownContent.classList.remove("show");
|
||||
dropdownContent.ariaHidden = "true";
|
||||
dropdownButton.ariaExpanded = "false";
|
||||
}
|
||||
}
|
||||
|
||||
dropdownButton.addEventListener("click", (event) => {
|
||||
if (dropdownButton.ariaExpanded === "false") openDropdown();
|
||||
else closeDropdown();
|
||||
});
|
||||
|
||||
dropdownButton.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Enter" || event.key === " ") { // Space or Enter key
|
||||
event.preventDefault(); // Prevent the default action to stop scrolling when pressing Space
|
||||
if (dropdownButton.ariaExpanded === "false") {
|
||||
openDropdown();
|
||||
} else {
|
||||
closeDropdown();
|
||||
}
|
||||
} else if (event.key === "Tab" && event.shiftKey) closeDropdown();
|
||||
});
|
||||
|
||||
firstDropdownItem.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Tab" && event.shiftKey) closeDropdown();
|
||||
});
|
||||
|
||||
lastDropdownItem.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Tab" && !event.shiftKey) closeDropdown();
|
||||
});
|
||||
|
||||
document.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Escape" && dropdownButton.ariaExpanded === "true") {
|
||||
closeDropdown();
|
||||
dropdownButton.focus();
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener("click", (event) => {
|
||||
if (!event.target.matches("#drop-button")) closeDropdown();
|
||||
});</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header>
|
||||
<nav>
|
||||
<a id="skip" href="#main">skip to main</a>
|
||||
<a href="/">home</a>
|
||||
|
||||
<div id="dropdown">
|
||||
<button id="drop-button" aria-label="card submenu" aria-expanded="false" type="button" aria-controls="drop-content">cards ⮷</button>
|
||||
<ul id="drop-content" aria-hidden="true">
|
||||
|
||||
<li>
|
||||
<a href="/card-one/">
|
||||
card one
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="/card-two/">
|
||||
card two
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="/card-three/">
|
||||
card three
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<img id="logo-light" src="/img/logo-light.png" alt="blue and gold icon showing a greeting card with wings" loading="lazy" decoding="async" width="1754" height="1031">
|
||||
<img id="logo-dark" src="/img/logo-dark.png" alt="blue and gold icon showing a greeting card with wings" loading="lazy" decoding="async" width="1754" height="1031">
|
||||
</header>
|
||||
|
||||
|
||||
<main id="main">
|
||||
<h1>Attribution</h1>
|
||||
<p>This website is built with <a href="https://www.11ty.dev/" target="_blank" rel="external">Eleventy v3.1.5</a> and hosted by <a href="https://heckin.technology/" target="_blank" rel="external">heckin' technology</a>. It's been hand-coded from the ground up <a href="https://declare-ai.org/1.0.0/none.html" target="_blank" rel="external">without the use of generative AI</a>.</p>
|
||||
<p>The font is <a href="https://brailleinstitute.org/freefont" target="_blank" rel="external">Atkinson Hyperlegible Next</a>, specifically designed for low-vision readers to improve character recognition.</p>
|
||||
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<p>brought to you in 2026 by
|
||||
<a href="https://leecat.art" target="_blank">lee</a>
|
||||
</p>
|
||||
<p><a href="/attribution">attribution</a></p>
|
||||
</footer>
|
||||
|
||||
<!-- This page `/attribution/` was built on 2026-09-18T02:44:33.589Z -->
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,649 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
|
||||
|
||||
|
||||
<title>card one's travels | siblinghood of the traveling greeting card</title>
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="utf-8">
|
||||
|
||||
<!-- Meta -->
|
||||
<link rel="canonical" href="/">
|
||||
<meta name="description" content="help a greeting card travel the world">
|
||||
<meta name="robots" content="index,follow">
|
||||
<meta property="og:title" content="card one's travels | siblinghood of the traveling greeting card">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://siblinghood.quest/card-one/">
|
||||
<meta property="og:description" content="help a greeting card travel the world">
|
||||
|
||||
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||||
<meta property="og:image" content="https://siblinghood.quest/img/logo-light.png">
|
||||
<meta property="og:image:alt" content="blue and gold icon showing a greeting card with wings">
|
||||
|
||||
<meta name="generator" content="Eleventy v3.1.5">
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible+Mono:ital,wght@0,200..800;1,200..800&family=Atkinson+Hyperlegible+Next:ital,wght@0,200..800;1,200..800&display=swap" rel="stylesheet">
|
||||
|
||||
<!-- CSS -->
|
||||
|
||||
|
||||
|
||||
<style>:root {
|
||||
color-scheme: light dark;
|
||||
|
||||
--color-blue-light: #c8e5f5;
|
||||
--color-gold-light: #ecd399;
|
||||
--color-blue-dark: #02293e;
|
||||
--color-gold-dark: #715511;
|
||||
|
||||
--color-bg: light-dark(var(--color-blue-light), var(--color-blue-dark));
|
||||
--color-text: light-dark(var(--color-blue-dark), var(--color-blue-light));
|
||||
--color-accent: light-dark(var(--color-gold-dark), var(--color-gold-light));
|
||||
}
|
||||
|
||||
/* numbered components are from https://www.joshwcomeau.com/css/custom-css-reset/ */
|
||||
*, *::before, *::after {
|
||||
box-sizing: border-box; /* 1. Use a more-intuitive box-sizing model */
|
||||
}
|
||||
|
||||
*:not(dialog) {
|
||||
margin: 0; /* 2. Remove default margin */
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
html {
|
||||
interpolate-size: allow-keywords; /* 3. Enable keyword animations */
|
||||
}
|
||||
}
|
||||
|
||||
#root, #__next {
|
||||
isolation: isolate; /* 10. Create a root stacking context */
|
||||
}
|
||||
|
||||
body {
|
||||
line-height: 1.5; /* 4. Increase line-height */
|
||||
-webkit-font-smoothing: antialiased; /* 5. Improve text rendering */
|
||||
color: var(--color-text);
|
||||
background-color: var(--color-bg);
|
||||
font-family: "Atkinson Hyperlegible Next";
|
||||
}
|
||||
|
||||
main {
|
||||
width: 55%;
|
||||
margin: 0 auto 2rem;
|
||||
scroll-margin-top: 1.5rem;
|
||||
min-height: 50vh;
|
||||
padding-bottom: 2rem;
|
||||
max-width: 1200px;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
main {
|
||||
width: 92%;
|
||||
}
|
||||
}
|
||||
|
||||
img, picture, video, canvas, svg {
|
||||
display: block; /* 6. Improve media defaults */
|
||||
max-width: 100%; /* 6. Improve media defaults */
|
||||
height: auto; /* 6. Improve media defaults */
|
||||
}
|
||||
|
||||
input, button, textarea, select {
|
||||
font: inherit; /* 7. Inherit fonts for form controls */
|
||||
}
|
||||
|
||||
p, h1, h2, h3, h4, h5, h6 {
|
||||
overflow-wrap: break-word; /* 8. Avoid text overflows */
|
||||
}
|
||||
|
||||
p {
|
||||
text-wrap: pretty; /* 9. Improve line wrapping */
|
||||
margin: 0 auto 1.5rem;
|
||||
line-height: 1.5rem;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
p {
|
||||
font-size: .9rem;
|
||||
line-height: 1.3rem;
|
||||
}
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
text-wrap: balance; /* 9. Improve line wrapping */
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: 3rem auto 1rem;
|
||||
text-align: center;
|
||||
font-size: 2.2rem;
|
||||
}
|
||||
|
||||
h2, h3 {
|
||||
margin: 3rem auto .5rem;
|
||||
color: var(--color-accent);
|
||||
border-bottom: solid;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.35rem;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
h1 {
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--color-text);
|
||||
text-decoration: underline;
|
||||
text-decoration-style: solid;
|
||||
text-decoration-thickness: .2rem;
|
||||
text-decoration-color: var(--color-accent);
|
||||
transition: text-decoration-thickness .5s;
|
||||
padding: 0 .15rem;
|
||||
border-radius: .15rem;
|
||||
}
|
||||
|
||||
@media (any-hover: hover) {
|
||||
a:hover {
|
||||
text-decoration-thickness: .4rem;
|
||||
}
|
||||
}
|
||||
|
||||
a:focus-visible {
|
||||
text-decoration: none;
|
||||
outline: var(--color-accent) solid .15rem;
|
||||
}
|
||||
|
||||
ul {
|
||||
margin: 0 auto 1.5rem 2rem;
|
||||
line-height: 1.5rem;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
ul {
|
||||
font-size: .9rem;
|
||||
line-height: 1.3rem;
|
||||
}
|
||||
}
|
||||
|
||||
time {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
button {
|
||||
cursor: pointer;
|
||||
background-color: var(--color-bg);
|
||||
}
|
||||
|
||||
header img {
|
||||
max-height: 25vh;
|
||||
max-width: 100%;
|
||||
width: auto;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
header img {
|
||||
max-height: 20vh;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
#logo-dark {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
#logo-light {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
#author {
|
||||
text-align: right;
|
||||
margin-bottom: 3rem;
|
||||
font-style: italic;
|
||||
}
|
||||
nav {
|
||||
display: flex;
|
||||
position: relative;
|
||||
gap: 1rem;
|
||||
justify-content: center;
|
||||
margin: 1rem auto;
|
||||
}
|
||||
|
||||
nav a,
|
||||
nav button {
|
||||
font-size: 1.4rem;
|
||||
border: .1rem solid;
|
||||
border-radius: .15rem;
|
||||
padding: .15rem .3rem;
|
||||
color: var(--color-accent);
|
||||
text-decoration: none;
|
||||
line-height: 2rem;
|
||||
outline-offset: .1rem;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
nav a,
|
||||
nav button {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (any-hover: hover) {
|
||||
nav a:hover,
|
||||
nav button:hover {
|
||||
color: var(--color-bg);
|
||||
background-color: var(--color-accent);
|
||||
border-color: var(--color-accent);
|
||||
}
|
||||
}
|
||||
|
||||
nav a:focus-visible,
|
||||
nav button:focus-visible {
|
||||
outline: .1rem solid var(--color-accent);
|
||||
}
|
||||
|
||||
#skip {
|
||||
left: -999px;
|
||||
position: absolute;
|
||||
top: auto;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
overflow: hidden;
|
||||
z-index: -99;
|
||||
background-color: var(--color-bg);
|
||||
}
|
||||
|
||||
#skip:focus-visible {
|
||||
left: 1rem;
|
||||
width: auto;
|
||||
height: auto;
|
||||
overflow: auto;
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
@media (any-hover: hover) {
|
||||
#skip:hover {
|
||||
color: var(--color-bg);
|
||||
background-color: var(--color-accent);
|
||||
}
|
||||
}
|
||||
|
||||
a[aria-current="page"] {
|
||||
border-right-width: .5rem;
|
||||
border-left-width: .5rem;
|
||||
}
|
||||
|
||||
nav ul {
|
||||
list-style: none;
|
||||
display: none;
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
margin: 0 0 0 1rem;
|
||||
min-width: 10rem;
|
||||
}
|
||||
|
||||
#dropdown {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
min-width: 3rem;
|
||||
}
|
||||
|
||||
nav ul.show {
|
||||
display: block;
|
||||
}
|
||||
|
||||
nav ul li {
|
||||
margin: .5rem;
|
||||
}
|
||||
|
||||
nav ul a {
|
||||
display: inline-block;
|
||||
background-color: var(--color-bg);
|
||||
}
|
||||
|
||||
footer {
|
||||
color: var(--color-bg);
|
||||
background-color: var(--color-text);
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
footer p {
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
footer a {
|
||||
color: var(--color-bg);
|
||||
text-decoration-color: var(--color-bg);
|
||||
}
|
||||
|
||||
footer a:focus-visible {
|
||||
outline-color: var(--color-bg);
|
||||
}
|
||||
.card {
|
||||
color: var(--color-accent);
|
||||
}
|
||||
|
||||
p .card {
|
||||
text-transform: uppercase;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
ol + p {
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
|
||||
.stop {
|
||||
color: var(--color-accent);
|
||||
position: relative;
|
||||
list-style: none;
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
|
||||
.stop:not(:last-child) {
|
||||
padding-bottom: 2rem;
|
||||
}
|
||||
|
||||
.stop:before {
|
||||
background-color: var(--color-accent);
|
||||
width: .1rem;
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
svg {
|
||||
margin-left: -2.2rem;
|
||||
width: 2rem;
|
||||
fill: var(--color-accent);
|
||||
float: left;
|
||||
padding: .4rem .5rem 0 0;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
svg {
|
||||
padding-top: .2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.stop h2 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.stop img {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.stop p {
|
||||
margin: 0;
|
||||
color: var(--color-text);
|
||||
padding-top: .5rem;
|
||||
}
|
||||
|
||||
.stop .spacer {
|
||||
height: 1rem;
|
||||
}</style>
|
||||
|
||||
<!-- JS -->
|
||||
|
||||
<script type="module">const dropdown = document.getElementById("dropdown");
|
||||
const dropdownButton = document.getElementById("drop-button");
|
||||
const dropdownContent = document.getElementById("drop-content");
|
||||
|
||||
const dropdownItems = dropdownContent.querySelectorAll("a");
|
||||
const firstDropdownItem = dropdownItems[0];
|
||||
const lastDropdownItem = dropdownItems[dropdownItems.length - 1];
|
||||
|
||||
const openDropdown = function() {
|
||||
dropdownContent.classList.add("show");
|
||||
dropdownContent.ariaHidden = "false";
|
||||
dropdownButton.ariaExpanded = "true";
|
||||
}
|
||||
|
||||
const closeDropdown = function() {
|
||||
if (dropdownButton.ariaExpanded === "true") {
|
||||
dropdownContent.classList.remove("show");
|
||||
dropdownContent.ariaHidden = "true";
|
||||
dropdownButton.ariaExpanded = "false";
|
||||
}
|
||||
}
|
||||
|
||||
dropdownButton.addEventListener("click", (event) => {
|
||||
if (dropdownButton.ariaExpanded === "false") openDropdown();
|
||||
else closeDropdown();
|
||||
});
|
||||
|
||||
dropdownButton.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Enter" || event.key === " ") { // Space or Enter key
|
||||
event.preventDefault(); // Prevent the default action to stop scrolling when pressing Space
|
||||
if (dropdownButton.ariaExpanded === "false") {
|
||||
openDropdown();
|
||||
} else {
|
||||
closeDropdown();
|
||||
}
|
||||
} else if (event.key === "Tab" && event.shiftKey) closeDropdown();
|
||||
});
|
||||
|
||||
firstDropdownItem.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Tab" && event.shiftKey) closeDropdown();
|
||||
});
|
||||
|
||||
lastDropdownItem.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Tab" && !event.shiftKey) closeDropdown();
|
||||
});
|
||||
|
||||
document.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Escape" && dropdownButton.ariaExpanded === "true") {
|
||||
closeDropdown();
|
||||
dropdownButton.focus();
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener("click", (event) => {
|
||||
if (!event.target.matches("#drop-button")) closeDropdown();
|
||||
});</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header>
|
||||
<nav>
|
||||
<a id="skip" href="#main">skip to main</a>
|
||||
<a href="/">home</a>
|
||||
|
||||
<div id="dropdown">
|
||||
<button id="drop-button" aria-label="card submenu" aria-expanded="false" type="button" aria-controls="drop-content">cards ⮷</button>
|
||||
<ul id="drop-content" aria-hidden="true">
|
||||
|
||||
<li>
|
||||
<a href="/card-one/" aria-current="page">
|
||||
card one
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="/card-two/">
|
||||
card two
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="/card-three/">
|
||||
card three
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<img id="logo-light" src="/img/logo-light.png" alt="blue and gold icon showing a greeting card with wings" loading="lazy" decoding="async" width="1754" height="1031">
|
||||
<img id="logo-dark" src="/img/logo-dark.png" alt="blue and gold icon showing a greeting card with wings" loading="lazy" decoding="async" width="1754" height="1031">
|
||||
</header>
|
||||
|
||||
|
||||
<main id="main">
|
||||
|
||||
<h1>The Travels of <span class="card">Card One</span></h1>
|
||||
|
||||
<p><span class="card">Card one</span> has 16 total recipients. Its journey began in late December, 2025.</p>
|
||||
|
||||
|
||||
<ol>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>California, USA</h2>
|
||||
|
||||
<img src="/img/00.jpg" alt="an open pop-up greeting card. the pop-up is an autumnal tree, and the inside of the card has autumn leaf designs. two small figurines sit on the card to hold it open flat." loading="lazy" decoding="async" width="1200" height="900">
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>Italy</h2>
|
||||
|
||||
<img src="/img/01.jpg" alt="an open pop-up greeting card viewed from the top. there's what appears to be a black butterfly or moth sticker/cutout in it. next to it is a note that someone has signed." loading="lazy" decoding="async" width="1200" height="798">
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>Oregon, USA</h2>
|
||||
|
||||
<div class="spacer"></div>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>Alberta, Canada</h2>
|
||||
|
||||
<img src="/img/03.jpg" alt="an open pop-up greeting card on a table, weighted down with a tiny ceramic cat. behind it is a vase, a potted plant, and a bird statuette." loading="lazy" decoding="async" width="1200" height="900">
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>Belgium</h2>
|
||||
|
||||
<div class="spacer"></div>
|
||||
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
|
||||
|
||||
<p>
|
||||
Unfortunately, <span class="card">card one</span> stopped here at a recipient with ill health. Finally, I made the executive
|
||||
decision to start a fresh card and send it on to the next recipient. Thanks to some miscommunication,
|
||||
the person <em>after</em> me also started a new card - so we went with that one as the official one,
|
||||
and I was skipped. Woops!
|
||||
</p>
|
||||
|
||||
|
||||
<ol>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>United Kingdom</h2>
|
||||
|
||||
<div class="spacer"></div>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>Florida, USA</h2>
|
||||
|
||||
<img src="/img/07.jpg" alt="the front of a card with a design of flowers, probably lilies, on top of a mostly hidden envelope." loading="lazy" decoding="async" width="480" height="640">
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>New York, USA</h2>
|
||||
|
||||
<div class="spacer"></div>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>Illinois, USA</h2>
|
||||
|
||||
<img src="/img/09.jpg" alt="the inside of a greeting card with several signatures. One signature wraps around a 'no pride in genocide' sticker showing crossed Palestine and trans flags. One wraps around a sticker of a raccoon throwing its hands up and looking goofy." loading="lazy" decoding="async" width="1200" height="1200">
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>Pennsylvania, USA</h2>
|
||||
|
||||
<img src="/img/10.jpg" alt="Part of the inside of a greeting card as well as a postcard or sticker of a flower and part of a sheet of dino stickers. The greeting card has a dino sticker inside with a signature wrapped around it." loading="lazy" decoding="async" width="1200" height="834">
|
||||
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<p>brought to you in 2026 by
|
||||
<a href="https://leecat.art" target="_blank">lee</a>
|
||||
</p>
|
||||
<p><a href="/attribution">attribution</a></p>
|
||||
</footer>
|
||||
|
||||
<!-- This page `/card-one/` was built on 2026-09-18T02:44:33.588Z -->
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,546 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
|
||||
|
||||
|
||||
<title>card three's travels | siblinghood of the traveling greeting card</title>
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="utf-8">
|
||||
|
||||
<!-- Meta -->
|
||||
<link rel="canonical" href="/">
|
||||
<meta name="description" content="help a greeting card travel the world">
|
||||
<meta name="robots" content="index,follow">
|
||||
<meta property="og:title" content="card three's travels | siblinghood of the traveling greeting card">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://siblinghood.quest/card-three/">
|
||||
<meta property="og:description" content="help a greeting card travel the world">
|
||||
|
||||
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||||
<meta property="og:image" content="https://siblinghood.quest/img/logo-light.png">
|
||||
<meta property="og:image:alt" content="blue and gold icon showing a greeting card with wings">
|
||||
|
||||
<meta name="generator" content="Eleventy v3.1.5">
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible+Mono:ital,wght@0,200..800;1,200..800&family=Atkinson+Hyperlegible+Next:ital,wght@0,200..800;1,200..800&display=swap" rel="stylesheet">
|
||||
|
||||
<!-- CSS -->
|
||||
|
||||
|
||||
|
||||
<style>:root {
|
||||
color-scheme: light dark;
|
||||
|
||||
--color-blue-light: #c8e5f5;
|
||||
--color-gold-light: #ecd399;
|
||||
--color-blue-dark: #02293e;
|
||||
--color-gold-dark: #715511;
|
||||
|
||||
--color-bg: light-dark(var(--color-blue-light), var(--color-blue-dark));
|
||||
--color-text: light-dark(var(--color-blue-dark), var(--color-blue-light));
|
||||
--color-accent: light-dark(var(--color-gold-dark), var(--color-gold-light));
|
||||
}
|
||||
|
||||
/* numbered components are from https://www.joshwcomeau.com/css/custom-css-reset/ */
|
||||
*, *::before, *::after {
|
||||
box-sizing: border-box; /* 1. Use a more-intuitive box-sizing model */
|
||||
}
|
||||
|
||||
*:not(dialog) {
|
||||
margin: 0; /* 2. Remove default margin */
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
html {
|
||||
interpolate-size: allow-keywords; /* 3. Enable keyword animations */
|
||||
}
|
||||
}
|
||||
|
||||
#root, #__next {
|
||||
isolation: isolate; /* 10. Create a root stacking context */
|
||||
}
|
||||
|
||||
body {
|
||||
line-height: 1.5; /* 4. Increase line-height */
|
||||
-webkit-font-smoothing: antialiased; /* 5. Improve text rendering */
|
||||
color: var(--color-text);
|
||||
background-color: var(--color-bg);
|
||||
font-family: "Atkinson Hyperlegible Next";
|
||||
}
|
||||
|
||||
main {
|
||||
width: 55%;
|
||||
margin: 0 auto 2rem;
|
||||
scroll-margin-top: 1.5rem;
|
||||
min-height: 50vh;
|
||||
padding-bottom: 2rem;
|
||||
max-width: 1200px;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
main {
|
||||
width: 92%;
|
||||
}
|
||||
}
|
||||
|
||||
img, picture, video, canvas, svg {
|
||||
display: block; /* 6. Improve media defaults */
|
||||
max-width: 100%; /* 6. Improve media defaults */
|
||||
height: auto; /* 6. Improve media defaults */
|
||||
}
|
||||
|
||||
input, button, textarea, select {
|
||||
font: inherit; /* 7. Inherit fonts for form controls */
|
||||
}
|
||||
|
||||
p, h1, h2, h3, h4, h5, h6 {
|
||||
overflow-wrap: break-word; /* 8. Avoid text overflows */
|
||||
}
|
||||
|
||||
p {
|
||||
text-wrap: pretty; /* 9. Improve line wrapping */
|
||||
margin: 0 auto 1.5rem;
|
||||
line-height: 1.5rem;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
p {
|
||||
font-size: .9rem;
|
||||
line-height: 1.3rem;
|
||||
}
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
text-wrap: balance; /* 9. Improve line wrapping */
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: 3rem auto 1rem;
|
||||
text-align: center;
|
||||
font-size: 2.2rem;
|
||||
}
|
||||
|
||||
h2, h3 {
|
||||
margin: 3rem auto .5rem;
|
||||
color: var(--color-accent);
|
||||
border-bottom: solid;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.35rem;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
h1 {
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--color-text);
|
||||
text-decoration: underline;
|
||||
text-decoration-style: solid;
|
||||
text-decoration-thickness: .2rem;
|
||||
text-decoration-color: var(--color-accent);
|
||||
transition: text-decoration-thickness .5s;
|
||||
padding: 0 .15rem;
|
||||
border-radius: .15rem;
|
||||
}
|
||||
|
||||
@media (any-hover: hover) {
|
||||
a:hover {
|
||||
text-decoration-thickness: .4rem;
|
||||
}
|
||||
}
|
||||
|
||||
a:focus-visible {
|
||||
text-decoration: none;
|
||||
outline: var(--color-accent) solid .15rem;
|
||||
}
|
||||
|
||||
ul {
|
||||
margin: 0 auto 1.5rem 2rem;
|
||||
line-height: 1.5rem;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
ul {
|
||||
font-size: .9rem;
|
||||
line-height: 1.3rem;
|
||||
}
|
||||
}
|
||||
|
||||
time {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
button {
|
||||
cursor: pointer;
|
||||
background-color: var(--color-bg);
|
||||
}
|
||||
|
||||
header img {
|
||||
max-height: 25vh;
|
||||
max-width: 100%;
|
||||
width: auto;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
header img {
|
||||
max-height: 20vh;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
#logo-dark {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
#logo-light {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
#author {
|
||||
text-align: right;
|
||||
margin-bottom: 3rem;
|
||||
font-style: italic;
|
||||
}
|
||||
nav {
|
||||
display: flex;
|
||||
position: relative;
|
||||
gap: 1rem;
|
||||
justify-content: center;
|
||||
margin: 1rem auto;
|
||||
}
|
||||
|
||||
nav a,
|
||||
nav button {
|
||||
font-size: 1.4rem;
|
||||
border: .1rem solid;
|
||||
border-radius: .15rem;
|
||||
padding: .15rem .3rem;
|
||||
color: var(--color-accent);
|
||||
text-decoration: none;
|
||||
line-height: 2rem;
|
||||
outline-offset: .1rem;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
nav a,
|
||||
nav button {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (any-hover: hover) {
|
||||
nav a:hover,
|
||||
nav button:hover {
|
||||
color: var(--color-bg);
|
||||
background-color: var(--color-accent);
|
||||
border-color: var(--color-accent);
|
||||
}
|
||||
}
|
||||
|
||||
nav a:focus-visible,
|
||||
nav button:focus-visible {
|
||||
outline: .1rem solid var(--color-accent);
|
||||
}
|
||||
|
||||
#skip {
|
||||
left: -999px;
|
||||
position: absolute;
|
||||
top: auto;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
overflow: hidden;
|
||||
z-index: -99;
|
||||
background-color: var(--color-bg);
|
||||
}
|
||||
|
||||
#skip:focus-visible {
|
||||
left: 1rem;
|
||||
width: auto;
|
||||
height: auto;
|
||||
overflow: auto;
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
@media (any-hover: hover) {
|
||||
#skip:hover {
|
||||
color: var(--color-bg);
|
||||
background-color: var(--color-accent);
|
||||
}
|
||||
}
|
||||
|
||||
a[aria-current="page"] {
|
||||
border-right-width: .5rem;
|
||||
border-left-width: .5rem;
|
||||
}
|
||||
|
||||
nav ul {
|
||||
list-style: none;
|
||||
display: none;
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
margin: 0 0 0 1rem;
|
||||
min-width: 10rem;
|
||||
}
|
||||
|
||||
#dropdown {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
min-width: 3rem;
|
||||
}
|
||||
|
||||
nav ul.show {
|
||||
display: block;
|
||||
}
|
||||
|
||||
nav ul li {
|
||||
margin: .5rem;
|
||||
}
|
||||
|
||||
nav ul a {
|
||||
display: inline-block;
|
||||
background-color: var(--color-bg);
|
||||
}
|
||||
|
||||
footer {
|
||||
color: var(--color-bg);
|
||||
background-color: var(--color-text);
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
footer p {
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
footer a {
|
||||
color: var(--color-bg);
|
||||
text-decoration-color: var(--color-bg);
|
||||
}
|
||||
|
||||
footer a:focus-visible {
|
||||
outline-color: var(--color-bg);
|
||||
}
|
||||
.card {
|
||||
color: var(--color-accent);
|
||||
}
|
||||
|
||||
p .card {
|
||||
text-transform: uppercase;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
ol + p {
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
|
||||
.stop {
|
||||
color: var(--color-accent);
|
||||
position: relative;
|
||||
list-style: none;
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
|
||||
.stop:not(:last-child) {
|
||||
padding-bottom: 2rem;
|
||||
}
|
||||
|
||||
.stop:before {
|
||||
background-color: var(--color-accent);
|
||||
width: .1rem;
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
svg {
|
||||
margin-left: -2.2rem;
|
||||
width: 2rem;
|
||||
fill: var(--color-accent);
|
||||
float: left;
|
||||
padding: .4rem .5rem 0 0;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
svg {
|
||||
padding-top: .2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.stop h2 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.stop img {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.stop p {
|
||||
margin: 0;
|
||||
color: var(--color-text);
|
||||
padding-top: .5rem;
|
||||
}
|
||||
|
||||
.stop .spacer {
|
||||
height: 1rem;
|
||||
}</style>
|
||||
|
||||
<!-- JS -->
|
||||
|
||||
<script type="module">const dropdown = document.getElementById("dropdown");
|
||||
const dropdownButton = document.getElementById("drop-button");
|
||||
const dropdownContent = document.getElementById("drop-content");
|
||||
|
||||
const dropdownItems = dropdownContent.querySelectorAll("a");
|
||||
const firstDropdownItem = dropdownItems[0];
|
||||
const lastDropdownItem = dropdownItems[dropdownItems.length - 1];
|
||||
|
||||
const openDropdown = function() {
|
||||
dropdownContent.classList.add("show");
|
||||
dropdownContent.ariaHidden = "false";
|
||||
dropdownButton.ariaExpanded = "true";
|
||||
}
|
||||
|
||||
const closeDropdown = function() {
|
||||
if (dropdownButton.ariaExpanded === "true") {
|
||||
dropdownContent.classList.remove("show");
|
||||
dropdownContent.ariaHidden = "true";
|
||||
dropdownButton.ariaExpanded = "false";
|
||||
}
|
||||
}
|
||||
|
||||
dropdownButton.addEventListener("click", (event) => {
|
||||
if (dropdownButton.ariaExpanded === "false") openDropdown();
|
||||
else closeDropdown();
|
||||
});
|
||||
|
||||
dropdownButton.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Enter" || event.key === " ") { // Space or Enter key
|
||||
event.preventDefault(); // Prevent the default action to stop scrolling when pressing Space
|
||||
if (dropdownButton.ariaExpanded === "false") {
|
||||
openDropdown();
|
||||
} else {
|
||||
closeDropdown();
|
||||
}
|
||||
} else if (event.key === "Tab" && event.shiftKey) closeDropdown();
|
||||
});
|
||||
|
||||
firstDropdownItem.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Tab" && event.shiftKey) closeDropdown();
|
||||
});
|
||||
|
||||
lastDropdownItem.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Tab" && !event.shiftKey) closeDropdown();
|
||||
});
|
||||
|
||||
document.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Escape" && dropdownButton.ariaExpanded === "true") {
|
||||
closeDropdown();
|
||||
dropdownButton.focus();
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener("click", (event) => {
|
||||
if (!event.target.matches("#drop-button")) closeDropdown();
|
||||
});</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header>
|
||||
<nav>
|
||||
<a id="skip" href="#main">skip to main</a>
|
||||
<a href="/">home</a>
|
||||
|
||||
<div id="dropdown">
|
||||
<button id="drop-button" aria-label="card submenu" aria-expanded="false" type="button" aria-controls="drop-content">cards ⮷</button>
|
||||
<ul id="drop-content" aria-hidden="true">
|
||||
|
||||
<li>
|
||||
<a href="/card-one/">
|
||||
card one
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="/card-two/">
|
||||
card two
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="/card-three/" aria-current="page">
|
||||
card three
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<img id="logo-light" src="/img/logo-light.png" alt="blue and gold icon showing a greeting card with wings" loading="lazy" decoding="async" width="1754" height="1031">
|
||||
<img id="logo-dark" src="/img/logo-dark.png" alt="blue and gold icon showing a greeting card with wings" loading="lazy" decoding="async" width="1754" height="1031">
|
||||
</header>
|
||||
|
||||
|
||||
<main id="main">
|
||||
|
||||
<h1>The Travels of <span class="card">Card Three</span></h1>
|
||||
|
||||
<p><span class="card">Card three</span> has 16 total recipients. Its journey began in late July, 2026.</p>
|
||||
|
||||
|
||||
<ol>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>Lousiana, USA</h2>
|
||||
|
||||
<div class="spacer"></div>
|
||||
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<p>brought to you in 2026 by
|
||||
<a href="https://leecat.art" target="_blank">lee</a>
|
||||
</p>
|
||||
<p><a href="/attribution">attribution</a></p>
|
||||
</footer>
|
||||
|
||||
<!-- This page `/card-three/` was built on 2026-09-18T02:44:33.589Z -->
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,696 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
|
||||
|
||||
|
||||
<title>card two's travels | siblinghood of the traveling greeting card</title>
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="utf-8">
|
||||
|
||||
<!-- Meta -->
|
||||
<link rel="canonical" href="/">
|
||||
<meta name="description" content="help a greeting card travel the world">
|
||||
<meta name="robots" content="index,follow">
|
||||
<meta property="og:title" content="card two's travels | siblinghood of the traveling greeting card">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://siblinghood.quest/card-two/">
|
||||
<meta property="og:description" content="help a greeting card travel the world">
|
||||
|
||||
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||||
<meta property="og:image" content="https://siblinghood.quest/img/logo-light.png">
|
||||
<meta property="og:image:alt" content="blue and gold icon showing a greeting card with wings">
|
||||
|
||||
<meta name="generator" content="Eleventy v3.1.5">
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible+Mono:ital,wght@0,200..800;1,200..800&family=Atkinson+Hyperlegible+Next:ital,wght@0,200..800;1,200..800&display=swap" rel="stylesheet">
|
||||
|
||||
<!-- CSS -->
|
||||
|
||||
|
||||
|
||||
<style>:root {
|
||||
color-scheme: light dark;
|
||||
|
||||
--color-blue-light: #c8e5f5;
|
||||
--color-gold-light: #ecd399;
|
||||
--color-blue-dark: #02293e;
|
||||
--color-gold-dark: #715511;
|
||||
|
||||
--color-bg: light-dark(var(--color-blue-light), var(--color-blue-dark));
|
||||
--color-text: light-dark(var(--color-blue-dark), var(--color-blue-light));
|
||||
--color-accent: light-dark(var(--color-gold-dark), var(--color-gold-light));
|
||||
}
|
||||
|
||||
/* numbered components are from https://www.joshwcomeau.com/css/custom-css-reset/ */
|
||||
*, *::before, *::after {
|
||||
box-sizing: border-box; /* 1. Use a more-intuitive box-sizing model */
|
||||
}
|
||||
|
||||
*:not(dialog) {
|
||||
margin: 0; /* 2. Remove default margin */
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
html {
|
||||
interpolate-size: allow-keywords; /* 3. Enable keyword animations */
|
||||
}
|
||||
}
|
||||
|
||||
#root, #__next {
|
||||
isolation: isolate; /* 10. Create a root stacking context */
|
||||
}
|
||||
|
||||
body {
|
||||
line-height: 1.5; /* 4. Increase line-height */
|
||||
-webkit-font-smoothing: antialiased; /* 5. Improve text rendering */
|
||||
color: var(--color-text);
|
||||
background-color: var(--color-bg);
|
||||
font-family: "Atkinson Hyperlegible Next";
|
||||
}
|
||||
|
||||
main {
|
||||
width: 55%;
|
||||
margin: 0 auto 2rem;
|
||||
scroll-margin-top: 1.5rem;
|
||||
min-height: 50vh;
|
||||
padding-bottom: 2rem;
|
||||
max-width: 1200px;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
main {
|
||||
width: 92%;
|
||||
}
|
||||
}
|
||||
|
||||
img, picture, video, canvas, svg {
|
||||
display: block; /* 6. Improve media defaults */
|
||||
max-width: 100%; /* 6. Improve media defaults */
|
||||
height: auto; /* 6. Improve media defaults */
|
||||
}
|
||||
|
||||
input, button, textarea, select {
|
||||
font: inherit; /* 7. Inherit fonts for form controls */
|
||||
}
|
||||
|
||||
p, h1, h2, h3, h4, h5, h6 {
|
||||
overflow-wrap: break-word; /* 8. Avoid text overflows */
|
||||
}
|
||||
|
||||
p {
|
||||
text-wrap: pretty; /* 9. Improve line wrapping */
|
||||
margin: 0 auto 1.5rem;
|
||||
line-height: 1.5rem;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
p {
|
||||
font-size: .9rem;
|
||||
line-height: 1.3rem;
|
||||
}
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
text-wrap: balance; /* 9. Improve line wrapping */
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: 3rem auto 1rem;
|
||||
text-align: center;
|
||||
font-size: 2.2rem;
|
||||
}
|
||||
|
||||
h2, h3 {
|
||||
margin: 3rem auto .5rem;
|
||||
color: var(--color-accent);
|
||||
border-bottom: solid;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.35rem;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
h1 {
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--color-text);
|
||||
text-decoration: underline;
|
||||
text-decoration-style: solid;
|
||||
text-decoration-thickness: .2rem;
|
||||
text-decoration-color: var(--color-accent);
|
||||
transition: text-decoration-thickness .5s;
|
||||
padding: 0 .15rem;
|
||||
border-radius: .15rem;
|
||||
}
|
||||
|
||||
@media (any-hover: hover) {
|
||||
a:hover {
|
||||
text-decoration-thickness: .4rem;
|
||||
}
|
||||
}
|
||||
|
||||
a:focus-visible {
|
||||
text-decoration: none;
|
||||
outline: var(--color-accent) solid .15rem;
|
||||
}
|
||||
|
||||
ul {
|
||||
margin: 0 auto 1.5rem 2rem;
|
||||
line-height: 1.5rem;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
ul {
|
||||
font-size: .9rem;
|
||||
line-height: 1.3rem;
|
||||
}
|
||||
}
|
||||
|
||||
time {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
button {
|
||||
cursor: pointer;
|
||||
background-color: var(--color-bg);
|
||||
}
|
||||
|
||||
header img {
|
||||
max-height: 25vh;
|
||||
max-width: 100%;
|
||||
width: auto;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
header img {
|
||||
max-height: 20vh;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
#logo-dark {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
#logo-light {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
#author {
|
||||
text-align: right;
|
||||
margin-bottom: 3rem;
|
||||
font-style: italic;
|
||||
}
|
||||
nav {
|
||||
display: flex;
|
||||
position: relative;
|
||||
gap: 1rem;
|
||||
justify-content: center;
|
||||
margin: 1rem auto;
|
||||
}
|
||||
|
||||
nav a,
|
||||
nav button {
|
||||
font-size: 1.4rem;
|
||||
border: .1rem solid;
|
||||
border-radius: .15rem;
|
||||
padding: .15rem .3rem;
|
||||
color: var(--color-accent);
|
||||
text-decoration: none;
|
||||
line-height: 2rem;
|
||||
outline-offset: .1rem;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
nav a,
|
||||
nav button {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (any-hover: hover) {
|
||||
nav a:hover,
|
||||
nav button:hover {
|
||||
color: var(--color-bg);
|
||||
background-color: var(--color-accent);
|
||||
border-color: var(--color-accent);
|
||||
}
|
||||
}
|
||||
|
||||
nav a:focus-visible,
|
||||
nav button:focus-visible {
|
||||
outline: .1rem solid var(--color-accent);
|
||||
}
|
||||
|
||||
#skip {
|
||||
left: -999px;
|
||||
position: absolute;
|
||||
top: auto;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
overflow: hidden;
|
||||
z-index: -99;
|
||||
background-color: var(--color-bg);
|
||||
}
|
||||
|
||||
#skip:focus-visible {
|
||||
left: 1rem;
|
||||
width: auto;
|
||||
height: auto;
|
||||
overflow: auto;
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
@media (any-hover: hover) {
|
||||
#skip:hover {
|
||||
color: var(--color-bg);
|
||||
background-color: var(--color-accent);
|
||||
}
|
||||
}
|
||||
|
||||
a[aria-current="page"] {
|
||||
border-right-width: .5rem;
|
||||
border-left-width: .5rem;
|
||||
}
|
||||
|
||||
nav ul {
|
||||
list-style: none;
|
||||
display: none;
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
margin: 0 0 0 1rem;
|
||||
min-width: 10rem;
|
||||
}
|
||||
|
||||
#dropdown {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
min-width: 3rem;
|
||||
}
|
||||
|
||||
nav ul.show {
|
||||
display: block;
|
||||
}
|
||||
|
||||
nav ul li {
|
||||
margin: .5rem;
|
||||
}
|
||||
|
||||
nav ul a {
|
||||
display: inline-block;
|
||||
background-color: var(--color-bg);
|
||||
}
|
||||
|
||||
footer {
|
||||
color: var(--color-bg);
|
||||
background-color: var(--color-text);
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
footer p {
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
footer a {
|
||||
color: var(--color-bg);
|
||||
text-decoration-color: var(--color-bg);
|
||||
}
|
||||
|
||||
footer a:focus-visible {
|
||||
outline-color: var(--color-bg);
|
||||
}
|
||||
.card {
|
||||
color: var(--color-accent);
|
||||
}
|
||||
|
||||
p .card {
|
||||
text-transform: uppercase;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
ol + p {
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
|
||||
.stop {
|
||||
color: var(--color-accent);
|
||||
position: relative;
|
||||
list-style: none;
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
|
||||
.stop:not(:last-child) {
|
||||
padding-bottom: 2rem;
|
||||
}
|
||||
|
||||
.stop:before {
|
||||
background-color: var(--color-accent);
|
||||
width: .1rem;
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
svg {
|
||||
margin-left: -2.2rem;
|
||||
width: 2rem;
|
||||
fill: var(--color-accent);
|
||||
float: left;
|
||||
padding: .4rem .5rem 0 0;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
svg {
|
||||
padding-top: .2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.stop h2 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.stop img {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.stop p {
|
||||
margin: 0;
|
||||
color: var(--color-text);
|
||||
padding-top: .5rem;
|
||||
}
|
||||
|
||||
.stop .spacer {
|
||||
height: 1rem;
|
||||
}</style>
|
||||
|
||||
<!-- JS -->
|
||||
|
||||
<script type="module">const dropdown = document.getElementById("dropdown");
|
||||
const dropdownButton = document.getElementById("drop-button");
|
||||
const dropdownContent = document.getElementById("drop-content");
|
||||
|
||||
const dropdownItems = dropdownContent.querySelectorAll("a");
|
||||
const firstDropdownItem = dropdownItems[0];
|
||||
const lastDropdownItem = dropdownItems[dropdownItems.length - 1];
|
||||
|
||||
const openDropdown = function() {
|
||||
dropdownContent.classList.add("show");
|
||||
dropdownContent.ariaHidden = "false";
|
||||
dropdownButton.ariaExpanded = "true";
|
||||
}
|
||||
|
||||
const closeDropdown = function() {
|
||||
if (dropdownButton.ariaExpanded === "true") {
|
||||
dropdownContent.classList.remove("show");
|
||||
dropdownContent.ariaHidden = "true";
|
||||
dropdownButton.ariaExpanded = "false";
|
||||
}
|
||||
}
|
||||
|
||||
dropdownButton.addEventListener("click", (event) => {
|
||||
if (dropdownButton.ariaExpanded === "false") openDropdown();
|
||||
else closeDropdown();
|
||||
});
|
||||
|
||||
dropdownButton.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Enter" || event.key === " ") { // Space or Enter key
|
||||
event.preventDefault(); // Prevent the default action to stop scrolling when pressing Space
|
||||
if (dropdownButton.ariaExpanded === "false") {
|
||||
openDropdown();
|
||||
} else {
|
||||
closeDropdown();
|
||||
}
|
||||
} else if (event.key === "Tab" && event.shiftKey) closeDropdown();
|
||||
});
|
||||
|
||||
firstDropdownItem.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Tab" && event.shiftKey) closeDropdown();
|
||||
});
|
||||
|
||||
lastDropdownItem.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Tab" && !event.shiftKey) closeDropdown();
|
||||
});
|
||||
|
||||
document.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Escape" && dropdownButton.ariaExpanded === "true") {
|
||||
closeDropdown();
|
||||
dropdownButton.focus();
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener("click", (event) => {
|
||||
if (!event.target.matches("#drop-button")) closeDropdown();
|
||||
});</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header>
|
||||
<nav>
|
||||
<a id="skip" href="#main">skip to main</a>
|
||||
<a href="/">home</a>
|
||||
|
||||
<div id="dropdown">
|
||||
<button id="drop-button" aria-label="card submenu" aria-expanded="false" type="button" aria-controls="drop-content">cards ⮷</button>
|
||||
<ul id="drop-content" aria-hidden="true">
|
||||
|
||||
<li>
|
||||
<a href="/card-one/">
|
||||
card one
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="/card-two/" aria-current="page">
|
||||
card two
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="/card-three/">
|
||||
card three
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<img id="logo-light" src="/img/logo-light.png" alt="blue and gold icon showing a greeting card with wings" loading="lazy" decoding="async" width="1754" height="1031">
|
||||
<img id="logo-dark" src="/img/logo-dark.png" alt="blue and gold icon showing a greeting card with wings" loading="lazy" decoding="async" width="1754" height="1031">
|
||||
</header>
|
||||
|
||||
|
||||
<main id="main">
|
||||
|
||||
<h1>The Travels of <span class="card">Card Two</span></h1>
|
||||
|
||||
<p><span class="card">Card two</span> has 16 total recipients. Its journey began in early January, 2026.</p>
|
||||
|
||||
|
||||
<ol>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>Oregon, USA</h2>
|
||||
|
||||
<img src="/img/00.jpg" alt="an open greeting card, blank except for some small writing that reads 'Hello from Oregon, USA! -freddie (#0)" loading="lazy" decoding="async" width="1200" height="904">
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>Sweden</h2>
|
||||
|
||||
<img src="/img/01.jpg" alt="a close crop of the front of a card, indicating maybe a picture of a cat and a question mark." loading="lazy" decoding="async" width="1200" height="1200">
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>France</h2>
|
||||
|
||||
<div class="spacer"></div>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>Netherlands</h2>
|
||||
|
||||
<img src="/img/03.jpg" alt="the inside of the card with several signatures: freddie, herzleid, laen, and flann" loading="lazy" decoding="async" width="1200" height="909">
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>New Zealand</h2>
|
||||
|
||||
<div class="spacer"></div>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>United Kingdom</h2>
|
||||
|
||||
<div class="spacer"></div>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>Nova Scotia, Canada</h2>
|
||||
|
||||
<img src="/img/06.jpg" alt="a piece of paper that says in all caps, sticker trove, with a mostly hidden pile of stickers underneath" loading="lazy" decoding="async" width="1200" height="650">
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>United Kingdom</h2>
|
||||
|
||||
<div class="spacer"></div>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>Italy</h2>
|
||||
|
||||
<img src="/img/08.jpg" alt="an open greeting card amidst a pile of colorful stickers. It is signed by 8 different people." loading="lazy" decoding="async" width="1200" height="900">
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>United Kingdom</h2>
|
||||
|
||||
<div class="spacer"></div>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>Minnesota, USA</h2>
|
||||
|
||||
<div class="spacer"></div>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>Connecticut, USA</h2>
|
||||
|
||||
<img src="/img/11.jpg" alt="the inside of a card signed by eleven people" loading="lazy" decoding="async" width="900" height="1200">
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>Oregon, USA</h2>
|
||||
|
||||
<div class="spacer"></div>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>British Columbia, Canada</h2>
|
||||
|
||||
<div class="spacer"></div>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>Oregon, USA</h2>
|
||||
|
||||
<img src="/img/14.jpg" alt="the inside of a card signed by fifteen people, including a bundle that reads 'sticker trove!' and a small piece of paper that says 'be happy.'" loading="lazy" decoding="async" width="1200" height="872">
|
||||
|
||||
</li>
|
||||
|
||||
<li class="stop">
|
||||
<svg aria-hidden="true" viewBox="0 0 32 32" focusable="false">
|
||||
<circle stroke="none" cx="16" cy="16" r="10"></circle>
|
||||
</svg>
|
||||
<h2>Illinois, USA</h2>
|
||||
|
||||
<div class="spacer"></div>
|
||||
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<p>brought to you in 2026 by
|
||||
<a href="https://leecat.art" target="_blank">lee</a>
|
||||
</p>
|
||||
<p><a href="/attribution">attribution</a></p>
|
||||
</footer>
|
||||
|
||||
<!-- This page `/card-two/` was built on 2026-09-18T02:44:33.589Z -->
|
||||
</body>
|
||||
</html>
|
||||
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 87 KiB |
|
After Width: | Height: | Size: 115 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 107 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 189 KiB |
|
After Width: | Height: | Size: 138 KiB |
|
After Width: | Height: | Size: 174 KiB |
|
After Width: | Height: | Size: 131 KiB |
|
After Width: | Height: | Size: 186 KiB |
|
After Width: | Height: | Size: 732 KiB |
|
After Width: | Height: | Size: 788 KiB |
@@ -0,0 +1,577 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
|
||||
|
||||
|
||||
<title>siblinghood of the traveling greeting card | siblinghood of the traveling greeting card</title>
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="utf-8">
|
||||
|
||||
<!-- Meta -->
|
||||
<link rel="canonical" href="/">
|
||||
<meta name="description" content="help a greeting card travel the world">
|
||||
<meta name="robots" content="index,follow">
|
||||
<meta property="og:title" content="siblinghood of the traveling greeting card | siblinghood of the traveling greeting card">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://siblinghood.quest/">
|
||||
<meta property="og:description" content="help a greeting card travel the world">
|
||||
|
||||
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||||
<meta property="og:image" content="https://siblinghood.quest/img/logo-light.png">
|
||||
<meta property="og:image:alt" content="blue and gold icon showing a greeting card with wings">
|
||||
|
||||
<meta name="generator" content="Eleventy v3.1.5">
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible+Mono:ital,wght@0,200..800;1,200..800&family=Atkinson+Hyperlegible+Next:ital,wght@0,200..800;1,200..800&display=swap" rel="stylesheet">
|
||||
|
||||
<!-- CSS -->
|
||||
|
||||
|
||||
|
||||
<style>:root {
|
||||
color-scheme: light dark;
|
||||
|
||||
--color-blue-light: #c8e5f5;
|
||||
--color-gold-light: #ecd399;
|
||||
--color-blue-dark: #02293e;
|
||||
--color-gold-dark: #715511;
|
||||
|
||||
--color-bg: light-dark(var(--color-blue-light), var(--color-blue-dark));
|
||||
--color-text: light-dark(var(--color-blue-dark), var(--color-blue-light));
|
||||
--color-accent: light-dark(var(--color-gold-dark), var(--color-gold-light));
|
||||
}
|
||||
|
||||
/* numbered components are from https://www.joshwcomeau.com/css/custom-css-reset/ */
|
||||
*, *::before, *::after {
|
||||
box-sizing: border-box; /* 1. Use a more-intuitive box-sizing model */
|
||||
}
|
||||
|
||||
*:not(dialog) {
|
||||
margin: 0; /* 2. Remove default margin */
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
html {
|
||||
interpolate-size: allow-keywords; /* 3. Enable keyword animations */
|
||||
}
|
||||
}
|
||||
|
||||
#root, #__next {
|
||||
isolation: isolate; /* 10. Create a root stacking context */
|
||||
}
|
||||
|
||||
body {
|
||||
line-height: 1.5; /* 4. Increase line-height */
|
||||
-webkit-font-smoothing: antialiased; /* 5. Improve text rendering */
|
||||
color: var(--color-text);
|
||||
background-color: var(--color-bg);
|
||||
font-family: "Atkinson Hyperlegible Next";
|
||||
}
|
||||
|
||||
main {
|
||||
width: 55%;
|
||||
margin: 0 auto 2rem;
|
||||
scroll-margin-top: 1.5rem;
|
||||
min-height: 50vh;
|
||||
padding-bottom: 2rem;
|
||||
max-width: 1200px;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
main {
|
||||
width: 92%;
|
||||
}
|
||||
}
|
||||
|
||||
img, picture, video, canvas, svg {
|
||||
display: block; /* 6. Improve media defaults */
|
||||
max-width: 100%; /* 6. Improve media defaults */
|
||||
height: auto; /* 6. Improve media defaults */
|
||||
}
|
||||
|
||||
input, button, textarea, select {
|
||||
font: inherit; /* 7. Inherit fonts for form controls */
|
||||
}
|
||||
|
||||
p, h1, h2, h3, h4, h5, h6 {
|
||||
overflow-wrap: break-word; /* 8. Avoid text overflows */
|
||||
}
|
||||
|
||||
p {
|
||||
text-wrap: pretty; /* 9. Improve line wrapping */
|
||||
margin: 0 auto 1.5rem;
|
||||
line-height: 1.5rem;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
p {
|
||||
font-size: .9rem;
|
||||
line-height: 1.3rem;
|
||||
}
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
text-wrap: balance; /* 9. Improve line wrapping */
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: 3rem auto 1rem;
|
||||
text-align: center;
|
||||
font-size: 2.2rem;
|
||||
}
|
||||
|
||||
h2, h3 {
|
||||
margin: 3rem auto .5rem;
|
||||
color: var(--color-accent);
|
||||
border-bottom: solid;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.35rem;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
h1 {
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--color-text);
|
||||
text-decoration: underline;
|
||||
text-decoration-style: solid;
|
||||
text-decoration-thickness: .2rem;
|
||||
text-decoration-color: var(--color-accent);
|
||||
transition: text-decoration-thickness .5s;
|
||||
padding: 0 .15rem;
|
||||
border-radius: .15rem;
|
||||
}
|
||||
|
||||
@media (any-hover: hover) {
|
||||
a:hover {
|
||||
text-decoration-thickness: .4rem;
|
||||
}
|
||||
}
|
||||
|
||||
a:focus-visible {
|
||||
text-decoration: none;
|
||||
outline: var(--color-accent) solid .15rem;
|
||||
}
|
||||
|
||||
ul {
|
||||
margin: 0 auto 1.5rem 2rem;
|
||||
line-height: 1.5rem;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
ul {
|
||||
font-size: .9rem;
|
||||
line-height: 1.3rem;
|
||||
}
|
||||
}
|
||||
|
||||
time {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
button {
|
||||
cursor: pointer;
|
||||
background-color: var(--color-bg);
|
||||
}
|
||||
|
||||
header img {
|
||||
max-height: 25vh;
|
||||
max-width: 100%;
|
||||
width: auto;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
header img {
|
||||
max-height: 20vh;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
#logo-dark {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
#logo-light {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
#author {
|
||||
text-align: right;
|
||||
margin-bottom: 3rem;
|
||||
font-style: italic;
|
||||
}
|
||||
nav {
|
||||
display: flex;
|
||||
position: relative;
|
||||
gap: 1rem;
|
||||
justify-content: center;
|
||||
margin: 1rem auto;
|
||||
}
|
||||
|
||||
nav a,
|
||||
nav button {
|
||||
font-size: 1.4rem;
|
||||
border: .1rem solid;
|
||||
border-radius: .15rem;
|
||||
padding: .15rem .3rem;
|
||||
color: var(--color-accent);
|
||||
text-decoration: none;
|
||||
line-height: 2rem;
|
||||
outline-offset: .1rem;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
nav a,
|
||||
nav button {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (any-hover: hover) {
|
||||
nav a:hover,
|
||||
nav button:hover {
|
||||
color: var(--color-bg);
|
||||
background-color: var(--color-accent);
|
||||
border-color: var(--color-accent);
|
||||
}
|
||||
}
|
||||
|
||||
nav a:focus-visible,
|
||||
nav button:focus-visible {
|
||||
outline: .1rem solid var(--color-accent);
|
||||
}
|
||||
|
||||
#skip {
|
||||
left: -999px;
|
||||
position: absolute;
|
||||
top: auto;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
overflow: hidden;
|
||||
z-index: -99;
|
||||
background-color: var(--color-bg);
|
||||
}
|
||||
|
||||
#skip:focus-visible {
|
||||
left: 1rem;
|
||||
width: auto;
|
||||
height: auto;
|
||||
overflow: auto;
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
@media (any-hover: hover) {
|
||||
#skip:hover {
|
||||
color: var(--color-bg);
|
||||
background-color: var(--color-accent);
|
||||
}
|
||||
}
|
||||
|
||||
a[aria-current="page"] {
|
||||
border-right-width: .5rem;
|
||||
border-left-width: .5rem;
|
||||
}
|
||||
|
||||
nav ul {
|
||||
list-style: none;
|
||||
display: none;
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
margin: 0 0 0 1rem;
|
||||
min-width: 10rem;
|
||||
}
|
||||
|
||||
#dropdown {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
min-width: 3rem;
|
||||
}
|
||||
|
||||
nav ul.show {
|
||||
display: block;
|
||||
}
|
||||
|
||||
nav ul li {
|
||||
margin: .5rem;
|
||||
}
|
||||
|
||||
nav ul a {
|
||||
display: inline-block;
|
||||
background-color: var(--color-bg);
|
||||
}
|
||||
|
||||
footer {
|
||||
color: var(--color-bg);
|
||||
background-color: var(--color-text);
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
footer p {
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
footer a {
|
||||
color: var(--color-bg);
|
||||
text-decoration-color: var(--color-bg);
|
||||
}
|
||||
|
||||
footer a:focus-visible {
|
||||
outline-color: var(--color-bg);
|
||||
}
|
||||
.card {
|
||||
color: var(--color-accent);
|
||||
}
|
||||
|
||||
p .card {
|
||||
text-transform: uppercase;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
ol + p {
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
|
||||
.stop {
|
||||
color: var(--color-accent);
|
||||
position: relative;
|
||||
list-style: none;
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
|
||||
.stop:not(:last-child) {
|
||||
padding-bottom: 2rem;
|
||||
}
|
||||
|
||||
.stop:before {
|
||||
background-color: var(--color-accent);
|
||||
width: .1rem;
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
svg {
|
||||
margin-left: -2.2rem;
|
||||
width: 2rem;
|
||||
fill: var(--color-accent);
|
||||
float: left;
|
||||
padding: .4rem .5rem 0 0;
|
||||
}
|
||||
|
||||
@media (max-width: 650px) {
|
||||
svg {
|
||||
padding-top: .2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.stop h2 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.stop img {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.stop p {
|
||||
margin: 0;
|
||||
color: var(--color-text);
|
||||
padding-top: .5rem;
|
||||
}
|
||||
|
||||
.stop .spacer {
|
||||
height: 1rem;
|
||||
}</style>
|
||||
|
||||
<!-- JS -->
|
||||
|
||||
<script type="module">const dropdown = document.getElementById("dropdown");
|
||||
const dropdownButton = document.getElementById("drop-button");
|
||||
const dropdownContent = document.getElementById("drop-content");
|
||||
|
||||
const dropdownItems = dropdownContent.querySelectorAll("a");
|
||||
const firstDropdownItem = dropdownItems[0];
|
||||
const lastDropdownItem = dropdownItems[dropdownItems.length - 1];
|
||||
|
||||
const openDropdown = function() {
|
||||
dropdownContent.classList.add("show");
|
||||
dropdownContent.ariaHidden = "false";
|
||||
dropdownButton.ariaExpanded = "true";
|
||||
}
|
||||
|
||||
const closeDropdown = function() {
|
||||
if (dropdownButton.ariaExpanded === "true") {
|
||||
dropdownContent.classList.remove("show");
|
||||
dropdownContent.ariaHidden = "true";
|
||||
dropdownButton.ariaExpanded = "false";
|
||||
}
|
||||
}
|
||||
|
||||
dropdownButton.addEventListener("click", (event) => {
|
||||
if (dropdownButton.ariaExpanded === "false") openDropdown();
|
||||
else closeDropdown();
|
||||
});
|
||||
|
||||
dropdownButton.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Enter" || event.key === " ") { // Space or Enter key
|
||||
event.preventDefault(); // Prevent the default action to stop scrolling when pressing Space
|
||||
if (dropdownButton.ariaExpanded === "false") {
|
||||
openDropdown();
|
||||
} else {
|
||||
closeDropdown();
|
||||
}
|
||||
} else if (event.key === "Tab" && event.shiftKey) closeDropdown();
|
||||
});
|
||||
|
||||
firstDropdownItem.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Tab" && event.shiftKey) closeDropdown();
|
||||
});
|
||||
|
||||
lastDropdownItem.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Tab" && !event.shiftKey) closeDropdown();
|
||||
});
|
||||
|
||||
document.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Escape" && dropdownButton.ariaExpanded === "true") {
|
||||
closeDropdown();
|
||||
dropdownButton.focus();
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener("click", (event) => {
|
||||
if (!event.target.matches("#drop-button")) closeDropdown();
|
||||
});</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header>
|
||||
<nav>
|
||||
<a id="skip" href="#main">skip to main</a>
|
||||
<a href="/" aria-current="page">home</a>
|
||||
|
||||
<div id="dropdown">
|
||||
<button id="drop-button" aria-label="card submenu" aria-expanded="false" type="button" aria-controls="drop-content">cards ⮷</button>
|
||||
<ul id="drop-content" aria-hidden="true">
|
||||
|
||||
<li>
|
||||
<a href="/card-one/">
|
||||
card one
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="/card-two/">
|
||||
card two
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="/card-three/">
|
||||
card three
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<img id="logo-light" src="/img/logo-light.png" alt="blue and gold icon showing a greeting card with wings" loading="lazy" decoding="async" width="1754" height="1031">
|
||||
<img id="logo-dark" src="/img/logo-dark.png" alt="blue and gold icon showing a greeting card with wings" loading="lazy" decoding="async" width="1754" height="1031">
|
||||
</header>
|
||||
|
||||
|
||||
<main id="main">
|
||||
<h1>Siblinghood of the Traveling Greeting Card</h1>
|
||||
<p id="author">a community-building project by <a href="https://leecat.art" target="_blank" rel="external">lee</a>.</p>
|
||||
<p>welcome to the siblinghood of the traveling greeting card.</p>
|
||||
<p><a href="https://flipping.rocks/@inherentlee/115645750535211187" target="_blank" rel="external">originated on the fediverse</a> with an idea from <a href="https://scholar.social/@noctiluca" target="_blank" rel="external">noctiluca@scholar.social</a>.</p>
|
||||
<h2>objective</h2>
|
||||
<p>send a greeting card around the world. Maybe more than one. We'll see.</p>
|
||||
<h2>outline</h2>
|
||||
<p>from a group of participants, a random list will be formed. every person is given the address of the next person in the list (the last person receives the first person's address). First person picks a greeting card, signs it, and sends it to their designated recipient; that person receives, signs, sends on, etc.</p>
|
||||
<p>this continues on to the last person, who finally signs and sends back to the first, closing the loop and ending the adventure. The first person gets to keep the card they originally sent out.</p>
|
||||
<p>if we want to, this can be easily re-run - add folks who want to be added, drop folks who want to be dropped, scramble the list, and start again.</p>
|
||||
<h3>timeline</h3>
|
||||
<p>applications for round one (cards one and two) closed on <time datetime="2025-12-15">December 15th, 2025</time>. Round two (card three) closed on <time datetime="2026-05-01">May 1st, 2026</time>. You may still put in for future rounds, but be aware future rounds are not confirmed yet and will not be confirmed for at least 6 months.</p>
|
||||
<p>assignments (recipient address, order in loop) for cards one and two have been sent out as of <time datetime="2025-12-26">December 26th, 2025</time>. Assignments for card three have been sent out as of <time datetime="2026-06-04">June 4th, 2026</time>.</p>
|
||||
<h3>participants</h3>
|
||||
<p>each cohort will be 16 people. When signups for the next round hit 16, I will confirm with all folks that they are still in; if so, we'll kick it off (if not, we'll wait for another person or two).</p>
|
||||
<p>for the round that began <time datetime="2026-01-01">January of 2026</time>, we have 32 participants and will have two cards in circulation. All following rounds will kick off when 16 signups have been reached.</p>
|
||||
<h3>on randomization</h3>
|
||||
<p>I will edit the list as needed to accommodate any mailing restrictions. I will also re-roll if I am placed first on the list.</p>
|
||||
<h3>card guidelines</h3>
|
||||
<p>4x6 inches/10x15 centimeters minimum size recommended so there is space for everyone to sign. Must not require an unusual envelope e.g. square or similar. Must meet letter rates so nothing too heavy.</p>
|
||||
<h3>address privacy</h3>
|
||||
<p>the only people who will see your address are:</p>
|
||||
<ul>
|
||||
<li>me</li>
|
||||
<li>the person who is sending directly to you</li>
|
||||
<li>if you put a return address (which I really would recommend), your recipient</li>
|
||||
</ul>
|
||||
<h2>what I'll need from participants</h2>
|
||||
<h3>signing the card</h3>
|
||||
<p>sign in any way you find meaningful. Please don't hog the card space - remember that as many as ~2 dozen people will be signing it!</p>
|
||||
<p><strong>IMPORTANT!</strong> Only put a name, nickname, doodle, fedi handle, etc. on the card that you are comfortable having displayed publicly. In any posts that I make, it will not be directly connected to you. However, as there are only 16 signers per card, please be aware that how you sign could be tied back to your fedi account.</p>
|
||||
<h3>mailing the card</h3>
|
||||
<p>this will require a fresh envelope and stamp(s) as needed for postage.</p>
|
||||
<h3>status checks</h3>
|
||||
<p>this is, at the end of the day, pretty flexible, but what I would really, really like is:</p>
|
||||
<ul>
|
||||
<li>2 emails, one on receipt and one on re-sending. This allows me to check in on progress and ensure the card doesn't get too stalled, or lost.</li>
|
||||
<li>more optionally, but fun for seeing how things are going: a picture of the card (not the envelope!)</li>
|
||||
</ul>
|
||||
<p>feel free to post your card pictures using the hashtags #siblinghoodOfTheTravelingGreetingCard or #sottgc.</p>
|
||||
<h2>what I'll send participants</h2>
|
||||
<h3>guidelines</h3>
|
||||
<p>summary/highlights of these guidelines will be repeated over email. Full guidelines will always be available here.</p>
|
||||
<h3>recipient and loop order assignment</h3>
|
||||
<p>each participant will be sent the name and address of the next person in the loop. They will also be sent their place in the loop, <strong>numbered from 0</strong>.</p>
|
||||
<h3>reminders</h3>
|
||||
<p>I'll be doing my level best to track the card's movement, so as it is sent around (assuming I get check-ins from y'all! please help me out here!). I will send out reminders to folks to either check their mail or make sure the card gets sent out again. Some folks have specifically asked for this support and I don't want to let them down, so more communication is always better.</p>
|
||||
<h2>I want in!</h2>
|
||||
<p>as stated above, signups for the rounds beginning <time datetime="2026-01-01">January 1st, 2026</time> and <time datetime="2026-06-04">June 4th, 2026</time> are closed. However, you may still sign up in case of future rounds.</p>
|
||||
<p><a href="https://airtable.com/appdoHZsRDUzgYu9q/pagsr9LVAqKx29gDl/form" target="_blank" rel="external">sign up for the siblinghood of the traveling greeting card</a>.</p>
|
||||
<p>if airtable is in any way inaccessible to you, please <a href="https://leecat.art/contact" target="_blank" rel="external">reach out directly to lee</a>.</p>
|
||||
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<p>brought to you in 2026 by
|
||||
<a href="https://leecat.art" target="_blank">lee</a>
|
||||
</p>
|
||||
<p><a href="/attribution">attribution</a></p>
|
||||
</footer>
|
||||
|
||||
<!-- This page `/` was built on 2026-09-18T02:44:33.589Z -->
|
||||
</body>
|
||||
</html>
|
||||