feat(brand): roll out master app icon, splash & branded loaders everywhere
From brand-assets/ masters (C + orbiting-dot on brand blue): - Regenerated PWA icons (192/512/maskable), apple-touch (180), favicons (32/16 + root favicon.ico) from the 1024 master; bumped manifest to v3. - Rebuilt desktop/build/icon.ico as a proper multi-size ICO (16..256, PNG-compressed) to fix the tiny/blurry taskbar icon. - Updated mobile masters (resources/icon.png 1024, splash.png/splash-dark.png 2732) for capacitor-assets to regenerate native icons/splash. - Wired the animated branded orbit loader into the app boot 'Loading…' screen; added favicon/theme-color links to index + home heads. - logo.png (horizontal wordmark) left untouched — masters have no wordmark. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Before Width: | Height: | Size: 264 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 157 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 211 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 211 KiB After Width: | Height: | Size: 102 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 650 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 25 KiB |
@@ -7,7 +7,9 @@
|
||||
<!-- PWA: installable on Android & iOS ("Add to Home Screen"); also enables iOS web push -->
|
||||
<link rel="manifest" href="/manifest.json">
|
||||
<meta name="theme-color" content="#1F3B73">
|
||||
<link rel="apple-touch-icon" href="/apple-touch-icon.png?v=2">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png?v=3">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16.png?v=3">
|
||||
<link rel="apple-touch-icon" href="/apple-touch-icon.png?v=3">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
||||
@@ -666,6 +668,8 @@
|
||||
|
||||
/* ---- Loading / toast ---- */
|
||||
.loading{position:fixed;inset:0;display:grid;place-items:center;background:var(--bg);z-index:9000;color:var(--muted);font-size:.9rem;}
|
||||
.loading .ld-inner{display:flex;flex-direction:column;align-items:center;gap:.9rem;}
|
||||
.loading .ld-inner img{width:64px;height:64px;}
|
||||
.toast{position:fixed;left:50%;bottom:1.6rem;transform:translateX(-50%) translateY(1rem);background:var(--blue);color:#fff;padding:.7rem 1.2rem;border-radius:10px;font-size:.88rem;box-shadow:0 10px 28px rgba(0,0,0,.22);opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;z-index:9500;}
|
||||
.toast.show{opacity:1;transform:translateX(-50%) translateY(0);}
|
||||
|
||||
@@ -740,7 +744,7 @@
|
||||
// Render modern (Twemoji) emojis in place of the OS's flat ones. No-op if the CDN didn't load
|
||||
// (emojis stay as plain Unicode). (#5)
|
||||
function twemojify(el){ try{ if(el && window.twemoji) window.twemoji.parse(el, { folder:'svg', ext:'.svg' }); }catch(_){} }</script>
|
||||
<div class="loading" id="loading">Loading…</div>
|
||||
<div class="loading" id="loading"><div class="ld-inner"><img src="/loader-orbit.svg" alt="" width="64" height="64"><span>Loading…</span></div></div>
|
||||
|
||||
<header>
|
||||
<div class="brandrow">
|
||||
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 8.7 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 24 KiB |
@@ -4,6 +4,10 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Biz Connect</title>
|
||||
<meta name="theme-color" content="#1F3B73">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png?v=3">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16.png?v=3">
|
||||
<link rel="apple-touch-icon" href="/apple-touch-icon.png?v=3">
|
||||
<style>
|
||||
:root{ --brand:#FFC708; --brand-d:#E0AC00; --blue:#1F3B73; --blue-d:#16294f; --blue-soft:#EAF0FB; --ink:#1f2430; --muted:#6b7280; --bg:#f6f8fb; --line:#e6e9ef; }
|
||||
*{box-sizing:border-box;}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="64" height="64" role="img" aria-label="Loading">
|
||||
<circle cx="50" cy="50" r="34" fill="none" stroke="#ffffff" stroke-width="9" stroke-linecap="round" stroke-dasharray="165 300" transform="rotate(38 50 50)"/>
|
||||
<g><circle cx="84" cy="50" r="7" fill="#FFC708"/>
|
||||
<animateTransform attributeName="transform" type="rotate" from="0 50 50" to="360 50 50" dur="1.1s" repeatCount="indefinite"/></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 471 B |
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="64" height="64" role="img" aria-label="Loading">
|
||||
<circle cx="50" cy="50" r="34" fill="none" stroke="#1F3B73" stroke-width="9" stroke-linecap="round" stroke-dasharray="165 300" transform="rotate(38 50 50)"/>
|
||||
<g><circle cx="84" cy="50" r="7" fill="#FFC708"/>
|
||||
<animateTransform attributeName="transform" type="rotate" from="0 50 50" to="360 50 50" dur="1.1s" repeatCount="indefinite"/></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 471 B |
@@ -0,0 +1,6 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" width="50" height="50" role="img" aria-label="Loading">
|
||||
<circle cx="25" cy="25" r="20" fill="none" stroke="#1F3B73" stroke-opacity="0.16" stroke-width="5"/>
|
||||
<path fill="none" stroke="#FFC708" stroke-width="5" stroke-linecap="round" d="M25 5 A20 20 0 0 1 45 25">
|
||||
<animateTransform attributeName="transform" type="rotate" from="0 25 25" to="360 25 25" dur="0.8s" repeatCount="indefinite"/>
|
||||
</path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 473 B |
@@ -9,8 +9,8 @@
|
||||
"background_color": "#1F3B73",
|
||||
"theme_color": "#1F3B73",
|
||||
"icons": [
|
||||
{ "src": "/icon-192.png?v=2", "sizes": "192x192", "type": "image/png", "purpose": "any" },
|
||||
{ "src": "/icon-512.png?v=2", "sizes": "512x512", "type": "image/png", "purpose": "any" },
|
||||
{ "src": "/icon-512.png?v=2", "sizes": "512x512", "type": "image/png", "purpose": "maskable" }
|
||||
{ "src": "/icon-192.png?v=3", "sizes": "192x192", "type": "image/png", "purpose": "any" },
|
||||
{ "src": "/icon-512.png?v=3", "sizes": "512x512", "type": "image/png", "purpose": "any" },
|
||||
{ "src": "/icon-512.png?v=3", "sizes": "512x512", "type": "image/png", "purpose": "maskable" }
|
||||
]
|
||||
}
|
||||
|
||||