fc95f56fc8
The previous attempt only made Renderer.render share GuiGraphics.pose() with DrawContext when guiGraphics was non-null. But every sub-panel call (drawSearchBar, drawToasts, ModuleListPanel, SettingsPanel, CategoryBar, ProfileWidget, SettingsPopup, KeybindOverlay, ScaleSwitchOverlay) used Renderer.renderConsumer, which falls back to Renderer.render(null, ...) when currentCanvas == null — that's exactly the Screen.render path. With guiGraphics == null the DrawContext still got a private new PoseStack(), so any element rendered through DrawContext was identity-posed while the search background drawn via guiGraphics.pose() rode along with pushPose + scale(0.98+0.02*eased), and the two drifted apart. Wrap the entire PanelClickGui body inside Renderer.render( guiGraphics, ...). That sets currentCanvas to a DrawContext whose PoseStack is GuiGraphics.pose(), so every nested renderConsumer short-circuits into the same DrawContext and shares the same matrix. Search icon, placeholder, query text and the blinking cursor now sit on the same scaled pose as the search background. Toasts get the fix for free. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>