Files
SHiNE-server/shine-UI/styles/components/topbar.css
T

223 lines
5.9 KiB
CSS

:root {
--app-topbar-base-height: 64px;
--app-topbar-title-size: 18px;
--app-topbar-bg: #05070A;
--app-topbar-fg: #F7FBFF;
--app-topbar-gold: var(--app-topbar-fg);
--app-topbar-blue-glow: rgba(92, 190, 255, 0.72);
--app-topbar-blue-glow-soft: rgba(72, 145, 255, 0.34);
}
.topbar {
width: 100%;
min-height: calc(var(--app-topbar-base-height) + env(safe-area-inset-top));
margin: 0 0 14px;
padding: calc(10px + env(safe-area-inset-top)) 0 10px;
box-sizing: border-box;
display: grid;
grid-template-columns: minmax(44px, 1fr) minmax(0, auto) minmax(44px, 1fr);
align-items: center;
gap: 8px;
}
.topbar-slot .topbar {
height: calc(var(--app-topbar-base-height) + env(safe-area-inset-top));
min-height: calc(var(--app-topbar-base-height) + env(safe-area-inset-top));
max-height: calc(var(--app-topbar-base-height) + env(safe-area-inset-top));
margin: 0;
padding-top: env(safe-area-inset-top);
padding-bottom: 0;
border: 0;
border-radius: 0;
background: transparent;
box-shadow: none;
backdrop-filter: none;
-webkit-backdrop-filter: none;
}
.topbar__left,
.topbar__center,
.topbar__right {
min-width: 0;
display: flex;
align-items: center;
}
.topbar__left { width: 100%; justify-content: flex-start; gap: 8px; }
.topbar__center { justify-content: center; overflow: hidden; text-align: center; }
.topbar__right { width: 100%; justify-content: flex-end; gap: 8px; }
.topbar__title {
margin: 0;
min-width: 0;
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-family: var(--font-main);
font-size: var(--app-topbar-title-size);
font-weight: 700;
line-height: 22px;
letter-spacing: 0;
color: var(--app-topbar-fg);
text-align: center;
text-shadow: 0 0 5px var(--app-topbar-blue-glow), 0 0 14px var(--app-topbar-blue-glow-soft);
}
.topbar__left-label {
display: inline-block;
max-width: 120px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 12px;
color: #a8bcdf;
}
.topbar__back {
width: 40px;
height: 40px;
min-width: 40px;
min-height: 40px;
padding: 0;
display: inline-flex;
align-items: center;
justify-content: center;
font-family: var(--font-main);
font-size: 24px;
line-height: 1;
font-weight: 500;
}
.topbar-slot .topbar__action,
.topbar-slot .topbar__back {
min-height: 40px;
height: 40px;
color: var(--app-topbar-fg);
text-shadow: 0 0 5px var(--app-topbar-blue-glow), 0 0 12px var(--app-topbar-blue-glow-soft);
}
.topbar-slot .topbar__action svg,
.topbar-slot .topbar__back svg {
filter: drop-shadow(0 0 3px var(--app-topbar-blue-glow)) drop-shadow(0 0 7px var(--app-topbar-blue-glow-soft));
}
.topbar--profile .topbar__left { visibility: hidden; }
@media (prefers-reduced-motion: reduce) {
.topbar__action,
.topbar__back { transition: none; }
}
/* Custom center content used by chat/channel/list screens still follows the same TopBar rhythm. */
.topbar-slot {
padding: 0 12px;
background: var(--app-topbar-bg);
}
.topbar__center .app-topbar-title-action,
.topbar__center .channels-top-title,
.topbar__center .dm-head-filter-title {
margin: 0;
min-width: 0;
max-width: 100%;
min-height: 40px;
padding: 0 4px;
display: inline-flex;
align-items: center;
justify-content: center;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-family: var(--font-main);
font-size: var(--app-topbar-title-size);
font-weight: 700;
line-height: 22px;
text-align: center;
}
.topbar__center .app-topbar-title-action::before,
.topbar__center .app-topbar-title-action::after,
.topbar__center .channels-top-title::before,
.topbar__center .channels-top-title::after,
.topbar__center .dm-head-filter-title::before,
.topbar__center .dm-head-filter-title::after {
background: transparent;
background-image: none;
border-color: transparent;
box-shadow: none;
}
.topbar-slot .topbar__center button,
.topbar-slot .topbar__center button:hover,
.topbar-slot .topbar__center button:focus,
.topbar-slot .topbar__center button:active,
.topbar-slot .topbar__center button:focus-visible {
color: #f7fbff;
background: transparent;
background-image: none;
border: 0;
box-shadow: none;
text-shadow:
0 0 5px rgba(92, 190, 255, 0.72),
0 0 12px rgba(72, 145, 255, 0.34);
backdrop-filter: none;
-webkit-backdrop-filter: none;
filter: drop-shadow(0 0 4px rgba(92, 190, 255, 0.56));
}
.topbar-slot .topbar__center button::before,
.topbar-slot .topbar__center button::after {
background: transparent;
background-image: none;
border-color: transparent;
box-shadow: none;
}
/* TopBar owns its button interaction states. */
.topbar-slot .topbar__action,
.topbar-slot .topbar__back {
filter: drop-shadow(0 0 4px rgba(92, 190, 255, 0.56));
}
.topbar-slot .topbar__action:active,
.topbar-slot .topbar__back:active,
.topbar-slot .topbar__center button:active {
background: rgba(0, 0, 0, 0.12);
box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.58), inset 0 -1px 2px rgba(255, 255, 255, 0.08);
transform: translateY(1px) scale(0.97);
}
.topbar-slot .topbar__action:focus-visible,
.topbar-slot .topbar__back:focus-visible,
.topbar-slot .topbar__center button:focus-visible {
color: #ffffff;
outline: none;
filter: drop-shadow(0 0 5px rgba(110, 205, 255, 0.82)) drop-shadow(0 0 10px rgba(72, 145, 255, 0.42));
}
.topbar-slot .topbar__action[aria-expanded='true'],
.topbar-slot .topbar__action[data-open='true'],
.topbar-slot .topbar__center button[aria-expanded='true'],
.topbar-slot .topbar__center button[data-open='true'] {
background: rgba(0, 0, 0, 0.16);
box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.58), inset 0 -1px 2px rgba(255, 255, 255, 0.08);
transform: translateY(1px) scale(0.97);
filter: brightness(0.9);
}
/* Migrated from legacy components.css during Stage 3 ownership split. */
.header-icon-svg {
display: block;
width: 1em;
height: 1em;
}
.header-icon-svg--phone,
.header-icon-svg--search {
width: 22px;
height: 22px;
}