Skip to content

feat(install): brand chrome on Track / LoadSnapshot / QuickInstall wizards#564

Open
Kosinkadink wants to merge 26 commits into
feat/brand-redesignfrom
feat/brand-tier3-wizards
Open

feat(install): brand chrome on Track / LoadSnapshot / QuickInstall wizards#564
Kosinkadink wants to merge 26 commits into
feat/brand-redesignfrom
feat/brand-tier3-wizards

Conversation

@Kosinkadink
Copy link
Copy Markdown
Member

Wraps the three Tier 3 install-flow wizards in BrandTakeoverLayout and swaps their form chrome to the brand primitives so they line up with NewInstallModal's brand path.

What's in here

  • TrackModal, LoadSnapshotModal, QuickInstallModal now render inside BrandTakeoverLayout with the dark frame, plum beams, and ComfyC logo, instead of the legacy ModalShell + native form controls.
  • BrandTakeoverLayout gains a back slot (top-right, mirrors the logo at top-left) so each wizard can plant its own TakeoverBack button without wrapping every caller in a positioning div. NewInstallModal and FirstUseTakeover leave the slot empty.
  • Form fields swap to brand-input / brand-input.brand-select (with hidden <select> + painted brand-select__trigger) / brand-secondary. Read-only painted fields use the new brand-input--readonly modifier.
  • The shared .config-shell / .config-card / .config-card__body / .config-card__footer / .config-field / .config-label / .config-select / .config-path-row / .config-path-input / .config-continue layout primitives move from NewInstallModal's scoped styles into global main.css so all four wizards share one source of truth.

What stayed the same

  • All event handlers, telemetry calls (emitTelemetryAction), validation flows (trackGuardrailBlocked, checkNvidiaDriverOrWarn, checkDiskSpaceOrWarn, showPathIssueAlerts), and IPC calls are intact — this is a chrome swap, not a rewrite.
  • InstallNamePath.vue is untouched. QuickInstallModal inlines its own brand-styled name+path inputs because it's the only Tier 3 modal that needed them, and NewInstallModal keeps using InstallNamePath on its classic step-3 path.
  • The drag/drop affordance on LoadSnapshotModal lives on .config-card__body now, so the drop zone fills the brand card instead of the old .ls-drop-target wrapper.

Stack / merge order

Branched from integrate/pr-556 (PR #560) because the brand chrome only exists there until #560 lands. Targets feat/brand-redesign so the diff lands once #560 merges.

Verification

Pre-commit checks all pass before commit + push:

  • pnpm run typecheck (node + web + e2e + integration) ✓
  • pnpm run lint
  • pnpm run build ✓ (only the pre-existing envPaths.ts / install.ts dynamic-import warnings)
  • pnpm run test ✓ — 937 / 937

MaanilVerma and others added 26 commits May 14, 2026 19:34
- 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
…zards

Wraps the Tier 3 install-flow modals in BrandTakeoverLayout and swaps form chrome to brand-input / brand-select / brand-checkbox / brand-secondary primitives. The .config-shell / .config-card / .config-field layout that NewInstallModal already used moves to global main.css so all four wizards share one source of truth.

BrandTakeoverLayout gains a 'back' slot (top-right, mirrors the logo at top-left) so dashboard-launched wizards can surface a TakeoverBack button without adding a wrapper div in every caller.

Amp-Thread-ID: https://ampcode.com/threads/T-019e2e1a-aa80-75ad-99de-9e6957e60490
Co-authored-by: Amp <amp@ampcode.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants