first commit

This commit is contained in:
julien
2026-03-20 22:16:20 +01:00
commit 42a4ba3e9a
136 changed files with 10141 additions and 0 deletions

View File

@@ -0,0 +1,69 @@
@use "../../core/variables" as *;
@use "../../core/mixins" as *;
// =============================================================
// Page d'accueil — liste des articles
// =============================================================
// Les styles de structure des cartes sont dans components/_card.scss.
// Ce fichier surcharge uniquement les éléments spécifiques au contexte blog.
// Lien d'action "Lire la suite →" — élément BEM dédié plutôt qu'un sélecteur
// descendant sur <a>, pour respecter BEM et éviter les collisions de styles
.card__actions-link {
font-size: $font-size-sm;
color: $color-primary;
text-decoration: none;
@include interactive-transition;
&:hover {
text-decoration: underline;
}
&:focus-visible {
@include focus-ring;
border-radius: $radius-sm;
}
}
// =============================================================
// Barre de filtre par catégorie
// =============================================================
// Conteneur de la liste de liens de filtre
.category-filter {
display: flex;
flex-wrap: wrap;
gap: $spacing-sm;
margin-bottom: $spacing-lg;
padding-bottom: $spacing-md;
border-bottom: 1px solid $color-border;
}
// Lien de filtre individuel
.category-filter__item {
padding: $spacing-xs $spacing-sm;
border-radius: $radius-sm;
font-size: $font-size-sm;
text-decoration: none;
color: $color-text-muted;
border: 1px solid $color-border;
@include interactive-transition;
&:hover {
color: $color-primary;
border-color: $color-primary;
}
&:focus-visible {
@include focus-ring;
}
}
// État actif — catégorie sélectionnée
.category-filter__item--active {
color: $color-primary;
border-color: $color-primary;
font-weight: $font-weight-bold;
}

View File

@@ -0,0 +1,29 @@
@use "../../core/variables" as *;
// =============================================================
// Bloc article — page de détail
// =============================================================
// Ce fichier ne porte que la coque du bloc .post.
// Les styles de contenu riche partagé (HTML Trumbowyg rendu en front
// et zone d'édition WYSIWYG) vivent dans components/_rich-text.scss.
.post {
padding: $spacing-md 0;
&__title {
margin-top: 0;
}
&__meta {
margin-bottom: $spacing-sm;
color: $color-text-muted;
}
&__updated {
margin-bottom: $spacing-sm;
}
}
.post__back {
margin-bottom: 0;
}

View File

@@ -0,0 +1,161 @@
@use "../../core/variables" as *;
@use "../../core/mixins" as *;
// =============================================================
// Administration partagée
// =============================================================
// Blocs BEM utilisés sur plusieurs écrans d'administration.
.admin-nav {
margin-bottom: $spacing-lg;
}
.admin-page-header {
display: flex;
flex-wrap: wrap;
align-items: flex-start;
justify-content: space-between;
gap: $spacing-md;
margin-bottom: $spacing-md;
&__body {
display: grid;
gap: $spacing-xs;
}
&__title {
margin: 0;
}
&__intro {
margin: 0;
color: $color-text-muted;
}
&__actions {
display: flex;
flex-wrap: wrap;
gap: $spacing-sm;
}
}
.admin-actions {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: $spacing-sm;
}
.admin-table {
width: 100%;
border-collapse: collapse;
th,
td {
padding: $spacing-sm;
border-bottom: 1px solid $color-border;
text-align: left;
vertical-align: top;
line-height: $line-height-base;
}
th {
background: $color-bg-light;
font-weight: $font-weight-semibold;
}
&__self {
color: $color-text-muted;
font-size: $font-size-xs;
}
&__muted {
color: $color-text-subtle;
font-size: $font-size-xs;
}
&__form {
display: inline-flex;
align-items: center;
gap: $spacing-xs;
margin: 0;
}
&__list {
margin: $spacing-xs 0 0;
padding-left: $spacing-md;
}
&__list-item + &__list-item {
margin-top: $spacing-xs;
}
&__code {
display: block;
}
&__role-select {
font-size: $font-size-sm;
padding: $spacing-xs $spacing-sm;
border: 1px solid $color-border;
border-radius: $radius-md;
background: $color-bg-white;
cursor: pointer;
@include interactive-transition;
&:focus-visible {
@include focus-ring;
}
}
}
@include mobile {
.admin-table {
display: block;
thead {
display: none;
}
tbody,
tr {
display: block;
}
tr {
border: 1px solid $color-border;
border-radius: $radius-md;
margin-bottom: $spacing-md;
padding: $spacing-sm;
background: $color-bg-white;
}
td {
display: flex;
align-items: flex-start;
gap: $spacing-sm;
padding: $spacing-xs 0;
border-bottom: 1px solid $color-border;
font-size: $font-size-sm;
&:last-child {
border-bottom: none;
padding-bottom: 0;
}
&::before {
content: attr(data-label);
font-weight: $font-weight-semibold;
min-width: 100px;
flex-shrink: 0;
color: $color-text-muted;
}
}
}
.admin-actions {
flex-direction: column;
align-items: flex-start;
}
}

View File

@@ -0,0 +1,21 @@
@use "../../core/variables" as *;
// =============================================================
// Page d'erreur partagée
// =============================================================
.error-page {
text-align: center;
padding: $spacing-xl 0;
}
.error-page__code {
font-size: $font-size-display-lg;
margin-bottom: $spacing-sm;
color: $color-text-muted;
}
.error-page__message {
font-size: $font-size-xl;
margin-bottom: $spacing-lg;
}