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; }