/* 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; }