-

+
+
+
Mento
by Mentech
@@ -38,11 +49,16 @@ withDefaults(
}
.mark {
- display: block;
- border-radius: 12px;
+ display: grid;
+ place-items: center;
flex-shrink: 0;
- object-fit: cover;
- background: #ecfdf8;
+ background: transparent;
+}
+
+.mark svg {
+ width: 100%;
+ height: 100%;
+ display: block;
}
.text {
@@ -52,10 +68,11 @@ withDefaults(
}
.text strong {
- font-size: 1.05rem;
+ font-size: 1.08rem;
letter-spacing: -0.02em;
color: #0f172a;
line-height: 1.1;
+ font-weight: 800;
}
.text small {
diff --git a/apps/web/src/components/dashboard/HomeHero.vue b/apps/web/src/components/dashboard/HomeHero.vue
index 3016898..c12a21c 100644
--- a/apps/web/src/components/dashboard/HomeHero.vue
+++ b/apps/web/src/components/dashboard/HomeHero.vue
@@ -74,7 +74,7 @@ function alertIcon(tone: string) {
-
+
@@ -82,15 +82,15 @@ function alertIcon(tone: string) {
.hero {
position: relative;
display: grid;
- grid-template-columns: minmax(0, 1fr) 180px;
- gap: 1rem;
+ grid-template-columns: minmax(0, 1.4fr) minmax(220px, 0.7fr);
+ gap: 0.5rem 1rem;
align-items: center;
- min-height: 196px;
- padding: 1.35rem 1.4rem;
+ min-height: 210px;
+ padding: 1.4rem 1.5rem 1.35rem;
border-radius: 28px;
overflow: hidden;
color: #fff;
- background: linear-gradient(110deg, #5eead4 0%, #14b8a6 26%, #0f766e 55%, #163a5f 100%);
+ background: linear-gradient(105deg, #4fd1c5 0%, #14b8a6 24%, #0f766e 52%, #123a5c 100%);
box-shadow: 0 18px 40px rgba(15, 118, 110, 0.22);
}
diff --git a/apps/web/src/layouts/AppLayout.vue b/apps/web/src/layouts/AppLayout.vue
index 70153cd..4959750 100644
--- a/apps/web/src/layouts/AppLayout.vue
+++ b/apps/web/src/layouts/AppLayout.vue
@@ -760,30 +760,32 @@ onUnmounted(() => {
padding: 0 0.35rem;
}
-.desktop-topbar {
- align-items: center;
- justify-content: space-between;
- gap: 1rem;
- padding: 1.05rem 1.5rem 0.85rem;
- position: sticky;
- top: 0;
- z-index: 20;
- background: rgba(245, 247, 250, 0.9);
- backdrop-filter: blur(10px);
-}
-
.global-search {
flex: 1;
- max-width: 560px;
+ max-width: 620px;
+ margin-inline: auto;
display: flex;
align-items: center;
gap: 0.7rem;
background: #eef2f6;
border-radius: 999px;
- padding: 0.72rem 1rem;
+ padding: 0.78rem 1.1rem;
border: 1px solid transparent;
}
+.desktop-topbar {
+ display: grid;
+ grid-template-columns: minmax(0, 1fr) auto;
+ align-items: center;
+ gap: 1rem;
+ padding: 1.05rem 1.5rem 0.85rem;
+ position: sticky;
+ top: 0;
+ z-index: 20;
+ background: rgba(245, 247, 250, 0.92);
+ backdrop-filter: blur(10px);
+}
+
.global-search:focus-within {
background: #fff;
border-color: #cbd5e1;
diff --git a/scripts/cleanup_avatar_plate.py b/scripts/cleanup_avatar_plate.py
new file mode 100644
index 0000000..5810a50
--- /dev/null
+++ b/scripts/cleanup_avatar_plate.py
@@ -0,0 +1,26 @@
+from PIL import Image
+
+# Force-clear any remaining opaque black plate around AI avatar too
+path = r"e:\projeha\crm\apps\web\public\brand\mento-ai-avatar.png"
+img = Image.open(path).convert("RGBA")
+px = img.load()
+w, h = img.size
+cleared = 0
+for y in range(h):
+ for x in range(w):
+ r, g, b, a = px[x, y]
+ if a == 0:
+ continue
+ # leftover flat dark teal/black plate
+ if r < 45 and g < 70 and b < 85 and max(r, g, b) - min(r, g, b) < 35:
+ # keep cyan glow pixels (more green/blue variance + brighter cyan)
+ if b > 120 or g > 140:
+ continue
+ px[x, y] = (r, g, b, 0)
+ cleared += 1
+ elif r > 248 and g > 248 and b > 248:
+ px[x, y] = (255, 255, 255, 0)
+ cleared += 1
+
+img.save(path, "PNG")
+print("cleared", cleared, "pixels; size", img.size)
diff --git a/scripts/process_ai_avatar.py b/scripts/process_ai_avatar.py
new file mode 100644
index 0000000..22eabe7
--- /dev/null
+++ b/scripts/process_ai_avatar.py
@@ -0,0 +1,35 @@
+from PIL import Image
+
+src = r"C:\Users\Mahdi\.cursor\projects\e-projeha-crm\assets\mento-ai-avatar-transparent.png"
+dst = r"e:\projeha\crm\apps\web\public\brand\mento-ai-avatar.png"
+
+img = Image.open(src).convert("RGBA")
+pixels = img.load()
+w, h = img.size
+cx, cy = w / 2, h / 2
+radius = min(w, h) * 0.42
+
+for y in range(h):
+ for x in range(w):
+ r, g, b, a = pixels[x, y]
+ if r > 245 and g > 245 and b > 245:
+ pixels[x, y] = (r, g, b, 0)
+ continue
+ # leftover dark plate far from character
+ if r < 40 and g < 70 and b < 80 and a > 200:
+ dist = ((x - cx) ** 2 + (y - cy) ** 2) ** 0.5
+ if dist > radius:
+ pixels[x, y] = (r, g, b, 0)
+
+bbox = img.getbbox()
+if bbox:
+ img = img.crop(bbox)
+ pad = 12
+ padded = Image.new("RGBA", (img.width + pad * 2, img.height + pad * 2), (0, 0, 0, 0))
+ padded.paste(img, (pad, pad), img)
+ img = padded
+
+img.save(dst, "PNG")
+px = img.load()
+print("saved", dst, img.size)
+print("corner alpha", px[0, 0][3], px[img.width - 1, 0][3])
diff --git a/scripts/process_logo.py b/scripts/process_logo.py
new file mode 100644
index 0000000..74cef38
--- /dev/null
+++ b/scripts/process_logo.py
@@ -0,0 +1,40 @@
+from PIL import Image
+
+src = r"C:\Users\Mahdi\.cursor\projects\e-projeha-crm\assets\mento-logo-mark.png"
+dst_png = r"e:\projeha\crm\apps\web\public\brand\mento-logo.png"
+
+img = Image.open(src).convert("RGBA")
+pixels = img.load()
+w, h = img.size
+
+for y in range(h):
+ for x in range(w):
+ r, g, b, a = pixels[x, y]
+ # white canvas
+ if r > 235 and g > 235 and b > 235:
+ pixels[x, y] = (255, 255, 255, 0)
+ continue
+ # black / near-black canvas
+ if r < 28 and g < 28 and b < 28:
+ pixels[x, y] = (0, 0, 0, 0)
+ continue
+ # dark fringe around logo on black plate
+ if r < 40 and g < 45 and b < 50 and (r + g + b) < 110:
+ pixels[x, y] = (0, 0, 0, 0)
+
+bbox = img.getbbox()
+if not bbox:
+ raise SystemExit("empty image after bg remove")
+
+img = img.crop(bbox)
+pad = 10
+padded = Image.new("RGBA", (img.width + pad * 2, img.height + pad * 2), (0, 0, 0, 0))
+padded.paste(img, (pad, pad), img)
+img = padded
+
+side = max(img.width, img.height)
+canvas = Image.new("RGBA", (side, side), (0, 0, 0, 0))
+canvas.paste(img, ((side - img.width) // 2, (side - img.height) // 2), img)
+canvas.save(dst_png, "PNG")
+px = canvas.load()
+print("logo saved", dst_png, canvas.size, "corner", px[0, 0])