blog_tech/src/pages/veille.module.css
Tellsanguis df63713055 Ajout page Veille avec agrégation RSS automatique
- Création d'un plugin Docusaurus pour agréger les flux RSS au build
  * Récupère 37 flux RSS depuis le fichier OPML
  * Filtre les articles des dernières 24h
  * Génère un fichier JSON statique pour chargement instantané

- Page Veille avec composant React
  * Affichage des articles groupés par catégorie
  * Menus dépliables (repliés par défaut)
  * Chargement ultra-rapide depuis JSON pré-généré
  * Support bilingue FR/EN

- GitHub Actions pour rebuild automatique quotidien
  * Workflow déclenché tous les jours à 6h UTC
  * Met à jour les flux RSS via l'API Cloudflare Pages
  * Déclenchement manuel possible

- Configuration Webpack pour compatibilité navigateur
  * Désactivation des polyfills Node.js côté client
  * Correction du warning onBrokenMarkdownLinks

- Icône RSS dans la navbar
  * Lien vers le flux Atom du blog
  * Style cohérent avec les autres icônes

125 articles trouvés dans les dernières 24h lors du dernier build.
2025-12-06 09:33:43 +01:00

155 lines
2.5 KiB
CSS

.veillePage {
padding: 2rem 0;
min-height: calc(100vh - 60px);
}
.header {
text-align: center;
margin-bottom: 3rem;
padding-bottom: 2rem;
border-bottom: 2px solid var(--ifm-color-emphasis-200);
}
.header h1 {
font-size: 3rem;
margin-bottom: 1rem;
color: var(--ifm-color-primary);
}
.subtitle {
font-size: 1.2rem;
color: var(--ifm-color-content-secondary);
max-width: 800px;
margin: 0 auto 2rem;
line-height: 1.6;
}
.actions {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.75rem;
margin-top: 2rem;
}
.downloadButton {
display: inline-block;
padding: 0.75rem 2rem;
background: var(--ifm-color-primary);
color: white;
text-decoration: none;
border-radius: 8px;
font-weight: 600;
font-size: 1.1rem;
transition: all 0.2s ease;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.downloadButton:hover {
background: var(--ifm-color-primary-dark);
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
color: white;
text-decoration: none;
}
.opmlInfo {
font-size: 0.9rem;
color: var(--ifm-color-content-secondary);
font-style: italic;
margin: 0;
}
.content {
margin: 3rem 0;
}
.footer {
margin-top: 4rem;
padding-top: 3rem;
border-top: 2px solid var(--ifm-color-emphasis-200);
}
.footer h2 {
text-align: center;
margin-bottom: 2rem;
color: var(--ifm-color-content);
}
.infoGrid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
margin-top: 2rem;
}
.infoCard {
padding: 1.5rem;
background-color: var(--ifm-background-surface-color);
border: 1px solid var(--ifm-color-emphasis-200);
border-radius: 8px;
transition: all 0.2s ease;
}
.infoCard:hover {
border-color: var(--ifm-color-primary);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
.infoCard h3 {
margin-top: 0;
margin-bottom: 1rem;
color: var(--ifm-color-primary);
font-size: 1.3rem;
}
.infoCard p {
margin-bottom: 0;
line-height: 1.6;
color: var(--ifm-color-content);
}
.infoCard ul {
margin: 0;
padding-left: 1.5rem;
line-height: 1.8;
}
.infoCard li {
margin-bottom: 0.5rem;
color: var(--ifm-color-content);
}
/* Responsive */
@media (max-width: 996px) {
.header h1 {
font-size: 2.5rem;
}
.subtitle {
font-size: 1.1rem;
}
.infoGrid {
grid-template-columns: 1fr;
}
}
@media (max-width: 768px) {
.veillePage {
padding: 1rem 0;
}
.header h1 {
font-size: 2rem;
}
.subtitle {
font-size: 1rem;
}
.downloadButton {
padding: 0.6rem 1.5rem;
font-size: 1rem;
}
}