Added ArticleHeader

This commit is contained in:
2025-10-02 18:22:50 +02:00
parent ae6da529cf
commit 2e30b1d6ed
13 changed files with 247 additions and 38 deletions

View File

@@ -4,8 +4,8 @@ cover:
src: /images/covers/meta/index/cover/src.jpeg src: /images/covers/meta/index/cover/src.jpeg
alt: Pile of Skulls alt: Pile of Skulls
caption: >- caption: >-
To crush your players, see them driven before you, and to hear their To crush your players, see them driven before you, and to hear the wailings
wailings of their characters of their wenches
showInHeader: true showInHeader: true
meta: meta:
publicationDate: 2025-10-01T10:30:00.000Z publicationDate: 2025-10-01T10:30:00.000Z

View File

@@ -10,13 +10,18 @@
@media screen and (--bp-margin) { @media screen and (--bp-margin) {
@mixin px 0; @mixin px 0;
position: relative;
display: flex; display: flex;
gap: var(--spacing-generous); gap: var(--spacing-generous);
max-width: none; max-width: none;
font-size: clamp(1rem, 2.5vw, 1.25rem);
& .content { & .content {
flex: 1 1 auto; flex: 1 1 auto;
min-width: 50ch; min-width: 40ch;
max-width: 75ch; max-width: 75ch;
} }
} }

View File

@@ -0,0 +1,26 @@
.cover {
@mixin border-t var(--size-3), solid, var(--color-surface-inverse);
}
.image {
width: 100%;
height: auto;
max-height: 60vh;
object-fit: cover;
}
.caption {
padding: var(--spacing-snug);
font-family: var(--font-mono);
color: var(--color-text-inverse);
background-color: var(--color-surface-inverse);
}
.captionwrapper {
font-size: var(--font-size-responsive);
text-align: center;
}
.captiontext {
font-size: var(--typo-size-sm);
}

View File

@@ -0,0 +1,4 @@
.container {
margin-bottom: var(--spacing-comfortable);
border-bottom: var(--size-4) solid var(--color-text-primary);
}

View File

@@ -0,0 +1,71 @@
.meta {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: var(--spacing-comfortable);
font-size: var(--font-size-responsive);
}
.section {
@mixin py var(--spacing-snug);
}
.label {
@mixin mb var(--spacing-tight);
@mixin pb var(--spacing-tight);
@mixin border-b var(--size-1), solid, var(--color-surface-inverse);
display: block;
font-size: var(--typo-size-xs);
text-transform: uppercase;
letter-spacing: var(--typo-spacing-comfortable);
}
.author {
@mixin anim-txt-characterglitch;
font-family: var(--font-mono);
font-size: var(--typo-size-sm);
font-weight: var(--typo-weight-bold);
color: var(--color-text-secondary);
text-transform: uppercase;
&:hover {
color: var(--color-primary);
}
}
.taglist {
display: flex;
flex-wrap: wrap;
gap: var(--spacing-tight);
}
.tag {
padding: var(--spacing-tight) var(--spacing-snug);
border: var(--size-1) solid var(--color-palette-charcoal-gray);
font-family: var(--font-mono), monospace;
font-size: var(--typo-size-sm);
font-weight: var(--typo-weight-bold);
text-transform: uppercase;
letter-spacing: var(--typo-spacing-relaxed);
background: var(--color-palette-charcoal-gray);
& .link {
color: var(--color-palette-off-white);
transition: color 0.5s ease-in-out;
&:hover {
color: var(--color-primary);
}
}
}
.updatedate {
font-family: var(--font-mono), monospace;
font-size: var(--typo-size-sm);
font-weight: var(--typo-weight-bold);
color: var(--color-text-secondary);
text-transform: uppercase;
}

View File

@@ -31,22 +31,20 @@ export default function Meta({
{tags && tags.length > 0 && ( {tags && tags.length > 0 && (
<div className={styles.section}> <div className={styles.section}>
<span className={styles.label}>Tags</span> <span className={styles.label}>Tags</span>
<span className={styles.author}> <ul className={styles.taglist}>
<ul className={styles.taglist}> {tags.map((tag) => (
{tags.map((tag) => ( <li key={tag.slug} className={styles.tag}>
<li key={tag.slug} className={styles.tag}> <Link className={styles.link} href={`/tags/${tag.slug}`}>
<Link className={styles.link} href={`/tags/${tag.slug}`}> {tag.name}
{tag.name} </Link>
</Link> </li>
</li> ))}
))} </ul>
</ul>
</span>
</div> </div>
)} )}
{publicationDate && ( {publicationDate && (
<div className={styles.metasection}> <div className={styles.section}>
<span className={styles.metalabel}>Last Update</span> <span className={styles.label}>Last Update</span>
<time className={styles.updatedate}> <time className={styles.updatedate}>
{updateDate {updateDate

View File

@@ -0,0 +1,42 @@
.overline {
@mixin px var(--spacing-comfortable);
background-color: var(--color-surface-inverse);
}
.wrapper {
@mixin py var(--spacing-snug);
display: flex;
align-items: center;
justify-content: space-between;
font-size: var(--typo-size-responsive);
}
.breadcrumbs {
display: flex;
font-family: var(--font-mono);
font-size: var(--typo-size-sm);
color: var(--color-text-inverse);
}
.current {
font-weight: var(--typo-weight-bold);
color: var(--color-primary);
}
.link {
color: var(--color-text-inverse);
transition: color 0.5s ease-in-out;
&:hover {
color: var(--color-tertiary);
}
}
.publicationDate {
font-family: var(--font-mono), monospace;
font-size: var(--typo-size-xs);
font-weight: var(--typo-weight-bold);
color: var(--color-text-inverse);
}

View File

@@ -30,17 +30,19 @@ export default function Overline({
}); });
return ( return (
<div className={styles.overline}> <div className={styles.overline}>
<ul className={styles.breadcrumbs}> <div className={styles.wrapper}>
<li className={styles.crumb}> <ul className={styles.breadcrumbs}>
<Link href="/" className={styles.link}> <li className={styles.crumb}>
dave-dmg.de <Link href="/" className={styles.link}>
</Link> dave-dmg.de
</li> </Link>
{breadcrumber} </li>
</ul> {breadcrumber}
<time className={styles.publicationDate}> </ul>
{toMilitaryDTG(publicationDate)} <time className={styles.publicationDate}>
</time> {toMilitaryDTG(publicationDate)}
</time>
</div>
</div> </div>
); );
} }

View File

@@ -0,0 +1,13 @@
.wrapper {
@mixin py var(--spacing-cozy);
}
.title {
font-family: var(--el-h1-font-family), serif;
font-size: var(--el-h1-font-size);
font-weight: var(--el-h1-font-weight);
line-height: var(--el-h1-line-height);
color: var(--el-h1-color);
text-transform: var(--el-h1-text-transform);
letter-spacing: var(--el-h1-letter-spacing);
}

View File

@@ -1,5 +1,4 @@
import styles from './Title.module.css'; import styles from './Title.module.css';
import { JSX } from 'react';
interface TitleProps { interface TitleProps {
title: string; title: string;

View File

@@ -1,6 +1,6 @@
.container { .container {
flex: 1 0 auto; flex: 1 0 auto;
min-width: 16rem; min-width: var(--size-96);
} }
.wrapper { .wrapper {
@@ -17,10 +17,10 @@
position: relative; position: relative;
padding-left: var(--size-12); padding-left: var(--size-12);
font-family: var(--font-mono); font-family: var(--font-mono);
@media screen and (--bp-margin) { @media screen and (--bp-margin) {
min-width: 16rem; min-width: var(--size-64);
margin-right: var(--spacing-generous); margin-top: 0;
padding: var(--spacing-cozy) var(--spacing-cozy) var(--spacing-cozy) var(--size-12) ; padding: var(--spacing-cozy) var(--spacing-cozy) var(--spacing-cozy) var(--size-12) ;
border: var(--size-1) solid var(--color-surface-inverse); border: var(--size-1) solid var(--color-surface-inverse);

View File

@@ -0,0 +1,49 @@
@define-mixin border-l $width: var(--size-1), $style: solid, $color: var(--color-surface-inverse) {
border-left: $width $style $color;
}
@define-mixin border-r $width: var(--size-1), $style: solid, $color: var(--color-surface-inverse) {
border-right: $width $style $color;
}
@define-mixin border-t $width: var(--size-1), $style: solid, $color: var(--color-surface-inverse) {
border-top: $width $style $color;
}
@define-mixin border-b $width: var(--size-1), $style: solid, $color: var(--color-surface-inverse) {
border-bottom: $width $style $color;
}
@define-mixin border-x $width: var(--size-1), $style: solid, $color: var(--color-surface-inverse) {
border-right: $width $style $color;
border-left: $width $style $color;
}
@define-mixin border-y $width: var(--size-1), $style: solid, $color: var(--color-surface-inverse) {
border-top: $width $style $color;
border-bottom: $width $style $color;
}
@define-mixin rounded-top $radius {
border-top-left-radius: $radius;
border-top-right-radius: $radius;
}
@define-mixin rounded-bottom $radius {
border-bottom-right-radius: $radius;
border-bottom-left-radius: $radius;
}
@define-mixin rounded-left $radius {
border-top-left-radius: $radius;
border-bottom-left-radius: $radius;
}
@define-mixin rounded-right $radius {
border-top-left-radius: $radius;
border-bottom-left-radius: $radius;
}
@define-mixin circle {
border-radius: 50%;
}

View File

@@ -1,12 +1,12 @@
@efine-mixin ma $spacing { @define-mixin ma $spacing {
margin: $spacing; margin: $spacing;
} }
@efine-mixin mt $spacing { @define-mixin mt $spacing {
margin-top: $spacing; margin-top: $spacing;
} }
@efine-mixin mb $spacing { @define-mixin mb $spacing {
margin-bottom: $spacing; margin-bottom: $spacing;
} }
@@ -41,15 +41,15 @@
} }
} }
@efine-mixin pa $spacing { @define-mixin pa $spacing {
padding: $spacing; padding: $spacing;
} }
@efine-mixin pt $spacing { @define-mixin pt $spacing {
padding-top: $spacing; padding-top: $spacing;
} }
@efine-mixin pb $spacing { @define-mixin pb $spacing {
padding-bottom: $spacing; padding-bottom: $spacing;
} }