Spaces:
Configuration error
Configuration error
| {% set current_path = request.url.path %} | |
| <aside class="fixed left-0 top-0 h-full w-64 flex flex-col z-30" style="background:var(--bg-secondary);border-right:1px solid var(--border-primary);display:flex;flex-direction:column;z-index:30;position:fixed;left:0;top:0;height:100%;width:256px;"> | |
| <div style="padding:24px;border-bottom:1px solid var(--border-primary);"> | |
| <a href="/dashboard" style="display:flex;align-items:center;gap:12px;text-decoration:none;"> | |
| <div class="avatar avatar-md" style="background:var(--gradient-primary);"> | |
| <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> | |
| <path d="M19 11a7 7 0 01-7 7m0 0a7 7 0 01-7-7m7 7v4m0 0H8m4 0h4m-4-8a3 3 0 01-3-3V5a3 3 0 116 0v6a3 3 0 01-3 3z"/> | |
| </svg> | |
| </div> | |
| <div> | |
| <span style="font-size:18px;font-weight:800;color:var(--text-primary);">MemoryBot</span> | |
| <span style="display:block;font-size:10px;color:var(--text-muted);letter-spacing:0.05em;text-transform:uppercase;">AI Memory Companion</span> | |
| </div> | |
| </a> | |
| </div> | |
| <nav style="flex:1;display:flex;flex-direction:column;gap:6px;padding:24px 16px;"> | |
| {% set nav_items = [ | |
| ("/dashboard", "Dashboard", '<path d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"/>'), | |
| ("/profiles", "Profiles", '<path d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z"/>'), | |
| ("/chat", "Chat", '<path d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"/>'), | |
| ("/search", "Search", '<circle cx="11" cy="11" r="8"/><path d="M21 21l-4.35-4.35"/>'), | |
| ("/admin", "Admin", '<circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-4 0v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83-2.83l.06-.06A1.65 1.65 0 004.68 15a1.65 1.65 0 00-1.51-1H3a2 2 0 010-4h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 012.83-2.83l.06.06A1.65 1.65 0 009 4.68a1.65 1.65 0 001-1.51V3a2 2 0 014 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 2.83l-.06.06A1.65 1.65 0 0019.4 9a1.65 1.65 0 001.51 1H21a2 2 0 010 4h-.09a1.65 1.65 0 00-1.51 1z"/>'), | |
| ] %} | |
| {% for path, label, icon in nav_items %} | |
| {% set is_active = current_path == path or (path != '/dashboard' and current_path.startswith(path)) %} | |
| <a href="{{ path }}" style="display:flex;align-items:center;gap:12px;padding:12px 20px;border-radius:12px;transition:all 0.2s;text-decoration:none;{% if is_active %}background:rgba(139,92,246,0.15);color:var(--accent-purple);{% else %}color:var(--text-secondary);{% endif %}"> | |
| <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">{{ icon }}</svg> | |
| {{ label }} | |
| </a> | |
| {% endfor %} | |
| </nav> | |
| <div style="padding:16px;border-top:1px solid var(--border-primary);"> | |
| <div style="display:flex;align-items:center;gap:12px;padding:8px 16px;"> | |
| <div class="avatar avatar-sm avatar-purple"> | |
| <span>{{ user.name[0] if user else '?' }}</span> | |
| </div> | |
| <div style="flex:1;min-width:0;"> | |
| <p style="font-size:13px;font-weight:600;color:var(--text-primary);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">{{ user.name }}</p> | |
| <p style="font-size:11px;color:var(--text-muted);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">{{ user.email }}</p> | |
| </div> | |
| </div> | |
| <a href="/auth/logout" style="display:flex;align-items:center;gap:12px;padding:10px 16px;border-radius:12px;color:var(--text-secondary);transition:all 0.2s;margin-top:4px;text-decoration:none;" onmouseover="this.style.background='rgba(239,68,68,0.1)';this.style.color='#f87171'" onmouseout="this.style.background='';this.style.color='var(--text-secondary)'"> | |
| <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4"/><polyline points="16 17 21 12 16 7"/><line x1="21" y1="12" x2="9" y2="12"/></svg> | |
| Sign Out | |
| </a> | |
| </div> | |
| </aside> | |