style(faith/apologetik): pulse rings + larger labels in cumulative svg
CI / update (push) Successful in 1m24s

- Numbers move to left of dots (text-anchor end).
- ViewBox widened (W 700→820, H 240→320) so the converge label fits and
  bigger fonts/dots have breathing room.
- Strand thickness, dot/orb radii, and label font sizes bumped.
- Replace static rings with two pulse-out ripples (4.8s period, 2.4s
  offset) emanating from the orb; reduced-motion falls back to static.
This commit is contained in:
2026-04-28 21:29:12 +02:00
parent f7ae3f20af
commit 58247dab89
2 changed files with 54 additions and 23 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "homepage",
"version": "1.49.1",
"version": "1.49.2",
"private": true,
"type": "module",
"scripts": {
@@ -93,14 +93,14 @@
return POS_ARGUMENTS.filter((a) => a.layer === lid);
}
const W = 700;
const H = 240;
const targetX = W - 110;
const W = 820;
const H = 320;
const targetX = W - 200;
const targetY = H / 2;
const bands: Record<string, [number, number]> = {
natural: [20, 80],
theism: [90, 150],
christianity: [160, 220]
natural: [25, 105],
theism: [120, 200],
christianity: [215, 295]
};
type Item = PosArgument & { y: number };
@@ -173,10 +173,10 @@
{#each cumulativeItems as it (it.id)}
{@const stroke = POS_LAYER_COLORS[it.layer]}
{@const opacity = 0.25 + (it.strength / 5) * 0.55}
{@const sw = 0.8 + it.strength * 0.6}
{@const sw = 1.6 + it.strength * 1.0}
<a href="/{faithLang}/{slug}/pro/{it.id}" aria-label={it.title}>
<path
d="M 8 {it.y} C {W * 0.45} {it.y}, {W * 0.55} {targetY}, {targetX} {targetY}"
d="M 38 {it.y} C {W * 0.45} {it.y}, {W * 0.55} {targetY}, {targetX} {targetY}"
fill="none"
stroke={stroke}
stroke-width={sw}
@@ -185,11 +185,12 @@
>
<title>{String(it.n).padStart(2, '0')}{it.title}</title>
</path>
<circle cx="8" cy={it.y} r="3.5" fill={stroke} />
<circle cx="38" cy={it.y} r="5" fill={stroke} />
<text
x="18"
y={it.y + 3.5}
font-size="9"
x="26"
y={it.y + 4}
font-size="12"
text-anchor="end"
fill="var(--color-text-secondary)"
font-family="ui-monospace, Menlo, monospace"
>
@@ -197,33 +198,31 @@
</text>
</a>
{/each}
<circle cx={targetX} cy={targetY} r="14" fill="var(--color-text-primary)" />
<circle
class="pulse pulse-1"
cx={targetX}
cy={targetY}
r="22"
r="18"
fill="none"
stroke="var(--color-text-primary)"
stroke-width="0.6"
opacity="0.5"
/>
<circle
class="pulse pulse-2"
cx={targetX}
cy={targetY}
r="34"
r="18"
fill="none"
stroke="var(--color-text-primary)"
stroke-width="0.4"
opacity="0.25"
/>
<circle cx={targetX} cy={targetY} r="18" fill="var(--color-text-primary)" />
<text
x={targetX + 44}
x={targetX + 56}
y={targetY - 4}
font-size="13"
font-size="17"
font-weight="700"
fill="var(--color-text-primary)">{labels.convergeLabel}</text
>
<text x={targetX + 44} y={targetY + 12} font-size="10" fill="var(--color-text-secondary)"
<text x={targetX + 56} y={targetY + 16} font-size="13" fill="var(--color-text-secondary)"
>{labels.convergeSub}</text
>
</svg>
@@ -360,6 +359,38 @@
width: 100%;
height: auto;
display: block;
overflow: visible;
}
@keyframes pulse-out {
0% {
r: 18;
opacity: 0.55;
stroke-width: 1.2;
}
100% {
r: 64;
opacity: 0;
stroke-width: 0.3;
}
}
.pulse {
animation: pulse-out 4.8s ease-out infinite both;
}
.pulse-2 {
animation-delay: 2.4s;
}
@media (prefers-reduced-motion: reduce) {
.pulse {
animation: none;
r: 28;
opacity: 0.4;
stroke-width: 0.8;
}
.pulse-2 {
r: 42;
opacity: 0.2;
stroke-width: 0.5;
}
}
.cum-svg a {
cursor: pointer;