diff --git a/app/static/style.css b/app/static/style.css
index b05dd52..d10ed0c 100644
--- a/app/static/style.css
+++ b/app/static/style.css
@@ -168,10 +168,10 @@ header {
left: 50%;
transform: translateX(-50%);
min-width: 150px;
- background: var(--surface);
- border: 1px solid var(--border);
+ background: rgba(0, 0, 0, 0.7);
+ border: 1px solid rgba(255, 255, 255, 0.5);
border-radius: 6px;
- box-shadow: 0 4px 12px rgba(0,0,0,0.3);
+ box-shadow: 0 4px 12px rgba(0,0,0,0.5);
z-index: 1001;
padding: 0.5rem 0;
margin-top: 0.25rem;
@@ -187,7 +187,7 @@ header {
}
.nav-dropdown-menu a:hover {
- background: var(--hover);
+ background: rgba(255, 255, 255, 0.15);
}
.nav-dropdown:hover .nav-dropdown-menu,
@@ -1255,6 +1255,25 @@ header {
background: rgba(255,255,255,0.15);
}
+/* Dropdown within showcase nav */
+.showcase-nav .nav-dropdown {
+ position: relative;
+ display: inline-block;
+ pointer-events: auto;
+}
+
+.showcase-nav .nav-dropdown-trigger {
+ cursor: pointer;
+ border: none;
+ background: transparent;
+ font-family: inherit;
+}
+
+.showcase-nav .nav-dropdown-menu {
+ left: 50%;
+ transform: translateX(-50%);
+}
+
.showcase-nav .nav-hint {
color: rgba(255,255,255,0.4);
font-size: 0.8rem;
diff --git a/app/templates/layout.html b/app/templates/layout.html
index d5dcb2a..683659b 100644
--- a/app/templates/layout.html
+++ b/app/templates/layout.html
@@ -2,16 +2,20 @@
+
ImageRepo - {% block title %}{% endblock %}
+ {% block head %}{% endblock %}
-
+
+{% block body %}
+{% block header %}
+{% endblock %}
-
-
+
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
@@ -47,12 +51,13 @@
{% endif %}
{% endwith %}
-
-
- {% block content %}{% endblock %}
-
+
+
+ {% block content %}{% endblock %}
+
+{% endblock %}
-
+{% block scripts %}{% endblock %}
diff --git a/app/templates/showcase.html b/app/templates/showcase.html
index 6f4bac4..2e94fd0 100644
--- a/app/templates/showcase.html
+++ b/app/templates/showcase.html
@@ -1,20 +1,30 @@
-
-
-
-
-
-
ImageRepo - Showcase
-
-
-
+{% extends "layout.html" %}
+{% block title %}Showcase{% endblock %}
+
+{% block body_attrs %} class="showcase-body"{% endblock %}
+
+{% block body %}
+{% endblock %}
+{% block scripts %}
-
-
+{% endblock %}
diff --git a/generate_favicon.py b/generate_favicon.py
deleted file mode 100644
index 2145938..0000000
--- a/generate_favicon.py
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/usr/bin/env python3
-"""
-Generate favicon files for ImageRepo.
-Creates a simple gallery/image icon in multiple formats and sizes.
-"""
-
-from PIL import Image, ImageDraw
-import os
-
-# Output directory
-STATIC_DIR = os.path.join(os.path.dirname(__file__), 'app', 'static')
-
-# Color scheme (dark theme friendly)
-BG_COLOR = (45, 45, 55) # Dark background
-FRAME_COLOR = (99, 102, 241) # Indigo accent (matches --accent)
-IMAGE_BG = (60, 60, 70) # Slightly lighter for image area
-MOUNTAIN_COLOR = (80, 85, 95) # Mountain silhouette
-SUN_COLOR = (251, 191, 36) # Warm yellow sun
-
-
-def create_favicon_image(size):
- """Create a gallery icon at the specified size."""
- img = Image.new('RGBA', (size, size), (0, 0, 0, 0))
- draw = ImageDraw.Draw(img)
-
- # Padding and dimensions
- padding = max(1, size // 16)
- frame_width = max(1, size // 10)
- corner_radius = max(2, size // 8)
-
- # Outer frame (rounded rectangle)
- frame_box = (padding, padding, size - padding, size - padding)
- draw.rounded_rectangle(frame_box, radius=corner_radius, fill=FRAME_COLOR)
-
- # Inner image area
- inner_padding = padding + frame_width
- inner_box = (inner_padding, inner_padding, size - inner_padding, size - inner_padding)
- inner_radius = max(1, corner_radius - frame_width // 2)
- draw.rounded_rectangle(inner_box, radius=inner_radius, fill=IMAGE_BG)
-
- # Simple landscape scene inside
- inner_width = size - 2 * inner_padding
- inner_height = size - 2 * inner_padding
-
- if inner_width > 4 and inner_height > 4:
- # Sun (small circle in upper right)
- sun_size = max(2, inner_width // 5)
- sun_x = inner_padding + inner_width - sun_size - max(1, inner_width // 6)
- sun_y = inner_padding + max(1, inner_height // 6)
- draw.ellipse(
- (sun_x, sun_y, sun_x + sun_size, sun_y + sun_size),
- fill=SUN_COLOR
- )
-
- # Mountains (triangular shapes)
- mountain_base_y = size - inner_padding - max(1, inner_height // 8)
-
- # Left mountain (taller)
- peak1_x = inner_padding + inner_width // 3
- peak1_y = inner_padding + inner_height // 3
- draw.polygon([
- (inner_padding, mountain_base_y),
- (peak1_x, peak1_y),
- (inner_padding + int(inner_width * 0.6), mountain_base_y)
- ], fill=MOUNTAIN_COLOR)
-
- # Right mountain (shorter, overlapping)
- peak2_x = inner_padding + int(inner_width * 0.7)
- peak2_y = inner_padding + int(inner_height * 0.5)
- draw.polygon([
- (inner_padding + inner_width // 3, mountain_base_y),
- (peak2_x, peak2_y),
- (size - inner_padding, mountain_base_y)
- ], fill=(90, 95, 105)) # Slightly lighter for depth
-
- return img
-
-
-def create_svg_favicon():
- """Create an SVG favicon."""
- svg_content = ''''''
-
- svg_path = os.path.join(STATIC_DIR, 'favicon.svg')
- with open(svg_path, 'w') as f:
- f.write(svg_content)
- print(f"Created: {svg_path}")
- return svg_path
-
-
-def main():
- os.makedirs(STATIC_DIR, exist_ok=True)
-
- # Generate SVG (scalable, modern browsers)
- create_svg_favicon()
-
- # Generate PNG favicons at various sizes
- sizes = [16, 32, 48, 180, 192, 512]
- png_images = {}
-
- for size in sizes:
- img = create_favicon_image(size)
- filename = f'favicon-{size}x{size}.png'
- filepath = os.path.join(STATIC_DIR, filename)
- img.save(filepath, 'PNG')
- png_images[size] = img
- print(f"Created: {filepath}")
-
- # Create apple-touch-icon (180x180)
- apple_path = os.path.join(STATIC_DIR, 'apple-touch-icon.png')
- png_images[180].save(apple_path, 'PNG')
- print(f"Created: {apple_path}")
-
- # Create ICO file with multiple sizes (16, 32, 48)
- ico_path = os.path.join(STATIC_DIR, 'favicon.ico')
- ico_sizes = [png_images[16], png_images[32], png_images[48]]
- ico_sizes[0].save(
- ico_path,
- format='ICO',
- sizes=[(16, 16), (32, 32), (48, 48)],
- append_images=ico_sizes[1:]
- )
- print(f"Created: {ico_path}")
-
- print("\nFavicon generation complete!")
- print("\nAdd these lines to your layout.html section:")
- print('''
-
-
-
-''')
-
-
-if __name__ == '__main__':
- main()