duckling/sass/_article-list.scss
2025-08-26 09:04:42 +02:00

357 lines
6.7 KiB
SCSS

#article-list {
flex-direction: column;
}
#article-list {
article {
padding: 1.5rem;
}
}
#article-list, #subproject-list {
display: flex;
gap: 1rem;
margin-block-start: 2rem;
article {
--bg-overlay: var(--accent-color-alpha);
position: relative;
transition: var(--transition);
background-position: center;
background-size: cover;
background-color: var(--fg-contrast-soft);
border-radius: var(--rounded-corner);
overflow: hidden;
&:hover {
h3::after {
transform: none;
opacity: 1;
:root[dir*="rtl"] & {
transform: scaleX(-1);
}
}
}
&:active:not(:has(.tag:active)) {
transform: var(--active);
}
&:has(> a:focus-visible) {
animation: focus-in var(--transition);
outline: 0.125rem solid var(--accent-color);
outline-offset: 0.125rem;
}
@supports not selector(:focus-visible) {
&:has(> a:focus) {
animation: focus-in var(--transition);
outline: 0.125rem solid var(--accent-color);
outline-offset: 0.125rem;
}
}
& > a {
position: absolute;
inset: 0;
border-radius: var(--rounded-corner);
border-start-end-radius: 2.125rem;
border-end-end-radius: 1.8125rem;
}
h3 {
margin: 0;
font-weight: bold;
line-height: 1;
font-family: var(--font-system-ui);
display: flex;
align-items: center;
&::after {
-webkit-mask-image: var(--icon-right);
display: inline-block;
position: relative;
transform: translateX(-0.25rem);
opacity: 0;
mask-image: var(--icon-right);
transition: var(--transition);
margin-inline-start: 0.25rem;
background-color: currentColor;
width: 1rem;
height: 1rem;
pointer-events: none;
content: "";
:root[dir*="rtl"] & {
transform: scaleX(-1) translateX(-0.25rem);
}
}
}
.tags {
position: relative;
justify-content: flex-end;
z-index: 1;
margin: 0;
a {
margin-top: 10px;
&:hover {
background-color: var(--accent-color-alpha);
color: var(--accent-color);
}
}
}
&.draft,
&.archive,
&.featured,
&.hot,
&.poor {
&::before {
position: absolute;
transform: translateY(-50%);
opacity: var(--disabled-opacity);
mask-size: cover;
transition: var(--transition-longer);
inset-block-start: 50%;
inset-inline-end: -3rem;
width: 12rem;
height: 12rem;
content: "";
}
&:hover::before {
transform: translateY(-50%) rotate(-10deg) scale(1.5);
}
:root[dir*="rtl"] &:hover::before {
transform: translateY(-50%) rotate(10deg) scale(1.5);
}
}
&.draft {
--bg-overlay: var(--fg-muted-1-transparent);
&::before {
-webkit-mask-image: var(--icon-pencil);
mask-image: var(--icon-pencil);
background-color: var(--fg-muted-1-transparent);
}
h3 {
color: var(--fg-muted-4);
}
.badge {
background-color: var(--fg-muted-1-transparent);
color: var(--fg-muted-5);
.icon {
-webkit-mask-image: var(--icon-pencil);
mask-image: var(--icon-pencil);
}
}
.tags a {
background-color: var(--fg-muted-1-transparent-transparent);
color: var(--fg-muted-5);
&:hover {
background-color: var(--fg-muted-5);
color: var(--fg-contrast);
}
}
}
&.archive {
--bg-overlay: var(--purple-bg);
.badge {
background-color: var(--purple-bg);
color: var(--purple-fg);
.icon {
-webkit-mask-image: var(--icon-archive);
mask-image: var(--icon-archive);
}
}
}
&.featured {
--bg-overlay: var(--yellow-bg);
&:hover {
&::before {
transform: translateY(-50%) rotate(62deg) scale(1.5);
}
:root[dir*="rtl"] &::before {
transform: translateY(-50%) rotate(-62deg) scale(1.5);
}
}
.badge:not(.subproject-badge) {
background-color: var(--accent-color-alpha);
}
.badge {
color: var(--accent-color);
.icon {
-webkit-mask-image: var(--icon-star);
mask-image: var(--icon-star);
}
}
}
&.hot {
--bg-overlay: var(--red-bg);
.badge {
background-color: var(--red-bg);
color: var(--red-fg);
.icon {
-webkit-mask-image: var(--icon-fire);
mask-image: var(--icon-fire);
}
}
}
&.poor {
--bg-overlay: var(--brown-bg);
.badge {
background-color: var(--brown-bg);
color: var(--brown-fg);
.icon {
-webkit-mask-image: var(--icon-poop);
mask-image: var(--icon-poop);
}
}
}
.badge {
float: inline-end;
box-shadow: var(--edge-highlight);
border-radius: 999px;
padding: 0.375rem 0.75rem;
height: fit-content;
font-weight: bold;
white-space: nowrap;
.icon {
vertical-align: -0.125em;
margin-inline-end: 0.25rem;
}
}
.details {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
gap: 0.25rem;
margin-block-start: 1rem;
border-block-start: max(1px, 0.0625rem) solid var(--fg-muted-2);
padding-block-start: 0.5rem;
}
}
}
#paginator {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
gap: 0.25rem;
margin-block-start: 4rem;
#paginator-previous,
#paginator-next {
display: inline-block;
transition: var(--transition);
box-shadow: var(--edge-highlight);
border-radius: 1rem;
background-color: var(--fg-muted-1-transparent);
padding: 0.7rem;
color: var(--fg-muted-4);
line-height: 0;
text-decoration: None;
.icon {
transition: var(--transition);
:root[dir*="rtl"] & {
transform: scaleX(-1);
}
}
}
a#paginator-previous,
a#paginator-next {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
&:hover {
background-color: var(--fg-muted-2);
color: var(--fg-muted-5);
}
&:active {
transform: var(--active);
border-radius: 1rem;
}
}
span#paginator-previous,
span#paginator-next {
opacity: var(--disabled-opacity);
cursor: not-allowed;
}
#paginator-previous .icon {
-webkit-mask-image: var(--icon-previous);
mask-image: var(--icon-previous);
}
#paginator-next .icon {
-webkit-mask-image: var(--icon-next);
mask-image: var(--icon-next);
}
#paginator-last .icon {
-webkit-mask-image: var(--icon-last);
mask-image: var(--icon-last);
}
#paginator-counter {
display: inline-block;
transition: var(--transition);
box-shadow: var(--edge-highlight);
border-radius: var(--rounded-corner-small);
background-color: var(--accent-color-alpha);
padding: 0.5rem 0.625rem;
color: var(--accent-color);
font-weight: bold;
line-height: 1;
font-variant-numeric: tabular-nums;
}
&:has(a#paginator-previous:active) #paginator-counter {
border-start-start-radius: 1rem;
border-end-start-radius: 1rem;
}
&:has(a#paginator-next:active) #paginator-counter {
border-start-end-radius: 1rem;
border-end-end-radius: 1rem;
}
}