fix(frontend): Sticky header + environment ribbon overlap and text bleed on desktop Chrome #482
Labels
No labels
agent:fix_bugfix
agent:fix_conflicts
agent:fix_security
agent:gap_analysis
agent:implement
agent:implement
agent:implement
agent:open_issues
agent:ready
agent:research
agent:security_audit
agent:verify
architecture
backend
blocker:hybrid
blocker:launch
blocker:limit-orders
blocker:v2
block:log_only
block:security
bug
ci
contracts
correctness
deploy
dev
devops
docs
documentation
duplicate
e2e
enhancement
epic
feature
frontend
functional-completion
gas
good first issue
governance
help wanted
high-risk
hooks
hybrid
indexer
infra
infrastructure
integrators
invalid
launch-blocker
limit-orders
localnet
localterra
low priority
missing-implementation
needs-design
ops
performance
priority
high
priority
medium
product
qa
QA
question
ready
ready
research
scripts
security
security-hardening
smartcontracts
tech-debt
testing
ux
UX
v2
verification
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
code/cl8y-dex-terraclassic#482
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
MacBook Chrome report: the sticky environment ribbon (second bar) visually overlaps the primary header card, and page copy (especially Trade’s subtitle) collides with or bleeds through the ribbon so network status text becomes unreadable.
Reporter screenshots (mainnet build):
/trade, longer page subtitle (Order book, chart, tape…) appears mashed into the same horizontal band asMAINNET+Terra Classic · columbus-5 · real assets.Current codebase
App chrome is a two-tier sticky stack in one wrapper (not fixed positioning):
frontend-dapp/src/components/common/Layout.tsx—.app-top-stickywrapsheader.app-header-shell+<EnvironmentRibbon />.frontend-dapp/src/components/legal/EnvironmentRibbon.tsx— static build-time network strip (MAINNET/TESTNET/LOCAL+ detail). No page-specific content is injected into the ribbon.frontend-dapp/src/index.css:.app-top-sticky—position: sticky; top: 0; z-index: 40.app-header— heavy downwardbox-shadow,backdrop-filter, ~margin: 12px auto 0.app-env-ribbon—margin: 6px auto 0,padding: 8px 14px, semi-transparent mainnet/testnet/local backgrounds (rgba(…, 0.08–0.1)).app-main-shell— fixedpadding-top(~44–54px), not derived from measured sticky heightfrontend-dapp/src/pages/TradePage.tsx(H1 + longtext-smline with--ink-dim), i.e. main content that scrolls under the sticky stack (z-index: 1vs sticky40).Prior related work (closed): #136 (header density / fold), #138 (environment strip), #170 (theme in sticky header). Existing E2E in
frontend-dapp/e2e/navigation.spec.tscovers nav-item overlap and sticky presence, but not header↔ribbon seam gap, ribbon opacity under scroll, or mainnet ribbon copy length (playwright.config.tsdefaults toVITE_NETWORK=local).Likely causes (ranked):
6pxribbonmargin-topvs large header shadow → seam looks overlapped.-webkit-font-smoothing,backdrop-filter,scrollbar-gutter: stable, subpixel rounding (worsen 1–3; not a separate root cause).Why a new implementation is needed
Production mainnet builds show a longer ribbon detail string and reddish translucent panel. The current spacing and opacity make the shell look broken on real MacBook Chrome viewports (~1280–1440, 100–110% zoom), undermine the #138 goal (clear network risk context), and can make users misread Trade chrome as part of the legal/environment strip. Local-only E2E did not catch this.
Constraints / guardrails
DEFAULT_NETWORK/NETWORKS— no user-controlled HTML in the strip.index.css/ theme CSS) — no unrelated redesign.Relevant files
frontend-dapp/src/components/common/Layout.tsxfrontend-dapp/src/components/legal/EnvironmentRibbon.tsxfrontend-dapp/src/index.css.app-top-sticky,.app-header,.app-env-ribbon*,.app-main-shellfrontend-dapp/src/pages/TradePage.tsxfrontend-dapp/src/utils/networkDisplay.ts/constants.tsfrontend-dapp/e2e/navigation.spec.tsskills/AGENTS_FRONTEND_RISK_DISCLAIMERS.mddocs/frontend.md(responsive shell section)Recommended direction
margin-top/ header bottom margin) and/or reduce/clip header bottom shadow so cards do not visually eat each other.var(--panel-bg)+ tint) so scrolled page text cannot show through.--app-sticky-stack-height(orscroll-padding-top) so main content clearance tracks real sticky height; verify Trade H1 has clear separation atscrollY=0.Acceptance criteria
scrollY=0on/trade, ≥ ~16px visual separation between ribbon bottom and Trade H1; after small scroll, Trade subtitle is not legible through/over ribbon text.Mainnet+Terra Classic · columbus-5 · real assets) has no internal label/detail overlap at 1280px width.Test plan (all paths)
VITE_NETWORK=mainnetbuild; Mac or CI Chrome;/,/trade,/limitsfrontend-dapp/e2e/navigation.spec.ts+ new sticky-shell describeTest plan (attack / hack / abuse)
dangerouslySetInnerHTML; if copy ever becomes remote, sanitize/escape.VITE_*as supply-chain; CI should not render untrusted CSS from env intostyle=attributes.localStoragetampering (cl8y-dex-theme)data-theme; must not inject markup or break sticky opacity fix.Verification criteria
/tradeand a shorter page (e.g. Swap).marked as related to #136
marked as related to #138
marked as related to #170
marked as related to #483
mentioned in commit
b598fb59a8mentioned in merge request !1019
mentioned in commit
d62f7c78e9mentioned in issue #486
marked as related to #486
mentioned in merge request !1022
mentioned in issue #500
mentioned in issue #527