Refactor chat interface and enhance user experience
- Updated the ChatWindow component to provide clearer instructions and actions when no conversation is selected, improving user guidance. - Redesigned the MenuBar to display session timeout information more effectively. - Enhanced the SearchView component with a more user-friendly country selection using a Multiselect dropdown. - Improved the UserList component to display user age and gender, enhancing user profile visibility. - Updated various views (ChatView, FaqView, FeedbackView, PartnersView, RulesView, SafetyView) to include a consistent app branding link for better navigation. These changes collectively enhance the chat interface, improve user engagement, and streamline navigation across the application.
This commit is contained in:
@@ -21,8 +21,8 @@
|
||||
--color-purple: #8b60af;
|
||||
--color-cyan: #5fa2bf;
|
||||
--radius-sm: 8px;
|
||||
--radius-md: 10px;
|
||||
--radius-lg: 12px;
|
||||
--radius-md: 8px;
|
||||
--radius-lg: 8px;
|
||||
--space-1: 4px;
|
||||
--space-2: 8px;
|
||||
--space-3: 12px;
|
||||
@@ -34,6 +34,213 @@
|
||||
--sidebar-width: 188px;
|
||||
}
|
||||
|
||||
.chat-container-auth {
|
||||
flex-direction: column;
|
||||
background: #f7f9f7;
|
||||
}
|
||||
|
||||
.auth-main-layout {
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
display: flex;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.app-sidebar {
|
||||
width: 224px;
|
||||
flex-shrink: 0;
|
||||
padding: 28px 14px 12px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: #e8f7ef;
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
.sidebar-brand {
|
||||
padding: 0 14px 34px;
|
||||
color: #173a27;
|
||||
}
|
||||
|
||||
.sidebar-brand strong {
|
||||
display: block;
|
||||
font-size: 16px;
|
||||
line-height: 1.15;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.sidebar-brand span {
|
||||
display: block;
|
||||
margin-top: 5px;
|
||||
color: #4e9872;
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.12em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.sidebar-nav {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 9px;
|
||||
}
|
||||
|
||||
.sidebar-nav button {
|
||||
min-height: 42px;
|
||||
border: 0;
|
||||
border-radius: 8px;
|
||||
padding: 0 12px;
|
||||
display: grid;
|
||||
grid-template-columns: 24px minmax(0, 1fr) auto;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
background: transparent;
|
||||
color: #54836d;
|
||||
font-size: 13px;
|
||||
font-weight: 700;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.sidebar-nav button:hover,
|
||||
.sidebar-nav button.is-active {
|
||||
background: #a9efcc;
|
||||
color: #164d2c;
|
||||
}
|
||||
|
||||
.sidebar-nav button.has-unread {
|
||||
color: #9f4d4d;
|
||||
}
|
||||
|
||||
.nav-icon {
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
border-radius: 6px;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
color: currentColor;
|
||||
background: rgba(255, 255, 255, 0.42);
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.sidebar-badge {
|
||||
min-width: 20px;
|
||||
height: 20px;
|
||||
padding: 0 6px;
|
||||
border-radius: 8px;
|
||||
display: inline-grid;
|
||||
place-items: center;
|
||||
background: #fff0f0;
|
||||
color: #9f4d4d;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.sidebar-profile {
|
||||
margin-top: auto;
|
||||
min-height: 64px;
|
||||
padding: 10px 12px;
|
||||
border-radius: 8px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
background: #c9f6dc;
|
||||
color: #173a27;
|
||||
}
|
||||
|
||||
.profile-avatar,
|
||||
.icon-button {
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
border-radius: 8px;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
background: #2f7047;
|
||||
color: #ffffff;
|
||||
font-weight: 800;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.sidebar-profile span:last-child {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.sidebar-profile strong,
|
||||
.sidebar-profile small {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.sidebar-profile strong {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.sidebar-profile small {
|
||||
margin-top: 2px;
|
||||
color: #5f7f6e;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.app-workspace {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
min-height: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: #fafafa;
|
||||
}
|
||||
|
||||
.workspace-header {
|
||||
height: 64px;
|
||||
flex-shrink: 0;
|
||||
display: grid;
|
||||
grid-template-columns: auto minmax(260px, 1fr) auto auto;
|
||||
align-items: center;
|
||||
gap: 16px;
|
||||
padding: 0 28px;
|
||||
background: #f7fbf8;
|
||||
border-bottom: 1px solid #eef3ef;
|
||||
}
|
||||
|
||||
.workspace-header h1 {
|
||||
margin: 0;
|
||||
color: #1d3f2b;
|
||||
font-size: 21px;
|
||||
line-height: 1;
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.workspace-search {
|
||||
width: min(280px, 24vw);
|
||||
height: 40px;
|
||||
border: 0;
|
||||
border-radius: 8px;
|
||||
padding: 0 18px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
background: #e3f8ed;
|
||||
color: #6e9280;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.workspace-search span {
|
||||
font-size: 13px;
|
||||
font-weight: 800;
|
||||
color: #1e6840;
|
||||
}
|
||||
|
||||
.workspace-search strong {
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.icon-button {
|
||||
border: 0;
|
||||
background: #ecf7f1;
|
||||
color: #1e6840;
|
||||
}
|
||||
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
@@ -227,6 +434,13 @@ a {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Content-Seiten (FAQ/Regeln/Sicherheit/Feedback) sollen den Footer nach unten drücken. */
|
||||
.chat-container > main {
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.horizontal-box-app {
|
||||
gap: 14px;
|
||||
padding: 14px;
|
||||
@@ -653,3 +867,404 @@ a {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.chat-container-auth .menu {
|
||||
min-height: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
background: transparent;
|
||||
justify-content: center;
|
||||
gap: 22px;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.chat-container-auth .menu button {
|
||||
height: 64px;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
border-radius: 0;
|
||||
background: transparent;
|
||||
color: #88a095;
|
||||
font-size: 13px;
|
||||
font-weight: 700;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.chat-container-auth .menu button:hover {
|
||||
background: transparent;
|
||||
color: #1f6e43;
|
||||
}
|
||||
|
||||
.chat-container-auth .menu button.is-active::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 12px;
|
||||
height: 2px;
|
||||
background: #1f6e43;
|
||||
}
|
||||
|
||||
.chat-container-auth .menu button.has-unread {
|
||||
color: #9f4d4d;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.chat-container-auth .menu-info-text {
|
||||
min-height: 24px;
|
||||
padding: 0 8px;
|
||||
border: 0;
|
||||
background: #eff6f2;
|
||||
color: #62806f;
|
||||
}
|
||||
|
||||
.chat-container-auth .horizontal-box-app {
|
||||
padding: 14px 26px 24px;
|
||||
gap: 24px;
|
||||
background: linear-gradient(90deg, #fbfbfb 0%, #f8faf8 56%, #f2f7f3 100%);
|
||||
}
|
||||
|
||||
.chat-container-auth .user-list {
|
||||
width: 280px;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
border-radius: 0;
|
||||
background: transparent;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.chat-container-auth .user-list h3 {
|
||||
min-height: 38px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
color: #1c633c;
|
||||
font-size: 15px;
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.chat-container-auth .user-list-scroll {
|
||||
gap: 10px;
|
||||
padding-right: 4px;
|
||||
}
|
||||
|
||||
.chat-container-auth .user-item {
|
||||
min-height: 64px;
|
||||
padding: 10px 12px;
|
||||
border: 0;
|
||||
border-radius: 8px;
|
||||
grid-template-columns: 42px minmax(0, 1fr) auto;
|
||||
gap: 12px;
|
||||
background: rgba(255, 255, 255, 0.72);
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.chat-container-auth .user-item:hover,
|
||||
.chat-container-auth .user-item.is-active {
|
||||
background: #ffffff;
|
||||
box-shadow: 0 12px 28px rgba(25, 45, 34, 0.06);
|
||||
}
|
||||
|
||||
.chat-container-auth .user-item.gender-M,
|
||||
.chat-container-auth .user-item.gender-F,
|
||||
.chat-container-auth .user-item.gender-P,
|
||||
.chat-container-auth .user-item.gender-TM,
|
||||
.chat-container-auth .user-item.gender-TF {
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
.user-avatar {
|
||||
width: 42px;
|
||||
height: 42px;
|
||||
border-radius: 8px;
|
||||
position: relative;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
background: linear-gradient(145deg, #1d2b24 0%, #43544a 100%);
|
||||
color: #fff;
|
||||
font-weight: 800;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.user-avatar::before {
|
||||
content: attr(data-initial);
|
||||
}
|
||||
|
||||
.user-status {
|
||||
width: 9px;
|
||||
height: 9px;
|
||||
border-radius: 8px;
|
||||
position: absolute;
|
||||
right: -1px;
|
||||
bottom: 2px;
|
||||
background: #32c46b;
|
||||
border: 2px solid #ffffff;
|
||||
}
|
||||
|
||||
.chat-container-auth .user-name {
|
||||
font-size: 13px;
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.chat-container-auth .user-country {
|
||||
display: block;
|
||||
margin-top: 3px;
|
||||
font-size: 11px;
|
||||
color: #616f66;
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
.chat-container-auth .user-main {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.chat-container-auth .user-meta {
|
||||
color: #88978e;
|
||||
font-size: 11px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.chat-container-auth .content {
|
||||
border: 0;
|
||||
border-radius: 8px;
|
||||
background:
|
||||
radial-gradient(circle at 15% 100%, rgba(79, 152, 114, 0.15), transparent 24%),
|
||||
linear-gradient(120deg, #ffffff 0%, #f9faf9 52%, #f3f5f3 100%);
|
||||
box-shadow: 0 26px 70px rgba(29, 45, 36, 0.08);
|
||||
}
|
||||
|
||||
.chat-container-auth .chat-window {
|
||||
background: transparent;
|
||||
padding: 28px;
|
||||
}
|
||||
|
||||
.chat-container-auth .chat-input-container {
|
||||
border-top: 1px solid #edf2ee;
|
||||
background: rgba(255, 255, 255, 0.82);
|
||||
}
|
||||
|
||||
.chat-container-auth .imprint-container {
|
||||
height: 48px;
|
||||
min-height: 48px;
|
||||
border-top: 1px solid #eef3ef;
|
||||
background: #ffffff;
|
||||
color: #98a49d;
|
||||
font-size: 10px;
|
||||
letter-spacing: 0.12em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
@media (max-width: 720px) {
|
||||
.chat-container-auth {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.app-sidebar {
|
||||
width: 100%;
|
||||
min-height: 92px;
|
||||
padding: 12px;
|
||||
display: grid;
|
||||
grid-template-columns: auto minmax(0, 1fr) auto;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.sidebar-brand {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.sidebar-nav {
|
||||
flex-direction: row;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.sidebar-nav button {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.workspace-header {
|
||||
grid-template-columns: auto minmax(0, 1fr) auto;
|
||||
padding: 0 14px;
|
||||
}
|
||||
|
||||
.workspace-search {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 720px) {
|
||||
.app-sidebar {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.sidebar-profile {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.workspace-header {
|
||||
height: auto;
|
||||
min-height: 58px;
|
||||
grid-template-columns: 1fr auto;
|
||||
gap: 8px;
|
||||
padding: 8px 12px;
|
||||
}
|
||||
|
||||
.workspace-header .menu {
|
||||
grid-column: 1 / -1;
|
||||
justify-content: flex-start;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.chat-container-auth .horizontal-box-app {
|
||||
padding: 10px;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.chat-container-auth .user-list {
|
||||
max-height: 190px;
|
||||
}
|
||||
}
|
||||
|
||||
/* Authenticated shell: keep these overrides at the end so the base app shell cannot override them. */
|
||||
.chat-container.chat-container-auth {
|
||||
flex-direction: column;
|
||||
background: #edf7f1;
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .app-sidebar {
|
||||
width: 286px;
|
||||
padding: 30px 16px 14px;
|
||||
background: linear-gradient(180deg, #d6f4e7 0%, #d0efe2 100%);
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .sidebar-brand {
|
||||
color: #143d27;
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .sidebar-brand span {
|
||||
color: #3f8c65;
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .sidebar-nav button {
|
||||
min-height: 44px;
|
||||
border-radius: 10px;
|
||||
color: #5e8a73;
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .sidebar-nav button:hover,
|
||||
.chat-container.chat-container-auth .sidebar-nav button.is-active {
|
||||
background: #a6efc7;
|
||||
color: #114d2c;
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .sidebar-profile {
|
||||
border-radius: 10px;
|
||||
background: #c4f5d9;
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .app-workspace {
|
||||
background: #f8faf8;
|
||||
border-top: 1px solid #d6ddd8;
|
||||
border-right: 1px solid #d6ddd8;
|
||||
border-bottom: 1px solid #d6ddd8;
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .workspace-header {
|
||||
min-height: 82px;
|
||||
padding: 0 24px;
|
||||
background: linear-gradient(180deg, #dcf5ea 0%, #d7f1e6 100%);
|
||||
border-bottom: 1px solid #cfd8d2;
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .workspace-header h1 {
|
||||
color: #183d27;
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .workspace-search,
|
||||
.chat-container.chat-container-auth .icon-button {
|
||||
background: #cbeee0;
|
||||
color: #165f37;
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .horizontal-box-app {
|
||||
gap: 18px;
|
||||
padding: 12px 14px 16px;
|
||||
background: linear-gradient(90deg, #fbfbfa 0%, #f6f8f6 54%, #eaf4ee 100%);
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .user-list {
|
||||
width: 318px;
|
||||
padding: 14px;
|
||||
border: 1px solid #e1e8e3;
|
||||
border-radius: 12px;
|
||||
background: #ffffff;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .content {
|
||||
border-radius: 34px;
|
||||
background:
|
||||
radial-gradient(circle at 17% 100%, rgba(50, 125, 86, 0.24), transparent 28%),
|
||||
linear-gradient(120deg, #f7f6f4 0%, #f1f0ed 54%, #e8f0eb 100%);
|
||||
box-shadow: 0 28px 80px rgba(22, 40, 30, 0.08);
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .menu button {
|
||||
color: #527a66;
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .menu button:hover,
|
||||
.chat-container.chat-container-auth .menu button.is-active {
|
||||
color: #18683d;
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .menu button.is-active::after {
|
||||
background: #18683d;
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .user-list h3 {
|
||||
font-size: 17px;
|
||||
line-height: 1.2;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0;
|
||||
color: #17643c;
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .user-item {
|
||||
min-height: 64px;
|
||||
border: 1px solid #edf2ee;
|
||||
border-radius: 12px;
|
||||
background: rgba(255, 255, 255, 0.78);
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .user-item:hover,
|
||||
.chat-container.chat-container-auth .user-item.is-active {
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .chat-input-container {
|
||||
border-top: 1px solid #d9e5de;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .chat-input-container button {
|
||||
background: #1f6f43;
|
||||
border-color: #1b633b;
|
||||
}
|
||||
|
||||
.chat-container.chat-container-auth .imprint-container {
|
||||
min-height: 58px;
|
||||
border-top: 1px solid #d0d6d2;
|
||||
background: #f0f2f1;
|
||||
}
|
||||
|
||||
@media (max-width: 720px) {
|
||||
.chat-container.chat-container-auth {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.auth-main-layout {
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user