12 Commits

Author SHA1 Message Date
kbe
f9160e4b98 Changed footer 2025-08-21 01:54:33 +02:00
kbe
67fad13998 I dont remember 2025-08-21 01:47:02 +02:00
kbe
442440454a Category page ok 2025-08-20 20:21:30 +02:00
kbe
c2ea3a9a4f Category page ok 2025-08-20 20:17:37 +02:00
kbe
63e117a49a Rewrite front page 2025-08-20 20:10:24 +02:00
kbe
d4a151df9b Working paginator 2025-08-20 20:00:44 +02:00
kbe
f926c7fcf6 Better single post display 2025-08-20 15:45:42 +02:00
kbe
41805da339 Working on first page with pagination 2025-08-20 15:39:07 +02:00
kbe
75d235c17e Add link to articles 2025-08-20 14:34:13 +02:00
kbe
1e293852f4 Working on homepage 2025-08-20 14:32:15 +02:00
kbe
7f958514b1 dynamic load articles 2025-08-20 14:21:57 +02:00
kbe
1d8f5a1f66 working on front-page 2025-08-20 14:05:18 +02:00
2179 changed files with 1466 additions and 386792 deletions

View File

@@ -1,5 +1,7 @@
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
@import "tailwindcss"; @import "tailwindcss";
@import "header.css"; @import "header.css";
@import "wordpress.css";
/* Modern Design System */ /* Modern Design System */
:root { :root {
@@ -116,57 +118,6 @@ body {
transform: translateY(0); transform: translateY(0);
} }
/* Breadcrumb Styles */
.breadcrumb-nav {
width: 100%;
margin: 1rem 0;
}
.breadcrumb-container {
max-width: 1200px;
margin: 0 auto;
padding: 0 1rem;
}
.breadcrumb-list {
display: flex;
align-items: center;
flex-wrap: wrap;
list-style: none;
margin: 0;
padding: 0.75rem 1rem;
background: white;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.breadcrumb-item {
display: flex;
align-items: center;
font-size: 0.875rem;
color: var(--gray-600);
}
.breadcrumb-item a {
color: var(--gray-600);
text-decoration: none;
transition: color 0.2s ease;
}
.breadcrumb-item a:hover {
color: var(--primary-blue);
}
.breadcrumb-item:not(:last-child)::after {
content: "/";
margin: 0 0.5rem;
color: var(--gray-300);
}
.breadcrumb-item.active {
color: var(--primary-blue);
font-weight: 500;
}
/* Responsive Utilities */ /* Responsive Utilities */
@media (max-width: 768px) { @media (max-width: 768px) {
@@ -175,3 +126,37 @@ body {
padding-right: 1rem; padding-right: 1rem;
} }
} }
/* Prose Styles from docs/homepage.html and docs/post.html */
.prose {
max-width: none;
}
.prose h2 {
font-weight: 600;
margin-top: 2.5rem;
margin-bottom: 1rem;
font-size: 1.875rem;
line-height: 2.25rem;
}
.prose p {
margin-bottom: 1.5rem;
line-height: 1.75;
}
.prose blockquote {
border-left-width: 4px;
border-color: #3b82f6;
padding-left: 1.5rem;
margin: 2rem 0;
font-style: italic;
}
.article-image {
transition: transform 0.3s ease;
}
.article-image:hover {
transform: scale(1.02);
}

289
assets/css/wordpress.css Normal file
View File

@@ -0,0 +1,289 @@
/* Wordpress Content Styles */
/* General Prose Styles (already in app.css, but can be extended here if needed) */
.prose {
/* max-width: none; */ /* Already handled by Tailwind's prose plugin or app.css */
}
/* Headings */
.prose h1,
.prose h2,
.prose h3,
.prose h4,
.prose h5,
.prose h6 {
font-weight: 700;
line-height: 1.25;
margin-top: 2em;
margin-bottom: 1em;
color: var(--gray-900);
}
.prose h1 {
font-size: 2.5em;
}
.prose h2 {
font-size: 2em;
}
.prose h3 {
font-size: 1.75em;
}
.prose h4 {
font-size: 1.5em;
}
.prose h5 {
font-size: 1.25em;
}
.prose h6 {
font-size: 1em;
color: var(--gray-600);
}
/* Paragraphs */
.prose p {
margin-bottom: 1.5em;
line-height: 1.75;
color: var(--gray-700);
}
/* Lists */
.prose ul,
.prose ol {
margin-bottom: 1.5em;
padding-left: 2em;
}
.prose ul {
list-style-type: disc;
}
.prose ol {
list-style-type: decimal;
}
.prose li {
margin-bottom: 0.5em;
line-height: 1.75;
color: var(--gray-700);
}
.prose ul ul,
.prose ol ol,
.prose ul ol,
.prose ol ul {
margin-bottom: 0;
margin-top: 0.5em;
}
/* Links */
.prose a {
color: var(--primary-blue);
text-decoration: underline;
text-decoration-color: var(--primary-blue);
transition: color 0.2s ease, text-decoration-color 0.2s ease;
}
.prose a:hover {
color: var(--primary-blue-dark);
text-decoration-color: var(--primary-blue-dark);
}
/* Images */
.prose img {
max-width: 100%;
height: auto;
border-radius: 0.5rem;
margin-top: 1.5em;
margin-bottom: 1.5em;
}
.prose figure {
margin: 2em 0;
text-align: center;
}
.prose figcaption {
font-size: 0.875em;
color: var(--gray-600);
margin-top: 0.5em;
text-align: center;
font-style: italic;
}
/* Tables */
.prose table {
width: 100%;
border-collapse: collapse;
margin-bottom: 1.5em;
border: 1px solid var(--gray-300);
}
.prose th,
.prose td {
padding: 0.75em 1em;
text-align: left;
border-bottom: 1px solid var(--gray-300);
}
.prose th {
background-color: var(--gray-100);
font-weight: 600;
color: var(--gray-900);
}
.prose tbody tr:nth-child(even) {
background-color: var(--gray-50);
}
/* Blockquotes */
.prose blockquote {
border-left: 4px solid var(--primary-blue);
padding-left: 1.5rem;
margin: 2em 0;
font-style: italic;
color: var(--gray-600);
background-color: var(--gray-50);
padding: 1.5rem;
border-radius: 0.25rem;
}
.prose blockquote p:last-child {
margin-bottom: 0;
}
/* Code Blocks */
.prose code {
background-color: var(--gray-100);
color: var(--gray-800);
padding: 0.25em 0.5em;
border-radius: 0.25rem;
font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;
font-size: 0.875em;
}
.prose pre {
background-color: var(--gray-900);
color: var(--gray-50);
padding: 1.5em;
border-radius: 0.5rem;
overflow-x: auto;
margin-bottom: 1.5em;
font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;
font-size: 0.875em;
}
.prose pre code {
background-color: transparent;
color: inherit;
padding: 0;
border-radius: 0;
}
/* Embeds */
.prose iframe,
.prose video,
.prose audio {
max-width: 100%;
margin-top: 1.5em;
margin-bottom: 1.5em;
}
.prose .wp-block-embed {
margin: 2em 0;
}
/* Separators */
.prose hr {
border: none;
height: 1px;
background-color: var(--gray-300);
margin: 2em 0;
}
/* WordPress Specific Classes */
.prose .wp-caption {
background-color: var(--gray-50);
border: 1px solid var(--gray-200);
padding: 1em;
border-radius: 0.5rem;
text-align: center;
}
.prose .wp-caption-text {
font-size: 0.875em;
color: var(--gray-600);
margin-top: 0.5em;
font-style: italic;
}
.prose .alignleft {
float: left;
margin: 0.5em 1.5em 0.5em 0;
}
.prose .alignright {
float: right;
margin: 0.5em 0 0.5em 1.5em;
}
.prose .aligncenter {
display: block;
margin: 1.5em auto;
}
/* Responsive adjustments for images */
@media (max-width: 768px) {
.prose .alignleft,
.prose .alignright {
float: none;
display: block;
margin: 1.5em auto;
clear: both;
}
}
/* WordPress Gutenberg Block Styles */
.prose .wp-block-gallery {
margin: 2em 0;
}
.prose .wp-block-gallery .blocks-gallery-item {
margin: 0.5em;
}
.prose .wp-block-quote {
border-left: 4px solid var(--primary-blue);
padding-left: 1.5rem;
margin: 2em 0;
font-style: italic;
color: var(--gray-600);
background-color: var(--gray-50);
padding: 1.5rem;
border-radius: 0.25rem;
}
.prose .wp-block-pullquote {
border-top: 4px solid var(--primary-blue);
border-bottom: 4px solid var(--primary-blue);
padding: 2em;
margin: 2em 0;
text-align: center;
font-style: italic;
color: var(--gray-700);
}
.prose .wp-block-code {
background-color: var(--gray-900);
color: var(--gray-50);
padding: 1.5em;
border-radius: 0.5rem;
overflow-x: auto;
margin-bottom: 1.5em;
font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;
font-size: 0.875em;
}

View File

@@ -7,4 +7,63 @@ window.Alpine = Alpine
// Initialize Alpine // Initialize Alpine
Alpine.start() Alpine.start()
// Header JavaScript - Hamburger menu functionality
document.addEventListener('DOMContentLoaded', function() {
// Mobile menu toggle
const offcanvasToggle = document.querySelector('.cs-header__offcanvas-toggle');
const offcanvasClose = document.querySelector('.cs-header__offcanvas-close');
const offcanvas = document.querySelector('.cs-header__offcanvas');
const overlay = document.querySelector('.cs-search-overlay');
if (offcanvasToggle) {
offcanvasToggle.addEventListener('click', function() {
offcanvas.classList.add('active');
overlay.style.display = 'block';
document.body.style.overflow = 'hidden';
});
}
if (offcanvasClose) {
offcanvasClose.addEventListener('click', function() {
offcanvas.classList.remove('active');
overlay.style.display = 'none';
document.body.style.overflow = '';
});
}
// Search functionality
const searchToggle = document.querySelectorAll('.cs-header__search-toggle');
const searchClose = document.querySelector('.cs-search__close');
const search = document.querySelector('.cs-search');
searchToggle.forEach(toggle => {
toggle.addEventListener('click', function() {
search.style.display = 'block';
overlay.style.display = 'block';
document.body.style.overflow = 'hidden';
});
});
if (searchClose) {
searchClose.addEventListener('click', function() {
search.style.display = 'none';
overlay.style.display = 'none';
document.body.style.overflow = '';
});
}
if (overlay) {
overlay.addEventListener('click', function() {
if (offcanvas) {
offcanvas.classList.remove('active');
}
search.style.display = 'none';
overlay.style.display = 'none';
document.body.style.overflow = '';
});
}
});
console.log("Hello world"); console.log("Hello world");

View File

@@ -1,54 +0,0 @@
// Header JavaScript
document.addEventListener('DOMContentLoaded', function() {
// Mobile menu toggle
const offcanvasToggle = document.querySelector('.cs-header__offcanvas-toggle');
const offcanvasClose = document.querySelector('.cs-header__offcanvas-close');
const offcanvas = document.querySelector('.cs-header__offcanvas');
const overlay = document.querySelector('.cs-search-overlay');
if (offcanvasToggle) {
offcanvasToggle.addEventListener('click', function() {
offcanvas.classList.add('active');
overlay.style.display = 'block';
document.body.style.overflow = 'hidden';
});
}
if (offcanvasClose) {
offcanvasClose.addEventListener('click', function() {
offcanvas.classList.remove('active');
overlay.style.display = 'none';
document.body.style.overflow = '';
});
}
// Search functionality
const searchToggle = document.querySelectorAll('.cs-header__search-toggle');
const searchClose = document.querySelector('.cs-search__close');
const search = document.querySelector('.cs-search');
searchToggle.forEach(toggle => {
toggle.addEventListener('click', function() {
search.style.display = 'block';
overlay.style.display = 'block';
document.body.style.overflow = 'hidden';
});
});
if (searchClose) {
searchClose.addEventListener('click', function() {
search.style.display = 'none';
overlay.style.display = 'none';
document.body.style.overflow = '';
});
}
if (overlay) {
overlay.addEventListener('click', function() {
offcanvas.classList.remove('active');
search.style.display = 'none';
overlay.style.display = 'none';
document.body.style.overflow = '';
});
}
});

View File

@@ -16,7 +16,7 @@ enableRobotsTXT = true
# SEO Configuration # SEO Configuration
[params.seo] [params.seo]
description = "Mistergeek - Tutoriels et guides en informatique et technologie en français" description = "Tutoriels et guides en informatique et technologie en français"
keywords = ["tutoriel informatique", "guide technologie", "solutions informatiques", "développement web", "technologies", "innovation", "mistergeek"] keywords = ["tutoriel informatique", "guide technologie", "solutions informatiques", "développement web", "technologies", "innovation", "mistergeek"]
author = "Mistergeek" author = "Mistergeek"
theme_color = "#007bff" theme_color = "#007bff"

View File

@@ -31,10 +31,6 @@
<!-- Font Awesome --> <!-- Font Awesome -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<!-- Custom Styles -->
<style>
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
</style>
</head> </head>
<body class="bg-white text-gray-800 antialiased"> <body class="bg-white text-gray-800 antialiased">

View File

@@ -1,63 +1,83 @@
{{ define "main" }} {{ define "main" }}
<!-- layouts/_default/list.html --> <!-- layouts/_default/list.html -->
<div class="section-sm bg-gray-lighter"> <div class="min-h-screen bg-white">
<div class="container text-center">
<h1 class="font-family-playfair">{{ .Site.Title }}</h1>
</div><!-- end container -->
</div>
<!-- Blog section --> <!-- Hero Section with Category Title -->
<div class="section"> <section class="gradient-bg py-12 md:py-16 lg:py-20">
<div class="container"> <div class="container mx-auto px-4 sm:px-6 lg:px-8">
<div class="row g-4"> <div class="max-w-4xl mx-auto text-center">
<div class="col-12 col-sm-10 offset-sm-1 col-md-8 offset-md-2"> <h1 class="text-4xl md:text-5xl lg:text-6xl font-bold text-gray-900 mb-6">
{{ $paginationLimit := 10 }} {{ if .Title }}{{ .Title }}{{ else }}{{ .Site.Title }}{{ end }}
{{ if .Site.Params.paginationLimit }}{{ $paginationLimit = .Site.Params.paginationLimit }}{{ end }} </h1>
{{ $paginator := .Paginator $paginationLimit }} {{ if .Description }}
<p class="text-xl text-gray-700 mb-8">{{ .Description }}</p>
{{ else if and (eq .Kind "taxonomy") .Data.Term }}
<p class="text-xl text-gray-700 mb-8">{{ .Data.Term | humanize }}</p>
{{ else if .Site.Params.seo.description }}
<!-- <p class="text-xl text-gray-700 mb-8">{{ .Site.Params.seo.description }}</p> -->
{{ end }}
<!-- Category tags if this is a taxonomy page -->
{{ if eq .Kind "taxonomy" }}
<div class="flex flex-wrap justify-center gap-3 mb-10">
<span class="tag bg-blue-100 text-blue-800 text-sm font-medium px-3 py-1 rounded-full">{{ .Title }}</span>
</div>
{{ end }}
</div>
</div>
</section>
<!-- Latest Articles Section -->
<section id="latest-articles" class="py-12 md:py-16 bg-gray-50">
<div class="container mx-auto px-4 sm:px-6 lg:px-8">
<h2 class="text-3xl font-bold text-gray-900 mb-10 text-center">Articles</h2>
{{ $paginator := .Paginate .Pages 9 }}
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8 mb-12">
{{ range $paginator.Pages }} {{ range $paginator.Pages }}
<!-- Blog Post box --> <div class="bg-white rounded-xl overflow-hidden shadow-md article-card">
<div class="mb-5">
<div class="img-link-box">
<a href="{{ .RelPermalink }}"> <a href="{{ .RelPermalink }}">
{{ if .Params.featured_image }} {{ if .Params.featured_image }}
<img src="{{ .Params.featured_image }}" alt="{{ .Title }}"> <img src="{{ .Params.featured_image }}" alt="{{ .Title }}" class="w-full h-48 object-cover">
{{ else }} {{ else }}
<img src="/assets/images/col-1.jpg" alt="{{ .Title }}"> <img src="/assets/images/col-1.jpg" alt="{{ .Title }}" class="w-full h-48 object-cover">
{{ end }} {{ end }}
</a> </a>
<div class="p-6">
<div class="flex flex-wrap gap-2 mb-3">
{{ if .Params.categories }}
{{ range first 1 .Params.categories }}
<a href="/categories/{{ . | urlize }}" class="bg-blue-100 text-blue-800 text-xs font-medium px-2 py-1 rounded hover:underline">{{ . }}</a>
{{ end }}
{{ end }}
</div> </div>
<div class="mt-4"> <h3 class="text-lg font-bold text-gray-900 mb-3"><a href="{{ .RelPermalink }}">{{ .Title }}</a></h3>
<div class="d-flex justify-content-between mb-2"> <p class="text-gray-600 text-sm mb-4">
<!-- Display category -->
{{ partial "categories-first.html" . }}
<div class="d-inline-flex">
<span class="font-small">{{ .Date.Format "02/07/2006" }}</span>
</div>
</div>
<h2><a class="text-link-1" href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
{{ if .Params.excerpt }} {{ if .Params.excerpt }}
<p>{{ .Params.excerpt }}</p> {{ .Params.excerpt }}
{{ else if .Summary }} {{ else if .Summary }}
<p>{{ .Summary }}</p> {{ .Summary }}
{{ else }} {{ else }}
<p>{{ truncate 200 .Content }}</p> {{ truncate 200 .Content }}
{{ end }} {{ end }}
<div class="mt-3"> </p>
<a class="button-text-1" href="{{ .RelPermalink }}">Lire la suite</a> <div class="flex items-center justify-between text-sm text-gray-500">
<span>{{ .Date | time.Format "2 Jan 2006" }}</span>
<a href="{{ .RelPermalink }}" class="text-blue-600 hover:text-blue-800 font-medium text-sm">Lire la suite →</a>
</div> </div>
</div> </div>
</div> </div>
<!-- End Blog Post box -->
{{ end }} {{ end }}
</div>
<!-- Pagination --> <!-- Pagination -->
{{ partial "pagination.html" (dict "Paginator" .Paginator "Page" .) }} <div class="flex justify-center mt-12">
{{ if gt .Paginator.TotalPages 1 }}
{{ partial "pagination-tailwind.html" .Paginator }}
{{ end }}
</div> </div>
</div><!-- end row --> </div>
</div><!-- end container --> </section>
</div> </div>
<!-- end Blog section -->
{{ end }} {{ end }}

View File

@@ -1,131 +1,55 @@
{{ define "main" }} {{ define "main" }}
<div class="section"> <div class="gradient-bg py-12 md:py-16 lg:py-24">
<div class="container"> <div class="container mx-auto px-4 sm:px-6 lg:px-8">
<div class="row g-4"> <div class="max-w-3xl mx-auto text-center">
<div class="col-12 col-md-10 offset-md-1"> <div class="flex justify-center space-x-2 mb-6">
<h1 class="fw-normal">{{ .Title }}</h1>
<ul class="list-inline-dash">
{{ if .Params.author }}
<li>Par <a href="/author/{{ .Params.author | anchorize }}">{{ .Params.author }}</a></li>
{{ end }}
{{ with .Params.categories }} {{ with .Params.categories }}
{{ range . }} {{ range first 2 . }}
<li>dans <a href="/{{ . | anchorize }}">{{ . }}</a></li> <a href="/{{ . | anchorize }}"><span class="bg-blue-100 text-blue-800 text-sm font-medium px-3 py-1 rounded-full">{{ . }}</span></a>
{{ end }} {{ end }}
{{ end }} {{ end }}
<li> le {{ .Date.Format "02/01/2006" }}</li>
</ul>
</div> </div>
</div><!-- end row --> <h1 class="text-4xl md:text-5xl font-bold text-gray-900 mb-6">{{ .Title }}</h1>
</div><!-- end container --> <div class="flex items-center justify-center space-x-4 text-gray-600">
<div class="flex items-center">
<a href="/author/{{ .Params.author | urlize }}" class="text-blue-600 hover:text-blue-800 underline decoration-blue-600 hover:decoration-blue-800 transition-colors">{{ .Params.author | default "Auteur" }}</a>
</div>
<span></span>
<span>{{ .Date.Format "2 janvier 2006" }}</span>
<span></span>
<span>{{ .ReadingTime }} min de lecture</span>
</div>
</div>
</div>
</div> </div>
<!-- Featured Image --> <!-- Article Content -->
{{ if .Params.featured_image }} <article class="py-12 md:py-16">
<div class="container"> <div class="container mx-auto px-4 sm:px-6 lg:px-8">
<div class="p-2 text-center"> <div class="max-w-3xl mx-auto">
<img src="{{ .Params.featured_image }}" alt="{{ .Title }}" class="mx-auto d-block"> {{ if .Params.featured_image }}
</div> <img src="{{ .Params.featured_image }}" alt="{{ .Title }}" class="w-full h-auto rounded-lg mb-8">
</div><!-- end container --> {{ end }}
{{ end }} <div class="prose">
<!-- end Featured Image -->
<!-- Post Content -->
<div class="section">
<div class="container">
<div class="row g-4">
<div class="col-12 col-md-10 offset-md-1">
<div class="post-content">
{{ .Content }} {{ .Content }}
</div> </div>
</div> </div>
</div><!-- end row -->
</div><!-- end container -->
</div>
<!-- end Post Content -->
{{/*
<!-- Tags and Share -->
<div class="section-xs border-top">
<div class="container">
<div class="row g-4">
{{ if .Params.tags }}
<div class="col-6">
<h6 class="font-small fw-medium uppercase">Tags</h6>
<ul class="list-inline-sm">
{{ range .Params.tags }}
<li><a href="/tags/{{ . | anchorize }}">{{ . }}</a></li>
{{ end }}
</ul>
</div> </div>
{{ end }} </article>
<div class="col-6 text-end">
<h6 class="font-small fw-medium uppercase">Share On</h6> <!-- Author Bio -->
<ul class="list-inline"> <div class="py-12 bg-gray-50">
<li><a href="#"><i class="bi bi-facebook"></i></a></li> <div class="container mx-auto px-4 sm:px-6 lg:px-8">
<li><a href="#"><i class="bi bi-twitter-x"></i></a></li> <div class="max-w-3xl mx-auto">
<li><a href="#"><i class="bi bi-google"></i></a></li> <div class="flex items-start space-x-6">
</ul> <div>
<span class="text-2xl">Article rédigé par {{ .Params.author | default "Auteur" }}</span>
</div>
</div>
</div> </div>
</div><!-- end row -->
</div><!-- end container -->
</div>
*/}}
<!-- Comments section -->
{{ if .Site.Params.comments.enable }}
<div class="section bg-gray-lighter">
<div class="container">
<div class="row g-4">
<div class="col-12 col-md-10 offset-md-1">
<h4 class="fw-normal mb-5">Comments</h4>
{{ if .Site.Params.comments.disqus }}
<div id="disqus_thread"></div>
<script>
var disqus_config = function () {
this.page.url = "{{ .Permalink }}";
this.page.identifier = "{{ .RelPermalink }}";
};
(function() {
var d = document, s = d.createElement('script');
s.src = 'https://{{ .Site.Params.comments.disqus }}.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
{{ else }}
<p>Comments are disabled.</p>
{{ end }}
</div> </div>
</div><!-- end row -->
</div><!-- end container -->
</div> </div>
{{ end }}
<!-- Write Comment section -->
{{ if .Site.Params.comments.enable }}
<div class="section">
<div class="container">
<div class="row g-4">
<div class="col-12 col-md-10 offset-md-1">
<h4 class="fw-normal mb-5">Write a Comment</h4>
<form id="comment-form">
<div class="row g-4">
<div class="col-12 col-sm-6">
<input type="text" name="name" placeholder="Name" required>
</div>
<div class="col-12 col-sm-6">
<input type="email" name="email" placeholder="E-Mail" required>
</div>
</div>
<textarea name="message" placeholder="Message"></textarea>
<button class="button button-lg button-outline-gray" type="submit">Post Comment</button>
</form>
</div>
</div><!-- end row -->
</div><!-- end container -->
</div>
{{ end }}
{{ end }} {{ end }}

View File

@@ -1,49 +1,87 @@
{{ define "main" }} {{ define "main" }}
{{ $authors := site.Data.wordpress.authors }} <!-- layouts/author/list.html - Author posts listing -->
<div class="min-h-screen bg-white">
<div class="section-sm bg-gray-lighter"> <!-- Hero Section with Author Title -->
<div class="container text-center"> <section class="gradient-bg py-12 md:py-16 lg:py-20">
<h3 class="font-family-playfair">{{ .Title }}</h3> <div class="container mx-auto px-4 sm:px-6 lg:px-8">
<p class="mt-2">Liste de tous les auteurs</p> <div class="max-w-4xl mx-auto text-center">
</div><!-- end container --> <h1 class="text-4xl md:text-5xl lg:text-6xl font-bold text-gray-900 mb-6">Tous les auteurs</h1>
</div>
<div class="section">
<div class="container">
<div class="author-list">
<div class="row">
{{ range $author := $authors }}
<div class="col-md-6 mb-4">
<article class="author-card-item h-100 card" data-author-name="{{ $author.name }}">
<div class="row g-0 align-items-center">
<div class="author-card-image col-md-4 p-2">
{{ with index $author.avatar_urls "96" }}
<img decoding="async" src="{{ . }}" alt="{{ $author.name }}" class="author-image img-fluid" loading="lazy">
{{ else }}
<img decoding="async" src="/assets/images/img-avatar-md@2x.jpg" alt="{{ $author.name }}" class="author-image img-fluid" loading="lazy">
{{ end }}
</div> </div>
<div class="author-card-info col-md-8"> </div>
<div class="card-body"> </section>
<h5 class="card-title author-card-name">{{ $author.name }}</h5>
<!-- Author Bio Section -->
{{ if .Data.Term }}
{{ $authorSlug := .Data.Term }}
{{ $authors := site.Data.wordpress.authors }}
{{ $author := index $authors $authorSlug }}
{{ if $author }}
<section class="py-12 bg-gray-50">
<div class="container mx-auto px-4 sm:px-6 lg:px-8">
<div class="max-w-3xl mx-auto">
<div class="flex items-start space-x-6">
<div class="flex-1">
<h3 class="text-2xl font-semibold text-gray-900">{{ $author.name }}</h3>
{{ with $author.description }} {{ with $author.description }}
<p class="card-text author-card-title"> <p class="text-gray-700 mt-2">{{ . }}</p>
<small class="text-muted author-card-title-text">{{ . }}</small> {{ end }}
</div>
</div>
</div>
</div>
</section>
{{ end }}
{{ end }}
<!-- Author's Articles Section -->
<section id="latest-articles" class="py-12 md:py-16">
<div class="container mx-auto px-4 sm:px-6 lg:px-8">
{{ $paginator := .Paginate .Pages 9 }}
{{ if gt (len $paginator.Pages) 0 }}
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8 mb-12">
{{ range $paginator.Pages }}
<div class="bg-white rounded-xl overflow-hidden shadow-md article-card">
<div class="p-6">
<div class="flex flex-wrap gap-2 mb-3">
{{ if .Params.categories }}
{{ range first 1 .Params.categories }}
<a href="/categories/{{ . | urlize }}" class="bg-blue-100 text-blue-800 text-xs font-medium px-2 py-1 rounded hover:underline">{{ . }}</a>
{{ end }}
{{ end }}
</div>
<h3 class="text-lg font-bold text-gray-900 mb-3"><a href="{{ .RelPermalink }}">{{ .Title }}</a></h3>
<p class="text-gray-600 text-sm mb-4">
{{ if .Params.excerpt }}
{{ .Params.excerpt }}
{{ else if .Summary }}
{{ .Summary }}
{{ else }}
{{ truncate 200 .Content }}
{{ end }}
</p> </p>
{{ end }} <div class="flex items-center justify-between text-sm text-gray-500">
<div class="author-card-buttons mt-3"> <a href="{{ .RelPermalink }}" class="text-blue-600 hover:text-blue-800 font-medium text-sm">Lire la suite →</a>
<div class="author-card-button">
<a href="/author/{{ $author.slug | anchorize }}" class="author-button-link" aria-label="Voir les articles de {{ $author.name }}">Voir les articles<svg class="uikit-icon" style="width: 1em;" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"><path fill="var(--c-svg, currentColor)" d="M7.5 4.5V6h9.442L4.5 18.442 5.558 19.5 18 7.058V16.5h1.5v-12z"></path></svg></a>
</div> </div>
</div> </div>
</div> </div>
</div>
</div>
</article>
</div>
{{ end }} {{ end }}
</div> </div>
<!-- Pagination -->
<div class="flex justify-center mt-12">
{{ if gt .Paginator.TotalPages 1 }}
{{ partial "pagination-tailwind.html" .Paginator }}
{{ end }}
</div> </div>
</div><!-- end container --> {{ else }}
<div class="text-center py-12">
<p class="text-xl text-gray-600">Aucun article trouvé pour cet auteur.</p>
</div>
{{ end }}
</div>
</section>
</div> </div>
{{ end }} {{ end }}

View File

@@ -1,34 +0,0 @@
{{ define "main" }}
{{ $defaultCategory := "General" }}
{{ if .Site.Params.defaultCategory }}{{ $defaultCategory = .Site.Params.defaultCategory }}{{ end }}
<div class="section-sm bg-gray-lighter">
<div class="container text-center">
<h1 class="font-family-playfair">{{ .Title }}</h1>
<p class="mt-3">Cette page répertorie toutes les catégories de notre site, offrant une vue d'ensemble structurée de notre contenu.</p>
</div><!-- end container -->
</div>
<!-- Blog section -->
<div class="section">
<div class="container">
<div class="row g-4">
<div class="col-12 col-sm-10 offset-sm-1 col-md-8 offset-md-2">
{{ range $.Site.Data.wordpress.categories }}
<div class="mb-5">
<div class="mt-4">
<h2><a class="text-link-1" href="{{ .link | relURL }}">{{ .name }}</a></h2>
<p>{{ .description | safeHTML }}</p>
<div class="mt-3">
<a class="button-text-1" href="{{ .link | relURL }}">Voir la catégorie</a>
</div>
</div>
</div>
{{ if not .IsLast }}<hr class="my-5">{{ end }}
{{ end }}
</div>
</div><!-- end row -->
</div><!-- end container -->
</div>
<!-- end Blog section -->
{{ end }}

View File

@@ -6,45 +6,21 @@
<section class="gradient-bg py-12 md:py-16 lg:py-20"> <section class="gradient-bg py-12 md:py-16 lg:py-20">
<div class="container mx-auto px-4 sm:px-6 lg:px-8"> <div class="container mx-auto px-4 sm:px-6 lg:px-8">
<div class="max-w-4xl mx-auto text-center"> <div class="max-w-4xl mx-auto text-center">
<h1 class="text-4xl md:text-5xl lg:text-6xl font-bold text-gray-900 mb-6"> <h1 class="text-4xl md:text-5xl lg:text-6xl font-bold text-gray-900 mb-6">{{ .Site.Title }}</h1>
{{ .Site.Title }} <p class="text-xl text-gray-700 mb-8">{{ .Site.Params.seo.description }}</p>
</h1>
<p class="text-xl text-gray-700 mb-8">
{{ .Site.Params.description | default "Exploring technology's impact on work and life" }}
</p>
<!-- Tags -->
<div class="flex flex-wrap justify-center gap-3 mb-10"> <div class="flex flex-wrap justify-center gap-3 mb-10">
{{ $categories := .Site.Taxonomies.categories }} <span class="tag bg-blue-100 text-blue-800 text-sm font-medium px-3 py-1 rounded-full">IA</span>
{{ if $categories }} <span class="tag bg-green-100 text-green-800 text-sm font-medium px-3 py-1 rounded-full">Programmation</span>
{{ $categoryList := slice }} <span class="tag bg-purple-100 text-purple-800 text-sm font-medium px-3 py-1 rounded-full">Photo</span>
{{ range $name, $taxonomy := $categories }} <span class="tag bg-yellow-100 text-yellow-800 text-sm font-medium px-3 py-1 rounded-full">Vidéo</span>
{{ range $taxonomy }} <span class="tag bg-red-100 text-red-800 text-sm font-medium px-3 py-1 rounded-full">Web3</span>
{{ $categoryList = $categoryList | append . }}
{{ end }}
{{ end }}
{{ range first 5 $categoryList }}
<span class="tag bg-blue-100 text-blue-800 text-sm font-medium px-3 py-1 rounded-full">
{{ .Page.Title }}
</span>
{{ end }}
{{ else }}
<span class="tag bg-gray-100 text-gray-600 text-sm font-medium px-3 py-1 rounded-full">
General
</span>
{{ end }}
</div> </div>
{{/*
<!-- Newsletter Signup -->
<form class="flex flex-col sm:flex-row gap-4 max-w-xl mx-auto"> <form class="flex flex-col sm:flex-row gap-4 max-w-xl mx-auto">
<input type="email" <input type="email" placeholder="Votre adresse email" class="flex-grow px-4 py-3 rounded-lg border border-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500">
placeholder="Your email address" <button type="submit" class="bg-blue-600 hover:bg-blue-700 text-white px-6 py-3 rounded-lg font-medium">Recevoir les mises à jour</button>
class="flex-grow px-4 py-3 rounded-lg border border-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500">
<button type="submit"
class="btn-primary px-6 py-3 rounded-lg font-medium">
Get Updates
</button>
</form> </form>
*/}}
</div> </div>
</div> </div>
</section> </section>
@@ -52,35 +28,46 @@
<!-- Featured Articles --> <!-- Featured Articles -->
<section class="py-12 md:py-16"> <section class="py-12 md:py-16">
<div class="container mx-auto px-4 sm:px-6 lg:px-8"> <div class="container mx-auto px-4 sm:px-6 lg:px-8">
<h2 class="text-3xl font-bold text-gray-900 mb-10 text-center">Featured Articles</h2> <h2 class="text-3xl font-bold text-gray-900 mb-10 text-center">Articles en Vedette</h2>
<div class="grid grid-cols-1 lg:grid-cols-2 gap-8 mb-12"> <div class="grid grid-cols-1 lg:grid-cols-2 gap-8 mb-12">
{{ range first 2 (where .Site.RegularPages "Params.featured" true) }} {{ range first 2 (where $.Site.RegularPages "Params.categories" "intersect" (slice "Featured")) }}
<div class="bg-white rounded-xl overflow-hidden shadow-lg article-card"> <div class="bg-white rounded-xl overflow-hidden shadow-lg article-card">
<div class="featured-article"> <div class="featured-article">
<a href="{{ .RelPermalink }}">
{{ if .Params.featured_image }} {{ if .Params.featured_image }}
<img src="{{ .Params.featured_image }}" alt="{{ .Title }}" class="w-full h-64 object-cover"> <img src="{{ .Params.featured_image }}" alt="{{ .Title }}" class="w-full h-64 object-cover">
{{ else }} {{ else }}
<img src="https://images.unsplash.com/photo-1677442135135-416f8aa26a5b?ixlib=rb-4.0.3&auto=format&fit=crop&w=1000&q=80" alt="{{ .Title }}" class="w-full h-64 object-cover"> <img src="/assets/images/col-1.jpg" alt="{{ .Title }}" class="w-full h-64 object-cover">
{{ end }} {{ end }}
</a>
</div> </div>
<div class="p-6"> <div class="p-6">
<div class="flex flex-wrap gap-2 mb-4"> <div class="flex flex-wrap gap-2 mb-4">
{{ range first 2 (default (slice) .Params.categories) }} {{ range first 2 .Params.categories }}
<span class="bg-blue-100 text-blue-800 text-xs font-medium px-2 py-1 rounded">{{ . }}</span> <a href="/categories/{{ . | urlize }}" class="bg-blue-100 text-blue-800 text-xs font-medium px-2 py-1 rounded hover:underline">{{ . }}</a>
{{ end }} {{ end }}
</div> </div>
<h3 class="text-xl font-bold text-gray-900 mb-3"> <h3 class="text-xl font-bold text-gray-900 mb-3">
<a href="{{ .Permalink }}" class="hover:text-blue-600">{{ .Title }}</a> <a href="{{ .RelPermalink }}">{{ .Title }}</a>
</h3> </h3>
<p class="text-gray-600 mb-4">{{ .Summary | truncate 150 }}</p> <p class="text-gray-600 mb-4">
{{ if .Params.excerpt }}
{{ .Params.excerpt }}
{{ else if .Summary }}
{{ .Summary }}
{{ else }}
{{ truncate 200 .Content }}
{{ end }}
</p>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<div class="flex items-center text-sm text-gray-500"> <div class="flex items-center text-sm text-gray-500">
<span>{{ .Params.author | default "Tech Team" }}</span> {{/* <img src="https://i.pravatar.cc/24" alt="{{ .Params.author }}" class="w-6 h-6 rounded-full mr-2"> */}}
<a href="/author/{{ .Params.author | urlize }}" class="hover:underline">{{ .Params.author }}</a>
<span class="mx-2"></span> <span class="mx-2"></span>
<span>{{ .Date.Format "Jan 2, 2006" }}</span> <span>{{ .Date | time.Format "2 Jan 2006" }}</span>
</div> </div>
<a href="{{ .Permalink }}" class="text-blue-600 hover:text-blue-800 font-medium text-sm">Read more →</a> <a href="{{ .RelPermalink }}" class="text-blue-600 hover:text-blue-800 font-medium text-sm">Lire la suite →</a>
</div> </div>
</div> </div>
</div> </div>
@@ -88,40 +75,55 @@
</div> </div>
<div class="text-center"> <div class="text-center">
<a href="/articles" class="inline-flex items-center text-blue-600 hover:text-blue-800 font-medium"> <a href="#latest-articles" class="inline-flex items-center text-blue-600 hover:text-blue-800 font-medium">
View all articles Voir plus d'articles
<i class="fas fa-arrow-right ml-2"></i> <i class="fas fa-arrow-down ml-2"></i>
</a> </a>
</div> </div>
</div> </div>
</section> </section>
<!-- Latest Articles --> <!-- Latest Articles -->
<section class="py-12 md:py-16 bg-gray-50"> <section id="latest-articles" class="py-12 md:py-16 bg-gray-50">
<div class="container mx-auto px-4 sm:px-6 lg:px-8"> <div class="container mx-auto px-4 sm:px-6 lg:px-8">
<h2 class="text-3xl font-bold text-gray-900 mb-10 text-center">Latest Articles</h2> <h2 class="text-3xl font-bold text-gray-900 mb-10 text-center">Derniers Articles</h2>
{{ $featuredPosts := where $.Site.RegularPages "Params.categories" "intersect" (slice "Featured") }}
{{ $regularPosts := where $.Site.RegularPages "Type" "!=" "page" }}
{{ $nonFeaturedPosts := complement $featuredPosts $regularPosts }}
{{ $paginator := .Paginate $nonFeaturedPosts 9 }}
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8 mb-12"> <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8 mb-12">
{{ range first 6 .Paginator.Pages }} {{ range $paginator.Pages }}
<div class="bg-white rounded-xl overflow-hidden shadow-md article-card"> <div class="bg-white rounded-xl overflow-hidden shadow-md article-card">
<a href="{{ .RelPermalink }}">
{{ if .Params.featured_image }} {{ if .Params.featured_image }}
<img src="{{ .Params.featured_image }}" alt="{{ .Title }}" class="w-full h-48 object-cover"> <img src="{{ .Params.featured_image }}" alt="{{ .Title }}" class="w-full h-48 object-cover">
{{ else }} {{ else }}
<img src="https://images.unsplash.com/photo-1581091226033-d5c48150dbaa?ixlib=rb-4.0.3&auto=format&fit=crop&w=1000&q=80" alt="{{ .Title }}" class="w-full h-48 object-cover"> <img src="/assets/images/col-1.jpg" alt="{{ .Title }}" class="w-full h-48 object-cover">
{{ end }} {{ end }}
</a>
<div class="p-6"> <div class="p-6">
<div class="flex flex-wrap gap-2 mb-3"> <div class="flex flex-wrap gap-2 mb-3">
{{ range first 1 (default (slice) .Params.categories) }} {{ if .Params.categories }}
<span class="bg-blue-100 text-blue-800 text-xs font-medium px-2 py-1 rounded">{{ . }}</span> {{ range first 1 .Params.categories }}
<a href="/categories/{{ . | urlize }}" class="bg-blue-100 text-blue-800 text-xs font-medium px-2 py-1 rounded hover:underline">{{ . }}</a>
{{ end }}
{{ end }} {{ end }}
</div> </div>
<h3 class="text-lg font-bold text-gray-900 mb-3"> <h3 class="text-lg font-bold text-gray-900 mb-3"><a href="{{ .RelPermalink }}">{{ .Title }}</a></h3>
<a href="{{ .Permalink }}" class="hover:text-blue-600">{{ .Title }}</a> <p class="text-gray-600 text-sm mb-4">
</h3> {{ if .Params.excerpt }}
<p class="text-gray-600 text-sm mb-4">{{ .Summary | truncate 100 }}</p> {{ .Params.excerpt }}
{{ else if .Summary }}
{{ .Summary }}
{{ else }}
{{ truncate 200 .Content }}
{{ end }}
</p>
<div class="flex items-center justify-between text-sm text-gray-500"> <div class="flex items-center justify-between text-sm text-gray-500">
<span>{{ .Date.Format "Jan 2, 2006" }}</span> <span>{{ .Date | time.Format "2 Jan 2006" }}</span>
<span>{{ .ReadingTime }} min read</span> <a href="{{ .RelPermalink }}" class="text-blue-600 hover:text-blue-800 font-medium text-sm">Lire la suite →</a>
</div> </div>
</div> </div>
</div> </div>
@@ -129,90 +131,95 @@
</div> </div>
<!-- Pagination --> <!-- Pagination -->
<div class="flex justify-center mt-12">
{{ if gt .Paginator.TotalPages 1 }} {{ if gt .Paginator.TotalPages 1 }}
<div class="text-center"> {{ partial "pagination-tailwind.html" .Paginator }}
<nav class="flex justify-center items-center space-x-2">
{{ if .Paginator.HasPrev }}
<a href="{{ .Paginator.Prev.URL }}" class="px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700">
Previous
</a>
{{ end }} {{ end }}
{{ range .Paginator.Pagers }}
{{ if eq . $.Paginator }}
<span class="px-4 py-2 bg-blue-600 text-white rounded-lg">{{ .PageNumber }}</span>
{{ else }}
<a href="{{ .URL }}" class="px-4 py-2 bg-gray-200 text-gray-700 rounded-lg hover:bg-gray-300">{{ .PageNumber }}</a>
{{ end }}
{{ end }}
{{ if .Paginator.HasNext }}
<a href="{{ .Paginator.Next.URL }}" class="px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700">
Next
</a>
{{ end }}
</nav>
</div> </div>
{{ end }}
</div> </div>
</section> </section>
{{/*
<!-- Popular Topics --> <!-- Popular Topics -->
<section class="py-12 md:py-16"> <section class="py-12 md:py-16">
<div class="container mx-auto px-4 sm:px-6 lg:px-8"> <div class="container mx-auto px-4 sm:px-6 lg:px-8">
<h2 class="text-3xl font-bold text-gray-900 mb-10 text-center">Explore Topics</h2> <h2 class="text-3xl font-bold text-gray-900 mb-10 text-center">Explorer les Thèmes</h2>
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-4 mb-12"> <div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-4 mb-12">
{{ $categories := .Site.Taxonomies.categories }} <a href="#" class="flex flex-col items-center p-6 bg-white rounded-xl shadow-md hover:shadow-lg transition-shadow">
{{ if $categories }}
{{ $categoryList := slice }}
{{ range $name, $taxonomy := $categories }}
{{ range $taxonomy }}
{{ $categoryList = $categoryList | append . }}
{{ end }}
{{ end }}
{{ range $categoryList }}
<a href="/{{ .Page.Slug }}" class="flex flex-col items-center p-6 bg-white rounded-xl shadow-md hover:shadow-lg transition-shadow">
<div class="w-12 h-12 bg-blue-100 rounded-lg flex items-center justify-center mb-3"> <div class="w-12 h-12 bg-blue-100 rounded-lg flex items-center justify-center mb-3">
<i class="fas fa-tag text-blue-600 text-xl"></i> <i class="fas fa-robot text-blue-600 text-xl"></i>
</div> </div>
<span class="text-sm font-medium text-gray-900">{{ .Page.Title }}</span> <span class="text-sm font-medium text-gray-900">IA</span>
</a> </a>
{{ end }}
{{ else }} <a href="#" class="flex flex-col items-center p-6 bg-white rounded-xl shadow-md hover:shadow-lg transition-shadow">
<div class="col-span-full text-center py-8"> <div class="w-12 h-12 bg-green-100 rounded-lg flex items-center justify-center mb-3">
<p class="text-gray-500">No categories available yet.</p> <i class="fas fa-laptop-house text-green-600 text-xl"></i>
</div> </div>
{{ end }} <span class="text-sm font-medium text-gray-900">Télétravail</span>
</a>
<a href="#" class="flex flex-col items-center p-6 bg-white rounded-xl shadow-md hover:shadow-lg transition-shadow">
<div class="w-12 h-12 bg-purple-100 rounded-lg flex items-center justify-center mb-3">
<i class="fas fa-tachometer-alt text-purple-600 text-xl"></i>
</div>
<span class="text-sm font-medium text-gray-900">Productivité</span>
</a>
<a href="#" class="flex flex-col items-center p-6 bg-white rounded-xl shadow-md hover:shadow-lg transition-shadow">
<div class="w-12 h-12 bg-yellow-100 rounded-lg flex items-center justify-center mb-3">
<i class="fas fa-lightbulb text-yellow-600 text-xl"></i>
</div>
<span class="text-sm font-medium text-gray-900">Innovation</span>
</a>
<a href="#" class="flex flex-col items-center p-6 bg-white rounded-xl shadow-md hover:shadow-lg transition-shadow">
<div class="w-12 h-12 bg-red-100 rounded-lg flex items-center justify-center mb-3">
<i class="fas fa-code text-red-600 text-xl"></i>
</div>
<span class="text-sm font-medium text-gray-900">Développement</span>
</a>
<a href="#" class="flex flex-col items-center p-6 bg-white rounded-xl shadow-md hover:shadow-lg transition-shadow">
<div class="w-12 h-12 bg-indigo-100 rounded-lg flex items-center justify-center mb-3">
<i class="fas fa-link text-indigo-600 text-xl"></i>
</div>
<span class="text-sm font-medium text-gray-900">Web3</span>
</a>
</div> </div>
<div class="text-center"> <div class="text-center">
<a href="/topics" class="inline-flex items-center text-blue-600 hover:text-blue-800 font-medium"> <a href="#" class="inline-flex items-center text-blue-600 hover:text-blue-800 font-medium">
Browse all topics Parcourir tous les thèmes
<i class="fas fa-arrow-right ml-2"></i> <i class="fas fa-arrow-right ml-2"></i>
</a> </a>
</div> </div>
</div> </div>
</section> </section>
*/}}
{{/*
<!-- Newsletter Section --> <!-- Newsletter Section -->
<section class="py-12 md:py-16 bg-blue-50"> <section class="py-12 md:py-16 bg-blue-50">
<div class="container mx-auto px-4 sm:px-6 lg:px-8"> <div class="container mx-auto px-4 sm:px-6 lg:px-8">
<div class="max-w-3xl mx-auto text-center"> <div class="max-w-3xl mx-auto text-center">
<h2 class="text-3xl font-bold text-gray-900 mb-4">Stay Updated</h2> <h2 class="text-3xl font-bold text-gray-900 mb-4">Restez Informé</h2>
<p class="text-gray-700 mb-6">Join our newsletter and get the latest insights on technology and the future of work delivered to your inbox.</p> <p class="text-gray-700 mb-6">Rejoignez notre newsletter et recevez les dernières perspectives sur la technologie et l'avenir du travail directement dans votre boîte mail.</p>
<form class="flex flex-col sm:flex-row gap-4 max-w-xl mx-auto"> <form class="flex flex-col sm:flex-row gap-4 max-w-xl mx-auto">
<input type="email" <input type="email"
placeholder="Your email address" placeholder="Votre adresse email"
class="flex-grow px-4 py-3 rounded-lg border border-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500"> class="flex-grow px-4 py-3 rounded-lg border border-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500">
<button type="submit" <button type="submit"
class="btn-primary px-6 py-3 rounded-lg font-medium"> class="bg-blue-600 hover:bg-blue-700 text-white px-6 py-3 rounded-lg font-medium">
Subscribe S'abonner
</button> </button>
</form> </form>
<p class="text-sm text-gray-500 mt-4">No spam. Unsubscribe at any time.</p> <p class="text-sm text-gray-500 mt-4">Pas de spam. Désabonnez-vous à tout moment.</p>
</div> </div>
</div> </div>
</section> </section>
*/}}
</div> </div>
{{ end }} {{ end }}

View File

@@ -1,56 +0,0 @@
{{ define "main" }}
{{ $authorName := .Params.author }}
{{ $authorSlug := .Params.author_slug }}
{{ $authorPosts := where .Site.RegularPages "Params.author" $authorName }}
<div class="section-sm bg-gray-lighter">
<div class="container text-center">
<h1 class="font-family-playfair">{{ .Title }}</h1>
<p class="mt-2">Retrouvez toutes les pages utiles du site ici.</p>
</div><!-- end container -->
</div>
<!-- Blog section -->
<div class="section">
<div class="container">
<div class="row g-4">
<div class="col-12 col-sm-10 offset-sm-1 col-md-8 offset-md-2">
{{ $paginationLimit := 10 }}
{{ if .Site.Params.paginationLimit }}{{ $paginationLimit = .Site.Params.paginationLimit }}{{ end }}
{{ $paginator := .Paginate $authorPosts $paginationLimit }}
{{ if gt (len $authorPosts) 0 }}
{{ range $paginator.Pages }}
<!-- Blog Post box -->
<div class="mb-5">
<div class="mt-4">
<h2><a class="text-link-1" href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
{{ if .Params.excerpt }}
<p>{{ .Params.excerpt }}</p>
{{ else if .Summary }}
<p>{{ .Summary }}</p>
{{ else }}
<p>{{ truncate 200 .Content }}</p>
{{ end }}
<div class="mt-3">
<a class="button-text-1" href="{{ .RelPermalink }}">Lire la suite</a>
</div>
</div>
</div>
<!-- End Blog Post box -->
{{ end }}
<!-- Pagination -->
{{ partial "pagination.html" (dict "Paginator" .Paginator "Page" .) }}
{{ else }}
<div class="text-center py-5">
<h4>Aucun article trouvé</h4>
<p>Aucun article n'a été trouvé pour cet auteur.</p>
</div>
{{ end }}
</div>
</div><!-- end row -->
</div><!-- end container -->
</div>
<!-- end Blog section -->
{{ end }}

View File

@@ -1,13 +1,12 @@
<!-- Modern Breadcrumb Navigation --> <!-- Breadcrumb Navigation -->
<nav class="breadcrumb-nav" aria-label="breadcrumb"> <nav class="breadcrumb border-b border-slate-200 py-2 px-3 md:py-4 md:px-6 lg:px-8" aria-label="Breadcrumb" itemscope itemtype="https://schema.org/BreadcrumbList">
<div class="breadcrumb-container"> <ol class="flex flex-wrap items-center space-x-1 md:space-x-2 text-xs sm:text-sm md:text-base leading-relaxed">
<ol class="breadcrumb-list" itemscope itemtype="https://schema.org/BreadcrumbList">
<!-- Home --> <!-- Home -->
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> <li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a href="{{ "/" | relLangURL }}" itemprop="item" title="{{ i18n "home" | default "Home" }}"> <a href="{{ "/" | relLangURL }}" itemprop="item" title="Home" class="text-slate-600 hover:text-blue-600 transition-colors flex items-center">
<i class="fas fa-home" aria-hidden="true"></i> <i class="fas fa-home text-[10px] sm:text-xs md:text-sm mr-1"></i>
<span itemprop="name">{{ i18n "home" | default "Accueil" }}</span> <span itemprop="name" class="hidden sm:inline">Home</span>
</a> </a>
<meta itemprop="position" content="1" /> <meta itemprop="position" content="1" />
</li> </li>
@@ -29,8 +28,9 @@
{{ end }} {{ end }}
{{ if $category }} {{ if $category }}
<li class="breadcrumb-divider text-slate-400 px-0.5">/</li>
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"> <li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a href="{{ $categoryUrl | relLangURL }}" itemprop="item" title="{{ $category }}"> <a href="{{ $categoryUrl | relLangURL }}" itemprop="item" title="{{ $category }}" class="text-slate-600 hover:text-blue-600 transition-colors line-clamp-1 max-w-[120px] sm:max-w-none">
<span itemprop="name">{{ $category }}</span> <span itemprop="name">{{ $category }}</span>
</a> </a>
<meta itemprop="position" content="2" /> <meta itemprop="position" content="2" />
@@ -39,39 +39,27 @@
{{ end }} {{ end }}
<!-- Current Page --> <!-- Current Page -->
<li class="breadcrumb-item active" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem" aria-current="page"> {{ if .Title }}
<span itemprop="name">{{ .Title }}</span> <li class="breadcrumb-divider text-slate-400 px-0.5">/</li>
<li class="breadcrumb-item active" aria-current="page" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<span itemprop="name" class="text-blue-600 font-medium line-clamp-1 max-w-[100px] sm:max-w-[200px] md:max-w-none">{{ .Title }}</span>
<meta itemprop="position" content="{{ if or .Params.categories .Section }}3{{ else }}2{{ end }}" /> <meta itemprop="position" content="{{ if or .Params.categories .Section }}3{{ else }}2{{ end }}" />
</li> </li>
{{ end }}
</ol> </ol>
</div>
</nav> </nav>
<!-- JSON-LD Structured Data --> <!-- Fallback for pages without title -->
<script type="application/ld+json"> {{ if not .Title }}
{ <nav class="breadcrumb border-t border-b border-slate-200 py-2 px-3 md:py-4 md:px-6 lg:px-8 my-2 md:my-4" aria-label="Breadcrumb">
"@context": "https://schema.org", <ol class="flex flex-wrap items-center space-x-1 md:space-x-2 text-xs sm:text-sm md:text-base leading-relaxed">
"@type": "BreadcrumbList", <li class="breadcrumb-item">
"itemListElement": [ <a href="{{ "/" | relLangURL }}" class="text-slate-600 hover:text-blue-600 transition-colors flex items-center">
{ <i class="fas fa-home text-[10px] sm:text-xs md:text-sm mr-1"></i>
"@type": "ListItem", <span>Home</span>
"position": 1, </a>
"name": "{{ i18n "home" | default "Home" }}", </li>
"item": "{{ "/" | absLangURL }}" </ol>
}{{ if or .Params.categories .Section }}, </nav>
{ {{ end }}
"@type": "ListItem",
"position": 2,
"name": "{{ if .Params.categories }}{{ index .Params.categories 0 }}{{ else }}{{ humanize .Section }}{{ end }}",
"item": "{{ if .Params.categories }}{{ printf "%s/categories/%s" (absLangURL "") (anchorize (index .Params.categories 0)) }}{{ else }}{{ printf "%s/%s" (absLangURL "") .Section }}{{ end }}"
}{{ end }},
{
"@type": "ListItem",
"position": {{ if or .Params.categories .Section }}3{{ else }}2{{ end }},
"name": "{{ .Title }}",
"item": "{{ .Permalink }}"
}
]
}
</script>

View File

@@ -1,33 +1,32 @@
<footer> <footer class="bg-gray-900 text-white py-12">
<div class="section-sm bg-dark"> <div class="container mx-auto px-4 sm:px-6 lg:px-8">
<div class="container"> <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8">
<div class="row g-4"> <div class="col-span-1">
<div class="col-6 col-sm-6 col-lg-3"> <h3 class="uppercase tracking-wider text-xl font-bold">{{ .Site.Title }}</h3>
<h3 class="uppercase letter-spacing-1">{{ .Site.Title }}</h3>
</div> </div>
<div class="col-6 col-sm-6 col-lg-3"> <div class="col-span-1">
<h6 class="font-small fw-medium uppercase">Pages</h6> <h6 class="text-sm font-medium uppercase mb-4">Pages</h6>
<ul class="list-unstyled"> <ul class="list-none space-y-2">
<li><a href="/">Accueil</a></li> <li><a href="/" class="text-gray-400 hover:text-white">Accueil</a></li>
{{ if .Site.Data.wordpress }} {{ if .Site.Data.wordpress }}
{{ range $index, $element := .Site.Data.wordpress.navigation }} {{ range $index, $element := .Site.Data.wordpress.navigation }}
<li> <li>
<a href="/pages/{{ $element.slug }}">{{ $element.title }}</a> <a href="/pages/{{ $element.slug }}" class="text-gray-400 hover:text-white">{{ $element.title }}</a>
</li> </li>
{{ end }} {{ end }}
{{ end }} {{ end }}
</ul> </ul>
</div> </div>
<div class="col-6 col-sm-6 col-lg-3"> <div class="col-span-1">
<h6 class="font-small fw-medium uppercase">Toutes les catégories</h6> <h6 class="text-sm font-medium uppercase mb-4">Toutes les catégories</h6>
<ul class="list-unstyled"> <ul class="list-none space-y-2">
{{ if .Site.Data.wordpress }} {{ if .Site.Data.wordpress }}
{{ range $index, $element := .Site.Data.wordpress.categories }} {{ range $index, $element := .Site.Data.wordpress.categories }}
{{ if and (ne $element.name "Featured") (gt $element.count 0) }} {{ if and (ne $element.name "Featured") (gt $element.count 0) }}
<li class="nav-item"> <li>
<a class="nav-link" href="/{{ $element.slug }}">{{ $element.name }}</a> <a class="text-gray-400 hover:text-white" href="/{{ $element.slug }}">{{ $element.name }}</a>
</li> </li>
{{ end }} {{ end }}
{{ end }} {{ end }}
@@ -35,35 +34,25 @@
</ul> </ul>
</div> </div>
{{/*
<div class="col-6 col-sm-6 col-lg-3">
<h6 class="font-small fw-medium uppercase">Contact Info</h6>
<ul class="list-unstyled">
<li>121 King St, Melbourne VIC 3000</li>
<li>contact@example.com</li>
<li>+(123) 456 789 01</li>
</ul>
</div>
*/}}
</div><!-- end row -->
</div><!-- end grid -->
</div><!-- end container --> </div><!-- end container -->
<div class="bg-black py-4 mt-8">
<div class="container mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex flex-col md:flex-row items-center justify-between gap-2 lg:gap-3">
<div class="text-center md:text-start">
<p class="text-gray-400">&copy; {{ now.Format "2006" }} {{ .Site.Title }}, All Rights Reserved.</p>
</div> </div>
<div class="bg-black py-4"> <div class="text-center md:text-end">
<div class="container"> <ul class="flex justify-center md:justify-end space-x-4">
<div class="row align-items-center g-2 g-lg-3"> <li><a class="w-8 h-8 rounded-full flex items-center justify-center bg-blue-600 hover:bg-blue-700 text-white" href="https://www.facebook.com/mistergeekfrance"><i class="bi bi-facebook"></i></a></li>
<div class="col-12 col-md-6 text-center text-md-start"> <!-- <li><a class="w-8 h-8 rounded-full flex items-center justify-center bg-blue-400 hover:bg-blue-500 text-white" href="#"><i class="bi bi-twitter-x"></i></a></li> -->
<p>&copy; {{ now.Format "2006" }} {{ .Site.Title }}, All Rights Reserved.</p> <!-- <li><a class="w-8 h-8 rounded-full flex items-center justify-center bg-red-600 hover:bg-red-700 text-white" href="#"><i class="bi bi-pinterest"></i></a></li> -->
</div> <!-- <li><a class="w-8 h-8 rounded-full flex items-center justify-center bg-pink-600 hover:bg-pink-700 text-white" href="#"><i class="bi bi-instagram"></i></a></li> -->
<div class="col-12 col-md-6 text-center text-md-end">
<ul class="list-inline-sm">
<li><a class="button-circle button-circle-sm button-circle-social-facebook" href="https://www.facebook.com/mistergeekfrance"><i class="bi bi-facebook"></i></a></li>
<!-- <li><a class="button-circle button-circle-sm button-circle-social-twitter" href="#"><i class="bi bi-twitter-x"></i></a></li> -->
<!-- <li><a class="button-circle button-circle-sm button-circle-social-pinterest" href="#"><i class="bi bi-pinterest"></i></a></li> -->
<!-- <li><a class="button-circle button-circle-sm button-circle-social-instagram" href="#"><i class="bi bi-instagram"></i></a></li> -->
</ul> </ul>
</div> </div>
</div><!-- end row --> </div><!-- end flex -->
</div><!-- end container --> </div><!-- end container -->
</div> </div>
</footer> </footer>

View File

@@ -4,40 +4,33 @@
<div class="flex justify-between items-center h-16"> <div class="flex justify-between items-center h-16">
<!-- Logo --> <!-- Logo -->
<div class="flex items-center"> <div class="flex items-center">
<a href="/" class="text-2xl font-bold text-gray-900"> <a href="/" class="text-xl uppercase font-bold text-gray-900 transition hover:text-gray-400">{{ .Site.Title }}</a>
{{ .Site.Title }}
</a>
</div> </div>
<!-- Desktop Navigation --> <!-- Desktop Navigation -->
<nav class="hidden md:flex items-center space-x-8"> <nav class="hidden md:flex">
<a href="/" class="text-gray-600 hover:text-blue-600 font-medium transition-colors">Accueil</a> <ul class="flex items-center h-full gap-8 m-0 p-0 list-none">
<a href="/articles" class="text-gray-600 hover:text-blue-600 font-medium transition-colors">Articles</a>
{{ if .Site.Data.wordpress }} {{ if .Site.Data.wordpress }}
{{ $count := 0 }} {{ $count := 0 }}
{{ range $index, $element := .Site.Data.wordpress.categories }} {{ range $index, $element := .Site.Data.wordpress.categories }}
{{ if or (eq $element.name "Featured") (eq $element.name "Non classé") }} {{ if or (eq $element.name "Featured") (eq $element.name "Non classé") }}
{{ continue }} {{ continue }}
{{ else if lt $count 5 }} {{ else if lt $count 5 }}
<a href="/{{ $element.slug }}" class="text-gray-600 hover:text-blue-600 font-medium transition-colors">{{ $element.name }}</a> <li>
<a href="/{{ $element.slug }}" class="px-4 py-2 rounded transition ease-in-out hover:bg-gray-100 text-gray-600 hover:text-blue-600 font-medium">{{ $element.name }}</a>
</li>
{{ $count = add $count 1 }} {{ $count = add $count 1 }}
{{ else }} {{ else }}
{{ break }} {{ break }}
{{ end }} {{ end }}
{{ end }} {{ end }}
{{ end }} {{ end }}
</ul>
</nav> </nav>
<!-- Mobile Menu Button -->
<div class="flex items-center space-x-4"> <div class="flex items-center space-x-4">
<button @click="mobileMenuOpen = !mobileMenuOpen" <button class="md:hidden text-gray-600" id="mobile-menu-toggle" aria-label="Toggle mobile menu" @click="mobileMenuOpen = !mobileMenuOpen">
class="md:hidden text-gray-600 focus:outline-none"> <i class="fas text-xl transition-transform duration-300 ease-in-out"
<svg x-show="!mobileMenuOpen" class="h-6 w-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"> :class="mobileMenuOpen ? 'fa-times' : 'fa-bars'"></i>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path>
</svg>
<svg x-show="mobileMenuOpen" class="h-6 w-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
</svg>
</button> </button>
</div> </div>
</div> </div>
@@ -53,23 +46,23 @@
x-transition:leave-end="opacity-0 transform -translate-y-2" x-transition:leave-end="opacity-0 transform -translate-y-2"
class="md:hidden absolute top-full left-0 right-0 bg-white border-b border-gray-200 shadow-lg"> class="md:hidden absolute top-full left-0 right-0 bg-white border-b border-gray-200 shadow-lg">
<div class="container mx-auto px-4 sm:px-6 lg:px-8 py-4"> <div class="container mx-auto px-4 sm:px-6 lg:px-8 py-4">
<div class="flex flex-col space-y-4"> <ul class="flex flex-col space-y-4 m-0 p-0 list-none">
<a href="/" class="text-gray-600 hover:text-blue-600 font-medium py-2">Accueil</a>
<a href="/articles" class="text-gray-600 hover:text-blue-600 font-medium py-2">Articles</a>
{{ if .Site.Data.wordpress }} {{ if .Site.Data.wordpress }}
{{ $count := 0 }} {{ $count := 0 }}
{{ range $index, $element := .Site.Data.wordpress.categories }} {{ range $index, $element := .Site.Data.wordpress.categories }}
{{ if or (eq $element.name "Featured") (eq $element.name "Non classé") }} {{ if or (eq $element.name "Featured") (eq $element.name "Non classé") }}
{{ continue }} {{ continue }}
{{ else if lt $count 5 }} {{ else if lt $count 5 }}
<a href="/{{ $element.slug }}" class="text-gray-600 hover:text-blue-600 font-medium py-2">{{ $element.name }}</a> <li>
<a href="/{{ $element.slug }}" class="px-4 py-2 rounded transition ease-in-out hover:bg-gray-100 text-gray-600 hover:text-blue-600 font-medium">{{ $element.name }}</a>
</li>
{{ $count = add $count 1 }} {{ $count = add $count 1 }}
{{ else }} {{ else }}
{{ break }} {{ break }}
{{ end }} {{ end }}
{{ end }} {{ end }}
{{ end }} {{ end }}
</div> </ul>
</div> </div>
</div> </div>
</header> </header>

View File

@@ -0,0 +1,13 @@
<!-- Newsletter -->
<div class="py-12 bg-blue-50">
<div class="container mx-auto px-4 sm:px-6 lg:px-8">
<div class="max-w-3xl mx-auto text-center">
<h2 class="text-2xl font-bold text-gray-900 mb-4">Rejoignez la newsletter</h2>
<p class="text-gray-700 mb-6">Restez informé des dernières actualités sur la technologie et le futur du travail.</p>
<form class="flex flex-col sm:flex-row gap-4 max-w-xl mx-auto">
<input type="email" placeholder="Votre adresse email" class="flex-grow px-4 py-3 rounded-lg border border-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500">
<button type="submit" class="bg-blue-600 hover:bg-blue-700 text-white px-6 py-3 rounded-lg font-medium transition-colors">S'abonner</button>
</form>
</div>
</div>
</div>

View File

@@ -0,0 +1,89 @@
{{ $paginator := . }}
{{ $currentPage := .PageNumber }}
{{ $totalPages := .TotalPages }}
{{ if gt $totalPages 1 }}
<nav aria-label="Pagination" class="bg-white shadow-lg rounded-lg p-6 sm:p-8 my-4">
<div class="flex items-center justify-center">
<div class="flex items-center space-x-2 sm:space-x-3">
<!-- Previous Button -->
{{ if .HasPrev }}
<a href="{{ .Prev.URL }}" class="relative inline-flex items-center px-4 py-2 rounded-lg bg-gray-100 text-sm font-medium text-gray-700 hover:bg-gray-200 focus:z-10 focus:outline-none focus:ring-2 focus:ring-blue-500 transition-colors duration-150">
<span class="sr-only">Précédent</span>
<svg class="h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" clip-rule="evenodd" />
</svg>
<span class="ml-1 hidden sm:inline">Précédent</span>
</a>
{{ else }}
<span class="relative inline-flex items-center px-4 py-2 rounded-lg bg-gray-100 text-sm font-medium text-gray-400 cursor-not-allowed">
<svg class="h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" clip-rule="evenodd" />
</svg>
<span class="ml-1 hidden sm:inline">Précédent</span>
</span>
{{ end }}
<!-- First Page -->
{{ if gt $totalPages 1 }}
<a href="{{ .First.URL }}" class="relative inline-flex items-center px-4 py-2 rounded-lg {{ if eq $currentPage 1 }}bg-blue-600 text-white shadow-sm{{ else }}bg-gray-100 text-gray-700 hover:bg-gray-200{{ end }} text-sm font-medium transition-colors duration-150">
1
</a>
{{ end }}
<!-- Ellipsis after first page if current page > 4 -->
{{ if gt $currentPage 4 }}
<span class="relative inline-flex items-center px-3 py-2 text-sm font-medium text-gray-500">
...
</span>
{{ end }}
<!-- Pages around current page -->
{{ range .Pagers }}
{{ $pageNumber := .PageNumber }}
{{ if and (gt $pageNumber 1) (lt $pageNumber $totalPages) (ge $pageNumber (sub $currentPage 1)) (le $pageNumber (add $currentPage 1)) }}
{{ if ne $pageNumber 1 }}
{{ if ne $pageNumber $totalPages }}
<a href="{{ .URL }}" class="relative inline-flex items-center px-4 py-2 rounded-lg {{ if eq $pageNumber $currentPage }}bg-blue-600 text-white shadow-sm{{ else }}bg-gray-100 text-gray-700 hover:bg-gray-200{{ end }} text-sm font-medium transition-colors duration-150">
{{ $pageNumber }}
</a>
{{ end }}
{{ end }}
{{ end }}
{{ end }}
<!-- Ellipsis before last page if current page < totalPages - 3 -->
{{ if lt $currentPage (sub $totalPages 3) }}
<span class="relative inline-flex items-center px-3 py-2 text-sm font-medium text-gray-500">
...
</span>
{{ end }}
<!-- Last Page -->
{{ if gt $totalPages 1 }}
<a href="{{ .Last.URL }}" class="relative inline-flex items-center px-4 py-2 rounded-lg {{ if eq $currentPage $totalPages }}bg-blue-600 text-white shadow-sm{{ else }}bg-gray-100 text-gray-700 hover:bg-gray-200{{ end }} text-sm font-medium transition-colors duration-150">
{{ $totalPages }}
</a>
{{ end }}
<!-- Next Button -->
{{ if .HasNext }}
<a href="{{ .Next.URL }}" class="relative inline-flex items-center px-4 py-2 rounded-lg bg-gray-100 text-sm font-medium text-gray-700 hover:bg-gray-200 focus:z-10 focus:outline-none focus:ring-2 focus:ring-blue-500 transition-colors duration-150">
<span class="mr-1 hidden sm:inline">Suivant</span>
<span class="sr-only">Suivant</span>
<svg class="h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
</svg>
</a>
{{ else }}
<span class="relative inline-flex items-center px-4 py-2 rounded-lg bg-gray-100 text-sm font-medium text-gray-400 cursor-not-allowed">
<span class="mr-1 hidden sm:inline">Suivant</span>
<svg class="h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
</svg>
</span>
{{ end }}
</div>
</div>
</nav>
{{ end }}

View File

@@ -0,0 +1,35 @@
<!-- Related Articles -->
<div class="py-12">
<div class="container mx-auto px-4 sm:px-6 lg:px-8">
<h2 class="text-2xl font-bold text-gray-900 mb-8 text-center">Articles connexes</h2>
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
{{ range first 3 (where .Site.RegularPages "Type" "post") }}
<div class="bg-white rounded-xl overflow-hidden shadow-md hover:shadow-lg transition-shadow">
{{ if .Params.featured_image }}
<img src="{{ .Params.featured_image }}" alt="Article" class="w-full h-48 object-cover">
{{ else }}
<img src="https://images.unsplash.com/photo-1581091226033-d5c48150dbaa?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1000&q=80" alt="Article" class="w-full h-48 object-cover">
{{ end }}
<div class="p-6">
<span class="text-sm font-medium text-blue-600">
{{ with .Params.categories }}
{{ range first 1 . }}
{{ . }}
{{ end }}
{{ end }}
</span>
<h3 class="text-xl font-semibold mt-2 mb-3">
<a href="{{ .Permalink }}" class="text-gray-900 hover:text-blue-600 transition-colors">{{ .Title }}</a>
</h3>
<p class="text-gray-600">{{ .Summary | truncate 100 }}</p>
<div class="flex items-center mt-4 text-sm text-gray-500">
<span>{{ .Date.Format "2 janvier 2006" }}</span>
<span class="mx-2"></span>
<span>{{ .ReadingTime }} min de lecture</span>
</div>
</div>
</div>
{{ end }}
</div>
</div>
</div>

View File

@@ -1,20 +0,0 @@
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$to = 'your-email@example.com'; // <-- Enter your E-Mail address here.
$subject = $_POST['subject'];
$body = "From: $name <br> E-Mail: $email <br> Message: <br> $message";
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'From:' . $email. "\r\n";
$headers .= 'Cc:' . $email. "\r\n";
if (mail($to, "New Message from Website: $subject", $body, $headers)) {
echo json_encode(['status' => 'success', 'message' => 'Message sent successfully.']);
} else {
echo json_encode(['status' => 'error', 'message' => 'Message could not be sent. Please try again later.']);
}
?>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,165 +0,0 @@
Fonticons, Inc. (https://fontawesome.com)
--------------------------------------------------------------------------------
Font Awesome Free License
Font Awesome Free is free, open source, and GPL friendly. You can use it for
commercial projects, open source projects, or really almost whatever you want.
Full Font Awesome Free license: https://fontawesome.com/license/free.
--------------------------------------------------------------------------------
# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
The Font Awesome Free download is licensed under a Creative Commons
Attribution 4.0 International License and applies to all icons packaged
as SVG and JS file types.
--------------------------------------------------------------------------------
# Fonts: SIL OFL 1.1 License
In the Font Awesome Free download, the SIL OFL license applies to all icons
packaged as web and desktop font files.
Copyright (c) 2024 Fonticons, Inc. (https://fontawesome.com)
with Reserved Font Name: "Font Awesome".
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
SIL OPEN FONT LICENSE
Version 1.1 - 26 February 2007
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting — in part or in whole — any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
--------------------------------------------------------------------------------
# Code: MIT License (https://opensource.org/licenses/MIT)
In the Font Awesome Free download, the MIT license applies to all non-font and
non-icon files.
Copyright 2024 Fonticons, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in the
Software without restriction, including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
and to permit persons to whom the Software is furnished to do so, subject to the
following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
# Attribution
Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
Awesome Free files already contain embedded comments with sufficient
attribution, so you shouldn't need to do anything additional when using these
files normally.
We've kept attribution comments terse, so we ask that you do not actively work
to remove them from files, especially code. They're a great way for folks to
learn about Font Awesome.
--------------------------------------------------------------------------------
# Brand Icons
All brand icons are trademarks of their respective owners. The use of these
trademarks does not indicate endorsement of the trademark holder by Font
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
to represent the company, product, or service to which they refer.**

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -1,19 +0,0 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
:root, :host {
--fa-style-family-classic: 'Font Awesome 6 Free';
--fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; }
@font-face {
font-family: 'Font Awesome 6 Free';
font-style: normal;
font-weight: 400;
font-display: block;
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }
.far,
.fa-regular {
font-weight: 400; }

View File

@@ -1,6 +0,0 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}

View File

@@ -1,19 +0,0 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
:root, :host {
--fa-style-family-classic: 'Font Awesome 6 Free';
--fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; }
@font-face {
font-family: 'Font Awesome 6 Free';
font-style: normal;
font-weight: 900;
font-display: block;
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
.fas,
.fa-solid {
font-weight: 900; }

View File

@@ -1,6 +0,0 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}

View File

@@ -1,459 +0,0 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
:root, :host {
--fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free';
--fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free';
--fa-font-light: normal 300 1em/1 'Font Awesome 6 Pro';
--fa-font-thin: normal 100 1em/1 'Font Awesome 6 Pro';
--fa-font-duotone: normal 900 1em/1 'Font Awesome 6 Duotone';
--fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands';
--fa-font-sharp-solid: normal 900 1em/1 'Font Awesome 6 Sharp';
--fa-font-sharp-regular: normal 400 1em/1 'Font Awesome 6 Sharp';
--fa-font-sharp-light: normal 300 1em/1 'Font Awesome 6 Sharp';
--fa-font-sharp-thin: normal 100 1em/1 'Font Awesome 6 Sharp';
--fa-font-sharp-duotone-solid: normal 900 1em/1 'Font Awesome 6 Sharp Duotone'; }
svg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {
overflow: visible;
box-sizing: content-box; }
.svg-inline--fa {
display: var(--fa-display, inline-block);
height: 1em;
overflow: visible;
vertical-align: -.125em; }
.svg-inline--fa.fa-2xs {
vertical-align: 0.1em; }
.svg-inline--fa.fa-xs {
vertical-align: 0em; }
.svg-inline--fa.fa-sm {
vertical-align: -0.07143em; }
.svg-inline--fa.fa-lg {
vertical-align: -0.2em; }
.svg-inline--fa.fa-xl {
vertical-align: -0.25em; }
.svg-inline--fa.fa-2xl {
vertical-align: -0.3125em; }
.svg-inline--fa.fa-pull-left {
margin-right: var(--fa-pull-margin, 0.3em);
width: auto; }
.svg-inline--fa.fa-pull-right {
margin-left: var(--fa-pull-margin, 0.3em);
width: auto; }
.svg-inline--fa.fa-li {
width: var(--fa-li-width, 2em);
top: 0.25em; }
.svg-inline--fa.fa-fw {
width: var(--fa-fw-width, 1.25em); }
.fa-layers svg.svg-inline--fa {
bottom: 0;
left: 0;
margin: auto;
position: absolute;
right: 0;
top: 0; }
.fa-layers-text, .fa-layers-counter {
display: inline-block;
position: absolute;
text-align: center; }
.fa-layers {
display: inline-block;
height: 1em;
position: relative;
text-align: center;
vertical-align: -.125em;
width: 1em; }
.fa-layers svg.svg-inline--fa {
transform-origin: center center; }
.fa-layers-text {
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
transform-origin: center center; }
.fa-layers-counter {
background-color: var(--fa-counter-background-color, #ff253a);
border-radius: var(--fa-counter-border-radius, 1em);
box-sizing: border-box;
color: var(--fa-inverse, #fff);
line-height: var(--fa-counter-line-height, 1);
max-width: var(--fa-counter-max-width, 5em);
min-width: var(--fa-counter-min-width, 1.5em);
overflow: hidden;
padding: var(--fa-counter-padding, 0.25em 0.5em);
right: var(--fa-right, 0);
text-overflow: ellipsis;
top: var(--fa-top, 0);
transform: scale(var(--fa-counter-scale, 0.25));
transform-origin: top right; }
.fa-layers-bottom-right {
bottom: var(--fa-bottom, 0);
right: var(--fa-right, 0);
top: auto;
transform: scale(var(--fa-layers-scale, 0.25));
transform-origin: bottom right; }
.fa-layers-bottom-left {
bottom: var(--fa-bottom, 0);
left: var(--fa-left, 0);
right: auto;
top: auto;
transform: scale(var(--fa-layers-scale, 0.25));
transform-origin: bottom left; }
.fa-layers-top-right {
top: var(--fa-top, 0);
right: var(--fa-right, 0);
transform: scale(var(--fa-layers-scale, 0.25));
transform-origin: top right; }
.fa-layers-top-left {
left: var(--fa-left, 0);
right: auto;
top: var(--fa-top, 0);
transform: scale(var(--fa-layers-scale, 0.25));
transform-origin: top left; }
.fa-1x {
font-size: 1em; }
.fa-2x {
font-size: 2em; }
.fa-3x {
font-size: 3em; }
.fa-4x {
font-size: 4em; }
.fa-5x {
font-size: 5em; }
.fa-6x {
font-size: 6em; }
.fa-7x {
font-size: 7em; }
.fa-8x {
font-size: 8em; }
.fa-9x {
font-size: 9em; }
.fa-10x {
font-size: 10em; }
.fa-2xs {
font-size: 0.625em;
line-height: 0.1em;
vertical-align: 0.225em; }
.fa-xs {
font-size: 0.75em;
line-height: 0.08333em;
vertical-align: 0.125em; }
.fa-sm {
font-size: 0.875em;
line-height: 0.07143em;
vertical-align: 0.05357em; }
.fa-lg {
font-size: 1.25em;
line-height: 0.05em;
vertical-align: -0.075em; }
.fa-xl {
font-size: 1.5em;
line-height: 0.04167em;
vertical-align: -0.125em; }
.fa-2xl {
font-size: 2em;
line-height: 0.03125em;
vertical-align: -0.1875em; }
.fa-fw {
text-align: center;
width: 1.25em; }
.fa-ul {
list-style-type: none;
margin-left: var(--fa-li-margin, 2.5em);
padding-left: 0; }
.fa-ul > li {
position: relative; }
.fa-li {
left: calc(-1 * var(--fa-li-width, 2em));
position: absolute;
text-align: center;
width: var(--fa-li-width, 2em);
line-height: inherit; }
.fa-border {
border-color: var(--fa-border-color, #eee);
border-radius: var(--fa-border-radius, 0.1em);
border-style: var(--fa-border-style, solid);
border-width: var(--fa-border-width, 0.08em);
padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); }
.fa-pull-left {
float: left;
margin-right: var(--fa-pull-margin, 0.3em); }
.fa-pull-right {
float: right;
margin-left: var(--fa-pull-margin, 0.3em); }
.fa-beat {
animation-name: fa-beat;
animation-delay: var(--fa-animation-delay, 0s);
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 1s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, ease-in-out); }
.fa-bounce {
animation-name: fa-bounce;
animation-delay: var(--fa-animation-delay, 0s);
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 1s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); }
.fa-fade {
animation-name: fa-fade;
animation-delay: var(--fa-animation-delay, 0s);
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 1s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
.fa-beat-fade {
animation-name: fa-beat-fade;
animation-delay: var(--fa-animation-delay, 0s);
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 1s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); }
.fa-flip {
animation-name: fa-flip;
animation-delay: var(--fa-animation-delay, 0s);
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 1s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, ease-in-out); }
.fa-shake {
animation-name: fa-shake;
animation-delay: var(--fa-animation-delay, 0s);
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 1s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, linear); }
.fa-spin {
animation-name: fa-spin;
animation-delay: var(--fa-animation-delay, 0s);
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 2s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, linear); }
.fa-spin-reverse {
--fa-animation-direction: reverse; }
.fa-pulse,
.fa-spin-pulse {
animation-name: fa-spin;
animation-direction: var(--fa-animation-direction, normal);
animation-duration: var(--fa-animation-duration, 1s);
animation-iteration-count: var(--fa-animation-iteration-count, infinite);
animation-timing-function: var(--fa-animation-timing, steps(8)); }
@media (prefers-reduced-motion: reduce) {
.fa-beat,
.fa-bounce,
.fa-fade,
.fa-beat-fade,
.fa-flip,
.fa-pulse,
.fa-shake,
.fa-spin,
.fa-spin-pulse {
animation-delay: -1ms;
animation-duration: 1ms;
animation-iteration-count: 1;
transition-delay: 0s;
transition-duration: 0s; } }
@keyframes fa-beat {
0%, 90% {
transform: scale(1); }
45% {
transform: scale(var(--fa-beat-scale, 1.25)); } }
@keyframes fa-bounce {
0% {
transform: scale(1, 1) translateY(0); }
10% {
transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); }
30% {
transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); }
50% {
transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); }
57% {
transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); }
64% {
transform: scale(1, 1) translateY(0); }
100% {
transform: scale(1, 1) translateY(0); } }
@keyframes fa-fade {
50% {
opacity: var(--fa-fade-opacity, 0.4); } }
@keyframes fa-beat-fade {
0%, 100% {
opacity: var(--fa-beat-fade-opacity, 0.4);
transform: scale(1); }
50% {
opacity: 1;
transform: scale(var(--fa-beat-fade-scale, 1.125)); } }
@keyframes fa-flip {
50% {
transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } }
@keyframes fa-shake {
0% {
transform: rotate(-15deg); }
4% {
transform: rotate(15deg); }
8%, 24% {
transform: rotate(-18deg); }
12%, 28% {
transform: rotate(18deg); }
16% {
transform: rotate(-22deg); }
20% {
transform: rotate(22deg); }
32% {
transform: rotate(-12deg); }
36% {
transform: rotate(12deg); }
40%, 100% {
transform: rotate(0deg); } }
@keyframes fa-spin {
0% {
transform: rotate(0deg); }
100% {
transform: rotate(360deg); } }
.fa-rotate-90 {
transform: rotate(90deg); }
.fa-rotate-180 {
transform: rotate(180deg); }
.fa-rotate-270 {
transform: rotate(270deg); }
.fa-flip-horizontal {
transform: scale(-1, 1); }
.fa-flip-vertical {
transform: scale(1, -1); }
.fa-flip-both,
.fa-flip-horizontal.fa-flip-vertical {
transform: scale(-1, -1); }
.fa-rotate-by {
transform: rotate(var(--fa-rotate-angle, 0)); }
.fa-stack {
display: inline-block;
vertical-align: middle;
height: 2em;
position: relative;
width: 2.5em; }
.fa-stack-1x,
.fa-stack-2x {
bottom: 0;
left: 0;
margin: auto;
position: absolute;
right: 0;
top: 0;
z-index: var(--fa-stack-z-index, auto); }
.svg-inline--fa.fa-stack-1x {
height: 1em;
width: 1.25em; }
.svg-inline--fa.fa-stack-2x {
height: 2em;
width: 2.5em; }
.fa-inverse {
color: var(--fa-inverse, #fff); }
.sr-only,
.fa-sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0; }
.sr-only-focusable:not(:focus),
.fa-sr-only-focusable:not(:focus) {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0; }
.svg-inline--fa .fa-primary {
fill: var(--fa-primary-color, currentColor);
opacity: var(--fa-primary-opacity, 1); }
.svg-inline--fa .fa-secondary {
fill: var(--fa-secondary-color, currentColor);
opacity: var(--fa-secondary-opacity, 0.4); }
.svg-inline--fa.fa-swap-opacity .fa-primary {
opacity: var(--fa-secondary-opacity, 0.4); }
.svg-inline--fa.fa-swap-opacity .fa-secondary {
opacity: var(--fa-primary-opacity, 1); }
.svg-inline--fa mask .fa-primary,
.svg-inline--fa mask .fa-secondary {
fill: black; }
.fad.fa-inverse,
.fa-duotone.fa-inverse {
color: var(--fa-inverse, #fff); }

File diff suppressed because one or more lines are too long

View File

@@ -1,26 +0,0 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype");
unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; }
@font-face {
font-family: 'FontAwesome';
font-display: block;
src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype");
unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; }

View File

@@ -1,6 +0,0 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -1,22 +0,0 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@font-face {
font-family: 'Font Awesome 5 Brands';
font-display: block;
font-weight: 400;
src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }
@font-face {
font-family: 'Font Awesome 5 Free';
font-display: block;
font-weight: 900;
src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }
@font-face {
font-family: 'Font Awesome 5 Free';
font-display: block;
font-weight: 400;
src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }

View File

@@ -1,6 +0,0 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,152 +0,0 @@
// animating icons
// --------------------------
.@{fa-css-prefix}-beat {
animation-name: ~'@{fa-css-prefix}-beat';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, ease-in-out)';
}
.@{fa-css-prefix}-bounce {
animation-name: ~'@{fa-css-prefix}-bounce';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, cubic-bezier(0.280, 0.840, 0.420, 1))';
}
.@{fa-css-prefix}-fade {
animation-name: ~'@{fa-css-prefix}-fade';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1))';
}
.@{fa-css-prefix}-beat-fade {
animation-name: ~'@{fa-css-prefix}-beat-fade';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1))';
}
.@{fa-css-prefix}-flip {
animation-name: ~'@{fa-css-prefix}-flip';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, ease-in-out)';
}
.@{fa-css-prefix}-shake {
animation-name: ~'@{fa-css-prefix}-shake';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, linear)';
}
.@{fa-css-prefix}-spin {
animation-name: ~'@{fa-css-prefix}-spin';
animation-delay: ~'var(--@{fa-css-prefix}-animation-delay, 0s)';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 2s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, linear)';
}
.@{fa-css-prefix}-spin-reverse {
--@{fa-css-prefix}-animation-direction: reverse;
}
.@{fa-css-prefix}-pulse,
.@{fa-css-prefix}-spin-pulse {
animation-name: ~'@{fa-css-prefix}-spin';
animation-direction: ~'var(--@{fa-css-prefix}-animation-direction, normal)';
animation-duration: ~'var(--@{fa-css-prefix}-animation-duration, 1s)';
animation-iteration-count: ~'var(--@{fa-css-prefix}-animation-iteration-count, infinite)';
animation-timing-function: ~'var(--@{fa-css-prefix}-animation-timing, steps(8));';
}
// if agent or operating system prefers reduced motion, disable animations
// see: https://www.smashingmagazine.com/2020/09/design-reduced-motion-sensitivities/
// see: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion
@media (prefers-reduced-motion: reduce) {
.@{fa-css-prefix}-beat,
.@{fa-css-prefix}-bounce,
.@{fa-css-prefix}-fade,
.@{fa-css-prefix}-beat-fade,
.@{fa-css-prefix}-flip,
.@{fa-css-prefix}-pulse,
.@{fa-css-prefix}-shake,
.@{fa-css-prefix}-spin,
.@{fa-css-prefix}-spin-pulse {
animation-delay: -1ms;
animation-duration: 1ms;
animation-iteration-count: 1;
transition-delay: 0s;
transition-duration: 0s;
}
}
@keyframes ~'@{fa-css-prefix}-beat' {
0%, 90% { transform: scale(1); }
45% { transform: ~'scale(var(--@{fa-css-prefix}-beat-scale, 1.25))'; }
}
@keyframes ~'@{fa-css-prefix}-bounce' {
0% { transform: scale(1,1) translateY(0); }
10% { transform: ~'scale(var(--@{fa-css-prefix}-bounce-start-scale-x, 1.1),var(--@{fa-css-prefix}-bounce-start-scale-y, 0.9))' translateY(0); }
30% { transform: ~'scale(var(--@{fa-css-prefix}-bounce-jump-scale-x, 0.9),var(--@{fa-css-prefix}-bounce-jump-scale-y, 1.1))' ~'translateY(var(--@{fa-css-prefix}-bounce-height, -0.5em))'; }
50% { transform: ~'scale(var(--@{fa-css-prefix}-bounce-land-scale-x, 1.05),var(--@{fa-css-prefix}-bounce-land-scale-y, 0.95))' translateY(0); }
57% { transform: ~'scale(1,1) translateY(var(--@{fa-css-prefix}-bounce-rebound, -0.125em))'; }
64% { transform: scale(1,1) translateY(0); }
100% { transform: scale(1,1) translateY(0); }
}
@keyframes ~'@{fa-css-prefix}-fade' {
50% { opacity: ~'var(--@{fa-css-prefix}-fade-opacity, 0.4)'; }
}
@keyframes ~'@{fa-css-prefix}-beat-fade' {
0%, 100% {
opacity: ~'var(--@{fa-css-prefix}-beat-fade-opacity, 0.4)';
transform: scale(1);
}
50% {
opacity: 1;
transform: ~'scale(var(--@{fa-css-prefix}-beat-fade-scale, 1.125))';
}
}
@keyframes ~'@{fa-css-prefix}-flip' {
50% {
transform: ~'rotate3d(var(--@{fa-css-prefix}-flip-x, 0), var(--@{fa-css-prefix}-flip-y, 1), var(--@{fa-css-prefix}-flip-z, 0), var(--@{fa-css-prefix}-flip-angle, -180deg))';
}
}
@keyframes ~'@{fa-css-prefix}-shake' {
0% { transform: rotate(-15deg); }
4% { transform: rotate(15deg); }
8%, 24% { transform: rotate(-18deg); }
12%, 28% { transform: rotate(18deg); }
16% { transform: rotate(-22deg); }
20% { transform: rotate(22deg); }
32% { transform: rotate(-12deg); }
36% { transform: rotate(12deg); }
40%, 100% { transform: rotate(0deg); }
}
@keyframes ~'@{fa-css-prefix}-spin' {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}

View File

@@ -1,20 +0,0 @@
// bordered + pulled icons
// -------------------------
.@{fa-css-prefix}-border {
border-color: ~'var(--@{fa-css-prefix}-border-color, @{fa-border-color})';
border-radius: ~'var(--@{fa-css-prefix}-border-radius, @{fa-border-radius})';
border-style: ~'var(--@{fa-css-prefix}-border-style, @{fa-border-style})';
border-width: ~'var(--@{fa-css-prefix}-border-width, @{fa-border-width})';
padding: ~'var(--@{fa-css-prefix}-border-padding, @{fa-border-padding})';
}
.@{fa-css-prefix}-pull-left {
float: left;
margin-right: ~'var(--@{fa-css-prefix}-pull-margin, @{fa-pull-margin})';
}
.@{fa-css-prefix}-pull-right {
float: right;
margin-left: ~'var(--@{fa-css-prefix}-pull-margin, @{fa-pull-margin})';
}

View File

@@ -1,36 +0,0 @@
// base icon class definition
// -------------------------
.@{fa-css-prefix} {
font-family: ~"var(--@{fa-css-prefix}-style-family, '@{fa-style-family}')";
font-weight: ~'var(--@{fa-css-prefix}-style, @{fa-style})';
}
.@{fa-css-prefix}-solid,
.@{fa-css-prefix}-regular,
.@{fa-css-prefix}-brands,
.fas,
.far,
.fab,
.@{fa-css-prefix} {
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
display: ~'var(--@{fa-css-prefix}-display, @{fa-display})';
font-style: normal;
font-variant: normal;
text-rendering: auto;
}
.fas,
.@{fa-css-prefix}-classic,
.@{fa-css-prefix}-solid,
.far,
.@{fa-css-prefix}-regular {
font-family: 'Font Awesome 6 Free';
}
.fab,
.@{fa-css-prefix}-brands {
font-family: 'Font Awesome 6 Brands';
}

View File

@@ -1,7 +0,0 @@
// fixed-width icons
// -------------------------
.@{fa-css-prefix}-fw {
text-align: center;
width: @fa-fw-width;
}

View File

@@ -1,9 +0,0 @@
// specific icon class definition
// -------------------------
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
readers do not read off random characters that represent icons */
each(.fa-icons(), {
.@{fa-css-prefix}-@{key}::before { content: @value; }
});

View File

@@ -1,18 +0,0 @@
// icons in a list
// -------------------------
.@{fa-css-prefix}-ul {
list-style-type: none;
margin-left: ~'var(--@{fa-css-prefix}-li-margin, @{fa-li-margin})';
padding-left: 0;
> li { position: relative; }
}
.@{fa-css-prefix}-li {
left: calc(~'var(--@{fa-css-prefix}-li-width, @{fa-li-width})' * -1);
position: absolute;
text-align: center;
width: ~'var(--@{fa-css-prefix}-li-width, @{fa-li-width})';
line-height: inherit;
}

View File

@@ -1,78 +0,0 @@
// mixins
// --------------------------
// base rendering for an icon
.fa-icon() {
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
display: inline-block;
font-style: normal;
font-variant: normal;
font-weight: normal;
line-height: 1;
}
// sets relative font-sizing and alignment (in _sizing)
.fa-size(@font-size) {
font-size: (@font-size / @fa-size-scale-base) * 1em; // converts step in sizing scale into an em-based value that's relative to the scale's base
line-height: (1 / @font-size) * 1em; // sets the line-height of the icon back to that of it's parent
vertical-align: ((6 / @font-size) - (3 / 8)) * 1em; // vertically centers the icon taking into account the surrounding text's descender
}
// only display content to screen readers
// see: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/
// see: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/
.fa-sr-only() {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
// use in conjunction with .sr-only to only display content when it's focused
.fa-sr-only-focusable() {
&:not(:focus) {
.fa-sr-only();
}
}
// sets a specific icon family to use alongside style + icon mixins
.fa-family-classic() {
font-family: 'Font Awesome 6 Free';
}
// convenience mixins for declaring pseudo-elements by CSS variable,
// including all style-specific font properties, and both the ::before
// and ::after elements in the duotone case.
.fa-icon-solid(@fa-var) {
.fa-icon;
.fa-solid;
&::before {
content: @fa-var;
}
}
.fa-icon-regular(@fa-var) {
.fa-icon;
.fa-regular;
&::before {
content: @fa-var;
}
}
.fa-icon-brands(@fa-var) {
.fa-icon;
.fa-brands;
&::before {
content: @fa-var;
}
}

View File

@@ -1,31 +0,0 @@
// rotating + flipping icons
// -------------------------
.@{fa-css-prefix}-rotate-90 {
transform: rotate(90deg);
}
.@{fa-css-prefix}-rotate-180 {
transform: rotate(180deg);
}
.@{fa-css-prefix}-rotate-270 {
transform: rotate(270deg);
}
.@{fa-css-prefix}-flip-horizontal {
transform: scale(-1, 1);
}
.@{fa-css-prefix}-flip-vertical {
transform: scale(1, -1);
}
.@{fa-css-prefix}-flip-both,
.@{fa-css-prefix}-flip-horizontal.@{fa-css-prefix}-flip-vertical {
transform: scale(-1, -1);
}
.@{fa-css-prefix}-rotate-by {
transform: rotate(~'var(--@{fa-css-prefix}-rotate-angle, 0)');
}

View File

@@ -1,14 +0,0 @@
// screen-reader utilities
// -------------------------
// only display content to screen readers
.sr-only,
.@{fa-css-prefix}-sr-only {
.fa-sr-only();
}
// use in conjunction with .sr-only to only display content when it's focused
.sr-only-focusable,
.@{fa-css-prefix}-sr-only-focusable {
.fa-sr-only-focusable();
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,19 +0,0 @@
// sizing icons
// -------------------------
// literal magnification scale
.sizes-literal(@factor) when (@factor > 0) {
.sizes-literal((@factor - 1));
.@{fa-css-prefix}-@{factor}x {
font-size: (@factor * 1em);
}
}
.sizes-literal(10);
// step-based scale (with alignment)
each(.fa-sizes(), {
.@{fa-css-prefix}-@{key} {
.fa-size(@value);
}
});

View File

@@ -1,31 +0,0 @@
// stacking icons
// -------------------------
.@{fa-css-prefix}-stack {
display: inline-block;
height: 2em;
line-height: 2em;
position: relative;
vertical-align: @fa-stack-vertical-align;
width: @fa-stack-width;
}
.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
left: 0;
position: absolute;
text-align: center;
width: 100%;
z-index: ~'var(--@{fa-css-prefix}-stack-z-index, @{fa-stack-z-index})';
}
.@{fa-css-prefix}-stack-1x {
line-height: inherit;
}
.@{fa-css-prefix}-stack-2x {
font-size: 2em;
}
.@{fa-css-prefix}-inverse {
color: ~'var(--@{fa-css-prefix}-inverse, @{fa-inverse})';
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,29 +0,0 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@import "_variables.less";
:root, :host {
--@{fa-css-prefix}-style-family-brands: 'Font Awesome 6 Brands';
--@{fa-css-prefix}-font-brands: normal 400 1em/1 'Font Awesome 6 Brands';
}
@font-face {
font-family: 'Font Awesome 6 Brands';
font-style: normal;
font-weight: 400;
font-display: @fa-font-display;
src: url('@{fa-font-path}/fa-brands-400.woff2') format('woff2'),
url('@{fa-font-path}/fa-brands-400.ttf') format('truetype');
}
.fab,
.@{fa-css-prefix}-brands {
font-weight: 400;
}
each(.fa-brand-icons(), {
.@{fa-css-prefix}-@{key}:before { content: @value; }
});

View File

@@ -1,20 +0,0 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
// Font Awesome core compile (Web Fonts-based)
// -------------------------
@import "_variables.less";
@import "_mixins.less";
@import "_core.less";
@import "_sizing.less";
@import "_fixed-width.less";
@import "_list.less";
@import "_bordered-pulled.less";
@import "_animated.less";
@import "_rotated-flipped.less";
@import "_stacked.less";
@import "_icons.less";
@import "_screen-reader.less";

View File

@@ -1,25 +0,0 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@import "_variables.less";
:root, :host {
--@{fa-css-prefix}-style-family-classic: '@{fa-style-family}';
--@{fa-css-prefix}-font-regular: normal 400 1em/1 '@{fa-style-family}';
}
@font-face {
font-family: 'Font Awesome 6 Free';
font-style: normal;
font-weight: 400;
font-display: @fa-font-display;
src: url('@{fa-font-path}/fa-regular-400.woff2') format('woff2'),
url('@{fa-font-path}/fa-regular-400.ttf') format('truetype');
}
.far,
.@{fa-css-prefix}-regular {
font-weight: 400;
}

View File

@@ -1,25 +0,0 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
@import "_variables.less";
:root, :host {
--@{fa-css-prefix}-style-family-classic: '@{fa-style-family}';
--@{fa-css-prefix}-font-solid: normal 900 1em/1 '@{fa-style-family}';
}
@font-face {
font-family: 'Font Awesome 6 Free';
font-style: normal;
font-weight: 900;
font-display: @fa-font-display;
src: url('@{fa-font-path}/fa-solid-900.woff2') format('woff2'),
url('@{fa-font-path}/fa-solid-900.ttf') format('truetype');
}
.fas,
.@{fa-css-prefix}-solid {
font-weight: 900;
}

View File

@@ -1,10 +0,0 @@
/*!
* Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
* Copyright 2024 Fonticons, Inc.
*/
// V4 shims compile (Web Fonts-based)
// -------------------------
@import '_variables.less';
@import '_shims.less';

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,646 +0,0 @@
area-chart:
name: chart-area
arrow-circle-o-down:
prefix: far
name: circle-down
arrow-circle-o-left:
prefix: far
name: circle-left
arrow-circle-o-right:
prefix: far
name: circle-right
arrow-circle-o-up:
prefix: far
name: circle-up
arrows:
name: up-down-left-right
arrows-alt:
name: maximize
arrows-h:
name: left-right
arrows-v:
name: up-down
asl-interpreting:
name: hands-asl-interpreting
automobile:
name: car
bank:
name: building-columns
bar-chart:
name: chart-column
bar-chart-o:
name: chart-column
bathtub:
name: bath
battery:
name: battery-full
battery-0:
name: battery-empty
battery-1:
name: battery-quarter
battery-2:
name: battery-half
battery-3:
name: battery-three-quarters
battery-4:
name: battery-full
behance-square:
prefix: fab
name: square-behance
bitbucket-square:
prefix: fab
name: bitbucket
bitcoin:
prefix: fab
name: btc
cab:
name: taxi
calendar:
name: calendar-days
calendar-times-o:
prefix: far
name: calendar-xmark
caret-square-o-down:
prefix: far
name: square-caret-down
caret-square-o-left:
prefix: far
name: square-caret-left
caret-square-o-right:
prefix: far
name: square-caret-right
caret-square-o-up:
prefix: far
name: square-caret-up
cc:
prefix: far
name: closed-captioning
chain:
name: link
chain-broken:
name: link-slash
check-circle-o:
prefix: far
name: circle-check
check-square-o:
prefix: far
name: square-check
circle-o-notch:
name: circle-notch
circle-thin:
prefix: far
name: circle
clipboard:
name: paste
clone:
prefix: far
close:
name: xmark
cloud-download:
name: cloud-arrow-down
cloud-upload:
name: cloud-arrow-up
cny:
name: yen-sign
code-fork:
name: code-branch
commenting:
name: comment-dots
commenting-o:
prefix: far
name: comment-dots
compass:
prefix: far
compress:
name: down-left-and-up-right-to-center
copyright:
prefix: far
credit-card:
prefix: far
credit-card-alt:
name: credit-card
cut:
name: scissors
cutlery:
name: utensils
dashboard:
name: gauge-high
deafness:
name: ear-deaf
dedent:
name: outdent
diamond:
prefix: far
name: gem
dollar:
name: dollar-sign
dot-circle-o:
prefix: far
name: circle-dot
drivers-license:
name: id-card
drivers-license-o:
prefix: far
name: id-card
edit:
prefix: far
name: pen-to-square
eercast:
prefix: fab
name: sellcast
eur:
name: euro-sign
euro:
name: euro-sign
exchange:
name: right-left
expand:
name: up-right-and-down-left-from-center
external-link:
name: up-right-from-square
external-link-square:
name: square-up-right
eye:
prefix: far
eye-slash:
prefix: far
eyedropper:
name: eye-dropper
fa:
prefix: fab
name: font-awesome
facebook:
prefix: fab
name: facebook-f
facebook-f:
prefix: fab
name: facebook-f
facebook-official:
prefix: fab
name: facebook
facebook-square:
prefix: fab
name: square-facebook
feed:
name: rss
file-archive-o:
prefix: far
name: file-zipper
file-movie-o:
prefix: far
name: file-video
file-photo-o:
prefix: far
name: file-image
file-picture-o:
prefix: far
name: file-image
file-sound-o:
prefix: far
name: file-audio
file-text:
name: file-lines
file-text-o:
prefix: far
name: file-lines
file-zip-o:
prefix: far
name: file-zipper
files-o:
prefix: far
name: copy
flash:
name: bolt
floppy-o:
prefix: far
name: floppy-disk
frown-o:
prefix: far
name: face-frown
gbp:
name: sterling-sign
ge:
prefix: fab
name: empire
gear:
name: gear
gears:
name: gears
git-square:
prefix: fab
name: square-git
github-square:
prefix: fab
name: square-github
gittip:
prefix: fab
name: gratipay
glass:
name: martini-glass-empty
globe:
name: earth-americas
google-plus:
prefix: fab
name: google-plus-g
google-plus-circle:
prefix: fab
name: google-plus
google-plus-official:
prefix: fab
name: google-plus
google-plus-square:
prefix: fab
name: square-google-plus
group:
name: users
hand-grab-o:
prefix: far
name: hand-back-fist
hand-o-down:
prefix: far
name: hand-point-down
hand-o-left:
prefix: far
name: hand-point-left
hand-o-right:
prefix: far
name: hand-point-right
hand-o-up:
prefix: far
name: hand-point-up
hand-paper-o:
prefix: far
name: hand
hand-rock-o:
prefix: far
name: hand-back-fist
hand-stop-o:
prefix: far
name: hand
hard-of-hearing:
name: ear-deaf
hdd-o:
prefix: far
name: hard-drive
header:
name: heading
home:
name: house
hotel:
name: bed
hourglass-1:
name: hourglass-start
hourglass-2:
name: hourglass-half
hourglass-3:
name: hourglass-end
hourglass-o:
name: hourglass
id-badge:
prefix: far
ils:
name: shekel-sign
image:
prefix: far
name: image
inr:
name: indian-rupee-sign
institution:
name: building-columns
intersex:
name: mars-and-venus
jpy:
name: yen-sign
krw:
name: won-sign
lastfm-square:
prefix: fab
name: square-lastfm
legal:
name: gavel
level-down:
name: turn-down
level-up:
name: turn-up
life-bouy:
name: life-ring
life-buoy:
name: life-ring
life-saver:
name: life-ring
line-chart:
name: chart-line
linkedin:
prefix: fab
name: linkedin-in
linkedin-square:
prefix: fab
name: linkedin
list-alt:
prefix: far
name: rectangle-list
long-arrow-down:
name: down-long
long-arrow-left:
name: left-long
long-arrow-right:
name: right-long
long-arrow-up:
name: up-long
magic:
name: wand-magic-sparkles
mail-forward:
name: share
mail-reply:
name: reply
mail-reply-all:
name: reply-all
map-marker:
name: location-dot
meh-o:
prefix: far
name: face-meh
minus-square-o:
prefix: far
name: square-minus
mobile:
name: mobile-screen-button
mobile-phone:
name: mobile-screen-button
money:
name: money-bill-1
mortar-board:
name: graduation-cap
navicon:
name: bars
object-group:
prefix: far
object-ungroup:
prefix: far
odnoklassniki-square:
prefix: fab
name: square-odnoklassniki
pause-circle-o:
prefix: far
name: circle-pause
pencil-square:
name: square-pen
pencil-square-o:
prefix: far
name: pen-to-square
photo:
prefix: far
name: image
picture-o:
prefix: far
name: image
pie-chart:
name: chart-pie
pinterest-square:
prefix: fab
name: square-pinterest
play-circle-o:
prefix: far
name: circle-play
plus-square-o:
prefix: far
name: square-plus
question-circle-o:
prefix: far
name: circle-question
ra:
prefix: fab
name: rebel
reddit-square:
prefix: fab
name: square-reddit
refresh:
name: arrows-rotate
registered:
prefix: far
remove:
name: xmark
reorder:
name: bars
repeat:
name: arrow-rotate-right
resistance:
prefix: fab
name: rebel
rmb:
name: yen-sign
rotate-left:
name: arrow-rotate-left
rotate-right:
name: arrow-rotate-right
rouble:
name: ruble-sign
rub:
name: ruble-sign
ruble:
name: ruble-sign
rupee:
name: indian-rupee-sign
s15:
name: bath
save:
prefix: far
name: floppy-disk
send:
name: paper-plane
send-o:
prefix: far
name: paper-plane
share-square-o:
name: share-from-square
shekel:
name: shekel-sign
sheqel:
name: shekel-sign
sign-in:
name: right-to-bracket
sign-out:
name: right-from-bracket
signing:
name: hands
smile-o:
prefix: far
name: face-smile
snapchat-ghost:
prefix: fab
name: snapchat
snapchat-square:
prefix: fab
name: square-snapchat
soccer-ball-o:
prefix: far
name: futbol
sort-alpha-asc:
name: arrow-down-a-z
sort-alpha-desc:
name: arrow-down-z-a
sort-amount-asc:
name: arrow-down-short-wide
sort-amount-desc:
name: arrow-down-wide-short
sort-asc:
name: sort-up
sort-desc:
name: sort-down
sort-numeric-asc:
name: arrow-down-1-9
sort-numeric-desc:
name: arrow-down-9-1
star-half-empty:
prefix: far
name: star-half-stroke
star-half-full:
prefix: far
name: star-half-stroke
star-half-o:
prefix: far
name: star-half-stroke
steam-square:
prefix: fab
name: square-steam
sticky-note-o:
prefix: far
name: note-sticky
stop-circle-o:
prefix: far
name: circle-stop
support:
name: life-ring
tablet:
name: tablet-screen-button
tachometer:
name: gauge-high
tasks:
name: bars-progress
television:
name: tv
thermometer:
name: temperature-full
thermometer-0:
name: temperature-empty
thermometer-1:
name: temperature-quarter
thermometer-2:
name: temperature-half
thermometer-3:
name: temperature-three-quarters
thermometer-4:
name: temperature-full
thumb-tack:
name: thumbtack
thumbs-o-down:
prefix: far
name: thumbs-down
thumbs-o-up:
prefix: far
name: thumbs-up
times-circle-o:
prefix: far
name: circle-xmark
times-rectangle:
name: rectangle-xmark
times-rectangle-o:
prefix: far
name: rectangle-xmark
toggle-down:
prefix: far
name: square-caret-down
toggle-left:
prefix: far
name: square-caret-left
toggle-right:
prefix: far
name: square-caret-right
toggle-up:
prefix: far
name: square-caret-up
transgender:
name: mars-and-venus
transgender-alt:
name: transgender
trash:
name: trash-can
trash-o:
prefix: far
name: trash-can
try:
name: turkish-lira-sign
tumblr-square:
prefix: fab
name: square-tumblr
turkish-lira:
name: turkish-lira-sign
twitter-square:
prefix: fab
name: square-twitter
unlink:
name: link-slash
unlock-alt:
name: unlock
unsorted:
name: sort
usd:
name: dollar-sign
user-circle-o:
prefix: far
name: circle-user
vcard:
name: address-card
vcard-o:
prefix: far
name: address-card
viadeo-square:
prefix: fab
name: square-viadeo
video-camera:
name: video
vimeo:
prefix: fab
name: vimeo-v
vimeo-square:
prefix: fab
name: square-vimeo
volume-control-phone:
name: phone-volume
warning:
name: triangle-exclamation
wechat:
prefix: fab
name: weixin
wheelchair-alt:
prefix: fab
name: accessible-icon
window-close-o:
prefix: far
name: rectangle-xmark
window-maximize:
prefix: far
window-restore:
prefix: far
won:
name: won-sign
xing-square:
prefix: fab
name: square-xing
y-combinator-square:
prefix: fab
name: hacker-news
yc:
prefix: fab
name: y-combinator
yc-square:
prefix: fab
name: hacker-news
yen:
name: yen-sign
youtube-play:
prefix: fab
name: youtube
youtube-square:
prefix: fab
name: square-youtube

File diff suppressed because it is too large Load Diff

View File

@@ -1,152 +0,0 @@
// animating icons
// --------------------------
.#{$fa-css-prefix}-beat {
animation-name: #{$fa-css-prefix}-beat;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, ease-in-out);
}
.#{$fa-css-prefix}-bounce {
animation-name: #{$fa-css-prefix}-bounce;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(0.280, 0.840, 0.420, 1));
}
.#{$fa-css-prefix}-fade {
animation-name: #{$fa-css-prefix}-fade;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1));
}
.#{$fa-css-prefix}-beat-fade {
animation-name: #{$fa-css-prefix}-beat-fade;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1));
}
.#{$fa-css-prefix}-flip {
animation-name: #{$fa-css-prefix}-flip;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, ease-in-out);
}
.#{$fa-css-prefix}-shake {
animation-name: #{$fa-css-prefix}-shake;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, linear);
}
.#{$fa-css-prefix}-spin {
animation-name: #{$fa-css-prefix}-spin;
animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s);
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 2s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, linear);
}
.#{$fa-css-prefix}-spin-reverse {
--#{$fa-css-prefix}-animation-direction: reverse;
}
.#{$fa-css-prefix}-pulse,
.#{$fa-css-prefix}-spin-pulse {
animation-name: #{$fa-css-prefix}-spin;
animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal);
animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, steps(8));
}
// if agent or operating system prefers reduced motion, disable animations
// see: https://www.smashingmagazine.com/2020/09/design-reduced-motion-sensitivities/
// see: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion
@media (prefers-reduced-motion: reduce) {
.#{$fa-css-prefix}-beat,
.#{$fa-css-prefix}-bounce,
.#{$fa-css-prefix}-fade,
.#{$fa-css-prefix}-beat-fade,
.#{$fa-css-prefix}-flip,
.#{$fa-css-prefix}-pulse,
.#{$fa-css-prefix}-shake,
.#{$fa-css-prefix}-spin,
.#{$fa-css-prefix}-spin-pulse {
animation-delay: -1ms;
animation-duration: 1ms;
animation-iteration-count: 1;
transition-delay: 0s;
transition-duration: 0s;
}
}
@keyframes #{$fa-css-prefix}-beat {
0%, 90% { transform: scale(1); }
45% { transform: scale(var(--#{$fa-css-prefix}-beat-scale, 1.25)); }
}
@keyframes #{$fa-css-prefix}-bounce {
0% { transform: scale(1,1) translateY(0); }
10% { transform: scale(var(--#{$fa-css-prefix}-bounce-start-scale-x, 1.1),var(--#{$fa-css-prefix}-bounce-start-scale-y, 0.9)) translateY(0); }
30% { transform: scale(var(--#{$fa-css-prefix}-bounce-jump-scale-x, 0.9),var(--#{$fa-css-prefix}-bounce-jump-scale-y, 1.1)) translateY(var(--#{$fa-css-prefix}-bounce-height, -0.5em)); }
50% { transform: scale(var(--#{$fa-css-prefix}-bounce-land-scale-x, 1.05),var(--#{$fa-css-prefix}-bounce-land-scale-y, 0.95)) translateY(0); }
57% { transform: scale(1,1) translateY(var(--#{$fa-css-prefix}-bounce-rebound, -0.125em)); }
64% { transform: scale(1,1) translateY(0); }
100% { transform: scale(1,1) translateY(0); }
}
@keyframes #{$fa-css-prefix}-fade {
50% { opacity: var(--#{$fa-css-prefix}-fade-opacity, 0.4); }
}
@keyframes #{$fa-css-prefix}-beat-fade {
0%, 100% {
opacity: var(--#{$fa-css-prefix}-beat-fade-opacity, 0.4);
transform: scale(1);
}
50% {
opacity: 1;
transform: scale(var(--#{$fa-css-prefix}-beat-fade-scale, 1.125));
}
}
@keyframes #{$fa-css-prefix}-flip {
50% {
transform: rotate3d(var(--#{$fa-css-prefix}-flip-x, 0), var(--#{$fa-css-prefix}-flip-y, 1), var(--#{$fa-css-prefix}-flip-z, 0), var(--#{$fa-css-prefix}-flip-angle, -180deg));
}
}
@keyframes #{$fa-css-prefix}-shake {
0% { transform: rotate(-15deg); }
4% { transform: rotate(15deg); }
8%, 24% { transform: rotate(-18deg); }
12%, 28% { transform: rotate(18deg); }
16% { transform: rotate(-22deg); }
20% { transform: rotate(22deg); }
32% { transform: rotate(-12deg); }
36% { transform: rotate(12deg); }
40%, 100% { transform: rotate(0deg); }
}
@keyframes #{$fa-css-prefix}-spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}

View File

@@ -1,20 +0,0 @@
// bordered + pulled icons
// -------------------------
.#{$fa-css-prefix}-border {
border-color: var(--#{$fa-css-prefix}-border-color, #{$fa-border-color});
border-radius: var(--#{$fa-css-prefix}-border-radius, #{$fa-border-radius});
border-style: var(--#{$fa-css-prefix}-border-style, #{$fa-border-style});
border-width: var(--#{$fa-css-prefix}-border-width, #{$fa-border-width});
padding: var(--#{$fa-css-prefix}-border-padding, #{$fa-border-padding});
}
.#{$fa-css-prefix}-pull-left {
float: left;
margin-right: var(--#{$fa-css-prefix}-pull-margin, #{$fa-pull-margin});
}
.#{$fa-css-prefix}-pull-right {
float: right;
margin-left: var(--#{$fa-css-prefix}-pull-margin, #{$fa-pull-margin});
}

View File

@@ -1,43 +0,0 @@
// base icon class definition
// -------------------------
.#{$fa-css-prefix} {
font-family: var(--#{$fa-css-prefix}-style-family, '#{$fa-style-family}');
font-weight: var(--#{$fa-css-prefix}-style, #{$fa-style});
}
.#{$fa-css-prefix}-solid,
.#{$fa-css-prefix}-regular,
.#{$fa-css-prefix}-brands,
.fas,
.far,
.fab,
.#{$fa-css-prefix}-sharp-solid,
.#{$fa-css-prefix}-classic,
.#{$fa-css-prefix} {
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
display: var(--#{$fa-css-prefix}-display, #{$fa-display});
font-style: normal;
font-variant: normal;
line-height: 1;
text-rendering: auto;
}
.fas,
.#{$fa-css-prefix}-classic,
.#{$fa-css-prefix}-solid,
.far,
.#{$fa-css-prefix}-regular {
font-family: 'Font Awesome 6 Free';
}
.fab,
.#{$fa-css-prefix}-brands {
font-family: 'Font Awesome 6 Brands';
}
%fa-icon {
@include fa-icon;
}

View File

@@ -1,7 +0,0 @@
// fixed-width icons
// -------------------------
.#{$fa-css-prefix}-fw {
text-align: center;
width: $fa-fw-width;
}

View File

@@ -1,57 +0,0 @@
// functions
// --------------------------
// fa-content: convenience function used to set content property
@function fa-content($fa-var) {
@return unquote("\"#{ $fa-var }\"");
}
// fa-divide: Originally obtained from the Bootstrap https://github.com/twbs/bootstrap
//
// Licensed under: The MIT License (MIT)
//
// Copyright (c) 2011-2021 Twitter, Inc.
// Copyright (c) 2011-2021 The Bootstrap Authors
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
@function fa-divide($dividend, $divisor, $precision: 10) {
$sign: if($dividend > 0 and $divisor > 0, 1, -1);
$dividend: abs($dividend);
$divisor: abs($divisor);
$quotient: 0;
$remainder: $dividend;
@if $dividend == 0 {
@return 0;
}
@if $divisor == 0 {
@error "Cannot divide by 0";
}
@if $divisor == 1 {
@return $dividend;
}
@while $remainder >= $divisor {
$quotient: $quotient + 1;
$remainder: $remainder - $divisor;
}
@if $remainder > 0 and $precision > 0 {
$remainder: fa-divide($remainder * 10, $divisor, $precision - 1) * .1;
}
@return ($quotient + $remainder) * $sign;
}

View File

@@ -1,10 +0,0 @@
// specific icon class definition
// -------------------------
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
readers do not read off random characters that represent icons */
@each $name, $icon in $fa-icons {
.#{$fa-css-prefix}-#{$name}::before { content: unquote("\"#{ $icon }\""); }
}

View File

@@ -1,18 +0,0 @@
// icons in a list
// -------------------------
.#{$fa-css-prefix}-ul {
list-style-type: none;
margin-left: var(--#{$fa-css-prefix}-li-margin, #{$fa-li-margin});
padding-left: 0;
> li { position: relative; }
}
.#{$fa-css-prefix}-li {
left: calc(-1 * var(--#{$fa-css-prefix}-li-width, #{$fa-li-width}));
position: absolute;
text-align: center;
width: var(--#{$fa-css-prefix}-li-width, #{$fa-li-width});
line-height: inherit;
}

View File

@@ -1,72 +0,0 @@
// mixins
// --------------------------
// base rendering for an icon
@mixin fa-icon {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
display: inline-block;
font-style: normal;
font-variant: normal;
font-weight: normal;
line-height: 1;
}
// sets relative font-sizing and alignment (in _sizing)
@mixin fa-size ($font-size) {
font-size: fa-divide($font-size, $fa-size-scale-base) * 1em; // converts step in sizing scale into an em-based value that's relative to the scale's base
line-height: fa-divide(1, $font-size) * 1em; // sets the line-height of the icon back to that of it's parent
vertical-align: (fa-divide(6, $font-size) - fa-divide(3, 8)) * 1em; // vertically centers the icon taking into account the surrounding text's descender
}
// only display content to screen readers
// see: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/
// see: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/
@mixin fa-sr-only() {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
// use in conjunction with .sr-only to only display content when it's focused
@mixin fa-sr-only-focusable() {
&:not(:focus) {
@include fa-sr-only();
}
}
// sets a specific icon family to use alongside style + icon mixins
// convenience mixins for declaring pseudo-elements by CSS variable,
// including all style-specific font properties, and both the ::before
// and ::after elements in the duotone case.
@mixin fa-icon-solid($fa-var) {
@extend %fa-icon;
@extend .fa-solid;
&::before {
content: unquote("\"#{ $fa-var }\"");
}
}
@mixin fa-icon-regular($fa-var) {
@extend %fa-icon;
@extend .fa-regular;
&::before {
content: unquote("\"#{ $fa-var }\"");
}
}
@mixin fa-icon-brands($fa-var) {
@extend %fa-icon;
@extend .fa-brands;
&::before {
content: unquote("\"#{ $fa-var }\"");
}
}

View File

@@ -1,31 +0,0 @@
// rotating + flipping icons
// -------------------------
.#{$fa-css-prefix}-rotate-90 {
transform: rotate(90deg);
}
.#{$fa-css-prefix}-rotate-180 {
transform: rotate(180deg);
}
.#{$fa-css-prefix}-rotate-270 {
transform: rotate(270deg);
}
.#{$fa-css-prefix}-flip-horizontal {
transform: scale(-1, 1);
}
.#{$fa-css-prefix}-flip-vertical {
transform: scale(1, -1);
}
.#{$fa-css-prefix}-flip-both,
.#{$fa-css-prefix}-flip-horizontal.#{$fa-css-prefix}-flip-vertical {
transform: scale(-1, -1);
}
.#{$fa-css-prefix}-rotate-by {
transform: rotate(var(--#{$fa-css-prefix}-rotate-angle, 0));
}

View File

@@ -1,14 +0,0 @@
// screen-reader utilities
// -------------------------
// only display content to screen readers
.sr-only,
.#{$fa-css-prefix}-sr-only {
@include fa-sr-only;
}
// use in conjunction with .sr-only to only display content when it's focused
.sr-only-focusable,
.#{$fa-css-prefix}-sr-only-focusable {
@include fa-sr-only-focusable;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,16 +0,0 @@
// sizing icons
// -------------------------
// literal magnification scale
@for $i from 1 through 10 {
.#{$fa-css-prefix}-#{$i}x {
font-size: $i * 1em;
}
}
// step-based scale (with alignment)
@each $size, $value in $fa-sizes {
.#{$fa-css-prefix}-#{$size} {
@include fa-size($value);
}
}

View File

@@ -1,32 +0,0 @@
// stacking icons
// -------------------------
.#{$fa-css-prefix}-stack {
display: inline-block;
height: 2em;
line-height: 2em;
position: relative;
vertical-align: $fa-stack-vertical-align;
width: $fa-stack-width;
}
.#{$fa-css-prefix}-stack-1x,
.#{$fa-css-prefix}-stack-2x {
left: 0;
position: absolute;
text-align: center;
width: 100%;
z-index: var(--#{$fa-css-prefix}-stack-z-index, #{$fa-stack-z-index});
}
.#{$fa-css-prefix}-stack-1x {
line-height: inherit;
}
.#{$fa-css-prefix}-stack-2x {
font-size: 2em;
}
.#{$fa-css-prefix}-inverse {
color: var(--#{$fa-css-prefix}-inverse, #{$fa-inverse});
}

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More