feat(FN-3027): add AgentLogViewer, NewAgentDialog improvements, and AgentDe

This merge adds research settings to the settings modal and dashboard (FN-2839, FN-3029), implements a dashboard font scale setting with persistence and documentation (FN-3027), refactors AgentDetailView with a new AgentLogViewer CSS module (FN-2839), and improves NewAgentDialog with custom model dr

Fusion-Task-Id: FN-3027
This commit is contained in:
Fusion
2026-04-30 19:42:05 -07:00
committed by gsxdsm
parent 097b4a7a47
commit 892f6bde68
19 changed files with 502 additions and 75 deletions

View File

@@ -42,6 +42,26 @@
visibility: hidden;
}
/* Always-mounted invisible input. Focused inside the FAB click gesture
to claim the iOS soft keyboard before the real composer input renders.
Must be focusable (no `display: none`, no `visibility: hidden`) and big
enough that iOS treats focus as a real intent — so we tuck it offscreen
instead of hiding it. `font-size: 16px` defeats the iOS focus-zoom. */
.quick-chat-stealth-input {
position: fixed;
bottom: 0;
left: 0;
width: 1px;
height: 1px;
padding: 0;
margin: 0;
border: 0;
opacity: 0;
pointer-events: none;
font-size: 16px;
z-index: -1;
}
/* Position set via inline style from useDraggable */
.quick-chat-panel {
--quick-chat-min-width: 280px;
@@ -210,6 +230,13 @@
text-overflow: ellipsis;
}
/* Icon-only fallback when the model name is too long for the header. */
.quick-chat-model-tag--icon {
max-width: none;
padding: var(--space-xs);
justify-content: center;
}
.quick-chat-panel-header-actions {
--quick-chat-header-control-size: calc(var(--space-lg) + var(--space-sm) + var(--space-xs));
@@ -610,13 +637,19 @@
/* === Quick Chat Mobile (FN: full-screen) =================================== */
@media (max-width: 768px) {
.quick-chat-panel {
/* Full-screen sheet that ignores drag position on mobile. The inline
style from useDraggable supplies left/top, but our overrides win via
!important so the user sees a proper modal-style sheet. */
/* Full-screen sheet that ignores drag position on mobile. The
JSX-level style only emits right/bottom on desktop now, but we
still pin every edge with !important here so any stray inline
value (or a future regression) cannot pull the panel off-screen.
`top: 0` is intentional — when the iOS keyboard opens we just
shrink height (via --vv-height), the panel does not translate
so the header stays in place. */
position: fixed !important;
inset: 0 !important;
left: 0 !important;
right: 0 !important;
top: 0 !important;
bottom: 0 !important;
width: 100vw !important;
height: 100vh !important;
height: 100dvh !important;