Most AI answer crawlers do not run JavaScript. GPTBot, ClaudeBot, PerplexityBot and Common Crawl fetch the raw HTML your server sends and read that. If your content is injected by JavaScript after the page loads, into tabs, accordions, lazy sections or a client rendered app, those crawlers get an empty shell.
A browser hides this from you because it runs the JavaScript and fills the page in. So the page looks complete to you and to Googlebot, which does render, while an AI bot sees almost nothing.
Check it with See as bot in Topkay. It fetches the page as a non rendering AI crawler and as a browser, and shows the two side by side with the missing lines marked.
The fix is to server render the content that matters, or to include it in the initial HTML. Tabs and accordions are fine as long as the text is present in the markup and only hidden with CSS, not loaded on click. If an engine cannot read a passage in the raw HTML, it cannot cite it.