SHA256
223 lines
5.9 KiB
CSS
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;
|
|
}
|