diff --git a/components/primitives/ParDialogo.tsx b/components/primitives/ParDialogo.tsx index a3b2d21..21d068a 100644 --- a/components/primitives/ParDialogo.tsx +++ b/components/primitives/ParDialogo.tsx @@ -1,11 +1,14 @@ 'use client'; +import { useEffect, useRef } from 'react'; import { motion } from 'framer-motion'; import { Wordmark } from '@/components/primitives/Wordmark'; import { fadeInUp } from '@/lib/motion'; // One exchange of the page's conversation: the reader's situation, then what -// creeer does about it. +// creeer does about it. The answer arrives as you scroll into the pair — its +// gold rule draws down and the block comes up to full contrast — so the section +// reads as being answered rather than as a list that happens to have answers. // // The sides never swap from one pair to the next. Each voice keeps its own // margin, the way a conversation reads on a page; what alternates going down is @@ -13,39 +16,114 @@ import { fadeInUp } from '@/lib/motion'; // the reader the one cue that tells them who is speaking. // // Three cues carry that distinction, never colour alone: the speaker label, the -// column, and the rule hanging off each block. The answer also drops half a -// step below the situation on wide screens, so the eye reads it as a reply -// rather than as a second column of the same thought. +// column, and the rule hanging off each block. +// +// The answer text is in the DOM at all times, at every breakpoint — opacity, +// never `display: none` or `hidden`, so screen readers still announce it and +// the static export still ships it to search engines. +// +// `activo` latches: the section turns it on when the reader reaches the pair +// and never turns it off again. An answer that faded back out once you scrolled +// past would leave the page emptier the further you read, and would re-create +// the failure this project has already hit twice — content stranded at opacity +// zero with every test green, because jsdom has no layout and no scrolling. // // No motion.li here on purpose: Framer propagates variants through React // context, so the two motion.div children still inherit the stagger from the -//