From d4212cecf28731acb49ef51a7fc0c05805ce1b0a Mon Sep 17 00:00:00 2001 From: amosblomqvist Date: Sun, 13 Sep 2026 01:20:07 +0300 Subject: [PATCH] Wave-5 refinement round 3 (owner): SVG answer marks + uniform input sizes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ✓/✗ in the answered card: replaced literal glyphs with lucide CheckIcon/ XIcon (strokeWidth 2.5) inside a fixed size-4 flex box — text elements never carried the right size/vertical alignment, vectors do. Test pins updated (lucide-check/lucide-x classes). - All user-typed INPUT text now matches markdown output: lh-prose class replaces the earlier font-prose (family-only) band-aid on the composer, question-dock text/thinking/Other fields, home topic input, model search box, and answered-card 'your thinking'/free-text records. lh-prose sets family+size (16.5px) so placeholders inherit correctly. --- components/answered-card.tsx | 16 ++++++++-------- components/composer.tsx | 2 +- components/home.tsx | 2 +- components/model-picker.tsx | 2 +- components/question-dock.tsx | 6 +++--- tests/render-cards.test.tsx | 5 +++-- 6 files changed, 17 insertions(+), 16 deletions(-) diff --git a/components/answered-card.tsx b/components/answered-card.tsx index bf859d7..eb6d836 100644 --- a/components/answered-card.tsx +++ b/components/answered-card.tsx @@ -1,5 +1,6 @@ "use client"; +import { CheckIcon, XIcon } from "lucide-react"; import { cn } from "@/lib/utils"; import { MessageResponse } from "@/components/ai-elements/message"; import type { QuestionAnswerData } from "@/src/core"; @@ -58,20 +59,19 @@ export function AnsweredCard({ answer }: { answer: QuestionAnswerData }) { )} > {isQuiz && ( + // SVG icons, not glyphs — exactly one text-size box (size-4), + // vertically centered in the flex row (owner). - {sel && key && "✓"} - {sel && !key && "✗"} - {!sel && key && "✓"} + {key && } + {sel && !key && } )} @@ -94,7 +94,7 @@ export function AnsweredCard({ answer }: { answer: QuestionAnswerData }) { )} - {answer.text &&
“{answer.text}”
} + {answer.text &&
“{answer.text}”
} {answer.dontKnow && isQuiz &&
Answered “I don't know”.
} {answer.note && ( @@ -102,7 +102,7 @@ export function AnsweredCard({ answer }: { answer: QuestionAnswerData }) { Your thinking - {answer.note} + {answer.note} )} diff --git a/components/composer.tsx b/components/composer.tsx index d940e0f..f2e7420 100644 --- a/components/composer.tsx +++ b/components/composer.tsx @@ -59,7 +59,7 @@ export function Composer({ placeholder="Ask, answer, or steer the lesson…" autoFocus={autoFocus} rows={1} - className="field-sizing-content font-prose max-h-48 min-h-10 flex-1 resize-none bg-transparent px-2.5 py-2 text-sm outline-none placeholder:text-muted-foreground" + className="field-sizing-content lh-prose max-h-48 min-h-10 flex-1 resize-none bg-transparent px-2.5 py-2 outline-none placeholder:text-muted-foreground" /> {verdict && !busy ? ( // The plan verdict (docs/probe-teach-split.md §4): accept diff --git a/components/home.tsx b/components/home.tsx index 24ba138..a5d1846 100644 --- a/components/home.tsx +++ b/components/home.tsx @@ -82,7 +82,7 @@ export function Home() { placeholder="What do you want to learn?" autoFocus rows={1} - className="field-sizing-content max-h-48 min-h-10 flex-1 resize-none bg-transparent px-2.5 py-2 text-sm outline-none placeholder:text-muted-foreground" + className="field-sizing-content lh-prose max-h-48 min-h-10 flex-1 resize-none bg-transparent px-2.5 py-2 outline-none placeholder:text-muted-foreground" />