/* ========================================== Chat Switchboard — UserMenu Component CSS ========================================== v0.25.0-cs11.1: Self-contained styles for the UserMenu component. Works in two contexts: 1. Sidebar (flyout pops UP) — default in .sidebar 2. Topbar (flyout drops DOWN) — default standalone ========================================== */ /* ── Wrapper ───────────────────────────────── */ .user-menu-wrap { position: relative; display: flex; align-items: center; } /* ── Trigger Button ────────────────────────── */ .user-menu-wrap .user-btn { display: flex; align-items: center; gap: 8px; padding: 6px 8px; border-radius: var(--radius, 6px); background: none; border: none; color: var(--text, #eee); cursor: pointer; width: 100%; font-family: inherit; transition: background 0.15s; } .user-menu-wrap .user-btn:hover { background: var(--bg-hover, rgba(255,255,255,0.06)); } /* ── Avatar ────────────────────────────────── */ .user-menu-wrap .user-avatar { width: 28px; height: 28px; border-radius: 50%; background: var(--accent-dim, rgba(179, 138, 78, 0.2)); display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 600; color: var(--accent, #b38a4e); flex-shrink: 0; position: relative; overflow: hidden; } .user-menu-wrap .user-avatar-img { width: 100%; height: 100%; object-fit: cover; border-radius: 50%; } .user-menu-wrap .sb-label { font-size: 12px; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* ── Flyout (default: drops DOWN for topbar) ─ */ .user-menu-wrap .user-flyout { display: none; position: absolute; top: 100%; right: 0; left: auto; margin-top: 2px; background: var(--bg-elevated, #42424e); border: 1px solid var(--border-elevated, #555); border-radius: var(--radius-lg, 8px); padding: 4px; min-width: 170px; z-index: 200; box-shadow: 0 8px 40px rgba(0, 0, 0, 0.8), 0 0 0 1px rgba(255,255,255,0.08); } .user-menu-wrap .user-flyout.open { display: block; } /* ── Flyout Items ──────────────────────────── */ .user-menu-wrap .flyout-item { display: flex; align-items: center; gap: 10px; padding: 8px 12px; border-radius: var(--radius, 6px); background: none; border: none; color: var(--text-2, #999); cursor: pointer; font-size: 13px; font-family: inherit; width: 100%; transition: background 0.15s, color 0.15s; } .user-menu-wrap .flyout-item:hover { background: var(--bg-hover, rgba(255,255,255,0.06)); color: var(--text, #eee); } .user-menu-wrap .flyout-item svg { flex-shrink: 0; opacity: 0.7; } .user-menu-wrap .flyout-danger { color: var(--danger, #f44336); } .user-menu-wrap .flyout-danger:hover { background: var(--danger-dim, rgba(244, 67, 54, 0.1)); color: var(--danger, #f44336); } .user-menu-wrap .flyout-divider { border: none; height: 1px; background: var(--border, #2a2a2e); margin: 4px 0; } /* ── Flyout Direction: UP ──────────────────── */ /* data-flyout="up" on .user-menu-wrap (or legacy .sidebar parent) */ .user-menu-wrap[data-flyout="up"] .user-flyout, .sidebar .user-menu-wrap .user-flyout { top: auto; bottom: 100%; margin-top: 0; margin-bottom: 4px; box-shadow: 0 -4px 24px rgba(0, 0, 0, 0.5); } /* Sidebar collapsed: hide label, center avatar */ .sidebar.collapsed .user-menu-wrap .user-btn { justify-content: center; padding: 6px 0; gap: 0; } .sidebar.collapsed .user-menu-wrap .sb-label { display: none; } .sidebar.collapsed .user-menu-wrap .user-flyout { position: fixed; left: var(--sidebar-rail); bottom: 8px; top: auto; right: auto; width: 200px; margin-bottom: 0; }