Refine Swiss + Editorial themes; add optional date field
Swiss: drop all-caps on titles, soften heavy ink borders to muted rules or remove them where background contrast carries the form, balance hero name weights (smaller lighter first name vs heavier italic last name), fix unreadable white description text on portfolio hover. Editorial: enlarge the section "No" mark and set it in italic Fraunces so it reads as typography instead of a tick, swap the first name into DM Serif Display for a different J, sharpen the section number caption. Client tile: contain custom logos at 86% so wide marks like "The Cooperative Way" stop getting cropped to "operative". New: optional `date` field on every item type (link/card/portfolio/ youtube/client). Accepts YYYY, YYYY-MM, or YYYY-MM-DD. Rendered human-friendly with the raw ISO preserved in <time datetime>. Documented in README and demonstrated in links.example.json.
This commit is contained in:
@@ -125,6 +125,12 @@ body::before {
|
||||
letter-spacing: -0.045em;
|
||||
color: var(--ink);
|
||||
}
|
||||
.hero__name .hero__name-first {
|
||||
font-family: "DM Serif Display", var(--display);
|
||||
font-weight: 400;
|
||||
font-variation-settings: normal;
|
||||
letter-spacing: -0.03em;
|
||||
}
|
||||
.hero__name em {
|
||||
font-style: italic;
|
||||
font-variation-settings: "opsz" 144, "SOFT" 100, "WONK" 1;
|
||||
@@ -191,11 +197,14 @@ body::before {
|
||||
}
|
||||
.section__numwrap { display: flex; flex-direction: column; gap: 0.2rem; align-self: end; }
|
||||
.section__numwrap small {
|
||||
font-family: var(--mono);
|
||||
font-size: var(--fs-mini);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.18em;
|
||||
font-family: var(--display);
|
||||
font-size: var(--fs-md);
|
||||
font-style: italic;
|
||||
font-variation-settings: "opsz" 36, "SOFT" 100;
|
||||
letter-spacing: 0;
|
||||
color: var(--accent);
|
||||
font-weight: 500;
|
||||
line-height: 1;
|
||||
}
|
||||
.section__num {
|
||||
font-family: var(--display);
|
||||
@@ -299,7 +308,13 @@ body::before {
|
||||
.card--link .favicon[data-fallback] { font-family: var(--display); font-weight: 500; font-size: 1.7rem; color: var(--ink); }
|
||||
.card__title { font-weight: 540; letter-spacing: -0.005em; line-height: 1.25; }
|
||||
.card__desc { color: var(--muted); font-size: var(--fs-sm); }
|
||||
.card__host { font-family: var(--mono); font-size: var(--fs-mini); color: var(--muted); margin-top: 0.2rem; text-transform: lowercase; }
|
||||
.card__host { font-family: var(--mono); font-size: var(--fs-mini); color: var(--muted); text-transform: lowercase; }
|
||||
.card__meta { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.4rem 0.8rem; margin-top: 0.2rem; }
|
||||
.card__date { font-family: var(--mono); font-size: var(--fs-mini); color: var(--muted); letter-spacing: 0.02em; text-transform: uppercase; }
|
||||
.card__meta .card__date::before { content: "·"; margin-right: 0.5rem; color: var(--accent); }
|
||||
.card__meta .card__date:only-child::before { content: none; }
|
||||
.tags .card__date { padding: 3px 0; margin-left: auto; }
|
||||
.portfolio__caption .card__date { margin-top: 0.25rem; }
|
||||
|
||||
/* project card */
|
||||
.card--project { padding: 1.5rem; gap: 0.75rem; }
|
||||
@@ -425,7 +440,7 @@ body::before {
|
||||
box-shadow: 0 1px 0 rgba(20,18,34,0.04), 0 14px 28px -18px rgba(20,18,34,0.28);
|
||||
}
|
||||
.client__logo img.is-favicon { width: 60%; height: 60%; object-fit: contain; }
|
||||
.client__logo img:not(.is-favicon) { width: 100%; height: 100%; object-fit: cover; }
|
||||
.client__logo img:not(.is-favicon) { width: 86%; height: 86%; object-fit: contain; }
|
||||
.client__logo[data-fallback] { font-family: var(--display); font-weight: 500; font-size: 2.2rem; color: var(--ink); }
|
||||
.client__title {
|
||||
font-size: var(--fs-sm);
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
--ink: oklch(0.10 0 0);
|
||||
--ink-2: oklch(0.18 0 0);
|
||||
--muted: oklch(0.42 0 0);
|
||||
--rule: oklch(0.10 0 0);
|
||||
--rule: oklch(0.78 0 0);
|
||||
--accent: #DC2127;
|
||||
--on-accent: oklch(0.99 0 0);
|
||||
--display: "Archivo", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
@@ -27,7 +27,7 @@
|
||||
--ink: oklch(0.985 0 0);
|
||||
--ink-2: oklch(0.92 0 0);
|
||||
--muted: oklch(0.62 0 0);
|
||||
--rule: oklch(0.985 0 0);
|
||||
--rule: oklch(0.32 0 0);
|
||||
}
|
||||
}
|
||||
:root[data-template="swiss"][data-theme="dark"] {
|
||||
@@ -36,7 +36,7 @@
|
||||
--ink: oklch(0.985 0 0);
|
||||
--ink-2: oklch(0.92 0 0);
|
||||
--muted: oklch(0.62 0 0);
|
||||
--rule: oklch(0.985 0 0);
|
||||
--rule: oklch(0.32 0 0);
|
||||
}
|
||||
|
||||
/* clean off the editorial paper grain */
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
/* ───── marker bar ───── */
|
||||
:root[data-template="swiss"] .marker {
|
||||
border-bottom: 2px solid var(--ink);
|
||||
border-bottom: 1px solid var(--rule);
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.06em;
|
||||
color: var(--ink);
|
||||
@@ -60,7 +60,7 @@
|
||||
:root[data-template="swiss"] .marker__year { color: var(--accent); }
|
||||
:root[data-template="swiss"] .theme {
|
||||
border-radius: 0;
|
||||
border-color: var(--ink);
|
||||
border-color: var(--rule);
|
||||
font-family: var(--display);
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
@@ -74,15 +74,22 @@
|
||||
:root[data-template="swiss"] .hero__name {
|
||||
font-family: var(--display);
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
font-weight: 700;
|
||||
font-variation-settings: normal;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: -0.045em;
|
||||
line-height: 0.84;
|
||||
text-transform: none;
|
||||
letter-spacing: -0.035em;
|
||||
line-height: 0.86;
|
||||
}
|
||||
:root[data-template="swiss"] .hero__name .hero__name-first {
|
||||
font-family: var(--display);
|
||||
font-weight: 500;
|
||||
font-size: 0.78em;
|
||||
letter-spacing: -0.025em;
|
||||
color: var(--ink);
|
||||
}
|
||||
:root[data-template="swiss"] .hero__name em {
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
font-weight: 800;
|
||||
font-variation-settings: normal;
|
||||
color: var(--accent);
|
||||
}
|
||||
@@ -122,8 +129,8 @@
|
||||
/* ───── social ───── */
|
||||
:root[data-template="swiss"] .social a {
|
||||
border-radius: 0;
|
||||
border-color: var(--ink);
|
||||
border-width: 1.5px;
|
||||
border-color: var(--rule);
|
||||
border-width: 1px;
|
||||
font-family: var(--display);
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
@@ -141,13 +148,15 @@
|
||||
|
||||
/* ───── sections ───── */
|
||||
:root[data-template="swiss"] .section__head {
|
||||
border-bottom: 4px solid var(--ink);
|
||||
border-bottom: 2px solid var(--ink);
|
||||
padding-bottom: 0.85rem;
|
||||
}
|
||||
:root[data-template="swiss"] .section__numwrap small {
|
||||
color: var(--ink);
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-family: var(--display);
|
||||
font-variation-settings: normal;
|
||||
}
|
||||
:root[data-template="swiss"] .section__num {
|
||||
font-family: var(--display);
|
||||
@@ -160,9 +169,9 @@
|
||||
:root[data-template="swiss"] .section__title {
|
||||
font-family: var(--display);
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
font-weight: 800;
|
||||
font-variation-settings: normal;
|
||||
text-transform: uppercase;
|
||||
text-transform: none;
|
||||
letter-spacing: -0.025em;
|
||||
color: var(--ink);
|
||||
}
|
||||
@@ -180,8 +189,8 @@
|
||||
/* ───── cards ───── */
|
||||
:root[data-template="swiss"] .card {
|
||||
border-radius: 0;
|
||||
border-color: var(--ink);
|
||||
background: var(--paper);
|
||||
border: 0;
|
||||
background: var(--paper-2);
|
||||
transition: background 200ms cubic-bezier(0.22, 1, 0.36, 1), color 200ms cubic-bezier(0.22, 1, 0.36, 1);
|
||||
isolation: isolate;
|
||||
}
|
||||
@@ -190,7 +199,6 @@
|
||||
box-shadow: none;
|
||||
background: var(--ink);
|
||||
color: var(--paper);
|
||||
border-color: var(--ink);
|
||||
}
|
||||
:root[data-template="swiss"] .card:hover .card__title,
|
||||
:root[data-template="swiss"] .card:hover .card__desc,
|
||||
@@ -205,8 +213,8 @@
|
||||
:root[data-template="swiss"] .card__title {
|
||||
font-family: var(--display);
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: -0.005em;
|
||||
text-transform: none;
|
||||
letter-spacing: -0.01em;
|
||||
}
|
||||
:root[data-template="swiss"] .card__desc {
|
||||
font-family: var(--body);
|
||||
@@ -218,16 +226,25 @@
|
||||
font-weight: 600;
|
||||
letter-spacing: 0.08em;
|
||||
}
|
||||
:root[data-template="swiss"] .card__date {
|
||||
font-family: var(--display);
|
||||
font-weight: 600;
|
||||
color: var(--muted);
|
||||
letter-spacing: 0.06em;
|
||||
}
|
||||
:root[data-template="swiss"] .card:hover .card__date,
|
||||
:root[data-template="swiss"] .card:hover .card__host { color: var(--paper); }
|
||||
:root[data-template="swiss"] .card__meta .card__date::before { color: var(--accent); }
|
||||
:root[data-template="swiss"] .card:hover .card__meta .card__date::before { color: var(--paper); }
|
||||
|
||||
/* link card favicon */
|
||||
:root[data-template="swiss"] .card--link .favicon {
|
||||
border-radius: 0;
|
||||
border-color: var(--ink);
|
||||
border: 0;
|
||||
background: var(--paper);
|
||||
}
|
||||
:root[data-template="swiss"] .card--link:hover .favicon {
|
||||
background: var(--paper);
|
||||
border-color: var(--paper);
|
||||
}
|
||||
:root[data-template="swiss"] .card--link .favicon[data-fallback] {
|
||||
font-family: var(--display);
|
||||
@@ -238,19 +255,20 @@
|
||||
/* project card */
|
||||
:root[data-template="swiss"] .card--project .card__title {
|
||||
font-family: var(--display);
|
||||
font-weight: 900;
|
||||
font-weight: 800;
|
||||
font-style: normal;
|
||||
font-variation-settings: normal;
|
||||
text-transform: uppercase;
|
||||
text-transform: none;
|
||||
font-size: var(--fs-lg);
|
||||
line-height: 0.95;
|
||||
line-height: 1.05;
|
||||
letter-spacing: -0.02em;
|
||||
}
|
||||
|
||||
/* featured — solid red, white text, true poster */
|
||||
:root[data-template="swiss"] .card--featured {
|
||||
background: var(--accent);
|
||||
color: var(--on-accent);
|
||||
border-color: var(--ink);
|
||||
border: 0;
|
||||
}
|
||||
:root[data-template="swiss"] .card--featured:hover {
|
||||
background: var(--ink);
|
||||
@@ -263,9 +281,11 @@
|
||||
}
|
||||
:root[data-template="swiss"] .card--featured .card__title {
|
||||
color: var(--on-accent);
|
||||
font-weight: 900;
|
||||
text-transform: uppercase;
|
||||
font-weight: 800;
|
||||
text-transform: none;
|
||||
font-size: clamp(1.95rem, 1.30rem + 1.8vw, 2.8rem);
|
||||
letter-spacing: -0.025em;
|
||||
line-height: 1;
|
||||
}
|
||||
:root[data-template="swiss"] .card--featured:hover .card__title,
|
||||
:root[data-template="swiss"] .card--featured:hover .card__desc { color: var(--paper); }
|
||||
@@ -276,7 +296,7 @@
|
||||
/* tags — square, monoline, all caps */
|
||||
:root[data-template="swiss"] .tag {
|
||||
border-radius: 0;
|
||||
border-color: var(--ink);
|
||||
border: 0;
|
||||
background: var(--paper);
|
||||
font-family: var(--display);
|
||||
font-weight: 600;
|
||||
@@ -287,7 +307,6 @@
|
||||
:root[data-template="swiss"] .card:hover .tag {
|
||||
background: var(--paper);
|
||||
color: var(--ink);
|
||||
border-color: var(--paper);
|
||||
}
|
||||
:root[data-template="swiss"] .card--featured .tag {
|
||||
background: color-mix(in oklch, var(--on-accent) 14%, transparent);
|
||||
@@ -303,7 +322,7 @@
|
||||
/* youtube */
|
||||
:root[data-template="swiss"] .card--youtube {
|
||||
border-radius: 0;
|
||||
border-color: var(--ink);
|
||||
border: 0;
|
||||
}
|
||||
:root[data-template="swiss"] .yt__play {
|
||||
border-radius: 0;
|
||||
@@ -318,37 +337,40 @@
|
||||
:root[data-template="swiss"] .yt__title {
|
||||
font-family: var(--display);
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.02em;
|
||||
text-transform: none;
|
||||
letter-spacing: -0.005em;
|
||||
}
|
||||
|
||||
/* portfolio */
|
||||
:root[data-template="swiss"] .card--portfolio {
|
||||
border-radius: 0;
|
||||
border-color: var(--ink);
|
||||
border: 0;
|
||||
}
|
||||
:root[data-template="swiss"] .card--portfolio:hover { background: var(--paper); color: var(--ink); }
|
||||
:root[data-template="swiss"] .card--portfolio:hover { background: var(--paper-2); color: var(--ink); }
|
||||
:root[data-template="swiss"] .card--portfolio:hover .portfolio__caption .card__title { color: var(--accent); }
|
||||
:root[data-template="swiss"] .card--portfolio:hover .card__desc,
|
||||
:root[data-template="swiss"] .card--portfolio:hover .card__date,
|
||||
:root[data-template="swiss"] .card--portfolio:hover .card__host { color: var(--muted); }
|
||||
:root[data-template="swiss"] .portfolio__caption {
|
||||
border-top: 2px solid var(--ink);
|
||||
border-top: 0;
|
||||
padding: 1.1rem 1.35rem 1.2rem;
|
||||
}
|
||||
:root[data-template="swiss"] .portfolio__caption .card__title {
|
||||
font-family: var(--display);
|
||||
font-weight: 900;
|
||||
font-weight: 800;
|
||||
font-variation-settings: normal;
|
||||
text-transform: uppercase;
|
||||
text-transform: none;
|
||||
letter-spacing: -0.02em;
|
||||
font-size: var(--fs-lg);
|
||||
line-height: 1;
|
||||
line-height: 1.05;
|
||||
}
|
||||
:root[data-template="swiss"] .portfolio__caption .card__desc { color: var(--muted); }
|
||||
|
||||
/* clients */
|
||||
:root[data-template="swiss"] .client__logo {
|
||||
border-radius: 0;
|
||||
border-color: var(--ink);
|
||||
background: var(--paper);
|
||||
border: 0;
|
||||
background: var(--paper-2);
|
||||
}
|
||||
/* opt the client tile out of the global card hover-flip: the card has no
|
||||
chrome, so filling it with ink would hide the title text below the logo */
|
||||
@@ -360,7 +382,6 @@
|
||||
:root[data-template="swiss"] .card--client:hover .client__title { color: var(--accent); }
|
||||
:root[data-template="swiss"] .card--client:hover .client__logo {
|
||||
background: var(--ink);
|
||||
border-color: var(--ink);
|
||||
transform: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
@@ -374,15 +395,15 @@
|
||||
:root[data-template="swiss"] .client__title {
|
||||
font-family: var(--display);
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06em;
|
||||
font-size: var(--fs-mini);
|
||||
text-transform: none;
|
||||
letter-spacing: 0;
|
||||
font-size: var(--fs-sm);
|
||||
color: var(--ink);
|
||||
}
|
||||
|
||||
/* footer */
|
||||
:root[data-template="swiss"] .foot {
|
||||
border-top: 2px solid var(--ink);
|
||||
border-top: 1px solid var(--rule);
|
||||
color: var(--ink);
|
||||
font-family: var(--display);
|
||||
font-weight: 600;
|
||||
@@ -391,7 +412,7 @@
|
||||
font-family: var(--display);
|
||||
font-style: normal;
|
||||
text-transform: uppercase;
|
||||
font-weight: 900;
|
||||
font-weight: 800;
|
||||
color: var(--accent);
|
||||
font-size: var(--fs-md);
|
||||
letter-spacing: 0.08em;
|
||||
|
||||
Reference in New Issue
Block a user