diff --git a/packages/web/src/Board.svelte b/packages/web/src/Board.svelte
index fb769fa..8cb35ae 100644
--- a/packages/web/src/Board.svelte
+++ b/packages/web/src/Board.svelte
@@ -633,6 +633,17 @@
{/if}
{/each}
{/if}
+
+ {#each view.players.filter((p) => p.alive && view.sustained.some((e) => e.cardId === "fear" && e.targetId === p.id)) as fp (fp.id)}
+ {@const fx = fp.position.x * CELL + CELL / 2}
+ {@const fy = fp.position.y * CELL + CELL / 2}
+ {@const r = 3.5 * CELL}
+
+ {/each}
+
{#if sightTrace}
@@ -764,6 +775,18 @@
.ghost-slot:hover { fill: rgba(122, 162, 122, 0.22); }
.fx-layer { pointer-events: none; }
+ .fear-aura {
+ fill: rgba(90, 44, 110, 0.05);
+ stroke: #7a4a8a;
+ stroke-width: 2;
+ stroke-dasharray: 8 6;
+ pointer-events: none;
+ animation: fear-breathe 2.4s ease-in-out infinite;
+ }
+ @keyframes fear-breathe {
+ 0%, 100% { opacity: 0.65; }
+ 50% { opacity: 0.3; }
+ }
.mover { transition: transform 260ms cubic-bezier(0.25, 0.8, 0.35, 1); }
.mover.snap { transition: none; }
@@ -789,7 +812,7 @@
50% { opacity: 0.35; }
}
@media (prefers-reduced-motion: reduce) {
- .marked-cell, .marked-sector, .ghost-slot, .warp-dest { animation: none; }
+ .marked-cell, .marked-sector, .ghost-slot, .warp-dest, .fear-aura { animation: none; }
.fx-layer { display: none; }
:global(.token-art.ghosted) { animation: none; }
.mover { transition: none; }