@use 'iro-sass/src/index' as iro; @use '../functions' as fn; @mixin status($size) { @include iro.bem-elem('status') { width: fn.dim(--#{$size} --indicator-size); height: fn.dim(--#{$size} --indicator-size); @include iro.bem-next-elem('content') { mask-image: radial-gradient( circle calc(.5 * fn.dim(--#{$size} --indicator-size) + fn.dim(--indicator-spacing)) at calc(100% - .5 * fn.dim(--#{$size} --indicator-size)) calc(100% - .5 * fn.dim(--#{$size} --indicator-size)), transparent 95%, #fff ); } } } @include iro.props-namespace('avatar') { @include iro.props-store(( --dims: ( --150: ( --size: fn.global-dim(--size --600), --font-size: fn.global-dim(--font-size --150), --indicator-size: fn.global-dim(--size --175), ), --100: ( --size: fn.global-dim(--size --450), --font-size: fn.global-dim(--font-size --100), --indicator-size: fn.global-dim(--size --125), ), --75: ( --size: fn.global-dim(--size --325), --font-size: fn.global-dim(--font-size --75), --indicator-size: fn.global-dim(--size --100), ), --50: ( --size: fn.global-dim(--size --225), --font-size: fn.global-dim(--font-size --50), --indicator-size: fn.global-dim(--size --85), ), --indicator-spacing: fn.global-dim(--size --40), --rounding: 25%, ), ), 'dims'); @include iro.props-store(( --colors: ( --h: 354, --s: 44%, --l: 45%, --key-focus: ( --border: fn.global-color(--focus --fill), --shadow: fn.global-color(--focus --shadow), ), ), ), 'colors'); @include iro.bem-object(iro.props-namespace()) { display: inline-block; position: relative; font-size: fn.dim(--100 --font-size); font-style: normal; vertical-align: .05em; &::after { content: ''; display: block; position: absolute; top: 0; right: 0; bottom: 0; left: 0; border: 2px solid transparent; border-radius: fn.dim(--rounding); } @include iro.bem-elem('status') { position: absolute; right: 0; bottom: 0; } @include status(100); @include iro.bem-elem('content') { display: block; width: fn.dim(--100 --size); height: fn.dim(--100 --size); border-radius: fn.dim(--rounding); color: #fff; line-height: fn.dim(--100 --size); text-align: center; object-fit: cover; object-position: center center; @include iro.bem-modifier('colored') { background-color: hsl(fn.color(--h), fn.color(--s), fn.color(--l)); } } @include iro.bem-modifier('circle') { &::after { border-radius: 100%; } @include iro.bem-elem('content') { border-radius: 100%; } } @include iro.bem-modifier('placeholder') { @include iro.bem-elem('content') { background-color: hsl(0, 0%, fn.color(--l)); } } @include iro.bem-modifier('colored') { @include iro.bem-elem('content') { background-color: hsl(fn.color(--h), fn.color(--s), fn.color(--l)); } } @each $size in 50 75 150 { @include iro.bem-modifier($size) { font-size: fn.dim(--#{$size} --font-size); @include status($size); @include iro.bem-elem('content') { width: fn.dim(--#{$size} --size); height: fn.dim(--#{$size} --size); line-height: fn.dim(--#{$size} --size); } } } @include iro.bem-at-theme('keyboard') { &:focus { &::after { border-color: fn.color(--key-focus --border); box-shadow: fn.color(--key-focus --shadow); } } } } }