character-ref/src/components/profile.webc

114 lines
2.6 KiB
Text

<aside webc:root="override">
<div class="avatar">
<slot name="avatar"></slot>
</div>
<p class="name">
<slot name="name"></slot>
</p>
<p class="species">
<slot name="species"></slot>
</p>
<slot></slot>
</aside>
<style webc:scoped="profile">
:host {
--sidebar-position: static;
--sidebar-padding: 1rem;
--sidebar-grid-columns: auto 1fr;
--sidebar-grid-areas: 'avatar name' 'avatar species' 'traits traits';
--sidebar-top-text-align: start;
--sidebar-avatar-size: 5em;
position: var(--sidebar-position);
top: var(--page-spacing);
grid-area: info;
display: grid;
grid-template-columns: var(--sidebar-grid-columns);
grid-template-areas: var(--sidebar-grid-areas);
gap: 0.75em;
width: 100%;
max-width: 65ch;
background-color: var(--clr-box-background);
border: var(--border-thin) solid var(--clr-box-border);
border-radius: var(--border-radius);
padding-block: var(--sidebar-padding);
padding-inline: var(--sidebar-padding);
transform: translate(0);
transform-style: preserve-3d;
@media (min-width: 64em) {
--sidebar-position: sticky;
--sidebar-padding: 1.5rem;
--sidebar-grid-columns: 1fr;
--sidebar-grid-areas: 'avatar' 'name' 'species' 'traits';
--sidebar-top-text-align: center;
--sidebar-avatar-size: 10em;
}
}
:host::before {
content: '';
position: absolute;
inset: -0.5em 0.5em 0.5em -0.5em;
background: radial-gradient(
ellipse at bottom right,
oklch(from var(--clr-gradient-box-shadow) calc(l - 0.2) c h) 60%,
oklch(from var(--clr-gradient-box-shadow) calc(l + 0.1) c h)
);
border-radius: inherit;
transform: translate3d(0, 0, -1px);
z-index: -1;
}
:host .avatar {
grid-area: avatar;
display: grid;
grid-template-columns: subgrid;
justify-items: center;
align-items: center;
& :where(picture, img) {
display: block;
width: var(--sidebar-avatar-size);
height: var(--sidebar-avatar-size);
aspect-ratio: 1/1;
border-radius: 1em;
object-fit: cover;
}
}
:host :where(.name, .species) {
font-family: var(--font-family-headings);
text-align: var(--sidebar-top-text-align);
}
:host .name {
grid-area: name;
align-self: end;
font-size: 1.375em;
font-weight: bold;
margin: 0;
}
:host .species {
grid-area: species;
align-self: start;
margin: 0;
}
:host > :last-child {
grid-area: traits;
border-block-start: var(--border-thin) solid var(--clr-box-border);
padding-block: 0.75em 0;
}
</style>