/* ===== Model Onboarding Modal ===== */ .model-onboarding-modal { /* FNXC:Onboarding 2026-06-22-04:16: First-time provider/GitHub onboarding should visually match new-project onboarding, including spacing, button treatment, contrast, and persistent Discord help access. */ /* Resizable via the native CSS grip. The user's chosen size is persisted by useModalResizePersist. Min/max keep the dimensions sane so a value saved on a 4K display still renders on a laptop. */ min-width: 640px; min-height: 480px; max-width: calc(100vw - 40px); max-height: calc(100dvh - 40px); display: flex; flex-direction: column; overflow: hidden; resize: both; } .model-onboarding-modal:not([style*="width"]) { width: min(960px, calc(100vw - 40px)); } .model-onboarding-modal:not([style*="height"]) { height: min(85vh, calc(100dvh - 40px)); } /* FNXC:Onboarding 2026-08-17-23:47: Hosted in FloatingWindow, this modal MUST fill its host exactly — the window paints its own bordered surface, so any part the child does not cover shows through as unexplained blank space around the content. FloatingWindow.css already sets `width/height: 100%` for this caller, but the two standalone sizing rules above carry equal specificity (0,2,0 — the `:not([style*=…])` attribute test counts) and won last on source order, so the panel rendered at 85vh inside a taller window and left ~60px of dead surface under the footer, plus the matching right-edge strip the operator reported. Re-assert the fill under the host class with the same `:not()` guards, so a user-resized window still wins via its inline style. `resize`/`min-*` are the standalone dialog's affordances; inside the window the FRAME resizes, and a 640px floor would push content under the east edge in a narrow window. */ .floating-window--model-onboarding .model-onboarding-modal:not([style*="width"]), .floating-window--model-onboarding .model-onboarding-modal:not([style*="height"]) { width: 100%; height: 100%; min-width: 0; min-height: 0; max-width: none; max-height: none; resize: none; } .model-onboarding-header { display: flex; align-items: center; justify-content: space-between; padding: var(--space-xl) var(--space-xl) 0; gap: var(--space-md); } .model-onboarding-header .modal-close { background: none; border: none; font-size: 20px; color: var(--text-muted); cursor: pointer; padding: 4px 8px; border-radius: 4px; line-height: 1; } .model-onboarding-header .modal-close:hover { color: var(--text); background: var(--surface-hover); } .model-onboarding-title { font-size: 24px; font-weight: 800; margin: 0; display: flex; align-items: center; gap: 8px; color: var(--text); line-height: 1.1; } .model-onboarding-title svg { color: var(--accent); } .onboarding-optional-badge { font-size: 11px; font-weight: 500; color: var(--text-muted); background: var(--surface-hover); padding: 2px 8px; border-radius: 10px; margin-left: 8px; vertical-align: middle; text-transform: uppercase; letter-spacing: 0.5px; } /* Step indicator */ .model-onboarding-steps { display: flex; align-items: center; justify-content: center; gap: 0; padding: var(--space-md) var(--space-xl); border-bottom: 1px solid var(--border); } .onboarding-step-wrapper { display: flex; align-items: center; } .model-onboarding-step-indicator { display: flex; align-items: center; gap: 8px; color: var(--text-muted); font-size: 13px; /* Reset browser