Integrate PR #556 (brand-refreshed onboarding) on top of main#560
Open
Kosinkadink wants to merge 25 commits into
Open
Integrate PR #556 (brand-refreshed onboarding) on top of main#560Kosinkadink wants to merge 25 commits into
Kosinkadink wants to merge 25 commits into
Conversation
- Add BrandTakeoverLayout, ChoiceCard, WhyTryCloudModal, and ComfyCLogo - Ship PP Formula ExtraBold, beam lighting art, and why-cloud hero SVG - Refactor FirstUseTakeover.vue, expand main.css, and update en/zh copy
SVG icon components for the branded progress modal header.
- Add --brand-surface-* and --accent-primary; refresh global primary buttons - Centralize .brand-hero / .brand-title / .brand-lead for reused chrome - Wire ChoiceCard and BrandTakeoverLayout to the tokenized surfaces
Drop duplicated pick hero styles in favor of global .brand-* primitives from main.css so configure/install flows stay visually aligned.
Add install.* configure/help-improve copy plus common continue/learnMore labels in English and Chinese.
Redesign NewInstallModal and ProgressModal around BrandTakeoverLayout; show wordmark/glyph progress chrome when appropriate. PanelApp passes brand-chrome / hide-back-to-dashboard when chaining first-use into install.
Add TermsModal for in-app privacy policy and refresh first-use consent layout and copy. Move checkbox chrome to main.css as .brand-checkbox and reuse it from NewInstallModal; extend BrandTakeoverLayout for the flow.
- BrandTakeoverLayout: optional vignette, viewport-fixed beams aligned with centered wordmark, neutral-800 inner frame - FirstUseTakeover: enable vignette on pick; use primary + consent CTA sizing - ChoiceCard: drop redundant glow layers (beam carries the spotlight) - main.css: brand-checkbox hover border state
Add .brand-select / .brand-tag-recommended for the configure surface, soften .brand-title opacity, and ease primary hover transitions.
Shorter migrate/start-fresh labels, name-install step strings, and nameInstallHint for the first-use chain.
Use --takeover-fs-body for description text so it steps down from the label.
…lName }) Restyle the brand-mode configure step with horizontal variant rows (icons + check), invisible native select under .brand-select triggers, and optional initialName pre-seed for the first-use chain.
Replace migrate/start-fresh ChoiceCards with stacked lb-cards; add
nameInstall step before chain-local; forward instName to PanelApp and
into NewInstallModal.open({ initialName }).
Mirror firstUse consent/terms keys and local-branch/name-install copy in Chinese alongside the English additions.
Nudge checkbox top margin and size hints with takeover body type.
Paint ComfyWordmark in #F0FF41 and align consent chrome with isolated stacking context.
Trap initial focus on the dismiss control and return focus to the opening element on teardown.
Match terms-modal focus trap/restore, lighten panel shadow treatment, and refine benefit/secondary action styling.
Move beams inside the inner frame, use anchor() / position-anchor so spotlight tracks the consent wordmark and cloud ChoiceCard; expose anchor names from FirstUseTakeover and tune z stacking for the logo row.
Remove the blurred circular mask behind the progress glyph/wordmark and set anchor-name on the wordmark so TakeoverLayout beams can track the same target as first-use flows.
- Add --titlebar-bg and use it for the title-bar surface - Restyle the center identity pill with ComfyCLogo, brand-surface fill, and yellow outline; reserve trailing slot for future picker - Hide waffle, downloads tray, and feedback for the whole first-use takeover (consent + post-consent), not only consent-lockdown - Update TitleBarApp tests for the new gating
- ModalDialog: migrate flow uses brand shell and snapshot summary rows (counts only); drop user-facing device picker surface - useMigrateAction: findBestVariant in-process; pass target without variant card confirmation - main.css: frosted modal overlay, neutral-800 dialog surface, modal-box--brand tokens, list item contrast - PanelApp: minor branch formatting
Amp-Thread-ID: https://ampcode.com/threads/T-019e2dc2-a8d8-764d-9829-387407279877 Co-authored-by: Amp <amp@ampcode.com>
This was referenced May 16, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Strategy: merge
origin/maininto the PR branch in one shot — this kept the conflict surface to two files only (TitleBarApp.vue,PanelApp.vue) and let the reconciliation be done once on top of the new composable layout, instead of replaying the same drift across each of #556's 23 commits.Reconciled files
src/renderer/src/comfyTitleBar/TitleBarApp.vueuseTitleBarHoverGate,useTitleBarMenus,useTitleBarIdentity,useTitleBarTooltip,useUpdatePills).ComfyCLogoleading slot, fixed-width center pill (360px),--brand-surface-bgbackground,--comfy-yellowoutline, three-slot layout (leading / center / trailing).var(--surface)tovar(--titlebar-bg)so the new dark titlebar token applies.isFirstUseTakeovercomputed touseTitleBarIdentityto drive this;isConsentLockdownis preserved for the existingis-consent-lockdownheader class.src/renderer/src/panel/PanelApp.vueusePanelOverlays,useFirstUseChain,useChooserHandoff,useDeepLinkRouter,useAppUpdatePrompts,useSendFeedback) and thetry / finallybootstrap guard.pendingFirstUseInstName: Ref<string | null>touseFirstUseChain's API and exposed aconsumePendingFirstUseInstName()reader on its hooks.usePanelOverlays.openFlowTakeoverdrains the ref when it opens the new-install Tier 3 takeover and forwards it asinitialNametonewInstallRef.open({ initialName }).handleFirstUseChainLocal(payload?: { instName?: string })to accept and stash the takeover'schain-localpayload.:brand-chrome="chainingFirstUseToNewInstall"to the Tier 3 ProgressModal so the chained install's progress overlay opts into the brand wrapper.:hide-back-to-dashboard="chainingFirstUseToNewInstall"on<NewInstallModal>(already there post-feat(host): seamless in-place window-mode transitions + foundational cleanup #551) doubles as the brand-chrome gate inside NewInstallModal (seeuseBrandConfigin that file).Verification
pnpm run typecheck✅pnpm run lint✅pnpm run build✅pnpm run test✅ (937/937)pnpm exec playwright test --project=lifecycle✅ (9/9)pnpm exec playwright test --project=windows✅ (43/43)Caveats / open questions
These are flagged for review but considered acceptable for landing per #556's authorial intent — please confirm:
BrandTakeoverLayouthard-codesdata-theme="dark", so light-mode users get a forced theme flip across the takeover. PR feat: redesign onboarding flow, install/progress screens, and shared design tokens #556 commits indicate this is intentional ("light-mode brand parity is deferred").backdrop-filter: bluron--brand-surface-blur. Performance check on Linux Chromium under X11 / Wayland would be useful — historically backdrop-filter regresses there.BrandTakeoverLayoutusesposition-anchor/anchor()for the SVG plum beams, which requires Chromium ≥125 / Electron ≥28. Worth verifying the bundled Electron version and adding a@supportsfallback if not.useMigrateActionsilent variant pick. The Migrate-to-Standalone confirm modal no longer shows the device/variant card grid — it auto-picks the recommended variant. Confirm the modal's summary clearly tells the user which variant was picked. There is no "Show advanced" expansion to override; this would need a follow-up if requested.pendingFirstUseInstNameon back-out. On Skip Onboarding mid-chain the ref is cleared bycompleteFirstUseAndDismiss. Worth a manual smoke of: takeover → name step → back arrow → re-enter Local fork → verify the new run starts blank rather than carrying the previous name. TheconsumePendingFirstUseInstName()hook design clears on read, so the secondopenFlowTakeoverfor new-install will start fromnulleven without an explicit Skip — but this depends on FirstUseTakeover not auto-re-emitting the same payload after a back-out.Auxiliary follow-ups (NOT in this PR)
The following surfaces visually drift away from the new brand language once #556 lands. Per #556's "Not in scope / follow-ups" section they're explicitly deferred. Tracking here so they don't get lost; suggested order is consistency-with-NewInstallModal first, then unified Settings, then Tier 2 progress overlays, then the chooser refresh as its own design pass:
.modal-box--brand:views/TrackModal.vue,views/LoadSnapshotModal.vue,views/QuickInstallModal.vue— same Tier 3 install-flow class as NewInstallModal.views/SettingsModal.vue+views/DetailModal.vue— Tier 1 unified settings; the frosted-overlay update onModalDialogis already affecting the backdrop, but the box itself needs.modal-box--brand.components/RestoreModal.vue,components/SnapshotInspector.vue,components/SnapshotTab.vue,views/AppUpdateAction.vue— transient overlays; opt them in so they don't read as "old UI" on top of the brand chrome.views/ChooserView.vue,views/chooser/ChooserInstallTile.vue,views/chooser/chooser-tiles.css).References: PR #556, PR #551 (
7dfd109).