// UsersPage — left list of users + center profile/role editor // Data model derives from ui/src/pages/UsersPage.tsx. const ROLE_TONE = { admin: { bg: '#ede9fe', fg: '#5b21b6' }, operator: { bg: '#dbeafe', fg: '#1d4ed8' }, viewer: { bg: '#e2e8f0', fg: '#475569' }, }; const USER_STATUS_TONE = { pending: { bg: '#fef9c3', fg: '#854d0e', label: '承認待ち' }, active: { bg: '#dcfce7', fg: '#166534', label: 'アクティブ' }, disabled: { bg: '#e2e8f0', fg: '#475569', label: '無効' }, }; function UserAvatar({ name, size = 32 }) { const initial = (name || '?').charAt(0).toUpperCase(); // simple deterministic hue from name let hue = 0; for (const c of (name || '')) hue = (hue * 31 + c.charCodeAt(0)) % 360; return (