Files
dlStack/index.html
Joel Brock ff0abee349 Drop turtle, honor ?template= URL param, add warp easter egg
- Removed the cosmos turtle (CSS rules + auto-load probe + JS hook).
  Reduced-motion turtle branch removed too.
- ?template=editorial|swiss|cosmos URL param now wins over the value
  in data/links.json (and the cached localStorage fallback). Wired in
  both the pre-paint boot script and main() so deep links work
  without flashing the wrong template.
- New hidden easter egg: type the letters w-a-r-p anywhere on the
  page (no input focused) and the page reloads on the next template
  in the cycle editorial -> swiss -> cosmos -> editorial. The URL is
  updated with the new ?template= param so the override survives
  refresh and is shareable. A small "↯ <name>" toast pops up after
  the reload via sessionStorage handoff, fades after ~2.5s, respects
  prefers-reduced-motion.
- README documents both the URL param and the warp keyword.
2026-05-16 09:35:45 -07:00

63 lines
3.0 KiB
HTML

<!doctype html>
<html lang="en" data-theme="auto" data-template="editorial">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<meta name="color-scheme" content="light dark">
<meta name="description" content="Joel Brock — consulting technologist in Portland, OR. Links to my work in cooperative technology, projects, and video.">
<title>Links — index</title>
<link rel="icon" type="image/svg+xml" href="favicon.svg">
<link rel="alternate icon" type="image/png" href="data:image/png;base64,">
<!-- Preconnect to font + favicon services for snappy first paint -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://www.google.com">
<link rel="preconnect" href="https://i.ytimg.com">
<!-- Editorial: Fraunces (variable serif) + Geist (refined sans) + Geist Mono
Swiss: Archivo (variable grotesque, near-Akzidenz/Univers) -->
<link href="https://fonts.googleapis.com/css2?family=Archivo:wght@400;500;600;700;900&family=DM+Serif+Display:ital@0;1&family=Fraunces:opsz,wght,SOFT,WONK@9..144,300..600,30..100,0..1&family=Geist:wght@300;400;500;600&family=Geist+Mono:wght@400;500&family=Orbitron:wght@400;500;700;900&display=swap" rel="stylesheet">
<script>
// Apply saved theme + template before paint to avoid flash.
// URL ?template=… wins over the cached value so deep links work.
try {
var t = localStorage.getItem("dlstack-theme");
if (t === "light" || t === "dark") document.documentElement.dataset.theme = t;
var qtpl = null;
try { qtpl = new URL(location.href).searchParams.get("template"); } catch (e) {}
if (qtpl === "swiss" || qtpl === "editorial" || qtpl === "cosmos") {
document.documentElement.dataset.template = qtpl;
} else {
var tpl = localStorage.getItem("dlstack-template");
if (tpl === "swiss" || tpl === "editorial" || tpl === "cosmos") document.documentElement.dataset.template = tpl;
}
} catch (e) {}
</script>
<link rel="stylesheet" href="assets/css/styles.css">
<link rel="stylesheet" href="assets/css/swiss.css">
<link rel="stylesheet" href="assets/css/cosmos.css">
<meta property="og:type" content="website">
<meta property="og:title" content="Joel Brock — links">
<meta property="og:description" content="Consulting technologist in Portland, OR. Cooperative technology, projects, and video.">
<meta name="twitter:card" content="summary">
</head>
<body>
<a class="sr-only" href="#app">Skip to content</a>
<div class="shell" id="app">
<noscript>
<p style="color:var(--accent);font-family:var(--mono);padding:2rem;max-width:48ch">
JavaScript is required to render this page — it reads the link list from <code>data/links.json</code>.
Enable JavaScript and reload, or browse <a href="data/links.json">the raw data file</a>.
</p>
</noscript>
</div>
<script src="assets/js/app.js" defer></script>
</body>
</html>