diff --git a/server/public/connect.html b/server/public/connect.html index fd75491..9e7612d 100644 --- a/server/public/connect.html +++ b/server/public/connect.html @@ -76,7 +76,7 @@ Home
-
Biz Connect
+
Biz Connect
diff --git a/server/public/dashboard.html b/server/public/dashboard.html index 48b6950..e5f8e67 100644 --- a/server/public/dashboard.html +++ b/server/public/dashboard.html @@ -92,7 +92,7 @@
-
Biz Connect · Dashboard
+
Biz Connect · Dashboard
diff --git a/server/public/home.html b/server/public/home.html index 23e60f2..5cece71 100644 --- a/server/public/home.html +++ b/server/public/home.html @@ -301,8 +301,9 @@ .sys-msg{align-self:center;font-size:.76rem;color:var(--muted);background:rgba(0,0,0,.04);padding:.25rem .7rem;border-radius:99px;margin:.2rem 0;max-width:90%;text-align:center;} .bubble .t{display:flex;align-items:center;justify-content:flex-end;gap:.25rem;font-size:.64rem;opacity:.65;margin-top:.15rem;} .bubble .rcpt{display:inline-flex;} - .bubble.mine .rcpt{opacity:.8;} - .bubble.mine .rcpt.seen{color:#8fd3ff;opacity:1;} + .bubble.mine .rcpt{opacity:.85;} + /* Read receipt on my own (blue) bubble: brand yellow so the double tick actually stands out. */ + .bubble.mine .rcpt.seen{color:var(--brand);opacity:1;} .att-img{cursor:zoom-in;} .fmt-bar{display:flex;align-items:center;gap:.05rem;padding:.3rem .4rem .1rem;flex-wrap:wrap;border-bottom:1px dashed var(--line);} .fmt-bar button{border:none;background:transparent;color:var(--muted);cursor:pointer;width:30px;height:30px;border-radius:7px;display:grid;place-items:center;} @@ -662,6 +663,9 @@ .authcard .sub{color:var(--muted);font-size:.9rem;text-align:center;margin-bottom:1.2rem;} /* Blue card + gold CTA so the sign-in screen carries BOTH brand colours (never mono-blue). */ .authcard .gobtn{background:var(--brand);color:var(--blue-d);} + .gobtn:disabled{opacity:.9;cursor:default;} + .btn-spin{display:inline-block;width:15px;height:15px;border:2px solid rgba(22,41,79,.3);border-top-color:var(--blue-d);border-radius:50%;animation:btnspin .6s linear infinite;vertical-align:-3px;margin-right:7px;} + @keyframes btnspin{to{transform:rotate(360deg);}} .authcard .gobtn:hover{filter:brightness(.95);} .authtabs{display:flex;gap:.5rem;margin-bottom:1.1rem;} .authtabs button{flex:1;background:#eef1f6;color:var(--muted);font-weight:600;border:none;border-radius:9px;padding:.5rem;cursor:pointer;font-size:.9rem;} @@ -760,7 +764,7 @@ - @@ -769,7 +773,7 @@ function twemojify(el){ try{ if(el && window.twemoji) window.twemoji.parse(el, {
- +
Biz Connect
@@ -2015,16 +2019,14 @@ function notify(title, body, kind, id){ }).catch(()=>{}); return; } - // Web / PWA: standard Notification. Icon = the sender's/group's DP (falling back to their - // initials, then the brand app icon) — never the old wordmark. badge = brand mark. + // Web / PWA: standard Notification. Use the sender's/group's DP URL DIRECTLY as the icon — + // the browser fetches notification icons cross-origin fine, whereas drawing an external DP to a + // canvas taints it and silently fell back to initials (the bug). Brand icon only if no DP. if(!('Notification' in window) || Notification.permission!=='granted') return; - notifAvatarDataUrl(kind, id, String(title||'').replace(/^[^\p{L}\p{N}]+/u,'')).then(avatar=>{ - const n=new Notification(title, { body, icon: avatar || '/icon-192.png', badge:'/icon-192.png' }); - n.onclick=()=>{ n.close(); openFromNotif(kind, id); }; - setTimeout(()=>{ try{ n.close(); }catch(_){} }, 8000); - }).catch(()=>{ - try{ const n=new Notification(title, { body, icon:'/icon-192.png' }); n.onclick=()=>{ n.close(); openFromNotif(kind, id); }; }catch(_){} - }); + const _row=rowFor(kind,id)||{}; + const n=new Notification(title, { body, icon: _row.avatar || '/icon-192.png', badge:'/icon-192.png' }); + n.onclick=()=>{ n.close(); openFromNotif(kind, id); }; + setTimeout(()=>{ try{ n.close(); }catch(_){} }, 8000); }catch(_){} } let _audioCtx=null; @@ -2845,7 +2847,7 @@ async function renderLogin(){ const aw=document.getElementById('authwrap'); aw.style.display='flex'; let regOpen=false; try{ regOpen=(await (await fetch('/api/setup-state')).json()).registrationOpen; }catch(_){} aw.innerHTML=`
-
Biz Connect
Biz Connect
+
Biz Connect
Biz Connect

Welcome back

Sign in to access chats, screen share and connect.
${regOpen?`
@@ -2880,10 +2882,12 @@ async function renderLogin(){ } async function doLogin(){ clearErr('li_err'); + const btn=document.getElementById('li_btn'); const orig=btn?btn.innerHTML:''; + if(btn){ btn.disabled=true; btn.innerHTML='Signing in…'; } // show progress on Enter/click try{ await postJSON('/api/login',{email:document.getElementById('li_email').value,password:document.getElementById('li_pw').value,remember:document.getElementById('li_remember').checked}); - location.reload(); - }catch(e){ showErr('li_err', /invalid credentials/i.test(e.message)?'Incorrect email or password. Please try again.':e.message); } + location.reload(); // the branded splash takes over from here + }catch(e){ if(btn){ btn.disabled=false; btn.innerHTML=orig; } showErr('li_err', /invalid credentials/i.test(e.message)?'Incorrect email or password. Please try again.':e.message); } } async function doRegister(){ clearErr('rg_err'); diff --git a/server/public/index.html b/server/public/index.html index 6acc252..d2fecaf 100644 --- a/server/public/index.html +++ b/server/public/index.html @@ -55,7 +55,7 @@
- +
Biz Connect
diff --git a/server/public/mark-light.png b/server/public/mark-light.png new file mode 100644 index 0000000..ae0bb46 Binary files /dev/null and b/server/public/mark-light.png differ diff --git a/server/public/mark-light.svg b/server/public/mark-light.svg deleted file mode 100644 index b92f4d7..0000000 --- a/server/public/mark-light.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - -