Skip to content

UI redesign mockups + Studio no-provider banner#103

Open
KerroKapple wants to merge 25 commits into
mainfrom
feat/ui-mockup-png-alignment
Open

UI redesign mockups + Studio no-provider banner#103
KerroKapple wants to merge 25 commits into
mainfrom
feat/ui-mockup-png-alignment

Conversation

@KerroKapple
Copy link
Copy Markdown
Owner

Summary

This branch bundles two related UI tracks since they diverged from main:

  • HTML/Web-Components mockups (docs/superpowers/specs/2026-05-13-ui-redesign/mockups/): the full 12-screen Amber Noir redesign migrated to vanilla ink-* web components, fake-thumb placeholders, app-simulation navigation, and (new this session) an episode view switcher in the chrome so Canvas/Storyboard/Script/Generation/Queue are reachable in-app instead of dead-ending.
  • Flutter: Studio no-provider banner (new this session): StudioProviderBanner shows above Recent Projects when no provider API key is configured (apiKeyUnlockedProvider == false) and not dismissed this session — a soft nudge replacing the demoted Lock gate. Action opens Settings; dismiss hides for the session. Self-contained (no Material ancestor needed), localized (en+zh), a11y live-region.

The branch also merges the latest origin/main (PR #101, Amber Noir Flutter shell).

Test plan

  • flutter analyze — no issues
  • flutter test — 489 passed / 35 skipped (full suite, green at every checkpoint + pre-push hook)
  • New tests: studio_provider_banner_test.dart (2) + 4 studio_home_test.dart cases (banner shown when unconfigured, action→Settings, hidden when configured, dismiss hides)
  • Mockup view-switcher verified via headless Chrome (active highlight correct on all 5 episode screens, no chrome overflow at 1440px)
  • Reviewer: confirm the bundled mockup track is in-scope for this PR (it predates this session)

🤖 Generated with Claude Code

kerro and others added 25 commits May 23, 2026 11:06
Audit results + 10-task plan to patch 12 mockups in
docs/superpowers/specs/2026-05-13-ui-redesign/mockups/ against IF.zip
reference PNGs. Headless Chrome screenshots as verification.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add .fake-thumb base + 8 named variants (night/dock/watch/character/fog/
dawn/ember/prop) so 02/05/07/08 mockups can stop using empty radial
gradients. Each variant stays inside the Amber Noir token palette and
adds noise + vignette overlays to look like a backed-off film still
without needing image assets.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Studio Home project cards now use the 8 fake-thumb variants from
_shared.css. Removes the local per-card gradient overrides + dead
::after star-dot block.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The 12 index tiles were img src="file:///D:/Docs/IMG/IF/*.png" — broken
on any non-author machine. Replace each with an <iframe> pointing at
the corresponding mockup HTML (same relative path as the tile's link
href, so zero new hardcoding). CSS variable --s drives a uniform
transform: scale so iframes shrink to thumb size while preserving the
1536×1024 viewport the mockups are designed for. pointer-events: none
lets clicks pass through to the parent <a>.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Vanilla custom elements, light DOM (children stay styled by _shared.css):
  ink-page       — .page wrapper
  ink-chrome     — top bar (logo + breadcrumb + slotted actions + kbd + avatar + window-ctrl)
  ink-win-ctrl   — — / ▢ / ✕ macOS-ish controls
  ink-btn        — variant="cta|ghost|danger|…", optional icon attr
  ink-chip       — variant="on|success|warning|danger|info"
  ink-tag        — variant="accent|warn|danger|ok"
  ink-mock-nav   — bottom 12-page nav, auto-derives active from filename

No build step. No framework. Single 142-line file. Drives the upcoming
mockup refactor — each page becomes ~50 lines of component composition
instead of 200+ lines of duplicated chrome / sidebar / button markup.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace inline window controls + 15-line mock-nav block + raw .btn.cta
markup with <ink-win-ctrl> / <ink-btn variant="cta"> / <ink-mock-nav>.

Also rename the local .tag rule to .subtitle to escape the global
_shared.css .tag pill (border+radius) that was wrongly wrapping the
"A DESK FOR STORYBOARDERS" tagline — matches PNG reference now.

Visually identical to previous render; 165 → 127 lines.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ating menu items

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… tab

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…n + flex stack layout

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Without explicit width/height the SVG element renders at the default
300×150 box even when positioned absolute inset:0 — paths drawn at
M 220,170 sit outside the rendered viewport and don't paint. Add
width:100%; height:100%; overflow:visible.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ebug strip

Restructure the mockup set so opening index.html behaves like launching
the actual app rather than landing on a developer gallery.

Routing:
- index.html now redirects to 01-lock.html (the app entry).
- The previous 12-tile gallery is preserved as _gallery.html for review.
- ink-mock-nav (the bottom debug strip) is hidden by default; append
  ?dev=1 to any URL to bring it back for navigation testing.

In-app navigation wired:
- ink-chrome logo  → 02-studio-home.html (any page → home).
- ink-chrome avatar → 10-account.html (any page → account view).
- ink-btn supports href="…": Lock's Unlock button now navigates to
  Studio Home; Studio's "+ New Project" FAB position fixed (the user-
  provided "fab" class was being clobbered by the component re-render).
- Studio project cards: <div class="proj"> → <a class="proj" href="03-canvas.html">
  with display:block + color:inherit so the anchor lays out identically.
- Studio sidebar footer: ⚙ → Settings, 🏷 → Asset Library (icons that
  have a sibling screen become anchors).

Component class-merge bug fix: ink-btn / ink-chip / ink-tag now
preserve user-provided classes on the host element (e.g. .fab) instead
of overwriting them on each render.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
App entry no longer gates on a single provider key. The Lock screen is
out of the main flow but kept as a screen mockup (still reachable via
?dev=1 nav strip) — it can be repurposed later as a workspace-level
encryption lock if desired.

Changes:
- index.html redirects to 02-studio-home.html instead of 01-lock.html.
- 02 Studio Home gets a "No provider configured" banner above the
  project grid: amber warning left border + pulse dot + message +
  link to 09 Settings 服务商 + dismiss.

Rationale: provider keys are already managed in 09 Settings (multi-
provider, statuses, primary/backup). Forcing a single key on every
launch was redundant and friction. Pro desktop apps (Final Cut,
DaVinci, Procreate) don't gate launch on credentials. Lazy / deeplink
model is friendlier.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Wire an `views` attribute on ink-chrome that renders a cross-view
switcher (Canvas/Storyboard/Script/Generation/Queue) with filename-based
active highlight. Previously these episode-level screens were dead-ends
in app-simulation mode, reachable only via the ?dev=1 strip.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Show StudioProviderBanner above Recent Projects when no provider API key
is configured (apiKeyUnlockedProvider == false) and not dismissed this
session. Action opens Settings; dismiss hides it for the session. This
replaces the demoted Lock gate with a soft nudge. Adds l10n keys
(studioNoProviderMessage/Action) and widget + integration tests.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.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.

1 participant