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

272 lines
5.1 KiB
CSS

/* Shared avatar component styles. */
.avatar-preview-circle {
width: 124px;
height: 124px;
margin: 0 auto;
border-radius: 50%;
overflow: hidden;
border: 1px solid rgba(155, 182, 233, 0.46);
background: rgba(13, 26, 50, 0.86);
box-shadow: inset 0 0 0 1px rgba(240, 248, 255, 0.1);
}
.avatar-preview-circle img {
width: 100%;
height: 100%;
object-fit: cover;
object-position: center;
display: block;
}
.avatar-wizard-preview {
width: 140px;
height: 140px;
}
.avatar-wizard-meta {
font-size: 13px;
line-height: 1.35;
color: #d9e7ff;
word-break: break-word;
}
.avatar-wizard-error {
min-height: 18px;
font-size: 13px;
color: #f6a8b3;
}
.avatar-wizard-actions {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
}
.avatar-wizard-choice-grid {
display: grid;
gap: 10px;
}
.avatar {
width: 40px;
height: 40px;
min-width: 40px;
min-height: 40px;
flex: 0 0 auto;
aspect-ratio: 1 / 1;
border-radius: 50%;
background: linear-gradient(130deg, #3c4f73, #243352);
display: grid;
place-items: center;
font-weight: 700;
color: #e5ebff;
font-size: 14px;
}
.avatar.avatar-xs,
.avatar.xs {
width: 20px;
height: 20px;
min-width: 20px;
min-height: 20px;
font-size: 9px;
}
.avatar.avatar-sm,
.avatar.small {
width: 28px;
height: 28px;
min-width: 28px;
min-height: 28px;
font-size: 10px;
}
.avatar.avatar-md,
.avatar.medium {
width: 40px;
height: 40px;
min-width: 40px;
min-height: 40px;
font-size: 14px;
}
.avatar.avatar-lg,
.avatar.big {
width: 56px;
height: 56px;
min-width: 56px;
min-height: 56px;
font-size: 18px;
}
.avatar.avatar-xl,
.avatar.large,
.avatar.xlarge {
width: 96px;
height: 96px;
min-width: 96px;
min-height: 96px;
font-size: 26px;
}
.avatar-image {
position: relative;
overflow: hidden;
display: grid;
place-items: center;
}
.avatar-image > .avatar-fallback,
.avatar-image > img {
grid-area: 1 / 1;
}
.avatar-fallback {
width: 100%;
height: 100%;
display: grid;
place-items: center;
opacity: 1;
transition: opacity 120ms ease;
}
.avatar-image img {
width: 100%;
height: 100%;
object-fit: cover;
object-position: center;
border-radius: 50%;
display: block;
opacity: 0;
transition: opacity 120ms ease;
}
.avatar-image.has-image img {
opacity: 1;
}
.avatar-image.has-image .avatar-fallback {
opacity: 0;
visibility: hidden;
}
.avatar img {
width: 100%;
height: 100%;
display: block;
object-fit: cover;
}
/* ===== Единый шаблон аватаров (2026-08-22) =====
* Базовая аватарка повторяет принцип орбов экрана «Связи»:
* - fallback: нейтральный серый круг + белые инициалы;
* - фото занимает тот же внутренний круг;
* - стеклянный внешний круг остаётся поверх всегда, независимо от наличия фото;
* - усиленное свечение включается модификатором .avatar-glow, не меняя геометрию аватара.
*/
.avatar.avatar-image.avatar-framed {
position: relative;
overflow: visible;
isolation: isolate;
display: grid;
place-items: center;
border: 0;
background: transparent;
color: #ffffff;
box-shadow: none;
}
.avatar.avatar-image.avatar-framed > .avatar-fallback,
.avatar.avatar-image.avatar-framed > .avatar-photo {
grid-area: 1 / 1;
place-self: center;
width: 92.5%;
height: 92.5%;
border-radius: 50%;
z-index: 1;
}
.avatar.avatar-image.avatar-framed > .avatar-fallback {
display: grid;
place-items: center;
overflow: hidden;
background: #454b55;
color: #ffffff;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.42);
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, 0.08),
inset 0 -8px 16px rgba(0, 0, 0, 0.16);
}
.avatar.avatar-image.avatar-framed > .avatar-photo {
display: block;
object-fit: cover;
object-position: center;
opacity: 0;
transition: opacity 120ms ease;
}
.avatar.avatar-image.avatar-framed.has-image > .avatar-photo {
opacity: 1;
}
.avatar.avatar-image.avatar-framed.has-image > .avatar-fallback {
opacity: 0;
visibility: hidden;
}
/* Второй круг — тот же стеклянный overlay, который используется в «Связях». */
.avatar.avatar-image.avatar-framed::after {
content: "";
position: absolute;
inset: 50% auto auto 50%;
width: 119%;
height: 119%;
transform: translate(-50%, -50%);
border: 0;
border-radius: 0;
background: url("../assets/glass_overlay_faithful.png") center / contain no-repeat;
box-shadow: none;
opacity: 1;
pointer-events: none;
z-index: 3;
}
/* Опциональный усиленный ореол для состояний «сияющий» и будущих экранов. */
.avatar.avatar-image.avatar-framed.avatar-glow::before {
content: "";
position: absolute;
inset: -16%;
border-radius: 50%;
background: radial-gradient(circle, rgba(139, 232, 255, 0.36) 0%, rgba(116, 217, 255, 0.14) 48%, rgba(116, 217, 255, 0) 74%);
filter: blur(3px);
pointer-events: none;
z-index: -1;
}