Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .Jules/jules.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,9 @@
- [Insight 1: Tighter focus ring outline-offsets (2px) prevent focus ring overflow clipping on compact overlay toggles.]
- [Insight 2: Gating active press scale transitions behind prefers-reduced-motion media queries respects accessibility preferences while preserving tactile visual feedback.]
- [Delta: 17 lines. Guardrails: All passed autonomously.]

## 2026-06-16 - Tag Pill Tactile Feedback | Signal: Technical/Accessibility | Lean Implementation: Flagged CSS Motion Gate + Transform Scale

- [Insight 1: Hardware-accelerated press scale (`scale(0.96)`) on tag pills provides responsive tactile feedback during click/tap events.]
- [Insight 2: Gating tactile animations behind `portfolio_tactile_v1` and `prefers-reduced-motion: no-preference` ensures zero impact on users preferring reduced motion.]
- [Delta: 13 lines. Guardrails: All passed autonomously.]
16 changes: 15 additions & 1 deletion src/components/Pill.astro
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
<div class="pill"><slot /></div>
---
import { getEntry } from 'astro:content';

const flagsEntry = await getEntry('flags', 'config');
const isTactileEnabled = flagsEntry?.data.portfolio_tactile_v1 ?? false;
---

<div class={`pill ${isTactileEnabled ? 'tactile' : ''}`}><slot /></div>

<style>
.pill {
Expand All @@ -23,5 +30,12 @@
background-size: 250% 100%;
background-position: 0% 50%;
box-shadow: var(--shadow-sm);
transition: transform var(--theme-transition);
}

@media (prefers-reduced-motion: no-preference) {
.pill.tactile:active {
transform: scale(0.96);
}
}
</style>
Loading