diff --git a/compilation/assets/logo.ico b/compilation/assets/logo.ico index 179d4ad..d8cfc0a 100644 Binary files a/compilation/assets/logo.ico and b/compilation/assets/logo.ico differ diff --git a/compilation/assets/logo.png b/compilation/assets/logo.png index 98c1fcf..15feeb8 100644 Binary files a/compilation/assets/logo.png and b/compilation/assets/logo.png differ diff --git a/compilation/assets/logo.svg b/compilation/assets/logo.svg index e6261f3..49eafb9 100644 --- a/compilation/assets/logo.svg +++ b/compilation/assets/logo.svg @@ -31,16 +31,9 @@ fill="none" stroke="#162A45" stroke-width="3" stroke-dasharray="8 6"/> - - - - - - - diff --git a/compilation/assets/logo_256x256.png b/compilation/assets/logo_256x256.png index c530a5a..4dc515a 100644 Binary files a/compilation/assets/logo_256x256.png and b/compilation/assets/logo_256x256.png differ diff --git a/compilation/assets/wizard_header.bmp b/compilation/assets/wizard_header.bmp index 5694f1d..680947d 100644 Binary files a/compilation/assets/wizard_header.bmp and b/compilation/assets/wizard_header.bmp differ diff --git a/compilation/assets/wizard_sidebar.bmp b/compilation/assets/wizard_sidebar.bmp index e88d01e..13082af 100644 Binary files a/compilation/assets/wizard_sidebar.bmp and b/compilation/assets/wizard_sidebar.bmp differ diff --git a/compilation/assets/wizard_small.bmp b/compilation/assets/wizard_small.bmp new file mode 100644 index 0000000..d9c7e1c Binary files /dev/null and b/compilation/assets/wizard_small.bmp differ diff --git a/compilation/generate_branding_assets.py b/compilation/generate_branding_assets.py index 17034e4..894021f 100644 --- a/compilation/generate_branding_assets.py +++ b/compilation/generate_branding_assets.py @@ -88,15 +88,13 @@ def draw_logo_rgba(x: int, y: int, w: int, h: int) -> tuple: if dist > 0.98: return 0, 0, 0, 0 - # Background rounded container / shield - # Hexagon radius + # Hexagon radius formula angle = math.atan2(ny, nx) hex_radius = 0.88 / (math.cos((angle % (math.pi / 3)) - (math.pi / 6)) + 0.001) if dist > hex_radius: - # Subtle anti-aliased edge - if dist < hex_radius + 0.05: - alpha = max(0.0, min(1.0, (hex_radius + 0.05 - dist) / 0.05)) + if dist < hex_radius + 0.04: + alpha = max(0.0, min(1.0, (hex_radius + 0.04 - dist) / 0.04)) return 11, 25, 44, int(alpha * 255) return 0, 0, 0, 0 @@ -107,7 +105,7 @@ def draw_logo_rgba(x: int, y: int, w: int, h: int) -> tuple: bg_b = int(48 * (1 - grad_t) + 32 * grad_t) # Hexagon outer border (Cyber Cyan / Emerald highlight) - if dist > hex_radius - 0.06: + if dist > hex_radius - 0.07: glow_t = (nx + 1) / 2 br = int(0 * (1 - glow_t) + 0 * glow_t) bg = int(229 * (1 - glow_t) + 160 * glow_t) @@ -115,9 +113,8 @@ def draw_logo_rgba(x: int, y: int, w: int, h: int) -> tuple: return br, bg, bb, 255 # Center stylized 'L' log symbol and dynamic telemetry bars - # Bar 1 (Left Log Stream): x in [-0.45, -0.25], y in [-0.5, 0.4] + # Bar 1 (Left Log Stream): x in [-0.42, -0.22], y in [-0.45, 0.45] if -0.42 <= nx <= -0.22 and -0.45 <= ny <= 0.45: - # Cyan gradient v = (ny + 0.45) / 0.9 return int(0), int(220 * (1 - v) + 140 * v), int(255), 255 @@ -134,7 +131,7 @@ def draw_logo_rgba(x: int, y: int, w: int, h: int) -> tuple: if 0.18 <= nx <= 0.36 and -0.50 <= ny <= 0.12: return 0, 180, 255, 255 - # Subtle inner grid dots / pulse nodes + # Subtle inner grid dots grid_x = (nx * 10) % 1 grid_y = (ny * 10) % 1 if 0.45 <= grid_x <= 0.55 and 0.45 <= grid_y <= 0.55: @@ -143,38 +140,57 @@ def draw_logo_rgba(x: int, y: int, w: int, h: int) -> tuple: return bg_r, bg_g, bg_b, 255 -def draw_wizard_header_bgr(x: int, y: int, w: int, h: int) -> tuple: - """Renders 150x57 BMP header graphic.""" - # Dark modern gradient background - t = x / w - r = int(14 * (1 - t) + 8 * t) - g = int(24 * (1 - t) + 16 * t) - b = int(44 * (1 - t) + 30 * t) +def draw_wizard_header_white_bgr(x: int, y: int, w: int, h: int) -> tuple: + """ + Renders header BMP graphic with a pure white background (255, 255, 255) + matching the installer wizard dialog background seamlessly. + The logo is positioned on the left with clean alpha-blended edges. + """ + bg_r, bg_g, bg_b = 255, 255, 255 - # Right-aligned emblem icon in header - icon_center_x = w - 35 + # Position emblem cleanly on the left (center x = 30, center y = h / 2) + icon_center_x = 28 icon_center_y = h / 2 - dx = (x - icon_center_x) / 22 - dy = (y - icon_center_y) / 22 + icon_radius = 22 + dx = (x - icon_center_x) / icon_radius + dy = (y - icon_center_y) / icon_radius d = math.sqrt(dx * dx + dy * dy) - if d < 0.95: - # Render miniature emblem + if d < 1.0: er, eg, eb, ea = draw_logo_rgba(int((dx + 1) * 32), int((dy + 1) * 32), 64, 64) - if ea > 128: - return er, eg, eb + alpha = ea / 255.0 + r = int(er * alpha + bg_r * (1.0 - alpha)) + g = int(eg * alpha + bg_g * (1.0 - alpha)) + b = int(eb * alpha + bg_b * (1.0 - alpha)) + return r, g, b - # Decorative bottom accent line (Cyan gradient) - if y >= h - 2: - return 0, int(200 * t + 55), 255 + return bg_r, bg_g, bg_b - return r, g, b + +def draw_wizard_small_bgr(x: int, y: int, w: int, h: int) -> tuple: + """Renders 55x55 square header BMP with centered logo on pure white background.""" + bg_r, bg_g, bg_b = 255, 255, 255 + cx = w / 2 + cy = h / 2 + rad = (min(w, h) / 2) - 4 + dx = (x - cx) / rad + dy = (y - cy) / rad + d = math.sqrt(dx * dx + dy * dy) + + if d < 1.0: + er, eg, eb, ea = draw_logo_rgba(int((dx + 1) * 32), int((dy + 1) * 32), 64, 64) + alpha = ea / 255.0 + r = int(er * alpha + bg_r * (1.0 - alpha)) + g = int(eg * alpha + bg_g * (1.0 - alpha)) + b = int(eb * alpha + bg_b * (1.0 - alpha)) + return r, g, b + + return bg_r, bg_g, bg_b def draw_wizard_sidebar_bgr(x: int, y: int, w: int, h: int) -> tuple: """Renders 164x314 BMP sidebar graphic for NSIS / Inno Setup.""" t_y = y / h - t_x = x / w # Deep cyber navy to midnight blue vertical gradient r = int(10 * (1 - t_y) + 4 * t_y) @@ -281,16 +297,9 @@ def generate_svg_logo() -> str: fill="none" stroke="#162A45" stroke-width="3" stroke-dasharray="8 6"/> - - - - - - - @@ -328,14 +337,21 @@ def main(): f.write(ico_data) print(f"[+] Saved Windows Icon (.ico): {ico_path}") - # 4. Generate NSIS / Inno Setup Wizard Header Bitmap (150x57) + # 4. Generate NSIS / Inno Setup Wizard Header Bitmap (150x57) with seamless white background header_bmp_path = os.path.join(ASSETS_DIR, "wizard_header.bmp") - header_bmp_data = create_bmp_24bit(150, 57, draw_wizard_header_bgr) + header_bmp_data = create_bmp_24bit(150, 57, draw_wizard_header_white_bgr) with open(header_bmp_path, "wb") as f: f.write(header_bmp_data) - print(f"[+] Saved Wizard Header Bitmap: {header_bmp_path}") + print(f"[+] Saved Wizard Header Bitmap (White Background): {header_bmp_path}") - # 5. Generate NSIS / Inno Setup Wizard Sidebar Bitmap (164x314) + # 5. Generate Inno Setup Small Wizard Bitmap (55x55) with seamless white background + small_bmp_path = os.path.join(ASSETS_DIR, "wizard_small.bmp") + small_bmp_data = create_bmp_24bit(55, 55, draw_wizard_small_bgr) + with open(small_bmp_path, "wb") as f: + f.write(small_bmp_data) + print(f"[+] Saved Small Wizard Bitmap (55x55): {small_bmp_path}") + + # 6. Generate NSIS / Inno Setup Wizard Sidebar Bitmap (164x314) sidebar_bmp_path = os.path.join(ASSETS_DIR, "wizard_sidebar.bmp") sidebar_bmp_data = create_bmp_24bit(164, 314, draw_wizard_sidebar_bgr) with open(sidebar_bmp_path, "wb") as f: diff --git a/compilation/installer_client.iss b/compilation/installer_client.iss index 0480ca5..e407587 100644 --- a/compilation/installer_client.iss +++ b/compilation/installer_client.iss @@ -14,7 +14,7 @@ SolidCompression=yes WizardStyle=modern SetupIconFile=assets\logo.ico WizardImageFile=assets\wizard_sidebar.bmp -WizardSmallImageFile=assets\wizard_header.bmp +WizardSmallImageFile=assets\wizard_small.bmp VersionInfoCompany=LOGAR Security Systems VersionInfoDescription=LOGAR Windows Edge Log Forwarder Setup VersionInfoVersion=0.3.2.0 diff --git a/compilation/installer_server.iss b/compilation/installer_server.iss index 3528a94..dfbd209 100644 --- a/compilation/installer_server.iss +++ b/compilation/installer_server.iss @@ -14,7 +14,7 @@ SolidCompression=yes WizardStyle=modern SetupIconFile=assets\logo.ico WizardImageFile=assets\wizard_sidebar.bmp -WizardSmallImageFile=assets\wizard_header.bmp +WizardSmallImageFile=assets\wizard_small.bmp VersionInfoCompany=LOGAR Security Systems VersionInfoDescription=LOGAR Cloud Hub & TCP Ingestion Server Setup VersionInfoVersion=0.3.2.0 diff --git a/src/Server.py b/src/Server.py index 10c0662..d20235c 100644 --- a/src/Server.py +++ b/src/Server.py @@ -1312,7 +1312,7 @@ def login_page(request: Request): body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; background: var(--bg); color: var(--text); min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 20px; } .login-card { background: var(--card); border: 1px solid var(--border); border-radius: 16px; padding: 36px; width: 100%; max-width: 420px; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.6); } .logo-header { text-align: center; margin-bottom: 24px; } - .logo-icon { width: 48px; height: 48px; background: linear-gradient(135deg, #3b82f6, #8b5cf6); border-radius: 12px; display: inline-flex; align-items: center; justify-content: center; font-size: 24px; font-weight: 800; color: #fff; margin-bottom: 12px; } + .logo-icon { width: 56px; height: 56px; background: transparent; display: inline-flex; align-items: center; justify-content: center; margin-bottom: 12px; } h1 { font-size: 20px; font-weight: 700; margin-bottom: 4px; } .subtitle { font-size: 13px; color: var(--text-muted); } .form-group { margin-bottom: 18px; text-align: left; } @@ -2278,11 +2278,8 @@ def serve_webui(request: Request = None): .logo-group {{ display: flex; align-items: center; gap: 14px; }} .logo-icon {{ width: 44px; height: 44px; - background: linear-gradient(135deg, #3b82f6, #8b5cf6); - border-radius: 12px; + background: transparent; display: flex; align-items: center; justify-content: center; - font-size: 22px; font-weight: 800; color: #fff; - box-shadow: 0 4px 14px rgba(59, 130, 246, 0.3); }} h1 {{ font-size: 22px; font-weight: 800; letter-spacing: -0.5px; }} .subtitle {{ font-size: 13px; color: var(--text-muted); margin-top: 2px; }}