3D needs WebGL; the frieze beats still play.
Now playing on the voyage
+${esc(saga.name)} · ${esc(song.storyTime.label)}
`; + $("panel-tab-n").textContent = String(song.track); + } + + /* ----- tabs ----- */ + const motifTag = (m: Motif) => `${esc(m.name)}`; + + function about(): HTMLElement { + const el = document.createElement("div"); + el.className = "about"; + const saga = sagaOf(song); + const o = song.odyssey; + const homer = o ? `Book ${o.book}, lines ${esc(o.lines.replace("-", "–"))}` : "No counterpart in Homer"; + el.innerHTML = ` +${esc(f)}
`).join("")} +Each thread is a motif; a knot is a song where it plays. Pick a motif to follow it.
+Placeholder lyrics. The real lyrics are not reproduced on this fan site.
+ ${song.parts.map((p) => { + const ms = p.motifIds.flatMap((id) => motifs.find((m) => m.id === id) ?? []); + const c = ms[0] ? color(ms[0].id) : "transparent"; + return `${esc(l)}
`).join("")}${ms.map(motifTag).join("")}
` : ""} +Placeholder fan works — real ones will be credited and linked to their creators.
+${TYPE_LABEL[w.type]}
+${esc(w.title)}
+by ${esc(w.handle)}
+Credit + link to the original (placeholder)
+