From 90b03c16f9ff68bfcc9afab5313a732f6895bc25 Mon Sep 17 00:00:00 2001 From: martbost Date: Sat, 29 Aug 2026 05:42:58 -0500 Subject: [PATCH] Member pages: house heading treatment; clearer no-wallet message MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two things Marty raised. 1. Member pages did not look like the rest of the site. The byline is now the gold uppercase eyebrow used above every other h1, the heading is larger and tighter with the last beat in gold (house style is "Team Grants"), and the subhead steps up from 18px to a fluid 19-22px in a brighter colour. The headline is model-written so the gold split cannot be hand-picked — goldTail() takes the final two words, or one on a short line. Everything is escaped before the span is added; the only markup is ours. 2. The "no wallet found" error listed five wallet names and described a DApp tab without saying the thing that matters: you are in the wrong browser, and here is the address to type. It now says exactly that, names the page address, and warns that Trust on iPhone has no browser at all any more — previously those members were reading instructions they could not follow. Diagnosed from a real case (#34): the company dApp at thermcircle.com supports WalletConnect, so it connects from any browser; this site is injected-provider only, so it needs the wallet's own browser. That is the whole difference, and WalletConnect is the actual fix — this is the stopgap. Co-Authored-By: Claude Fable 5 --- public/my.js | 2 +- public/suite.js | 2 +- suite-pages.js | 30 +++++++++++++++++++++++++----- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/public/my.js b/public/my.js index e5e7eee..31a5610 100644 --- a/public/my.js +++ b/public/my.js @@ -325,7 +325,7 @@ const err=document.getElementById('msgAuthErr'); try{ const eth=await window.RMCWallet.pick(); - if(!eth){err.textContent='No wallet found in this browser. On a phone, open your wallet app (SafePal, Phantom, MetaMask, Trust, Coinbase…), go to its Browser or DApp tab, and type this page\'s address there — your wallet connects automatically.';return;} + if(!eth){err.textContent='This browser has no wallet in it. Open this page INSIDE your wallet app instead: open Trust, MetaMask, SafePal or Coinbase, find its Browser (or DApps) tab, and type rmcircle.team/my into that address bar. On iPhone, Trust no longer has a browser — use MetaMask or SafePal, or ask your sponsor to link you instead.';return;} const accs=await eth.request({method:'eth_requestAccounts'});const account=accs[0]; // Match the wallet's active chain to the SIWE message's Chain ID (137), // or the wallet rejects the signature ("chain ID does not match"). diff --git a/public/suite.js b/public/suite.js index 683c85a..ba49a32 100644 --- a/public/suite.js +++ b/public/suite.js @@ -104,7 +104,7 @@ btn.disabled = true; btn.textContent = 'Connecting…'; try { var eth = await window.RMCWallet.pick(); - if (!eth) { err.textContent = 'No wallet found in this browser. On a phone, open this page inside your wallet app’s browser (the DApps tab) — type rmcircle.team/suite there.'; err.style.display = 'block'; btn.disabled = false; btn.textContent = '🔑 Connect wallet — light up my tools'; return; } + if (!eth) { err.textContent = 'This browser has no wallet in it. Open this page INSIDE your wallet app instead: open Trust, MetaMask, SafePal or Coinbase, find its Browser (or DApps) tab, and type rmcircle.team/suite into that address bar. On iPhone, Trust no longer has a browser — use MetaMask or SafePal, or ask your sponsor to link you instead.'; err.style.display = 'block'; btn.disabled = false; btn.textContent = '🔑 Connect wallet — light up my tools'; return; } var accs = await eth.request({ method: 'eth_requestAccounts' }); var account = accs[0]; try { await window.RMCWallet.ensureChain(eth); } catch (ce) {} diff --git a/suite-pages.js b/suite-pages.js index 10b5de1..323ebeb 100644 --- a/suite-pages.js +++ b/suite-pages.js @@ -147,6 +147,21 @@ function esc(s) { }); } +// House style puts the last beat of a heading in gold ("Team Grants."). +// These headlines are written by the model, so we cannot hand-pick the split — +// take the final two words, or the last one when the line is short. Everything +// is escaped first; the only markup added is our own span. +function goldTail(text) { + const t = String(text || '').trim(); + if (!t) return ''; + const words = t.split(/\s+/); + if (words.length < 3) return esc(t); + const take = words.length >= 6 ? 2 : 1; + const head = words.slice(0, words.length - take).join(' '); + const tail = words.slice(words.length - take).join(' '); + return esc(head) + ' ' + esc(tail) + ''; +} + function render(rec) { const a = ANGLES[rec.angle] || ANGLES.overview; // The button and the QR go to DIFFERENT places on purpose. @@ -177,10 +192,15 @@ function render(rec) { '' + '