feat: first rewrite commit

This commit is contained in:
2026-08-17 23:15:46 +02:00
parent bf5f135f32
commit 9be8392cd4
5886 changed files with 475340 additions and 170 deletions
-1
View File
@@ -1 +0,0 @@
use flake
+12 -5
View File
@@ -1,7 +1,14 @@
public/ public/
/resources/_gen/
/assets/jsconfig.json
hugo_stats.json
deploy.sh
/.hugo_build.lock # Devenv
.devenv*
devenv.local.nix
devenv.local.yaml
# direnv
.direnv
# pre-commit
.pre-commit-config.yaml
*.sqlite3
-6
View File
@@ -1,6 +0,0 @@
[submodule "themes/terminal"]
path = themes/terminal
url = https://github.com/panr/hugo-theme-terminal.git
[submodule "themes/ficurinia"]
path = themes/ficurinia
url = https://gitlab.com/gabmus/hugo-ficurinia.git
-3
View File
@@ -1,3 +0,0 @@
# Visit my website https://patrickcanal.it
![Screenshot.png](static/website.png)
-6
View File
@@ -1,6 +0,0 @@
+++
date = '{{ .Date }}'
draft = true
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
tags = []
+++
@@ -1,39 +0,0 @@
+++
date = '2025-04-07T19:16:28+02:00'
title = 'Building my website in Hugo'
tags = [ 'website', 'hosting' ]
+++
I always wanted a website/blog to write articles about what I like, so today I decided to make one!
After buying a domain and setting up the server I had just to decide what to write the website with.
## Hugo
![hugo-logo](https://gohugo.io/images/hugo-logo-wide.svg)
As a tech stack I wanted something simple and easy to mantain,
[Hugo](https://gohugo.io/) makes everything so easy and painless that it is too good to be true.
Just install it and then write in the terminal
```bash
hugo new site <website-name> && cd <website-name>
```
to generate the template, install a good-looking theme from the [themes page](https://themes.gohugo.io/themes/) on the Hugo website, in my case Ficurinia
```bash
git clone https://github.com/patrickacciaioli/ficurinia themes/ficurinia
```
add the following line inside of `hugo.toml` with the greatest editor ever lived (Vim)
```toml
theme = "ficurinia"
```
Start the server with
```bash
hugo server
```
and you are ready to go. A complete blog in seconds.
![website.png](/website.png)
(This is a recursive website 😵‍💫)
## Conclusion
Building a personal website with Hugo was faster and easier than I could have ever done in plain HTML. With minimal setup and maximum flexibility, Hugo proved to be the perfect choice for my blog. Now, I can focus on writing posts worrying about the infamous [Hypertext Markup Language](https://en.wikipedia.org/wiki/HTML).
+155
View File
@@ -0,0 +1,155 @@
{
"nodes": {
"devenv": {
"locked": {
"dir": "src/modules",
"lastModified": 1786975632,
"narHash": "sha256-3N/pfn4/ADlkTzHJWgClmKD1mTLyVJNFxLbDMMHl/xw=",
"owner": "cachix",
"repo": "devenv",
"rev": "c972cb46d511e690c942e6ee3309a7e8b9a20475",
"type": "github"
},
"original": {
"dir": "src/modules",
"owner": "cachix",
"repo": "devenv",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"git-hooks": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1784288435,
"narHash": "sha256-ReRHaLgr/uVqdD8afFSn+myXIfpHeOhP0yYe0TJqAA8=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "43b3c1ab9d40fb1dbb008f451988a91e375825e9",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1782918843,
"narHash": "sha256-ETYnV9U7Sr+A45dohzZdfCZKOss4qrTkO+wgNZNvEc0=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "e8273b29fe1390ec8d4603f2477357555291432e",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-python": {
"inputs": {
"flake-compat": "flake-compat_2",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1786471740,
"narHash": "sha256-9PEUIbLorWC455Oa/4dxuLh+PFPfENBOgEN52gw+Onk=",
"owner": "cachix",
"repo": "nixpkgs-python",
"rev": "4d2bd16c09baaa04f4045f16f6a5574654aaba16",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "nixpkgs-python",
"type": "github"
}
},
"nixpkgs-src": {
"flake": false,
"locked": {
"lastModified": 1786098110,
"narHash": "sha256-shi1tjDhCGGd0kIgVPNY03V8NBWSTzhMSFDb7IqSoec=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "afb4584a80bbf779ce0f691509ff902d188c2b3d",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"inputs": {
"nixpkgs-src": "nixpkgs-src"
},
"locked": {
"lastModified": 1786472144,
"narHash": "sha256-W1wLGKZKGtnTWGRFgjbsVQleuO6jgMweaSAbFltLkN0=",
"owner": "cachix",
"repo": "devenv-nixpkgs",
"rev": "ea21d30f66a051c7cd750692a2af8d56e0ec4bfb",
"type": "github"
},
"original": {
"owner": "cachix",
"ref": "rolling",
"repo": "devenv-nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"devenv": "devenv",
"git-hooks": "git-hooks",
"nixpkgs": "nixpkgs_2",
"nixpkgs-python": "nixpkgs-python"
}
}
},
"root": "root",
"version": 7
}
+25
View File
@@ -0,0 +1,25 @@
{
...
}:
{
languages.python = {
enable = true;
version = "3.14";
venv = {
enable = true;
requirements = ./requirements.txt;
};
};
git-hooks.hooks = {
ruff.enable = true;
djlint = {
enable = true;
name = "djlint";
entry = "djlint --check .";
types = [ "html" ];
};
};
}
+11
View File
@@ -0,0 +1,11 @@
# yaml-language-server: $schema=https://devenv.sh/devenv.schema.json
inputs:
git-hooks:
url: github:cachix/git-hooks.nix
nixpkgs:
url: github:cachix/devenv-nixpkgs/rolling
nixpkgs-python:
url: github:cachix/nixpkgs-python
inputs:
nixpkgs:
follows: nixpkgs
Generated
-25
View File
@@ -1,25 +0,0 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1739736696,
"narHash": "sha256-zON2GNBkzsIyALlOCFiEBcIjI4w38GYOb+P+R4S8Jsw=",
"rev": "d74a2335ac9c133d6bbec9fc98d91a77f1604c1f",
"revCount": 754461,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.754461%2Brev-d74a2335ac9c133d6bbec9fc98d91a77f1604c1f/01951426-5a87-7b75-8413-1a0d9ec5ff04/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/NixOS/nixpkgs/0.1.%2A.tar.gz"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}
-46
View File
@@ -1,46 +0,0 @@
{
description = "A Nix-flake-based Go 1.22 development environment";
inputs.nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.1.*.tar.gz";
outputs =
{ self, nixpkgs }:
let
goVersion = 22; # Change this to update the whole stack
supportedSystems = [
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
forEachSupportedSystem =
f:
nixpkgs.lib.genAttrs supportedSystems (
system:
f {
pkgs = import nixpkgs {
inherit system;
overlays = [ self.overlays.default ];
};
}
);
in
{
overlays.default = final: prev: {
go = final."go_1_${toString goVersion}";
};
devShells = forEachSupportedSystem (
{ pkgs }:
{
default = pkgs.mkShell {
packages = with pkgs; [
go
hugo
];
};
}
);
};
}
-5
View File
@@ -1,5 +0,0 @@
module patrickcanal.xyz
go 1.22.12
require github.com/panr/hugo-theme-terminal/v4 v4.2.1 // indirect
-2
View File
@@ -1,2 +0,0 @@
github.com/panr/hugo-theme-terminal/v4 v4.2.1 h1:HGQdOolUNFYMbHrguEbkGU8HWKv4qSAV/n1egSGSnvs=
github.com/panr/hugo-theme-terminal/v4 v4.2.1/go.mod h1:W0sFodm5ipL5gjRqOFjg4zD+euoQ8hCtyDDtqSpihxM=
-24
View File
@@ -1,24 +0,0 @@
baseURL = "https://patrickcanal.it/"
languageCode = "en-us"
title = "Patrick Canal"
theme = "ficurinia"
copyright = "Patrick Canal"
[params]
author = "Patrick Canal"
logo = "/logo.svg"
svgicon = "/logo.svg"
enableJumbotron = true
infiniteScrolling = true
[menu]
[[menu.icons]]
identifier = "github"
name = "Github"
url = "https://github.com/Superredstone"
weight = 10
[outputs]
home = ["HTML", "JSON"]
Executable
+22
View File
@@ -0,0 +1,22 @@
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'patrickcanal_it.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+16
View File
@@ -0,0 +1,16 @@
"""
ASGI config for patrickcanal_it project.
It exposes the ASGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/6.1/howto/deployment/asgi/
"""
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'patrickcanal_it.settings')
application = get_asgi_application()
+132
View File
@@ -0,0 +1,132 @@
"""
Django settings for patrickcanal_it project.
Generated by 'django-admin startproject' using Django 6.1.
For more information on this file, see
https://docs.djangoproject.com/en/6.1/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/6.1/ref/settings/
"""
from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/6.1/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-v+4ar=+q_f#6o-x@3*re39gq)z9oznj1tefsxm6)_v*#@uw%@h'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'patrickcanal_it.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
"patrickcanal_it/templates/",
"portfolio/templates/",
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'patrickcanal_it.wsgi.application'
# Database
# https://docs.djangoproject.com/en/6.1/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
# Password validation
# https://docs.djangoproject.com/en/6.1/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/6.1/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/6.1/howto/static-files/
STATIC_URL = 'static/'
STATICFILES_DIRS = [
BASE_DIR / "static/"
]
# Email
# https://docs.djangoproject.com/en/6.1/topics/email/#topic-email-configuration
MAILERS = {
'default': {
'BACKEND': 'django.core.mail.backends.console.EmailBackend',
},
}
+41
View File
@@ -0,0 +1,41 @@
{% load static %}
<!DOCTYPE html>
<html lang="en" data-bs-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Patrick Canal</title>
<link rel="stylesheet" href="{% static 'tabler/tabler.min.css' %}">
<link rel="stylesheet" href="{% static 'fontawesome-7/css/all.min.css' %}">
<script href="{% static 'tabler/tabler.min.css' %}"></script>
</head>
<body>
<header class="navbar navbar-expand-md d-print-none">
<div class="container-xl">
<button class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#navbar-menu"
aria-controls="navbar-menu"
aria-expanded="false"
aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="{% url 'index' %}">
<span class="nav-link-icon">
<i class="fa-solid fa-house"></i>
</span>
<span class="nav-link-title">Home</span>
</a>
</li>
</ul>
</div>
</header>
<main>
{% block content %}
{% endblock content %}
</main>
</body>
</html>
+26
View File
@@ -0,0 +1,26 @@
"""
URL configuration for patrickcanal_it project.
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/6.1/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from portfolio.views import IndexView
urlpatterns = [
path("admin/", admin.site.urls),
path("", IndexView.as_view(), name="index"),
]
+16
View File
@@ -0,0 +1,16 @@
"""
WSGI config for patrickcanal_it project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/6.1/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'patrickcanal_it.settings')
application = get_wsgi_application()
View File
Binary file not shown.
Binary file not shown.
+2
View File
@@ -0,0 +1,2 @@
# Register your models here.
+5
View File
@@ -0,0 +1,5 @@
from django.apps import AppConfig
class PortfolioConfig(AppConfig):
name = 'portfolio'
View File
+2
View File
@@ -0,0 +1,2 @@
# Create your models here.
+2
View File
@@ -0,0 +1,2 @@
{% include "base.html" %}
{% block content %}Hello{% endblock %}
+2
View File
@@ -0,0 +1,2 @@
# Create your tests here.
+7
View File
@@ -0,0 +1,7 @@
from django.views.generic import TemplateView
# Create your views here.
class IndexView(TemplateView):
template_name = "index.html"
+22
View File
@@ -0,0 +1,22 @@
[tool.djlint]
indent = 4
close_void_tagsa = true
format_js = true
format_css = true
max_line_length = 160
[tool.ruff]
exclude = [
"*migrations*",
"settings.py",
]
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
skip-magic-trailing-comma = false
line-ending = "auto"
[tool.ruff.lint]
extend-select = ["I"]
+1
View File
@@ -0,0 +1 @@
django
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
{"Target":"css/styles.abbd6311bb4b6ca58f8e7398140529245ae0f6428b759fcd830742eee2619eabb900ba9914a9affb82aa9a16a9b9ea727bb315315a976a0db0e7513a5f12c504.css","MediaType":"text/css","Data":{"Integrity":"sha512-q71jEbtLbKWPjnOYFAUpJFrg9kKLdZ/NgwdC7uJhnqu5ALqZFKmv+4Kqmhapuepye7MVMVqXag2w51E6XxLFBA=="}}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

+165
View File
@@ -0,0 +1,165 @@
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) 2026 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 2026 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
+31
View File
@@ -0,0 +1,31 @@
/*!
* Font Awesome Free 7.3.1 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 2026 Fonticons, Inc.
*/
:root, :host {
--fa-family-classic: 'Font Awesome 7 Free';
--fa-font-regular: normal 400 1em/1 var(--fa-family-classic);
/* deprecated: this older custom property will be removed next major release */
--fa-style-family-classic: var(--fa-family-classic);
}
@font-face {
font-family: "Font Awesome 7 Free";
font-style: normal;
font-weight: 400;
font-display: block;
src: url("../webfonts/fa-regular-400.woff2");
}
.far {
--fa-family: var(--fa-family-classic);
--fa-style: 400;
}
.fa-classic {
--fa-family: var(--fa-family-classic);
}
.fa-regular {
--fa-style: 400;
}
+6
View File
@@ -0,0 +1,6 @@
/*!
* Font Awesome Free 7.3.1 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 2026 Fonticons, Inc.
*/
:host,:root{--fa-family-classic:"Font Awesome 7 Free";--fa-font-regular:normal 400 1em/1 var(--fa-family-classic);--fa-style-family-classic:var(--fa-family-classic)}@font-face{font-family:"Font Awesome 7 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2)}.far{--fa-style:400}.fa-classic,.far{--fa-family:var(--fa-family-classic)}.fa-regular{--fa-style:400}
+31
View File
@@ -0,0 +1,31 @@
/*!
* Font Awesome Free 7.3.1 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 2026 Fonticons, Inc.
*/
:root, :host {
--fa-family-classic: 'Font Awesome 7 Free';
--fa-font-solid: normal 900 1em/1 var(--fa-family-classic);
/* deprecated: this older custom property will be removed next major release */
--fa-style-family-classic: var(--fa-family-classic);
}
@font-face {
font-family: "Font Awesome 7 Free";
font-style: normal;
font-weight: 900;
font-display: block;
src: url("../webfonts/fa-solid-900.woff2");
}
.fas {
--fa-family: var(--fa-family-classic);
--fa-style: 900;
}
.fa-classic {
--fa-family: var(--fa-family-classic);
}
.fa-solid {
--fa-style: 900;
}
+6
View File
@@ -0,0 +1,6 @@
/*!
* Font Awesome Free 7.3.1 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 2026 Fonticons, Inc.
*/
:host,:root{--fa-family-classic:"Font Awesome 7 Free";--fa-font-solid:normal 900 1em/1 var(--fa-family-classic);--fa-style-family-classic:var(--fa-family-classic)}@font-face{font-family:"Font Awesome 7 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2)}.fas{--fa-style:900}.fa-classic,.fas{--fa-family:var(--fa-family-classic)}.fa-solid{--fa-style:900}
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+188
View File
@@ -0,0 +1,188 @@
/*!
* Font Awesome Free 7.3.1 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 2026 Fonticons, Inc.
*/
:root, :host {
--fa-font-solid: normal 900 1em/1 'Font Awesome 7 Free';
--fa-font-regular: normal 400 1em/1 'Font Awesome 7 Free';
--fa-font-light: normal 300 1em/1 'Font Awesome 7 Pro';
--fa-font-thin: normal 100 1em/1 'Font Awesome 7 Pro';
--fa-font-duotone: normal 900 1em/1 'Font Awesome 7 Duotone';
--fa-font-duotone-regular: normal 400 1em/1 'Font Awesome 7 Duotone';
--fa-font-duotone-light: normal 300 1em/1 'Font Awesome 7 Duotone';
--fa-font-duotone-thin: normal 100 1em/1 'Font Awesome 7 Duotone';
--fa-font-brands: normal 400 1em/1 'Font Awesome 7 Brands';
--fa-font-sharp-solid: normal 900 1em/1 'Font Awesome 7 Sharp';
--fa-font-sharp-regular: normal 400 1em/1 'Font Awesome 7 Sharp';
--fa-font-sharp-light: normal 300 1em/1 'Font Awesome 7 Sharp';
--fa-font-sharp-thin: normal 100 1em/1 'Font Awesome 7 Sharp';
--fa-font-sharp-duotone-solid: normal 900 1em/1 'Font Awesome 7 Sharp Duotone';
--fa-font-sharp-duotone-regular: normal 400 1em/1 'Font Awesome 7 Sharp Duotone';
--fa-font-sharp-duotone-light: normal 300 1em/1 'Font Awesome 7 Sharp Duotone';
--fa-font-sharp-duotone-thin: normal 100 1em/1 'Font Awesome 7 Sharp Duotone';
--fa-font-slab-regular: normal 400 1em/1 'Font Awesome 7 Slab';
--fa-font-slab-press-regular: normal 400 1em/1 'Font Awesome 7 Slab Press';
--fa-font-slab-duo-regular: normal 400 1em/1 'Font Awesome 7 Slab Duo';
--fa-font-slab-press-duo-regular: normal 400 1em/1 'Font Awesome 7 Slab Press Duo';
--fa-font-pixel-regular: normal 400 1em/1 'Font Awesome 7 Pixel';
--fa-font-mosaic-solid: normal 900 1em/1 'Font Awesome 7 Mosaic';
--fa-font-vellum-solid: normal 900 1em/1 'Font Awesome 7 Vellum';
--fa-font-whiteboard-semibold: normal 600 1em/1 'Font Awesome 7 Whiteboard';
--fa-font-thumbprint-light: normal 300 1em/1 'Font Awesome 7 Thumbprint';
--fa-font-notdog-solid: normal 900 1em/1 'Font Awesome 7 Notdog';
--fa-font-notdog-duo-solid: normal 900 1em/1 'Font Awesome 7 Notdog Duo';
--fa-font-etch-solid: normal 900 1em/1 'Font Awesome 7 Etch';
--fa-font-graphite-thin: normal 100 1em/1 'Font Awesome 7 Graphite';
--fa-font-jelly-regular: normal 400 1em/1 'Font Awesome 7 Jelly';
--fa-font-jelly-fill-regular: normal 400 1em/1 'Font Awesome 7 Jelly Fill';
--fa-font-jelly-duo-regular: normal 400 1em/1 'Font Awesome 7 Jelly Duo';
--fa-font-chisel-regular: normal 400 1em/1 'Font Awesome 7 Chisel';
--fa-font-utility-semibold: normal 600 1em/1 'Font Awesome 7 Utility';
--fa-font-utility-duo-semibold: normal 600 1em/1 'Font Awesome 7 Utility Duo';
--fa-font-utility-fill-semibold: normal 600 1em/1 'Font Awesome 7 Utility Fill';
}
.svg-inline--fa {
box-sizing: content-box;
display: var(--fa-display, inline-block);
height: 1em;
overflow: visible;
vertical-align: -0.125em;
width: var(--fa-width, 1.25em);
}
.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.0714285714em;
}
.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-li {
width: var(--fa-li-width, 2em);
inset-inline-start: calc(-1 * var(--fa-li-width, 2em));
inset-block-start: 0.25em; /* syncing vertical alignment with Web Font rendering */
}
.fa-layers-counter, .fa-layers-text {
display: inline-block;
position: absolute;
text-align: center;
}
.fa-layers {
display: inline-block;
height: 1em;
position: relative;
text-align: center;
vertical-align: -0.125em;
width: var(--fa-width, 1.25em);
}
.fa-layers .svg-inline--fa {
inset: 0;
margin: auto;
position: absolute;
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;
}
.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;
}
.svg-inline--fa.fa-inverse {
fill: var(--fa-inverse, #fff);
}
.fa-stack-1x,
.fa-stack-2x {
inset: 0;
margin: auto;
position: absolute;
z-index: var(--fa-stack-z-index, auto);
}
File diff suppressed because one or more lines are too long
+27
View File
@@ -0,0 +1,27 @@
/*!
* Font Awesome Free 7.3.1 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 2026 Fonticons, Inc.
*/
@font-face {
font-family: "FontAwesome";
font-display: block;
src: url("../webfonts/fa-solid-900.woff2") format("woff2");
}
@font-face {
font-family: "FontAwesome";
font-display: block;
src: url("../webfonts/fa-brands-400.woff2") format("woff2");
}
@font-face {
font-family: "FontAwesome";
font-display: block;
src: url("../webfonts/fa-regular-400.woff2") format("woff2");
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");
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;
}
+6
View File
@@ -0,0 +1,6 @@
/*!
* Font Awesome Free 7.3.1 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 2026 Fonticons, Inc.
*/
@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2");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");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
+23
View File
@@ -0,0 +1,23 @@
/*!
* Font Awesome Free 7.3.1 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 2026 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");
}
@font-face {
font-family: "Font Awesome 5 Free";
font-display: block;
font-weight: 900;
src: url("../webfonts/fa-solid-900.woff2") format("woff2");
}
@font-face {
font-family: "Font Awesome 5 Free";
font-display: block;
font-weight: 400;
src: url("../webfonts/fa-regular-400.woff2") format("woff2");
}
+6
View File
@@ -0,0 +1,6 @@
/*!
* Font Awesome Free 7.3.1 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 2026 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")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2")}
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 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
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
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+646
View File
@@ -0,0 +1,646 @@
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
+727
View File
@@ -0,0 +1,727 @@
// animating icons
// --------------------------
@use 'variables' as v;
.#{v.$css-prefix}-beat {
animation-name: #{v.$css-prefix}-beat;
animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s);
animation-direction: var(--#{v.$css-prefix}-animation-direction, normal);
animation-duration: var(--#{v.$css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{v.$css-prefix}-animation-timing, ease-in-out);
}
.#{v.$css-prefix}-bounce {
animation-name: #{v.$css-prefix}-bounce;
animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s);
animation-direction: var(--#{v.$css-prefix}-animation-direction, normal);
animation-duration: var(--#{v.$css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{v.$css-prefix}-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));
}
.#{v.$css-prefix}-fade {
animation-name: #{v.$css-prefix}-fade;
animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s);
animation-direction: var(--#{v.$css-prefix}-animation-direction, normal);
animation-duration: var(--#{v.$css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{v.$css-prefix}-animation-timing, ease-in-out);
}
.#{v.$css-prefix}-beat-fade {
animation-name: #{v.$css-prefix}-beat-fade;
animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s);
animation-direction: var(--#{v.$css-prefix}-animation-direction, normal);
animation-duration: var(--#{v.$css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{v.$css-prefix}-animation-timing, ease-in-out);
}
.#{v.$css-prefix}-flip {
animation-name: #{v.$css-prefix}-flip;
animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s);
animation-direction: var(--#{v.$css-prefix}-animation-direction, normal);
animation-duration: var(--#{v.$css-prefix}-animation-duration, 1.5s);
animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{v.$css-prefix}-animation-timing, ease-in-out);
}
.#{v.$css-prefix}-flip-360 {
animation-name: #{v.$css-prefix}-flip-360;
animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s);
animation-direction: var(--#{v.$css-prefix}-animation-direction, normal);
animation-duration: var(--#{v.$css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{v.$css-prefix}-animation-timing, ease-in-out);
}
.#{v.$css-prefix}-shake {
animation-name: #{v.$css-prefix}-shake;
animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s);
animation-direction: var(--#{v.$css-prefix}-animation-direction, normal);
animation-duration: var(--#{v.$css-prefix}-animation-duration, 0.75s);
animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{v.$css-prefix}-animation-timing, ease-in-out);
}
.#{v.$css-prefix}-spin {
animation-name: #{v.$css-prefix}-spin;
animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s);
animation-direction: var(--#{v.$css-prefix}-animation-direction, normal);
animation-duration: var(--#{v.$css-prefix}-animation-duration, 2s);
animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{v.$css-prefix}-animation-timing, linear);
}
.#{v.$css-prefix}-spin-reverse {
--#{v.$css-prefix}-animation-direction: reverse;
}
.#{v.$css-prefix}-pulse,
.#{v.$css-prefix}-spin-pulse {
animation-name: #{v.$css-prefix}-spin;
animation-direction: var(--#{v.$css-prefix}-animation-direction, normal);
animation-duration: var(--#{v.$css-prefix}-animation-duration, 1s);
animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{v.$css-prefix}-animation-timing, steps(8));
}
.#{v.$css-prefix}-spin-snap {
animation-name: #{v.$css-prefix}-spin-snap;
animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s);
animation-direction: var(--#{v.$css-prefix}-animation-direction, normal);
animation-duration: var(--#{v.$css-prefix}-animation-duration, 3s);
animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{v.$css-prefix}-animation-timing, linear);
}
.#{v.$css-prefix}-spin-snap-4 {
animation-name: #{v.$css-prefix}-spin-snap-4;
animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s);
animation-direction: var(--#{v.$css-prefix}-animation-direction, normal);
animation-duration: var(--#{v.$css-prefix}-animation-duration, 2.4s);
animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{v.$css-prefix}-animation-timing, linear);
}
.#{v.$css-prefix}-spin-snap-8 {
animation-name: #{v.$css-prefix}-spin-snap-8;
animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s);
animation-direction: var(--#{v.$css-prefix}-animation-direction, normal);
animation-duration: var(--#{v.$css-prefix}-animation-duration, 4s);
animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{v.$css-prefix}-animation-timing, linear);
}
.#{v.$css-prefix}-buzz {
animation-name: #{v.$css-prefix}-buzz;
animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s);
animation-direction: var(--#{v.$css-prefix}-animation-direction, normal);
animation-duration: var(--#{v.$css-prefix}-animation-duration, 0.6s);
animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{v.$css-prefix}-animation-timing, linear);
}
.#{v.$css-prefix}-wag {
animation-name: #{v.$css-prefix}-wag;
animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s);
animation-direction: var(--#{v.$css-prefix}-animation-direction, normal);
animation-duration: var(--#{v.$css-prefix}-animation-duration, 0.9s);
animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{v.$css-prefix}-animation-timing, ease-out);
transform-origin: bottom center;
}
.#{v.$css-prefix}-float {
animation-name: #{v.$css-prefix}-float;
animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s);
animation-direction: var(--#{v.$css-prefix}-animation-direction, normal);
animation-duration: var(--#{v.$css-prefix}-animation-duration, 3s);
animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{v.$css-prefix}-animation-timing, ease-in-out);
will-change: transform;
}
.#{v.$css-prefix}-swing {
animation-name: #{v.$css-prefix}-swing;
animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s);
animation-direction: var(--#{v.$css-prefix}-animation-direction, normal);
animation-duration: var(--#{v.$css-prefix}-animation-duration, 1.2s);
animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{v.$css-prefix}-animation-timing, ease-out);
transform-origin: top center;
}
.#{v.$css-prefix}-jello {
animation-name: #{v.$css-prefix}-jello;
animation-delay: var(--#{v.$css-prefix}-animation-delay, 0s);
animation-direction: var(--#{v.$css-prefix}-animation-direction, normal);
animation-duration: var(--#{v.$css-prefix}-animation-duration, 0.9s);
animation-iteration-count: var(--#{v.$css-prefix}-animation-iteration-count, infinite);
animation-timing-function: var(--#{v.$css-prefix}-animation-timing, ease-out);
}
// 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) {
.#{v.$css-prefix}-beat,
.#{v.$css-prefix}-bounce,
.#{v.$css-prefix}-fade,
.#{v.$css-prefix}-beat-fade,
.#{v.$css-prefix}-flip,
.#{v.$css-prefix}-flip-360,
.#{v.$css-prefix}-pulse,
.#{v.$css-prefix}-shake,
.#{v.$css-prefix}-spin,
.#{v.$css-prefix}-spin-pulse,
.#{v.$css-prefix}-buzz,
.#{v.$css-prefix}-float,
.#{v.$css-prefix}-jello,
.#{v.$css-prefix}-spin-snap,
.#{v.$css-prefix}-spin-snap-4,
.#{v.$css-prefix}-spin-snap-8,
.#{v.$css-prefix}-swing,
.#{v.$css-prefix}-wag {
animation: none !important;
transition: none !important;
}
}
@keyframes #{v.$css-prefix}-beat {
0% {
transform: scale(1);
}
25% {
transform: scale(calc(1.25 * var(--#{v.$css-prefix}-beat-scale, 1.25)));
}
45% {
transform: scale(calc(1.22 * var(--#{v.$css-prefix}-beat-scale, 1.22)));
}
65% {
transform: scale(calc(1.25 * var(--#{v.$css-prefix}-beat-scale, 1.25)));
}
90% {
transform: scale(1);
}
}
@keyframes #{v.$css-prefix}-bounce {
0% {
transform: scale(1, 1) translateY(0);
animation-timing-function: var(--#{v.$css-prefix}-animation-timing);
}
14% {
transform: scale(var(--#{v.$css-prefix}-bounce-start-scale-x, 1.06), var(--#{v.$css-prefix}-bounce-start-scale-y, 0.94))
translateY(var(--#{v.$css-prefix}-bounce-anticipation, 3px));
animation-timing-function: cubic-bezier(0.33, 0, 0.66, 0.33);
}
32% {
transform: scale(var(--#{v.$css-prefix}-bounce-jump-scale-x, 0.94), var(--#{v.$css-prefix}-bounce-jump-scale-y, 1.12))
translateY(calc(-1 * var(--#{v.$css-prefix}-bounce-height, 0.5em)));
animation-timing-function: cubic-bezier(0.33, 0.66, 0.66, 1);
}
52% {
transform: scale(1, 1) translateY(calc(-1 * var(--#{v.$css-prefix}-bounce-height, 0.5em) * 1.1));
animation-timing-function: cubic-bezier(0.5, 0, 1, 0.5);
}
70% {
transform: scale(var(--#{v.$css-prefix}-bounce-land-scale-x, 1.06), var(--#{v.$css-prefix}-bounce-land-scale-y, 0.92)) translateY(0);
animation-timing-function: cubic-bezier(0.33, 0.33, 0.66, 1);
}
85% {
transform: scale(0.98, 1.04) translateY(calc(-2px * var(--#{v.$css-prefix}-bounce-rebound, 1)));
animation-timing-function: cubic-bezier(0.33, 0, 0.66, 1);
}
100% {
transform: scale(1, 1) translateY(0);
}
}
@keyframes #{v.$css-prefix}-fade {
0% {
opacity: 1;
transform: scale(1);
animation-timing-function: cubic-bezier(0.2, 0, 0.4, 1);
}
40% {
opacity: var(--#{v.$css-prefix}-fade-opacity, 0.4);
transform: scale(0.98);
animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);
}
100% {
opacity: 1;
transform: scale(1);
}
}
@keyframes #{v.$css-prefix}-beat-fade {
0% {
opacity: var(--#{v.$css-prefix}-beat-fade-opacity, 0.4);
transform: scale(1);
animation-timing-function: cubic-bezier(0.2, 0, 0.4, 1);
}
25% {
opacity: calc(var(--#{v.$css-prefix}-beat-fade-opacity, 0.4) + 0.4);
transform: scale(var(--#{v.$css-prefix}-beat-fade-scale, 1.28));
animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);
}
45% {
opacity: 1;
transform: scale(var(--#{v.$css-prefix}-beat-fade-scale, 1.25));
animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
65% {
opacity: calc(var(--#{v.$css-prefix}-beat-fade-opacity, 0.4) + 0.4);
transform: scale(var(--#{v.$css-prefix}-beat-fade-scale, 1.28));
animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);
}
100% {
opacity: var(--#{v.$css-prefix}-beat-fade-opacity, 0.4);
transform: scale(1);
}
}
@keyframes #{v.$css-prefix}-flip {
0% {
transform: perspective(2em) scale(1) rotate3d(var(--#{v.$css-prefix}-flip-x, 0), var(--#{v.$css-prefix}-flip-y, 1), var(--#{v.$css-prefix}-flip-z, 0), 0deg);
animation-timing-function: cubic-bezier(0.2, 0, 0.4, 1);
}
8% {
transform: perspective(2em) scale(var(--#{v.$css-prefix}-flip-anticipation-scale, 0.95))
rotate3d(var(--#{v.$css-prefix}-flip-x, 0), var(--#{v.$css-prefix}-flip-y, 1), var(--#{v.$css-prefix}-flip-z, 0), 0deg);
animation-timing-function: cubic-bezier(0.33, 0, 0.66, 0.33);
}
35% {
transform: perspective(2em) scale(1)
rotate3d(var(--#{v.$css-prefix}-flip-x, 0), var(--#{v.$css-prefix}-flip-y, 1), var(--#{v.$css-prefix}-flip-z, 0), calc(var(--#{v.$css-prefix}-flip-angle, -360deg) * 0.6));
animation-timing-function: linear;
}
65% {
transform: perspective(2em) scale(1)
rotate3d(var(--#{v.$css-prefix}-flip-x, 0), var(--#{v.$css-prefix}-flip-y, 1), var(--#{v.$css-prefix}-flip-z, 0), calc(var(--#{v.$css-prefix}-flip-angle, -360deg) * 0.5));
animation-timing-function: cubic-bezier(0.33, 0.66, 0.66, 1);
}
92% {
transform: perspective(2em) scale(1)
rotate3d(
var(--#{v.$css-prefix}-flip-x, 0),
var(--#{v.$css-prefix}-flip-y, 1),
var(--#{v.$css-prefix}-flip-z, 0),
calc(var(--#{v.$css-prefix}-flip-angle, -360deg) * var(--#{v.$css-prefix}-flip-overshoot, 1.04))
);
animation-timing-function: cubic-bezier(0.33, 0, 0.66, 1);
}
100% {
transform: perspective(2em) scale(1)
rotate3d(var(--#{v.$css-prefix}-flip-x, 0), var(--#{v.$css-prefix}-flip-y, 1), var(--#{v.$css-prefix}-flip-z, 0), var(--#{v.$css-prefix}-flip-angle, -360deg));
}
}
@keyframes #{v.$css-prefix}-flip-360 {
0% {
transform: perspective(2em) scale(1) rotate3d(var(--#{v.$css-prefix}-flip-x, 0), var(--#{v.$css-prefix}-flip-y, 1), var(--#{v.$css-prefix}-flip-z, 0), 0deg);
animation-timing-function: cubic-bezier(0.2, 0, 0.4, 1);
}
8% {
transform: perspective(2em) scale(var(--#{v.$css-prefix}-flip-anticipation-scale, 0.95)) rotate3d(var(--#{v.$css-prefix}-flip-x, 0), var(--#{v.$css-prefix}-flip-y, 1), var(--#{v.$css-prefix}-flip-z, 0), 0deg);
animation-timing-function: cubic-bezier(0.33, 0, 0.66, 0.33);
}
50% {
transform: perspective(2em) scale(1) rotate3d(var(--#{v.$css-prefix}-flip-x, 0), var(--#{v.$css-prefix}-flip-y, 1), var(--#{v.$css-prefix}-flip-z, 0), calc(var(--#{v.$css-prefix}-flip-angle, -360deg) * 0.6));
animation-timing-function: cubic-bezier(0.33, 0.66, 0.66, 1);
}
80% {
transform: perspective(2em) scale(1) rotate3d(var(--#{v.$css-prefix}-flip-x, 0), var(--#{v.$css-prefix}-flip-y, 1), var(--#{v.$css-prefix}-flip-z, 0), calc(var(--#{v.$css-prefix}-flip-angle, -360deg) * var(--#{v.$css-prefix}-flip-overshoot, 1.04)));
animation-timing-function: cubic-bezier(0.33, 0, 0.66, 1);
}
100% {
transform: perspective(2em) scale(1) rotate3d(var(--#{v.$css-prefix}-flip-x, 0), var(--#{v.$css-prefix}-flip-y, 1), var(--#{v.$css-prefix}-flip-z, 0), var(--#{v.$css-prefix}-flip-angle, -360deg));
}
}
@keyframes #{v.$css-prefix}-shake {
0% {
transform: rotate(0deg);
animation-timing-function: cubic-bezier(0.2, 0, 0.8, 1);
}
8% {
transform: rotate(35deg) translateX(1px);
animation-timing-function: cubic-bezier(0.3, 0, 0.7, 1);
}
20% {
transform: rotate(-22deg) translateX(-1px);
animation-timing-function: cubic-bezier(0.3, 0, 0.7, 1);
}
35% {
transform: rotate(15deg) translateX(1px);
animation-timing-function: cubic-bezier(0.3, 0, 0.7, 1);
}
50% {
transform: rotate(-9deg);
animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);
}
65% {
transform: rotate(5deg);
animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);
}
78% {
transform: rotate(-3deg);
animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);
}
90% {
transform: rotate(1deg);
animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
100% {
transform: rotate(0deg);
}
}
@keyframes #{v.$css-prefix}-spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
@keyframes #{v.$css-prefix}-spin-snap {
0% {
transform: rotate(0deg);
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
12% {
transform: rotate(60deg);
animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
}
16.67% {
transform: rotate(60deg);
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
28.67% {
transform: rotate(120deg);
animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
}
33.33% {
transform: rotate(120deg);
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
45.33% {
transform: rotate(180deg);
animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
}
50% {
transform: rotate(180deg);
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
62% {
transform: rotate(240deg);
animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
}
66.67% {
transform: rotate(240deg);
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
78.67% {
transform: rotate(300deg);
animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
}
83.33% {
transform: rotate(300deg);
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
95.33% {
transform: rotate(360deg);
animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
}
100% {
transform: rotate(360deg);
}
}
@keyframes #{v.$css-prefix}-spin-snap-4 {
0% {
transform: rotate(0deg);
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
15% {
transform: rotate(90deg);
animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
}
25% {
transform: rotate(90deg);
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
40% {
transform: rotate(180deg);
animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
}
50% {
transform: rotate(180deg);
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
65% {
transform: rotate(270deg);
animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
}
75% {
transform: rotate(270deg);
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
90% {
transform: rotate(360deg);
animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
}
100% {
transform: rotate(360deg);
}
}
@keyframes #{v.$css-prefix}-spin-snap-8 {
0% {
transform: rotate(0deg);
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
9% {
transform: rotate(45deg);
animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
}
12.5% {
transform: rotate(45deg);
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
21.5% {
transform: rotate(90deg);
animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
}
25% {
transform: rotate(90deg);
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
34% {
transform: rotate(135deg);
animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
}
37.5% {
transform: rotate(135deg);
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
46.5% {
transform: rotate(180deg);
animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
}
50% {
transform: rotate(180deg);
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
59% {
transform: rotate(225deg);
animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
}
62.5% {
transform: rotate(225deg);
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
71.5% {
transform: rotate(270deg);
animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
}
75% {
transform: rotate(270deg);
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
84% {
transform: rotate(315deg);
animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
}
87.5% {
transform: rotate(315deg);
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
96.5% {
transform: rotate(360deg);
animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
}
100% {
transform: rotate(360deg);
}
}
@keyframes #{v.$css-prefix}-buzz {
0% {
transform: translateX(0) rotate(0deg);
animation-timing-function: cubic-bezier(0.1, 0, 0.9, 1);
}
5% {
transform: translateX(var(--#{v.$css-prefix}-buzz-distance, 4px)) rotate(0.5deg);
}
10% {
transform: translateX(calc(-1 * var(--#{v.$css-prefix}-buzz-distance, 4px))) rotate(-0.5deg);
}
15% {
transform: translateX(var(--#{v.$css-prefix}-buzz-distance, 4px)) rotate(0.3deg);
}
20% {
transform: translateX(calc(-1 * var(--#{v.$css-prefix}-buzz-distance, 4px))) rotate(-0.3deg);
}
25% {
transform: translateX(calc(var(--#{v.$css-prefix}-buzz-distance, 4px) * 0.7)) rotate(0.2deg);
}
30% {
transform: translateX(calc(-1 * var(--#{v.$css-prefix}-buzz-distance, 4px) * 0.7)) rotate(-0.2deg);
}
35% {
transform: translateX(calc(var(--#{v.$css-prefix}-buzz-distance, 4px) * 0.4)) rotate(0.1deg);
}
40% {
transform: translateX(0) rotate(0deg);
}
100% {
transform: translateX(0) rotate(0deg);
}
}
@keyframes #{v.$css-prefix}-wag {
0% {
transform: rotate(0deg);
animation-timing-function: cubic-bezier(0.2, 0, 0.6, 1);
}
12% {
transform: rotate(var(--#{v.$css-prefix}-wag-angle, 12deg));
animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
24% {
transform: rotate(2deg);
animation-timing-function: cubic-bezier(0.2, 0, 0.6, 1);
}
36% {
transform: rotate(calc(var(--#{v.$css-prefix}-wag-angle, 12deg) * 0.85));
animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
48% {
transform: rotate(1deg);
animation-timing-function: cubic-bezier(0.2, 0, 0.6, 1);
}
58% {
transform: rotate(calc(var(--#{v.$css-prefix}-wag-angle, 12deg) * 0.6));
animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
68% {
transform: rotate(0deg);
}
100% {
transform: rotate(0deg);
}
}
@keyframes #{v.$css-prefix}-float {
0% {
transform: translateY(0) translateX(0) rotate(0deg)
scale(var(--#{v.$css-prefix}-float-squash-x, 1.02), var(--#{v.$css-prefix}-float-squash-y, 0.98));
animation-timing-function: cubic-bezier(0.33, 0, 0.66, 0.33);
}
15% {
transform: translateY(calc(-0.4 * var(--#{v.$css-prefix}-float-height, 6px))) translateX(var(--#{v.$css-prefix}-float-drift, 1px))
rotate(var(--#{v.$css-prefix}-float-tilt, 1deg)) scale(1, 1);
animation-timing-function: cubic-bezier(0.33, 0.66, 0.66, 1);
}
35% {
transform: translateY(calc(-1 * var(--#{v.$css-prefix}-float-height, 6px))) translateX(0) rotate(0deg)
scale(var(--#{v.$css-prefix}-float-stretch-x, 0.98), var(--#{v.$css-prefix}-float-stretch-y, 1.03));
animation-timing-function: cubic-bezier(0.5, 0, 0.5, 0);
}
50% {
transform: translateY(calc(-0.92 * var(--#{v.$css-prefix}-float-height, 6px))) translateX(calc(-0.5 * var(--#{v.$css-prefix}-float-drift, 1px)))
rotate(calc(-0.5 * var(--#{v.$css-prefix}-float-tilt, 1deg))) scale(0.995, 1.01);
animation-timing-function: cubic-bezier(0.33, 0, 0.66, 0.33);
}
70% {
transform: translateY(calc(-0.3 * var(--#{v.$css-prefix}-float-height, 6px))) translateX(calc(-1 * var(--#{v.$css-prefix}-float-drift, 1px)))
rotate(calc(-1 * var(--#{v.$css-prefix}-float-tilt, 1deg))) scale(1, 1);
animation-timing-function: cubic-bezier(0.33, 0.66, 0.66, 1);
}
90% {
transform: translateY(calc(0.05 * var(--#{v.$css-prefix}-float-height, 6px))) translateX(0) rotate(0deg)
scale(var(--#{v.$css-prefix}-float-squash-x, 1.02), var(--#{v.$css-prefix}-float-squash-y, 0.98));
animation-timing-function: cubic-bezier(0.33, 0, 0.66, 1);
}
100% {
transform: translateY(0) translateX(0) rotate(0deg)
scale(var(--#{v.$css-prefix}-float-squash-x, 1.02), var(--#{v.$css-prefix}-float-squash-y, 0.98));
}
}
@keyframes #{v.$css-prefix}-swing {
0% {
transform: rotate(0deg);
animation-timing-function: cubic-bezier(0.2, 0, 0.8, 1);
}
8% {
transform: rotate(var(--#{v.$css-prefix}-swing-angle, 22deg));
animation-timing-function: cubic-bezier(0.3, 0, 0.7, 1);
}
18% {
transform: rotate(calc(-1 * var(--#{v.$css-prefix}-swing-angle, 22deg) * 0.85));
animation-timing-function: cubic-bezier(0.3, 0, 0.7, 1);
}
28% {
transform: rotate(calc(var(--#{v.$css-prefix}-swing-angle, 22deg) * 0.65));
animation-timing-function: cubic-bezier(0.35, 0, 0.65, 1);
}
38% {
transform: rotate(calc(-1 * var(--#{v.$css-prefix}-swing-angle, 22deg) * 0.45));
animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);
}
48% {
transform: rotate(calc(var(--#{v.$css-prefix}-swing-angle, 22deg) * 0.25));
animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);
}
56% {
transform: rotate(calc(-1 * var(--#{v.$css-prefix}-swing-angle, 22deg) * 0.1));
animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);
}
64% {
transform: rotate(0deg);
}
100% {
transform: rotate(0deg);
}
}
@keyframes #{v.$css-prefix}-jello {
0% {
transform: scale(1, 1);
animation-timing-function: cubic-bezier(0.2, 0, 0.8, 1);
}
12% {
transform: scale(var(--#{v.$css-prefix}-jello-scale-x, 1.15), calc(2 - var(--#{v.$css-prefix}-jello-scale-x, 1.15)));
animation-timing-function: cubic-bezier(0.3, 0, 0.7, 1);
}
24% {
transform: scale(calc(2 - var(--#{v.$css-prefix}-jello-scale-y, 1.12)), var(--#{v.$css-prefix}-jello-scale-y, 1.12));
animation-timing-function: cubic-bezier(0.3, 0, 0.7, 1);
}
36% {
transform: scale(
calc(1 + (var(--#{v.$css-prefix}-jello-scale-x, 1.15) - 1) * 0.5),
calc(2 - (1 + (var(--#{v.$css-prefix}-jello-scale-x, 1.15) - 1) * 0.5))
);
animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);
}
48% {
transform: scale(
calc(2 - (1 + (var(--#{v.$css-prefix}-jello-scale-y, 1.12) - 1) * 0.3)),
calc(1 + (var(--#{v.$css-prefix}-jello-scale-y, 1.12) - 1) * 0.3)
);
animation-timing-function: cubic-bezier(0.4, 0, 0.6, 1);
}
58% {
transform: scale(1.02, 0.98);
animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
68% {
transform: scale(1, 1);
}
100% {
transform: scale(1, 1);
}
}
+24
View File
@@ -0,0 +1,24 @@
// bordered icons
// -------------------------
@use 'variables' as v;
/* Heads Up: Bordered Icons will not be supported in the future!
- This feature will be deprecated in the next major release of Font Awesome (v8)!
- You may continue to use it in this version *v7), but it will not be supported in Font Awesome v8.
*/
/* Notes:
* --@{v.$css-prefix}-border-width = 1/16 by default (to render as ~1px based on a 16px default font-size)
* --@{v.$css-prefix}-border-padding =
** 3/16 for vertical padding (to give ~2px of vertical whitespace around an icon considering it's vertical alignment)
** 4/16 for horizontal padding (to give ~4px of horizontal whitespace around an icon)
*/
.#{v.$css-prefix}-border {
border-color: var(--#{v.$css-prefix}-border-color, #{v.$border-color});
border-radius: var(--#{v.$css-prefix}-border-radius, #{v.$border-radius});
border-style: var(--#{v.$css-prefix}-border-style, #{v.$border-style});
border-width: var(--#{v.$css-prefix}-border-width, #{v.$border-width});
box-sizing: var(--#{v.$css-prefix}-border-box-sizing, #{v.$border-box-sizing});
padding: var(--#{v.$css-prefix}-border-padding, #{v.$border-padding});
}
+43
View File
@@ -0,0 +1,43 @@
// base icon class definition
// -------------------------
@use 'variables' as v;
@use 'mixins' as m;
.#{v.$css-prefix}-solid,
.#{v.$css-prefix}-regular,
.#{v.$css-prefix}-brands,
.#{v.$css-prefix}-classic,
.fas,
.far,
.fab,
.#{v.$css-prefix} {
@include m.fa-icon();
}
:is(
.fas,
.far,
.fab,
.#{v.$css-prefix}-solid,
.#{v.$css-prefix}-regular,
.#{v.$css-prefix}-brands,
.#{v.$css-prefix}-classic,
.fa
)::before {
content: var(#{v.$icon-property})/"";
}
@supports not (content: ''/'') {
:is(
.fas,
.far,
.fab,
.#{v.$css-prefix}-solid,
.#{v.$css-prefix}-regular,
.#{v.$css-prefix}-brands,
.#{v.$css-prefix}-classic,
.fa
)::before {
content: var(#{v.$icon-property});
}
}
+3
View File
@@ -0,0 +1,3 @@
@forward "functions";
@forward "variables";
@forward "mixins";
@@ -0,0 +1,8 @@
// functions
// --------------------------
@use "sass:string";
// fa-content: convenience function used to set content property
@function fa-content($var) {
@return string.unquote("\"#{ $var }\"");
}
+15
View File
@@ -0,0 +1,15 @@
// specific icon class definition
// -------------------------
@use "sass:string";
@use 'variables' as v;
/* 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 v.$icons {
.#{v.$css-prefix}-#{$name} {
#{v.$icon-property}: string.unquote("\"#{ $icon }\"");
}
}
+19
View File
@@ -0,0 +1,19 @@
// icons in a list
// -------------------------
@use 'variables' as v;
.#{v.$css-prefix}-ul {
list-style-type: none;
margin-inline-start: var(--#{v.$css-prefix}-li-margin, #{v.$li-margin});
padding-inline-start: 0;
> li { position: relative; }
}
.#{v.$css-prefix}-li {
inset-inline-start: calc(-1 * var(--#{v.$css-prefix}-li-width, #{v.$li-width}));
position: absolute;
text-align: center;
width: var(--#{v.$css-prefix}-li-width, #{v.$li-width});
line-height: inherit;
}
+28
View File
@@ -0,0 +1,28 @@
// mixins
// --------------------------
@use 'variables' as v;
// base rendering for an icon
@mixin fa-icon($family: v.$family) {
--_#{v.$css-prefix}-family: var(--#{v.$css-prefix}-family, var(--#{v.$css-prefix}-style-family, '#{$family}'));
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
display: var(--#{v.$css-prefix}-display, #{v.$display});
font-family: var(--_#{v.$css-prefix}-family);
font-feature-settings: normal;
font-style: normal;
font-synthesis: none;
font-variant: normal;
font-weight: var(--#{v.$css-prefix}-style, #{v.$style});
line-height: 1;
text-align: center;
text-rendering: auto;
width: var(--#{v.$css-prefix}-width, #{v.$fw-width});
}
// sets relative font-sizing and alignment (in _sizing)
@mixin fa-size ($font-size) {
font-size: calc(#{$font-size} / #{v.$size-scale-base} * 1em); /* converts a #{$font-size}px size into an em-based value that's relative to the scale's #{v.$size-scale-base}px base */
line-height: calc(1 / #{$font-size} * 1em); /* sets the line-height of the icon back to that of it's parent */
vertical-align: calc(((6 / #{$font-size}) - (3 / 8)) * 1em); /* vertically centers the icon taking into account the surrounding text's descender */
}
+15
View File
@@ -0,0 +1,15 @@
// pulled icons
// -------------------------
@use 'variables' as v;
.#{v.$css-prefix}-pull-left,
.#{v.$css-prefix}-pull-start {
float: inline-start;
margin-inline-end: var(--#{v.$css-prefix}-pull-margin, #{v.$pull-margin});
}
.#{v.$css-prefix}-pull-right,
.#{v.$css-prefix}-pull-end {
float: inline-end;
margin-inline-start: var(--#{v.$css-prefix}-pull-margin, #{v.$pull-margin});
}
@@ -0,0 +1,32 @@
// rotating + flipping icons
// -------------------------
@use 'variables' as v;
.#{v.$css-prefix}-rotate-90 {
transform: rotate(90deg);
}
.#{v.$css-prefix}-rotate-180 {
transform: rotate(180deg);
}
.#{v.$css-prefix}-rotate-270 {
transform: rotate(270deg);
}
.#{v.$css-prefix}-flip-horizontal {
transform: scale(-1, 1);
}
.#{v.$css-prefix}-flip-vertical {
transform: scale(1, -1);
}
.#{v.$css-prefix}-flip-both,
.#{v.$css-prefix}-flip-horizontal.#{v.$css-prefix}-flip-vertical {
transform: scale(-1, -1);
}
.#{v.$css-prefix}-rotate-by {
transform: rotate(var(--#{v.$css-prefix}-rotate-angle, 0));
}
File diff suppressed because it is too large Load Diff
+18
View File
@@ -0,0 +1,18 @@
// sizing icons
// -------------------------
@use 'variables' as v;
@use 'mixins' as m;
// literal magnification scale
@for $i from 1 through 10 {
.#{v.$css-prefix}-#{$i}x {
font-size: $i * 1em;
}
}
// step-based scale (with alignment)
@each $size, $value in v.$sizes {
.#{v.$css-prefix}-#{$size} {
@include m.fa-size($value);
}
}
+35
View File
@@ -0,0 +1,35 @@
// stacking icons
// -------------------------
@use 'variables' as v;
.#{v.$css-prefix}-stack {
display: inline-block;
height: 2em;
line-height: 2em;
position: relative;
vertical-align: v.$stack-vertical-align;
width: v.$stack-width;
}
.#{v.$css-prefix}-stack-1x,
.#{v.$css-prefix}-stack-2x {
--#{v.$css-prefix}-width: 100%;
inset: 0;
position: absolute;
text-align: center;
width: var(--#{v.$css-prefix}-width);
z-index: var(--#{v.$css-prefix}-stack-z-index, #{v.$stack-z-index});
}
.#{v.$css-prefix}-stack-1x {
line-height: inherit;
}
.#{v.$css-prefix}-stack-2x {
font-size: 2em;
}
.#{v.$css-prefix}-inverse {
color: var(--#{v.$css-prefix}-inverse, #{v.$inverse});
}
File diff suppressed because it is too large Load Diff
+24
View File
@@ -0,0 +1,24 @@
// icon widths
// -------------------------
@use 'variables' as v;
.#{v.$css-prefix}-width-auto {
--#{v.$css-prefix}-width: auto;
}
.#{v.$css-prefix}-fw,
.#{v.$css-prefix}-width-fixed {
--#{v.$css-prefix}-width: #{v.$fw-width};
}
.#{v.$css-prefix}-canvas-square {
padding-block: 0.125em;
margin-block-end: -.125em;
}
.#{v.$css-prefix}-canvas-roomy {
padding-block: 0.25em;
padding-inline: .125em;
margin-block-end: -.25em;
box-sizing: content-box;
}
+45
View File
@@ -0,0 +1,45 @@
/*!
* Font Awesome Free 7.3.1 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 2026 Fonticons, Inc.
*/
@use "sass:string";
@use 'variables' as v;
@use 'mixins' as m;
:root, :host {
--#{v.$css-prefix}-family-brands: 'Font Awesome 7 Brands';
--#{v.$css-prefix}-font-brands: normal 400 1em/1 var(--#{v.$css-prefix}-family-brands);
}
@font-face {
font-family: 'Font Awesome 7 Brands';
font-style: normal;
font-weight: 400;
font-display: v.$font-display;
src: url('#{v.$font-path}/fa-brands-400.woff2');
}
.fab,
.#{v.$css-prefix}-brands,
.#{v.$css-prefix}-classic.#{v.$css-prefix}-brands {
--#{v.$css-prefix}-family: var(--#{v.$css-prefix}-family-brands);
--#{v.$css-prefix}-style: 400;
}
@each $name, $icon in v.$brand-icons {
.#{v.$css-prefix}-#{$name} {
#{v.$icon-property}: string.unquote("\"#{ $icon }\"");
}
}
// convenience mixin for declaring pseudo-elements by CSS variable,
// including all style-specific font properties and ::before elements.
@mixin icon($var) {
@include m.fa-icon(Font Awesome 7 Brands);
@extend .#{v.$css-prefix}-brands;
&::before {
content: string.unquote("\"#{ $var }\"");
}
}
+18
View File
@@ -0,0 +1,18 @@
/*!
* Font Awesome Free 7.3.1 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 2026 Fonticons, Inc.
*/
// Font Awesome core compile (Web Fonts-based)
// -------------------------
@use 'core';
@use 'sizing';
@use 'widths';
@use 'list';
@use 'bordered';
@use 'pulled';
@use 'animated';
@use 'rotated-flipped';
@use 'stacked';
@use 'icons';

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