## Purpose Canonical specification for share-and-contact-microinteractions requirements synced from OpenSpec change deltas. ## Requirements ### Requirement: Modal/footer exposes minimal icon-based share actions The system SHALL provide visible, accessible icon-only share actions for article permalinks on supported providers. #### Scenario: Supported share providers - **WHEN** share controls are rendered - **THEN** icons for `X`, `WhatsApp`, and `LinkedIn` are displayed - **AND** activating an icon opens provider share flow with the article permalink #### Scenario: Light-theme icon visibility - **WHEN** the site is in light mode - **THEN** share icons remain visibly distinguishable with accessible contrast - **AND** icon controls remain keyboard focusable #### Scenario: Copy-link share action - **WHEN** a user activates the copy-to-clipboard share control - **THEN** the article permalink is written to clipboard - **AND** action succeeds without navigating away ### Requirement: Footer supports env-driven GitHub and contact links The system SHALL conditionally render GitHub and contact-email links from environment-backed configuration. #### Scenario: Config present - **WHEN** GitHub URL and contact email are configured - **THEN** footer renders both links as interactive controls #### Scenario: Config absent - **WHEN** either value is missing - **THEN** corresponding footer control is hidden without breaking layout #### Scenario: Contact link visible when configured - **WHEN** `CONTACT_EMAIL` is present in frontend config payload - **THEN** footer shows the contact email affordance - **AND** hover microcopy behavior remains enabled ### Requirement: Contact affordance provides randomized safe microcopy The contact link SHALL present randomized, policy-safe helper messages to encourage feedback. #### Scenario: Randomized helper tooltip - **WHEN** user hovers or nears the contact affordance - **THEN** a tooltip-style helper message is shown from a predefined safe message pool - **AND** message language avoids profanity/offensive/racist/sexist/misogynistic content